@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
|
@@ -10,7 +10,7 @@ import { InternalCompilerError } from "../../errors.js";
|
|
|
10
10
|
* explicit resource management, and blocked-binding poisoning. */
|
|
11
11
|
import * as ts from "../ts7/adapter.js";
|
|
12
12
|
import { bindingSource } from "../binding-source.js";
|
|
13
|
-
import { arrayValueRead, arrayValueStore, arrayValueType, unionArrayValueRead, } from "./array-values.js";
|
|
13
|
+
import { arrayValueRead, arrayValueStore, arrayValueType, unionArrayValueRead, lowerSafeIndexRead, } from "./array-values.js";
|
|
14
14
|
import { lowerForAwaitGenerator, lowerForOfGenerator, lowerYieldStarStatement, } from "./lower-generators.js";
|
|
15
15
|
import { lowerForAwaitBuiltin } from "./lower-async-iteration.js";
|
|
16
16
|
import { BOOL, BYTES_U8, CAUGHT, DYN, F64, JSVAL, STRING, UNDEFINED_T, VOID, arrayOf, isDynTypedRefType, isUnitType, shapeHasAccessorSlots, typeEquals, } from "../../ir/ir.js";
|
|
@@ -23,7 +23,6 @@ import { isProvenanceSourceFile } from "../provenance-registry.js";
|
|
|
23
23
|
import { ambientUndefVarRootOf, lowerImportEquals, nsUndefRead, nsWritableTarget, trapDeclRootOf, } from "./lower-namespaces.js";
|
|
24
24
|
import { expandoWritableTarget, lowerExpandoAssignStmt } from "./lower-expando.js";
|
|
25
25
|
import { lowerForOfArrayIter, lowerForOfMap, lowerForOfSearchParams, lowerForOfSet, } from "./containers/for-of.js";
|
|
26
|
-
import { lowerSafeIndexRead } from "./containers/array-methods.js";
|
|
27
26
|
import { objectIterOverIndexShape } from "./containers/indexed-objects.js";
|
|
28
27
|
import { strCharsCall } from "./containers/array-construction.js";
|
|
29
28
|
import { bindingContextualGenericFnNodeOf, bindingGenericFnAliasInfoOf, bindingGenericFnInfoOf, bindingGenericFnNodeOf, implicitLocalFnInfoOf, implicitLocalFnNodeOf, implicitMethodCallInfersReturn, } from "./generic-functions.js";
|
|
@@ -37,7 +36,7 @@ import { classStaticDataFor } from "./class-static-data.js";
|
|
|
37
36
|
import { objectFactorySignature } from "./object-factory-new.js";
|
|
38
37
|
import { isClassCallback, lowerClassCallbackAssign } from "./class-callbacks.js";
|
|
39
38
|
import { classForInHasKey, classPropertiesHelper } from "./class-dynamic-dispatch.js";
|
|
40
|
-
import { genericIfaceBindingKeepsClass
|
|
39
|
+
import { genericIfaceBindingKeepsClass } from "./lower-classes.js";
|
|
41
40
|
import { lowerStreamUnderscoreAssign, streamClassAliasDecl } from "./lower-stream.js";
|
|
42
41
|
import { lowerHttpResPropertyAssignment, lowerHttpServerTimeoutAssignment, lowerServerCloseOverrideAssignment, } from "./lower-server.js";
|
|
43
42
|
import { lowerUrlAssignment } from "./builtins/url.js";
|
|
@@ -45,7 +44,7 @@ import { isNativeFfiRequire, builtinMemberRequireDecl, builtinNamespaceDestructu
|
|
|
45
44
|
import { lowerNodeModuleCall } from "./builtins/module-resolution.js";
|
|
46
45
|
import { registerBuiltinCallableAlias } from "./builtins/callable-aliases.js";
|
|
47
46
|
import { lowerEnumDeclaration } from "./lower-enums.js";
|
|
48
|
-
import { abstractPropertyDeclOf, aliasTypeofNarrows, isMatchSliceType, lowerAbsenceProbe, lowerCompoundValueToTarget, lowerElementCompound, lowerIncDec, lowerGroupsProjection, matchResultNamedGroupsOf, runtimeOptionalGuardIds, runtimeOptionalTrueIds, symbolFieldInfo, withRuntimeOptionalNarrowed, } from "./lower-exprs.js";
|
|
47
|
+
import { abstractPropertyDeclOf, aliasTypeofNarrows, isMatchSliceType, lowerAbsenceProbe, lowerCompoundValueToTarget, lowerElementCompound, lowerIncDec, lowerIncDecTarget, lowerGroupsProjection, matchResultNamedGroupsOf, runtimeOptionalGuardIds, runtimeOptionalTrueIds, symbolFieldInfo, withRuntimeOptionalNarrowed, } from "./lower-exprs.js";
|
|
49
48
|
import { globalSymbolKey } from "./expressions/global-symbols.js";
|
|
50
49
|
import { lowerShortCircuitAssignment } from "./expressions/nullish-assignment.js";
|
|
51
50
|
import { lowerEnvironmentKey, lowerNativeFunctionAssignment } from "./lower-exprs.js";
|
|
@@ -3042,14 +3041,14 @@ function objectRestValue(lowerer, el, srcRef, srcType, shape) {
|
|
|
3042
3041
|
kind: "recordLit",
|
|
3043
3042
|
fields: rem.map((f) => ({
|
|
3044
3043
|
name: f.name,
|
|
3045
|
-
value: {
|
|
3044
|
+
value: lowerer.presenceKeepingCopy(srcRef(), srcType.shapeId, f.name, {
|
|
3046
3045
|
kind: "recordGet",
|
|
3047
3046
|
obj: srcRef(),
|
|
3048
3047
|
shapeId: srcType.shapeId,
|
|
3049
3048
|
field: f.name,
|
|
3050
3049
|
type: f.type,
|
|
3051
3050
|
loc,
|
|
3052
|
-
},
|
|
3051
|
+
}, loc),
|
|
3053
3052
|
})),
|
|
3054
3053
|
type: {
|
|
3055
3054
|
kind: "record",
|
|
@@ -3083,7 +3082,10 @@ function objectRestValue(lowerer, el, srcRef, srcType, shape) {
|
|
|
3083
3082
|
type: srcField.type,
|
|
3084
3083
|
loc,
|
|
3085
3084
|
};
|
|
3086
|
-
return {
|
|
3085
|
+
return {
|
|
3086
|
+
name: f.name,
|
|
3087
|
+
value: lowerer.presenceKeepingCopy(srcRef(), srcType.shapeId, srcField.name, lowerer.coerceInto(el, read, f.type), loc),
|
|
3088
|
+
};
|
|
3087
3089
|
});
|
|
3088
3090
|
return { kind: "recordLit", fields, type: restT, loc };
|
|
3089
3091
|
}
|
|
@@ -3614,10 +3616,14 @@ export function bindPatternTarget(lowerer, name, value, isLet, out, allowDynObje
|
|
|
3614
3616
|
// through later locals, templates, operators, and narrowing instead
|
|
3615
3617
|
// of being extracted with a checked arm read.
|
|
3616
3618
|
let runtimeOptional = false;
|
|
3619
|
+
// The optional-read pre-pass may already have widened the binding to
|
|
3620
|
+
// that union; its reads still need the runtime-optional treatment.
|
|
3617
3621
|
if (!dynStays &&
|
|
3618
3622
|
value.type.kind === "union" &&
|
|
3619
3623
|
lowerer.armTag(value.type.unionId, UNDEFINED_T) >= 0 &&
|
|
3620
|
-
typeEquals(lowerer.stripUndefinedArm(value.type), type)
|
|
3624
|
+
(typeEquals(lowerer.stripUndefinedArm(value.type), type) ||
|
|
3625
|
+
(typeEquals(value.type, type) &&
|
|
3626
|
+
typeEquals(lowerer.stripUndefinedArm(value.type), lowerer.irTypeOf(name))))) {
|
|
3621
3627
|
type = value.type;
|
|
3622
3628
|
runtimeOptional = true;
|
|
3623
3629
|
}
|
|
@@ -4020,10 +4026,13 @@ export function lowerVarDecl(lowerer, decl, isLet) {
|
|
|
4020
4026
|
g.type = DYN;
|
|
4021
4027
|
g.type = inferredOptionalRecordType(lowerer, decl, g.type, raw.type);
|
|
4022
4028
|
const arithmetic = raw.type.kind === "union" ? lowerer.unions.get(raw.type.unionId)?.arms : undefined;
|
|
4023
|
-
if (
|
|
4024
|
-
arithmetic
|
|
4025
|
-
|
|
4026
|
-
|
|
4029
|
+
if (arithmetic?.length === 2 &&
|
|
4030
|
+
arithmetic.every((a) => a.kind === "f64" || a.kind === "string" || a.kind === "bool") &&
|
|
4031
|
+
(lowerer.runtimeOptionalArithmeticTypes.has(decl.initializer) ||
|
|
4032
|
+
lowerer.runtimeOptionalBindingType(decl.name)?.kind === "union" ||
|
|
4033
|
+
(g.type.kind === "string" &&
|
|
4034
|
+
arithmetic.some((a) => a.kind === "f64") &&
|
|
4035
|
+
arithmetic.some((a) => a.kind === "string")))) {
|
|
4027
4036
|
g.type = raw.type;
|
|
4028
4037
|
lowerer.runtimeOptionalArithmeticGlobals.add(g);
|
|
4029
4038
|
}
|
|
@@ -4394,9 +4403,13 @@ export function lowerVarDecl(lowerer, decl, isLet) {
|
|
|
4394
4403
|
arms.some((a) => a.kind === "f64") &&
|
|
4395
4404
|
arms.some((a) => a.kind === "string"));
|
|
4396
4405
|
};
|
|
4397
|
-
const runtimeStringArithmetic =
|
|
4398
|
-
(
|
|
4399
|
-
|
|
4406
|
+
const runtimeStringArithmetic = (arithmeticType !== undefined && typeEquals(arithmeticType, init.type)) ||
|
|
4407
|
+
(settledType.kind === "string" && isStringArithmeticUnion(init.type)) ||
|
|
4408
|
+
(init.type.kind === "union" &&
|
|
4409
|
+
typeEquals(lowerer.runtimeOptionalBindingType(decl.name, settledType), init.type) &&
|
|
4410
|
+
lowerer.unions
|
|
4411
|
+
.get(init.type.unionId)
|
|
4412
|
+
?.arms.every((a) => a.kind === "f64" || a.kind === "string" || a.kind === "bool") === true);
|
|
4400
4413
|
if (runtimeStringArithmetic) {
|
|
4401
4414
|
settledType = init.type;
|
|
4402
4415
|
}
|
|
@@ -4528,7 +4541,7 @@ export function lowerVarDecl(lowerer, decl, isLet) {
|
|
|
4528
4541
|
// subtyping (`const p: {a: number} = wider;`) is rejected, not coerced.
|
|
4529
4542
|
init = lowerer.coerceInto(decl.initializer, init, settledType);
|
|
4530
4543
|
const local = lowerer.declareLocal(decl.name, decl.name.text, settledType, isLet);
|
|
4531
|
-
if (runtimeStringArithmetic &&
|
|
4544
|
+
if (runtimeStringArithmetic && init.type.kind === "union") {
|
|
4532
4545
|
lowerer.runtimeOptionalArithmeticLocals.add(lowerer.runtimeOptionalRootOf(local));
|
|
4533
4546
|
}
|
|
4534
4547
|
if (runtimeOptional) {
|
|
@@ -5016,8 +5029,9 @@ function isStrictDelete(node) {
|
|
|
5016
5029
|
}
|
|
5017
5030
|
/** Statement-position `delete`: process.env keys → process.envUnset
|
|
5018
5031
|
* (unsetenv), pure `Record<string, T>` keys → recordKeyDelete (the
|
|
5019
|
-
* overflow Map delete), declared OPTIONAL fields → the
|
|
5020
|
-
*
|
|
5032
|
+
* overflow Map delete), declared OPTIONAL fields → the field's ABSENT
|
|
5033
|
+
* state (the slot reads undefined and no longer counts as an own
|
|
5034
|
+
* property). Everything else
|
|
5021
5035
|
* fences with the honest reason — a required field is a struct slot no
|
|
5022
5036
|
* runtime can remove. */
|
|
5023
5037
|
function lowerDeleteStatement(lowerer, expr) {
|
|
@@ -5133,14 +5147,13 @@ function lowerDeleteStatement(lowerer, expr) {
|
|
|
5133
5147
|
if (shape?.indexValue && shape.fields.length === 0 && !shape.tuple) {
|
|
5134
5148
|
return { kind: "recordKeyDelete", obj, shapeId: obj.type.shapeId, key: lowerKey(), loc };
|
|
5135
5149
|
}
|
|
5136
|
-
// `delete r.f` of a declared OPTIONAL field (undefined-armed slot)
|
|
5137
|
-
// the
|
|
5138
|
-
// slot,
|
|
5139
|
-
//
|
|
5140
|
-
//
|
|
5141
|
-
// (
|
|
5142
|
-
//
|
|
5143
|
-
// fields keep the honest fence below.
|
|
5150
|
+
// `delete r.f` of a declared OPTIONAL field (undefined-armed slot)
|
|
5151
|
+
// writes the field's ABSENT state: a monomorphic shape cannot remove
|
|
5152
|
+
// its slot, but the slot remembers that no property exists, so `in`
|
|
5153
|
+
// answers false, Object.keys skips it, and JSON.stringify drops it,
|
|
5154
|
+
// while a later write makes it present again. Constant keys only
|
|
5155
|
+
// (dot access or a literal bracket); required fields keep the honest
|
|
5156
|
+
// fence below.
|
|
5144
5157
|
const fieldName = ts.isPropertyAccessExpression(target)
|
|
5145
5158
|
? target.name.text
|
|
5146
5159
|
: ts.isStringLiteral(target.argumentExpression)
|
|
@@ -5150,7 +5163,7 @@ function lowerDeleteStatement(lowerer, expr) {
|
|
|
5150
5163
|
? shape?.fields.find((f) => f.name === fieldName)
|
|
5151
5164
|
: undefined;
|
|
5152
5165
|
if (field) {
|
|
5153
|
-
const absent = lowerer.
|
|
5166
|
+
const absent = lowerer.absentFieldValue(field.type, loc);
|
|
5154
5167
|
if (absent) {
|
|
5155
5168
|
return {
|
|
5156
5169
|
kind: "recordSet",
|
|
@@ -5964,7 +5977,7 @@ export function lowerExprStatement(lowerer, expr) {
|
|
|
5964
5977
|
}
|
|
5965
5978
|
const unionWrite = lowerUnionFieldWrite(lowerer, expr.left, expr.right);
|
|
5966
5979
|
if (unionWrite)
|
|
5967
|
-
return unionWrite;
|
|
5980
|
+
return { kind: "exprStmt", expr: unionWrite, loc: locOf(expr) };
|
|
5968
5981
|
const target = lowerer.fieldTarget(expr.left);
|
|
5969
5982
|
if (target) {
|
|
5970
5983
|
const value = lowerer.lowerExprExpecting(expr.right, target.fieldType);
|
|
@@ -6162,27 +6175,7 @@ export function lowerExprStatement(lowerer, expr) {
|
|
|
6162
6175
|
};
|
|
6163
6176
|
}
|
|
6164
6177
|
// Statement position only: pre/post distinction is unobservable, so
|
|
6165
|
-
//
|
|
6166
|
-
if (ts.isPropertyAccessExpression(expr.operand) ||
|
|
6167
|
-
(ts.isElementAccessExpression(expr.operand) && symbolFieldInfo(lowerer, expr.operand))) {
|
|
6168
|
-
// `N.x++` — the namespace-qualified spelling of a module-global
|
|
6169
|
-
// increment (the member's global IS the variable); expando
|
|
6170
|
-
// function members (`foo.count++`) are module globals too.
|
|
6171
|
-
if (ts.isPropertyAccessExpression(expr.operand) && !expr.operand.questionDotToken) {
|
|
6172
|
-
const staticTarget = staticFieldWriteTarget(lowerer, expr.operand);
|
|
6173
|
-
if (staticTarget)
|
|
6174
|
-
return lowerIncDecToTarget(lowerer, expr, staticTarget);
|
|
6175
|
-
const exT = expandoWritableTarget(lowerer, expr.operand);
|
|
6176
|
-
if (exT)
|
|
6177
|
-
return lowerIncDecToTarget(lowerer, expr, exT);
|
|
6178
|
-
const nsT = nsWritableTarget(lowerer, expr.operand);
|
|
6179
|
-
if (nsT)
|
|
6180
|
-
return lowerIncDecToTarget(lowerer, expr, nsT);
|
|
6181
|
-
}
|
|
6182
|
-
// `obj.f++` desugars through the compound-field path (`obj.f += 1`);
|
|
6183
|
-
// `this[kLimit]++` is the same desugar over the symbol-keyed slot.
|
|
6184
|
-
return lowerer.lowerFieldCompound(expr.operand, expr.operator === ts.SyntaxKind.PlusPlusToken ? "+" : "-", null, locOf(expr));
|
|
6185
|
-
}
|
|
6178
|
+
// numeric bindings retain the simple `x = x ± 1` loop form.
|
|
6186
6179
|
if (!ts.isIdentifier(expr.operand)) {
|
|
6187
6180
|
lowerer.unsupported("SC1090", expr.operand, "increment/decrement of non-variables");
|
|
6188
6181
|
}
|
|
@@ -6269,22 +6262,17 @@ function lowerIncDecToTarget(lowerer, expr, target) {
|
|
|
6269
6262
|
const loc = locOf(expr);
|
|
6270
6263
|
const op = expr.operator === ts.SyntaxKind.PlusPlusToken ? "+" : "-";
|
|
6271
6264
|
const readTarget = { kind: "varRef", localId: target.id, type: target.type, loc };
|
|
6272
|
-
|
|
6273
|
-
|
|
6274
|
-
const dynTarget = target.type.kind === "dyn" && isJsSourceFile(expr.getSourceFile());
|
|
6275
|
-
if (target.type.kind !== "f64" && !dynTarget) {
|
|
6276
|
-
lowerer.unsupported("SC1090", expr.operand, "increment/decrement of non-number targets");
|
|
6277
|
-
}
|
|
6265
|
+
if (target.type.kind !== "f64")
|
|
6266
|
+
return { kind: "exprStmt", expr: lowerIncDecTarget(lowerer, expr, target, false), loc };
|
|
6278
6267
|
const computed = {
|
|
6279
6268
|
kind: "bin",
|
|
6280
6269
|
op,
|
|
6281
|
-
left:
|
|
6270
|
+
left: readTarget,
|
|
6282
6271
|
right: { kind: "numLit", value: 1, type: F64, loc },
|
|
6283
6272
|
type: F64,
|
|
6284
6273
|
loc,
|
|
6285
6274
|
};
|
|
6286
|
-
|
|
6287
|
-
return { kind: "assign", localId: target.id, value, loc };
|
|
6275
|
+
return { kind: "assign", localId: target.id, value: computed, loc };
|
|
6288
6276
|
}
|
|
6289
6277
|
/** The shared tail of `x op= e` over a resolved variable/global target —
|
|
6290
6278
|
* desugared to `x = x op e` (x read before e, like JS). Serves the bare-
|