@scriptc/compiler 0.2.6 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ambient/scriptc-node-fallback.d.ts +5 -18
- package/dist/backend/cycle-analysis.d.ts +21 -9
- package/dist/backend/cycle-analysis.js +139 -67
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-analysis.test.js +283 -3
- package/dist/backend/cycle-analysis.test.js.map +1 -1
- package/dist/backend/cycle-mutability.d.ts +39 -0
- package/dist/backend/cycle-mutability.js +205 -0
- package/dist/backend/cycle-mutability.js.map +1 -0
- package/dist/backend/link-plan-core.d.ts +2 -1
- package/dist/backend/link-plan-core.js +15 -3
- package/dist/backend/link-plan-core.js.map +1 -1
- package/dist/backend/link-plan.d.ts +2 -1
- package/dist/backend/link-plan.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +40 -0
- package/dist/backend/llvm/alloc.js +205 -0
- package/dist/backend/llvm/alloc.js.map +1 -0
- package/dist/backend/llvm/alloc.test.d.ts +1 -0
- package/dist/backend/llvm/alloc.test.js +102 -0
- package/dist/backend/llvm/alloc.test.js.map +1 -0
- package/dist/backend/llvm/call-lifetimes.d.ts +15 -3
- package/dist/backend/llvm/call-lifetimes.js +42 -18
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +170 -0
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +4 -1
- package/dist/backend/llvm/classes.js +35 -32
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +36 -3
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +13 -0
- package/dist/backend/llvm/common.js +30 -0
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +19 -3
- package/dist/backend/llvm/constant-callbacks.js +289 -52
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +140 -3
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +29 -0
- package/dist/backend/llvm/dense-array-access.js +335 -0
- package/dist/backend/llvm/dense-array-access.js.map +1 -0
- package/dist/backend/llvm/dense-array-access.test.d.ts +1 -0
- package/dist/backend/llvm/dense-array-access.test.js +149 -0
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +34 -0
- package/dist/backend/llvm/dyn.js +189 -1
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +124 -4
- package/dist/backend/llvm/emitter.js +623 -105
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +68 -6
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +58 -4
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-async.test.d.ts +1 -0
- package/dist/backend/llvm/expr-async.test.js +62 -0
- package/dist/backend/llvm/expr-async.test.js.map +1 -0
- package/dist/backend/llvm/expr-calls.js +64 -6
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +16 -5
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-control.js +92 -2
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dispatch.js +2 -0
- package/dist/backend/llvm/expr-dispatch.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +174 -25
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.d.ts +1 -1
- package/dist/backend/llvm/expr-primitives.js +52 -24
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +1 -1
- package/dist/backend/llvm/expr-records.js +3 -3
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +59 -2
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
- package/dist/backend/llvm/integer-remainder.d.ts +11 -0
- package/dist/backend/llvm/integer-remainder.js +91 -0
- package/dist/backend/llvm/integer-remainder.js.map +1 -1
- package/dist/backend/llvm/layouts.d.ts +2 -1
- package/dist/backend/llvm/layouts.js +3 -2
- package/dist/backend/llvm/layouts.js.map +1 -1
- package/dist/backend/llvm/lazy-captures.d.ts +16 -0
- package/dist/backend/llvm/lazy-captures.js +96 -0
- package/dist/backend/llvm/lazy-captures.js.map +1 -0
- package/dist/backend/llvm/lazy-captures.test.d.ts +1 -0
- package/dist/backend/llvm/lazy-captures.test.js +78 -0
- package/dist/backend/llvm/lazy-captures.test.js.map +1 -0
- package/dist/backend/llvm/lib-filesystem.js +3 -4
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.d.ts +5 -1
- package/dist/backend/llvm/local-array-reads.js +78 -17
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +78 -1
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.d.ts +5 -1
- package/dist/backend/llvm/local-union-storage.js +48 -6
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +91 -4
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +1 -1
- package/dist/backend/llvm/nullable-fields.d.ts +28 -0
- package/dist/backend/llvm/nullable-fields.js +45 -0
- package/dist/backend/llvm/nullable-fields.js.map +1 -0
- package/dist/backend/llvm/nullable-fields.test.d.ts +1 -0
- package/dist/backend/llvm/nullable-fields.test.js +48 -0
- package/dist/backend/llvm/nullable-fields.test.js.map +1 -0
- package/dist/backend/llvm/serialized-ir-emission.test.d.ts +1 -0
- package/dist/backend/llvm/serialized-ir-emission.test.js +52 -0
- package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +69 -2
- package/dist/backend/llvm/shapes.js +259 -27
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +114 -5
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/stack-callbacks.js +2 -3
- package/dist/backend/llvm/stack-callbacks.js.map +1 -1
- package/dist/backend/llvm/stack-captures.d.ts +3 -1
- package/dist/backend/llvm/stack-captures.js +5 -3
- package/dist/backend/llvm/stack-captures.js.map +1 -1
- package/dist/backend/llvm/stack-unions.test.js +38 -1
- package/dist/backend/llvm/stack-unions.test.js.map +1 -1
- package/dist/backend/llvm/string-construction.test.js +1 -1
- package/dist/backend/llvm/string-key-hash.d.ts +8 -0
- package/dist/backend/llvm/string-key-hash.js +59 -0
- package/dist/backend/llvm/string-key-hash.js.map +1 -0
- package/dist/backend/llvm/string-key-hash.test.d.ts +1 -0
- package/dist/backend/llvm/string-key-hash.test.js +34 -0
- package/dist/backend/llvm/string-key-hash.test.js.map +1 -0
- package/dist/backend/llvm/string-lifetimes.test.js +41 -4
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/switch-dispatch.js +1 -1
- package/dist/backend/llvm/switch-dispatch.js.map +1 -1
- package/dist/backend/llvm/switch-dispatch.test.js +2 -2
- package/dist/backend/llvm/switch-dispatch.test.js.map +1 -1
- package/dist/backend/may-throw.js +3 -0
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +1 -1
- package/dist/backend/native/cache-warm.d.ts +2 -1
- package/dist/backend/native/cache-warm.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +3 -2
- package/dist/backend/native/contracts.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +1 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +2 -1
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +5 -0
- package/dist/backend/native-codegen.js +4 -0
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +23 -0
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +3 -2
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-link-info.d.ts +2 -1
- package/dist/backend/native-link-info.js.map +1 -1
- package/dist/backend/native-link-info.test.js +2 -2
- package/dist/backend/native-link-info.test.js.map +1 -1
- package/dist/backend/native-tools.d.ts +3 -1
- package/dist/backend/native-tools.js +0 -1
- package/dist/backend/native-tools.js.map +1 -1
- package/dist/backend/optimization.d.ts +25 -0
- package/dist/backend/optimization.js +21 -0
- package/dist/backend/optimization.js.map +1 -0
- package/dist/backend/optimization.test.d.ts +1 -0
- package/dist/backend/optimization.test.js +24 -0
- package/dist/backend/optimization.test.js.map +1 -0
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-core.d.ts +15 -4
- package/dist/backend/runtime-pack-core.js +23 -12
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.d.ts +7 -3
- package/dist/backend/runtime-pack-native.js +0 -3
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack.d.ts +20 -2
- package/dist/backend/runtime-pack.js +23 -0
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +115 -2
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +1 -1
- package/dist/backend/targets.d.ts +2 -1
- package/dist/backend/targets.js +1 -1
- package/dist/backend/targets.js.map +1 -1
- package/dist/cli/command.js +5 -4
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/host.d.ts +2 -1
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +5 -2
- package/dist/cli/usage.js.map +1 -1
- package/dist/compile-types.d.ts +5 -2
- package/dist/diagnostics/diagnostic.js +10 -8
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +2 -2
- package/dist/executable/executable-cache.js +7 -4
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +20 -0
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/frontend/lowering/abstract-equality.js +5 -49
- package/dist/frontend/lowering/abstract-equality.js.map +1 -1
- package/dist/frontend/lowering/array-values.d.ts +23 -0
- package/dist/frontend/lowering/array-values.js +129 -0
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.js +17 -2
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +6 -17
- package/dist/frontend/lowering/builtins/process.js +56 -29
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/caught-value-dispatch.d.ts +11 -0
- package/dist/frontend/lowering/caught-value-dispatch.js +87 -0
- package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -0
- package/dist/frontend/lowering/class-assertions.d.ts +4 -0
- package/dist/frontend/lowering/class-assertions.js +12 -4
- package/dist/frontend/lowering/class-assertions.js.map +1 -1
- package/dist/frontend/lowering/class-callbacks.d.ts +3 -3
- package/dist/frontend/lowering/class-callbacks.js +18 -5
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +4 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.d.ts +5 -0
- package/dist/frontend/lowering/class-method-mutations.js +472 -0
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -0
- package/dist/frontend/lowering/class-method-values.js +25 -5
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.js +8 -2
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-unions.d.ts +16 -0
- package/dist/frontend/lowering/class-unions.js +127 -0
- package/dist/frontend/lowering/class-unions.js.map +1 -0
- package/dist/frontend/lowering/coercions/builders.js +8 -1
- package/dist/frontend/lowering/coercions/builders.js.map +1 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +2 -0
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/identity.d.ts +7 -0
- package/dist/frontend/lowering/coercions/identity.js +26 -0
- package/dist/frontend/lowering/coercions/identity.js.map +1 -0
- package/dist/frontend/lowering/coercions/structural.js +9 -6
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/collection-narrowing.d.ts +6 -0
- package/dist/frontend/lowering/collection-narrowing.js +31 -0
- package/dist/frontend/lowering/collection-narrowing.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callback-call.d.ts +7 -0
- package/dist/frontend/lowering/containers/array-callback-call.js +52 -0
- package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +363 -49
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.d.ts +7 -0
- package/dist/frontend/lowering/containers/array-concat.js +130 -0
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -0
- package/dist/frontend/lowering/containers/array-construction.d.ts +2 -0
- package/dist/frontend/lowering/containers/array-construction.js +95 -3
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.d.ts +1 -11
- package/dist/frontend/lowering/containers/array-methods.js +43 -132
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +10 -1
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +56 -70
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.d.ts +41 -0
- package/dist/frontend/lowering/cycle-initialization.js +277 -0
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -0
- package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -0
- package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +138 -32
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-field-write.d.ts +4 -4
- package/dist/frontend/lowering/expressions/union-field-write.js +54 -44
- package/dist/frontend/lowering/expressions/union-field-write.js.map +1 -1
- package/dist/frontend/lowering/iterator-adapters.d.ts +20 -0
- package/dist/frontend/lowering/iterator-adapters.js +605 -0
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -0
- package/dist/frontend/lowering/lower-array-sort.d.ts +1 -1
- package/dist/frontend/lowering/lower-array-sort.js +44 -5
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.test.d.ts +1 -0
- package/dist/frontend/lowering/lower-array-sort.test.js +31 -0
- package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -0
- package/dist/frontend/lowering/lower-assert.js +7 -0
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.js +1 -0
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +3 -3
- package/dist/frontend/lowering/lower-calls.js +162 -121
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +2 -0
- package/dist/frontend/lowering/lower-classes.js +45 -43
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +9 -2
- package/dist/frontend/lowering/lower-exprs.js +390 -157
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +32 -19
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +26 -2
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +10 -2
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +46 -58
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +37 -0
- package/dist/frontend/lowering/lowerer.js +283 -18
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.js +3 -1
- package/dist/frontend/lowering/native-ffi.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-provenance.d.ts +15 -0
- package/dist/frontend/lowering/runtime-optional-provenance.js +40 -0
- package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -0
- package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
- package/dist/frontend/lowering/strict-equality.d.ts +9 -0
- package/dist/frontend/lowering/strict-equality.js +116 -0
- package/dist/frontend/lowering/strict-equality.js.map +1 -0
- package/dist/frontend/lowering/surfaces.js +3 -0
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/union-comparison.d.ts +5 -0
- package/dist/frontend/lowering/union-comparison.js +47 -0
- package/dist/frontend/lowering/union-comparison.js.map +1 -0
- package/dist/frontend/program.d.ts +38 -2
- package/dist/frontend/program.js +440 -59
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +59 -6
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +1 -1
- package/dist/frontend/type-mapper.js +89 -14
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.js +15 -3
- package/dist/frontend/type-mapper.test.js.map +1 -1
- package/dist/index.js +25 -9
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.d.ts +3 -1
- package/dist/ir/analysis.js +4 -0
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/builtin-signatures.js +2 -3
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/constant-tables.test.js +1 -1
- package/dist/ir/initializer-bindings.test.js +1 -1
- package/dist/ir/ir.d.ts +78 -15
- package/dist/ir/ir.js +20 -6
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/scalar-records.test.js +1 -1
- package/dist/ir/serialize.d.ts +1 -1
- package/dist/ir/serialize.js +3 -3
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/traverse.js +8 -0
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +118 -20
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +269 -8
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/fence-eval.test.js +1 -1
- package/dist/library/int-infer.test.js +4 -4
- package/dist/library/library-cache.test.js +5 -5
- package/dist/library/library-profile.d.ts +2 -1
- package/dist/library/library-profile.js +4 -3
- package/dist/library/library-profile.js.map +1 -1
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +2 -2
- package/dist/native/library.d.ts +2 -1
- package/dist/native/library.js.map +1 -1
- package/dist/native/prepare.js +27 -3
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.d.ts +3 -2
- package/dist/native/sanitizer.js +3 -13
- package/dist/native/sanitizer.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +8 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constant-callbacks.test.js","sourceRoot":"","sources":["../../../src/backend/llvm/constant-callbacks.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"constant-callbacks.test.js","sourceRoot":"","sources":["../../../src/backend/llvm/constant-callbacks.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type IrExpr, type IrType } from "../../ir/ir.js";
|
|
2
|
+
import type { LlValue, LlvmEmitterContext } from "./expr-context.js";
|
|
3
|
+
export type ArrayAccess = "f64" | "bool" | "ref";
|
|
4
|
+
/** Strict element read with the runtime getter's result contract: a
|
|
5
|
+
* double, an i1, or a pointer that is +1 (`retain`) or borrowed. The
|
|
6
|
+
* runtime getter keeps the trap for holes, present undefined, and missing
|
|
7
|
+
* properties; it also answers sparse indices. Null reference slots take
|
|
8
|
+
* the runtime path, which returns them without a retain. */
|
|
9
|
+
export declare function emitDenseArrayGet(host: LlvmEmitterContext, array: string, index: LlValue, indexExpr: IrExpr | undefined, acc: ArrayAccess, element: IrType, getter: string, retain: boolean): string;
|
|
10
|
+
/** `scr_arr_get_number`: a numeric element, or NaN for every missing,
|
|
11
|
+
* hole, or present-undefined slot (answered by the runtime). */
|
|
12
|
+
export declare function emitDenseArrayNumber(host: LlvmEmitterContext, array: string, index: LlValue, indexExpr: IrExpr | undefined): string;
|
|
13
|
+
/** `scr_arr_state` (as a double) or `scr_arr_has` (as an i1). Dense
|
|
14
|
+
* in-range indices answer from the state byte; everything else keeps the
|
|
15
|
+
* runtime query, including canonical indices at or past the length. */
|
|
16
|
+
export declare function emitDenseArrayState(host: LlvmEmitterContext, array: string, index: LlValue, indexExpr: IrExpr | undefined, kind: "state" | "has"): string;
|
|
17
|
+
/** Element write with `scr_arr_set_*` semantics: the array takes the
|
|
18
|
+
* value's reference. A dense index stores the slot, marks it present, and
|
|
19
|
+
* extends the length when it lands at or past it; a replaced present
|
|
20
|
+
* reference is released after the new edge is published (a release can
|
|
21
|
+
* collect cycles). Every other index takes the unchanged runtime call. */
|
|
22
|
+
export declare function emitDenseArraySet(host: LlvmEmitterContext, array: string, index: LlValue, indexExpr: IrExpr | undefined, acc: ArrayAccess, element: IrType, value: string): void;
|
|
23
|
+
/** `scr_arr_push_*` (the array takes the value's reference) returning the
|
|
24
|
+
* new length as a double. When `len < cap` the runtime's append is exactly
|
|
25
|
+
* a dense store at `len` plus `len + 1`: no sparse entry can exist past the
|
|
26
|
+
* length, nothing is released, and the dense capacity never exceeds the
|
|
27
|
+
* maximum index. A full array takes the unchanged (cold) runtime call,
|
|
28
|
+
* which grows storage. */
|
|
29
|
+
export declare function emitDenseArrayPush(host: LlvmEmitterContext, array: string, acc: ArrayAccess, value: string): string;
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
/* Inline dense-storage fast paths for ordinary array element access.
|
|
2
|
+
*
|
|
3
|
+
* Every strict and optional element operation keeps its runtime entry as
|
|
4
|
+
* the authority: the inline path only answers the case the runtime itself
|
|
5
|
+
* answers from dense storage without side effects — a canonical integer
|
|
6
|
+
* index below both the array length and the dense capacity (and, for
|
|
7
|
+
* strict reads, a slot whose state is a present value). Holes, present
|
|
8
|
+
* `undefined`, sparse indices, noncanonical numeric properties (negative,
|
|
9
|
+
* fractional, NaN, infinite, 2^32-1), and out-of-range reads branch to the
|
|
10
|
+
* unchanged runtime call, which is marked cold. The ScrArr field indices
|
|
11
|
+
* match the C layout in scr_runtime.h: len 1, cap 2, data 7, present 8. */
|
|
12
|
+
import { isRefCounted } from "../../ir/ir.js";
|
|
13
|
+
import { exactInteger, widenInteger } from "./integer-values.js";
|
|
14
|
+
const SCR_ARR_VALUE = 1;
|
|
15
|
+
/** Call-site effects of the non-retaining read fallbacks: they only read
|
|
16
|
+
* module-visible memory, or trap without returning to the caller (the trap
|
|
17
|
+
* writes runtime-private stderr/TLS state). Declaring this lets LLVM keep
|
|
18
|
+
* array header loads out of loops whose only calls are these cold paths. */
|
|
19
|
+
const READ_FALLBACK = " cold memory(read, inaccessiblemem: readwrite)";
|
|
20
|
+
/** Branch to `slow` unless `index` names a canonical array index inside
|
|
21
|
+
* dense storage. Reads also require it below the length; writes may land
|
|
22
|
+
* at or past the length while still inside the dense capacity (the runtime
|
|
23
|
+
* then extends the length over hole states exactly the same way). */
|
|
24
|
+
function emitDenseGuard(host, array, index, indexExpr, slow, requireBelowLen) {
|
|
25
|
+
const B = host.B;
|
|
26
|
+
const size = host.sizeType;
|
|
27
|
+
const integer = exactInteger(host, index, indexExpr);
|
|
28
|
+
let wide;
|
|
29
|
+
let integral = null;
|
|
30
|
+
if (integer) {
|
|
31
|
+
// A proven integer needs no double round-trip. Negative signed values
|
|
32
|
+
// compare above any length or capacity as unsigned 64-bit integers.
|
|
33
|
+
wide = widenInteger(host, integer);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
// freeze keeps NaN/out-of-range conversions from producing poison; the
|
|
37
|
+
// exact round-trip comparison then rejects every value that is not an
|
|
38
|
+
// integer, and -0 converts to index 0 exactly like the runtime's check.
|
|
39
|
+
// Any frozen value that passes the round-trip and the unsigned capacity
|
|
40
|
+
// comparison below is the exact index.
|
|
41
|
+
const raw = B.tmp(), back = B.tmp();
|
|
42
|
+
wide = B.tmp();
|
|
43
|
+
integral = B.tmp();
|
|
44
|
+
B.line(`${raw} = fptosi double ${index.name} to i64`);
|
|
45
|
+
B.line(`${wide} = freeze i64 ${raw}`);
|
|
46
|
+
B.line(`${back} = sitofp i64 ${wide} to double`);
|
|
47
|
+
B.line(`${integral} = fcmp oeq double ${back}, ${index.name}`);
|
|
48
|
+
}
|
|
49
|
+
const lenPtr = B.tmp(), len = B.tmp(), capPtr = B.tmp(), cap = B.tmp();
|
|
50
|
+
B.line(`${lenPtr} = getelementptr inbounds %ScrArr, ptr ${array}, i32 0, i32 1`);
|
|
51
|
+
host.markMemoryPointer(lenPtr, "array:header");
|
|
52
|
+
B.line(`${len} = load ${size}, ptr ${lenPtr}${host.fieldAliasAttachment(lenPtr)}`);
|
|
53
|
+
B.line(`${capPtr} = getelementptr inbounds %ScrArr, ptr ${array}, i32 0, i32 2`);
|
|
54
|
+
host.markMemoryPointer(capPtr, "array:header");
|
|
55
|
+
B.line(`${cap} = load ${size}, ptr ${capPtr}${host.fieldAliasAttachment(capPtr)}`);
|
|
56
|
+
// Load the storage bases before branching: the header of a live array is
|
|
57
|
+
// always readable, and unconditional loads let LLVM hoist them out of
|
|
58
|
+
// loops whose only calls are read-only fallbacks.
|
|
59
|
+
const dataPtr = B.tmp(), data = B.tmp(), statesPtr = B.tmp(), states = B.tmp();
|
|
60
|
+
B.line(`${dataPtr} = getelementptr inbounds %ScrArr, ptr ${array}, i32 0, i32 7`);
|
|
61
|
+
host.markMemoryPointer(dataPtr, "array:header");
|
|
62
|
+
B.line(`${data} = load ptr, ptr ${dataPtr}${host.fieldAliasAttachment(dataPtr)}`);
|
|
63
|
+
B.line(`${statesPtr} = getelementptr inbounds %ScrArr, ptr ${array}, i32 0, i32 8`);
|
|
64
|
+
host.markMemoryPointer(statesPtr, "array:header");
|
|
65
|
+
B.line(`${states} = load ptr, ptr ${statesPtr}${host.fieldAliasAttachment(statesPtr)}`);
|
|
66
|
+
const widen = (value) => {
|
|
67
|
+
if (size === "i64")
|
|
68
|
+
return value;
|
|
69
|
+
const t = B.tmp();
|
|
70
|
+
B.line(`${t} = zext i32 ${value} to i64`);
|
|
71
|
+
return t;
|
|
72
|
+
};
|
|
73
|
+
const conditions = [];
|
|
74
|
+
if (integral)
|
|
75
|
+
conditions.push(integral);
|
|
76
|
+
const belowCap = B.tmp();
|
|
77
|
+
B.line(`${belowCap} = icmp ult i64 ${wide}, ${widen(cap)}`);
|
|
78
|
+
conditions.push(belowCap);
|
|
79
|
+
if (requireBelowLen) {
|
|
80
|
+
const belowLen = B.tmp();
|
|
81
|
+
B.line(`${belowLen} = icmp ult i64 ${wide}, ${widen(len)}`);
|
|
82
|
+
conditions.push(belowLen);
|
|
83
|
+
}
|
|
84
|
+
let ok = conditions[0];
|
|
85
|
+
for (const c of conditions.slice(1)) {
|
|
86
|
+
const t = B.tmp();
|
|
87
|
+
B.line(`${t} = and i1 ${ok}, ${c}`);
|
|
88
|
+
ok = t;
|
|
89
|
+
}
|
|
90
|
+
const dense = B.newLabel("arr.dense");
|
|
91
|
+
B.condBr(ok, dense, slow);
|
|
92
|
+
B.startBlock(dense);
|
|
93
|
+
let offset = wide;
|
|
94
|
+
if (size !== "i64") {
|
|
95
|
+
offset = B.tmp();
|
|
96
|
+
B.line(`${offset} = trunc i64 ${wide} to i32`);
|
|
97
|
+
}
|
|
98
|
+
return { offset, len, data, states };
|
|
99
|
+
}
|
|
100
|
+
function statePointer(host, guard) {
|
|
101
|
+
const B = host.B;
|
|
102
|
+
const statePtr = B.tmp();
|
|
103
|
+
B.line(`${statePtr} = getelementptr inbounds i8, ptr ${guard.states}, ${host.sizeType} ${guard.offset}`);
|
|
104
|
+
host.markMemoryPointer(statePtr, "array:present");
|
|
105
|
+
return statePtr;
|
|
106
|
+
}
|
|
107
|
+
function valuePointer(host, guard) {
|
|
108
|
+
const B = host.B;
|
|
109
|
+
const valuePtr = B.tmp();
|
|
110
|
+
B.line(`${valuePtr} = getelementptr inbounds i64, ptr ${guard.data}, ${host.sizeType} ${guard.offset}`);
|
|
111
|
+
host.markMemoryPointer(valuePtr, "array:elements");
|
|
112
|
+
return valuePtr;
|
|
113
|
+
}
|
|
114
|
+
function loadState(host, guard) {
|
|
115
|
+
const ptr = statePointer(host, guard);
|
|
116
|
+
const state = host.B.tmp();
|
|
117
|
+
host.B.line(`${state} = load i8, ptr ${ptr}${host.fieldAliasAttachment(ptr)}`);
|
|
118
|
+
return state;
|
|
119
|
+
}
|
|
120
|
+
/** Strict element read with the runtime getter's result contract: a
|
|
121
|
+
* double, an i1, or a pointer that is +1 (`retain`) or borrowed. The
|
|
122
|
+
* runtime getter keeps the trap for holes, present undefined, and missing
|
|
123
|
+
* properties; it also answers sparse indices. Null reference slots take
|
|
124
|
+
* the runtime path, which returns them without a retain. */
|
|
125
|
+
export function emitDenseArrayGet(host, array, index, indexExpr, acc, element, getter, retain) {
|
|
126
|
+
const B = host.B;
|
|
127
|
+
const ty = acc === "f64" ? "double" : acc === "bool" ? "i1" : "ptr";
|
|
128
|
+
const ret = acc === "bool" ? "zeroext i1" : ty;
|
|
129
|
+
host.declare(`declare ${ret} @${getter}(ptr, double)`);
|
|
130
|
+
if (acc === "ref" && retain && !isRefCounted(element)) {
|
|
131
|
+
const t = B.tmp();
|
|
132
|
+
B.line(`${t} = call ${ty} @${getter}(ptr ${array}, double ${index.name})`);
|
|
133
|
+
return t;
|
|
134
|
+
}
|
|
135
|
+
const slow = B.newLabel("arr.get.slow"), join = B.newLabel("arr.get.join");
|
|
136
|
+
const guard = emitDenseGuard(host, array, index, indexExpr, slow, true);
|
|
137
|
+
const state = loadState(host, guard);
|
|
138
|
+
const present = B.tmp();
|
|
139
|
+
B.line(`${present} = icmp eq i8 ${state}, ${SCR_ARR_VALUE}`);
|
|
140
|
+
const valueLabel = B.newLabel("arr.get.value");
|
|
141
|
+
B.condBr(present, valueLabel, slow);
|
|
142
|
+
B.startBlock(valueLabel);
|
|
143
|
+
const ptr = valuePointer(host, guard);
|
|
144
|
+
let fast;
|
|
145
|
+
let fastLabel = valueLabel;
|
|
146
|
+
if (acc === "f64") {
|
|
147
|
+
fast = B.tmp();
|
|
148
|
+
B.line(`${fast} = load double, ptr ${ptr}${host.fieldAliasAttachment(ptr)}`);
|
|
149
|
+
}
|
|
150
|
+
else if (acc === "bool") {
|
|
151
|
+
const raw = B.tmp();
|
|
152
|
+
fast = B.tmp();
|
|
153
|
+
B.line(`${raw} = load i64, ptr ${ptr}${host.fieldAliasAttachment(ptr)}`);
|
|
154
|
+
B.line(`${fast} = icmp ne i64 ${raw}, 0`);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
const raw = B.tmp(), nonnull = B.tmp();
|
|
158
|
+
B.line(`${raw} = load ptr, ptr ${ptr}${host.fieldAliasAttachment(ptr)}`);
|
|
159
|
+
B.line(`${nonnull} = icmp ne ptr ${raw}, null`);
|
|
160
|
+
fastLabel = B.newLabel("arr.get.ref");
|
|
161
|
+
B.condBr(nonnull, fastLabel, slow);
|
|
162
|
+
B.startBlock(fastLabel);
|
|
163
|
+
fast = retain ? host.retainValue(raw, element) : raw;
|
|
164
|
+
}
|
|
165
|
+
B.br(join);
|
|
166
|
+
B.startBlock(slow);
|
|
167
|
+
const slowValue = B.tmp();
|
|
168
|
+
const attrs = acc === "ref" && retain ? " cold" : READ_FALLBACK;
|
|
169
|
+
B.line(`${slowValue} = call ${ty} @${getter}(ptr ${array}, double ${index.name})${attrs}`);
|
|
170
|
+
B.br(join);
|
|
171
|
+
B.startBlock(join);
|
|
172
|
+
const result = B.tmp();
|
|
173
|
+
B.line(`${result} = phi ${ty} [ ${fast}, %${fastLabel} ], [ ${slowValue}, %${slow} ]`);
|
|
174
|
+
return result;
|
|
175
|
+
}
|
|
176
|
+
/** `scr_arr_get_number`: a numeric element, or NaN for every missing,
|
|
177
|
+
* hole, or present-undefined slot (answered by the runtime). */
|
|
178
|
+
export function emitDenseArrayNumber(host, array, index, indexExpr) {
|
|
179
|
+
return emitDenseArrayGet(host, array, index, indexExpr, "f64", { kind: "f64" }, "scr_arr_get_number", false);
|
|
180
|
+
}
|
|
181
|
+
/** `scr_arr_state` (as a double) or `scr_arr_has` (as an i1). Dense
|
|
182
|
+
* in-range indices answer from the state byte; everything else keeps the
|
|
183
|
+
* runtime query, including canonical indices at or past the length. */
|
|
184
|
+
export function emitDenseArrayState(host, array, index, indexExpr, kind) {
|
|
185
|
+
const B = host.B;
|
|
186
|
+
const fn = kind === "state" ? "scr_arr_state" : "scr_arr_has";
|
|
187
|
+
const ty = kind === "state" ? "double" : "i1";
|
|
188
|
+
host.declare(`declare ${kind === "state" ? "double" : "zeroext i1"} @${fn}(ptr, double)`);
|
|
189
|
+
const slow = B.newLabel("arr.state.slow"), join = B.newLabel("arr.state.join");
|
|
190
|
+
const guard = emitDenseGuard(host, array, index, indexExpr, slow, true);
|
|
191
|
+
const state = loadState(host, guard);
|
|
192
|
+
const fast = B.tmp();
|
|
193
|
+
if (kind === "state")
|
|
194
|
+
B.line(`${fast} = uitofp i8 ${state} to double`);
|
|
195
|
+
else
|
|
196
|
+
B.line(`${fast} = icmp ne i8 ${state}, 0`);
|
|
197
|
+
const fastLabel = B.newLabel("arr.state.fast");
|
|
198
|
+
B.br(fastLabel);
|
|
199
|
+
B.startBlock(fastLabel);
|
|
200
|
+
B.br(join);
|
|
201
|
+
B.startBlock(slow);
|
|
202
|
+
const slowValue = B.tmp();
|
|
203
|
+
B.line(`${slowValue} = call ${ty} @${fn}(ptr ${array}, double ${index.name})${READ_FALLBACK}`);
|
|
204
|
+
B.br(join);
|
|
205
|
+
B.startBlock(join);
|
|
206
|
+
const result = B.tmp();
|
|
207
|
+
B.line(`${result} = phi ${ty} [ ${fast}, %${fastLabel} ], [ ${slowValue}, %${slow} ]`);
|
|
208
|
+
return result;
|
|
209
|
+
}
|
|
210
|
+
/** Element write with `scr_arr_set_*` semantics: the array takes the
|
|
211
|
+
* value's reference. A dense index stores the slot, marks it present, and
|
|
212
|
+
* extends the length when it lands at or past it; a replaced present
|
|
213
|
+
* reference is released after the new edge is published (a release can
|
|
214
|
+
* collect cycles). Every other index takes the unchanged runtime call. */
|
|
215
|
+
export function emitDenseArraySet(host, array, index, indexExpr, acc, element, value) {
|
|
216
|
+
const B = host.B;
|
|
217
|
+
const ty = acc === "f64" ? "double" : acc === "bool" ? "i1" : "ptr";
|
|
218
|
+
const setter = `scr_arr_set_${acc}`;
|
|
219
|
+
host.declare(`declare void @${setter}(ptr, double, ${acc === "bool" ? "i1 zeroext" : ty})`);
|
|
220
|
+
const call = (attrs) => B.line(`call void @${setter}(ptr ${array}, double ${index.name}, ${ty} ${value})${attrs}`);
|
|
221
|
+
if (acc === "ref" && !isRefCounted(element)) {
|
|
222
|
+
call("");
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
const slow = B.newLabel("arr.set.slow"), join = B.newLabel("arr.set.join");
|
|
226
|
+
const guard = emitDenseGuard(host, array, index, indexExpr, slow, false);
|
|
227
|
+
const { offset, len } = guard;
|
|
228
|
+
const statePtr = statePointer(host, guard);
|
|
229
|
+
const valuePtr = valuePointer(host, guard);
|
|
230
|
+
let oldState = null;
|
|
231
|
+
let old = null;
|
|
232
|
+
if (acc === "ref") {
|
|
233
|
+
oldState = B.tmp();
|
|
234
|
+
old = B.tmp();
|
|
235
|
+
B.line(`${oldState} = load i8, ptr ${statePtr}${host.fieldAliasAttachment(statePtr)}`);
|
|
236
|
+
B.line(`${old} = load ptr, ptr ${valuePtr}${host.fieldAliasAttachment(valuePtr)}`);
|
|
237
|
+
}
|
|
238
|
+
if (acc === "f64") {
|
|
239
|
+
B.line(`store double ${value}, ptr ${valuePtr}${host.fieldAliasAttachment(valuePtr)}`);
|
|
240
|
+
}
|
|
241
|
+
else if (acc === "bool") {
|
|
242
|
+
const bits = B.tmp();
|
|
243
|
+
B.line(`${bits} = zext i1 ${value} to i64`);
|
|
244
|
+
B.line(`store i64 ${bits}, ptr ${valuePtr}${host.fieldAliasAttachment(valuePtr)}`);
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
B.line(`store ptr ${value}, ptr ${valuePtr}${host.fieldAliasAttachment(valuePtr)}`);
|
|
248
|
+
}
|
|
249
|
+
B.line(`store i8 ${SCR_ARR_VALUE}, ptr ${statePtr}${host.fieldAliasAttachment(statePtr)}`);
|
|
250
|
+
// Writes at or past the length extend it over the (hole) gap, exactly
|
|
251
|
+
// like the runtime's dense store.
|
|
252
|
+
const grows = B.tmp();
|
|
253
|
+
B.line(`${grows} = icmp uge ${host.sizeType} ${offset}, ${len}`);
|
|
254
|
+
const growLabel = B.newLabel("arr.set.grow"), storedLabel = B.newLabel("arr.set.stored");
|
|
255
|
+
B.condBr(grows, growLabel, storedLabel);
|
|
256
|
+
B.startBlock(growLabel);
|
|
257
|
+
const nextLen = B.tmp(), lenPtr = B.tmp();
|
|
258
|
+
B.line(`${nextLen} = add ${host.sizeType} ${offset}, 1`);
|
|
259
|
+
B.line(`${lenPtr} = getelementptr inbounds %ScrArr, ptr ${array}, i32 0, i32 1`);
|
|
260
|
+
host.markMemoryPointer(lenPtr, "array:header");
|
|
261
|
+
B.line(`store ${host.sizeType} ${nextLen}, ptr ${lenPtr}${host.fieldAliasAttachment(lenPtr)}`);
|
|
262
|
+
B.br(storedLabel);
|
|
263
|
+
B.startBlock(storedLabel);
|
|
264
|
+
if (acc === "ref" && oldState && old) {
|
|
265
|
+
const hadValue = B.tmp();
|
|
266
|
+
B.line(`${hadValue} = icmp eq i8 ${oldState}, ${SCR_ARR_VALUE}`);
|
|
267
|
+
const releaseLabel = B.newLabel("arr.set.release");
|
|
268
|
+
B.condBr(hadValue, releaseLabel, join);
|
|
269
|
+
B.startBlock(releaseLabel);
|
|
270
|
+
host.releaseValue(old, element);
|
|
271
|
+
}
|
|
272
|
+
B.br(join);
|
|
273
|
+
B.startBlock(slow);
|
|
274
|
+
call(" cold");
|
|
275
|
+
B.br(join);
|
|
276
|
+
B.startBlock(join);
|
|
277
|
+
}
|
|
278
|
+
/** `scr_arr_push_*` (the array takes the value's reference) returning the
|
|
279
|
+
* new length as a double. When `len < cap` the runtime's append is exactly
|
|
280
|
+
* a dense store at `len` plus `len + 1`: no sparse entry can exist past the
|
|
281
|
+
* length, nothing is released, and the dense capacity never exceeds the
|
|
282
|
+
* maximum index. A full array takes the unchanged (cold) runtime call,
|
|
283
|
+
* which grows storage. */
|
|
284
|
+
export function emitDenseArrayPush(host, array, acc, value) {
|
|
285
|
+
const B = host.B;
|
|
286
|
+
const size = host.sizeType;
|
|
287
|
+
const ty = acc === "f64" ? "double" : acc === "bool" ? "i1" : "ptr";
|
|
288
|
+
const pusher = `scr_arr_push_${acc}`;
|
|
289
|
+
host.declare(`declare double @${pusher}(ptr, ${acc === "bool" ? "i1 zeroext" : ty})`);
|
|
290
|
+
const header = (field) => {
|
|
291
|
+
const ptr = B.tmp();
|
|
292
|
+
B.line(`${ptr} = getelementptr inbounds %ScrArr, ptr ${array}, i32 0, i32 ${field}`);
|
|
293
|
+
host.markMemoryPointer(ptr, "array:header");
|
|
294
|
+
return ptr;
|
|
295
|
+
};
|
|
296
|
+
const lenPtr = header(1), len = B.tmp(), cap = B.tmp(), room = B.tmp();
|
|
297
|
+
B.line(`${len} = load ${size}, ptr ${lenPtr}${host.fieldAliasAttachment(lenPtr)}`);
|
|
298
|
+
const capPtr = header(2);
|
|
299
|
+
B.line(`${cap} = load ${size}, ptr ${capPtr}${host.fieldAliasAttachment(capPtr)}`);
|
|
300
|
+
B.line(`${room} = icmp ult ${size} ${len}, ${cap}`);
|
|
301
|
+
const fast = B.newLabel("arr.push.dense"), slow = B.newLabel("arr.push.slow"), join = B.newLabel("arr.push.join");
|
|
302
|
+
B.condBr(room, fast, slow);
|
|
303
|
+
B.startBlock(fast);
|
|
304
|
+
const dataPtr = header(7), data = B.tmp(), statesPtr = header(8), states = B.tmp();
|
|
305
|
+
B.line(`${data} = load ptr, ptr ${dataPtr}${host.fieldAliasAttachment(dataPtr)}`);
|
|
306
|
+
B.line(`${states} = load ptr, ptr ${statesPtr}${host.fieldAliasAttachment(statesPtr)}`);
|
|
307
|
+
const statePtr = statePointer(host, { offset: len, len, data, states });
|
|
308
|
+
const valuePtr = valuePointer(host, { offset: len, len, data, states });
|
|
309
|
+
if (acc === "f64") {
|
|
310
|
+
B.line(`store double ${value}, ptr ${valuePtr}${host.fieldAliasAttachment(valuePtr)}`);
|
|
311
|
+
}
|
|
312
|
+
else if (acc === "bool") {
|
|
313
|
+
const bits = B.tmp();
|
|
314
|
+
B.line(`${bits} = zext i1 ${value} to i64`);
|
|
315
|
+
B.line(`store i64 ${bits}, ptr ${valuePtr}${host.fieldAliasAttachment(valuePtr)}`);
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
B.line(`store ptr ${value}, ptr ${valuePtr}${host.fieldAliasAttachment(valuePtr)}`);
|
|
319
|
+
}
|
|
320
|
+
B.line(`store i8 ${SCR_ARR_VALUE}, ptr ${statePtr}${host.fieldAliasAttachment(statePtr)}`);
|
|
321
|
+
const next = B.tmp(), fastValue = B.tmp();
|
|
322
|
+
B.line(`${next} = add nuw ${size} ${len}, 1`);
|
|
323
|
+
B.line(`store ${size} ${next}, ptr ${lenPtr}${host.fieldAliasAttachment(lenPtr)}`);
|
|
324
|
+
B.line(`${fastValue} = uitofp ${size} ${next} to double`);
|
|
325
|
+
B.br(join);
|
|
326
|
+
B.startBlock(slow);
|
|
327
|
+
const slowValue = B.tmp();
|
|
328
|
+
B.line(`${slowValue} = call double @${pusher}(ptr ${array}, ${ty} ${value}) cold`);
|
|
329
|
+
B.br(join);
|
|
330
|
+
B.startBlock(join);
|
|
331
|
+
const result = B.tmp();
|
|
332
|
+
B.line(`${result} = phi double [ ${fastValue}, %${fast} ], [ ${slowValue}, %${slow} ]`);
|
|
333
|
+
return result;
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=dense-array-access.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dense-array-access.js","sourceRoot":"","sources":["../../../src/backend/llvm/dense-array-access.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { expect, test } from "vitest";
|
|
2
|
+
import { BOOL, F64, STRING, VOID, arrayOf, } from "../../ir/ir.js";
|
|
3
|
+
import { emitLlvmModule } from "./emitter.js";
|
|
4
|
+
const loc = { file: "dense-array-access.ts", start: 0, end: 0 };
|
|
5
|
+
const nums = arrayOf(F64);
|
|
6
|
+
const flags = arrayOf(BOOL);
|
|
7
|
+
const words = arrayOf(STRING);
|
|
8
|
+
const ref = (localId, type) => ({
|
|
9
|
+
kind: "varRef",
|
|
10
|
+
localId,
|
|
11
|
+
type,
|
|
12
|
+
loc,
|
|
13
|
+
});
|
|
14
|
+
const index = ref("i", F64);
|
|
15
|
+
function module(name, returnType, body) {
|
|
16
|
+
return {
|
|
17
|
+
irVersion: 15,
|
|
18
|
+
sourceFile: loc.file,
|
|
19
|
+
entry: "__main",
|
|
20
|
+
functions: [
|
|
21
|
+
{ name: "__main", params: [], returnType: VOID, locals: [], body: [], loc },
|
|
22
|
+
{
|
|
23
|
+
name,
|
|
24
|
+
params: [
|
|
25
|
+
{ name: "a", localId: "a", type: nums },
|
|
26
|
+
{ name: "b", localId: "b", type: flags },
|
|
27
|
+
{ name: "s", localId: "s", type: words },
|
|
28
|
+
{ name: "i", localId: "i", type: F64 },
|
|
29
|
+
],
|
|
30
|
+
returnType,
|
|
31
|
+
locals: [
|
|
32
|
+
{ id: "a", name: "a", type: nums, mutable: false },
|
|
33
|
+
{ id: "b", name: "b", type: flags, mutable: false },
|
|
34
|
+
{ id: "s", name: "s", type: words, mutable: false },
|
|
35
|
+
{ id: "i", name: "i", type: F64, mutable: false },
|
|
36
|
+
],
|
|
37
|
+
body,
|
|
38
|
+
loc,
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function body(llvm, name) {
|
|
44
|
+
return new RegExp(`^define internal [^\\n]*@sc_bf_${name}\\([^]*?^}`, "m").exec(llvm)[0];
|
|
45
|
+
}
|
|
46
|
+
test.each([32, 64])("strict scalar reads check dense storage inline (%i-bit)", (bits) => {
|
|
47
|
+
const read = { kind: "arrayGet", arr: ref("a", nums), index, type: F64, loc };
|
|
48
|
+
const llvm = emitLlvmModule(module("get", F64, [{ kind: "return", value: read, loc }]), {
|
|
49
|
+
pointerBits: bits,
|
|
50
|
+
});
|
|
51
|
+
const fn = body(llvm, "get");
|
|
52
|
+
// A double index must round-trip exactly; NaN/out-of-range conversions are frozen.
|
|
53
|
+
expect(fn).toContain("fptosi double");
|
|
54
|
+
expect(fn).toContain("freeze i64");
|
|
55
|
+
expect(fn).toMatch(/icmp ult i64 .*/);
|
|
56
|
+
expect(fn).toMatch(/load i8, ptr /);
|
|
57
|
+
expect(fn).toMatch(/icmp eq i8 .*, 1$/m);
|
|
58
|
+
expect(fn).toMatch(/load double, ptr /);
|
|
59
|
+
expect(fn).toMatch(/call double @scr_arr_get_f64\(.*\) cold memory\(read, inaccessiblemem: readwrite\)/);
|
|
60
|
+
if (bits === 32)
|
|
61
|
+
expect(fn).toContain("trunc i64");
|
|
62
|
+
});
|
|
63
|
+
test("reference reads retain inline and keep a cold +1 runtime fallback", () => {
|
|
64
|
+
const read = { kind: "arrayGet", arr: ref("s", words), index, type: STRING, loc };
|
|
65
|
+
const llvm = emitLlvmModule(module("word", STRING, [{ kind: "return", value: read, loc }]));
|
|
66
|
+
const fn = body(llvm, "word");
|
|
67
|
+
expect(fn).toMatch(/icmp ne ptr .*, null/);
|
|
68
|
+
expect(fn).toContain("@scr_str_retain_v(");
|
|
69
|
+
// The retaining getter writes reference counts, so it gets no read-only effect.
|
|
70
|
+
expect(fn).toMatch(/call ptr @scr_arr_get_ref\(.*\) cold$/m);
|
|
71
|
+
});
|
|
72
|
+
test("element writes store inline, extend the length, and release replaced references", () => {
|
|
73
|
+
const set = (arr, value) => ({
|
|
74
|
+
kind: "arraySet",
|
|
75
|
+
arr,
|
|
76
|
+
index,
|
|
77
|
+
value,
|
|
78
|
+
loc,
|
|
79
|
+
});
|
|
80
|
+
const llvm = emitLlvmModule(module("store", VOID, [
|
|
81
|
+
set(ref("a", nums), { kind: "numLit", value: 2.5, type: F64, loc }),
|
|
82
|
+
set(ref("b", flags), { kind: "boolLit", value: true, type: BOOL, loc }),
|
|
83
|
+
set(ref("s", words), { kind: "strLit", value: "x", type: STRING, loc }),
|
|
84
|
+
]));
|
|
85
|
+
const fn = body(llvm, "store");
|
|
86
|
+
expect(fn).toMatch(/store double 0x4004000000000000, ptr /);
|
|
87
|
+
expect(fn).toMatch(/zext i1 .* to i64/);
|
|
88
|
+
expect(fn).toMatch(/store i8 1, ptr /);
|
|
89
|
+
expect(fn).toMatch(/icmp uge i64 .*/);
|
|
90
|
+
expect(fn).toContain("call void @scr_str_release(");
|
|
91
|
+
for (const acc of ["f64", "bool", "ref"]) {
|
|
92
|
+
expect(fn).toMatch(new RegExp(`call void @scr_arr_set_${acc}\\(.*\\) cold$`, "m"));
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
test.each([32, 64])("push appends inline below the capacity and keeps a cold runtime append (%i-bit)", (bits) => {
|
|
96
|
+
const push = (receiver, value) => ({
|
|
97
|
+
kind: "exprStmt",
|
|
98
|
+
expr: { kind: "arrIntrinsic", method: "push", receiver, args: [value], type: F64, loc },
|
|
99
|
+
loc,
|
|
100
|
+
});
|
|
101
|
+
const llvm = emitLlvmModule(module("append", VOID, [
|
|
102
|
+
push(ref("a", nums), { kind: "numLit", value: 2.5, type: F64, loc }),
|
|
103
|
+
push(ref("b", flags), { kind: "boolLit", value: true, type: BOOL, loc }),
|
|
104
|
+
push(ref("s", words), { kind: "strLit", value: "x", type: STRING, loc }),
|
|
105
|
+
]), { pointerBits: bits });
|
|
106
|
+
const fn = body(llvm, "append");
|
|
107
|
+
const size = bits === 32 ? "i32" : "i64";
|
|
108
|
+
expect(fn.match(new RegExp(`icmp ult ${size} `, "g"))).toHaveLength(3);
|
|
109
|
+
expect(fn).toMatch(/store double 0x4004000000000000, ptr /);
|
|
110
|
+
expect(fn).toMatch(/zext i1 .* to i64/);
|
|
111
|
+
expect(fn.match(/store i8 1, ptr /g)).toHaveLength(3);
|
|
112
|
+
expect(fn.match(new RegExp(`add nuw ${size} .*, 1$`, "gm"))).toHaveLength(3);
|
|
113
|
+
// Appends never release: the slot past the length holds no value.
|
|
114
|
+
expect(fn).not.toContain("_release(");
|
|
115
|
+
for (const acc of ["f64", "bool", "ref"]) {
|
|
116
|
+
expect(fn).toMatch(new RegExp(`call double @scr_arr_push_${acc}\\(.*\\) cold$`, "m"));
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
test("state and presence queries answer dense slots inline", () => {
|
|
120
|
+
const state = { kind: "arrayState", arr: ref("b", flags), index, type: F64, loc };
|
|
121
|
+
const has = { kind: "arrayHas", arr: ref("s", words), index, type: BOOL, loc };
|
|
122
|
+
const llvm = emitLlvmModule(module("query", BOOL, [
|
|
123
|
+
{
|
|
124
|
+
kind: "return",
|
|
125
|
+
value: {
|
|
126
|
+
kind: "logical",
|
|
127
|
+
op: "&&",
|
|
128
|
+
left: {
|
|
129
|
+
kind: "bin",
|
|
130
|
+
op: "===",
|
|
131
|
+
left: state,
|
|
132
|
+
right: { kind: "numLit", value: 1, type: F64, loc },
|
|
133
|
+
type: BOOL,
|
|
134
|
+
loc,
|
|
135
|
+
},
|
|
136
|
+
right: has,
|
|
137
|
+
type: BOOL,
|
|
138
|
+
loc,
|
|
139
|
+
},
|
|
140
|
+
loc,
|
|
141
|
+
},
|
|
142
|
+
]));
|
|
143
|
+
const fn = body(llvm, "query");
|
|
144
|
+
expect(fn).toMatch(/uitofp i8 .* to double/);
|
|
145
|
+
expect(fn).toMatch(/icmp ne i8 .*, 0/);
|
|
146
|
+
expect(fn).toMatch(/call double @scr_arr_state\(.*\) cold memory\(read/);
|
|
147
|
+
expect(fn).toMatch(/call i1 @scr_arr_has\(.*\) cold memory\(read/);
|
|
148
|
+
});
|
|
149
|
+
//# sourceMappingURL=dense-array-access.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dense-array-access.test.js","sourceRoot":"","sources":["../../../src/backend/llvm/dense-array-access.test.ts"],"names":[],"mappings":"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"}
|