@scriptc/compiler 0.2.5 → 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 +62 -48
- 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/executable-features.js +1 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/link-plan-core.d.ts +4 -1
- package/dist/backend/link-plan-core.js +16 -3
- package/dist/backend/link-plan-core.js.map +1 -1
- package/dist/backend/link-plan.d.ts +3 -1
- package/dist/backend/link-plan.js +3 -0
- 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/byte-numbers.js +32 -4
- package/dist/backend/llvm/byte-numbers.js.map +1 -1
- package/dist/backend/llvm/byte-windows.d.ts +31 -0
- package/dist/backend/llvm/byte-windows.js +334 -0
- package/dist/backend/llvm/byte-windows.js.map +1 -0
- package/dist/backend/llvm/byte-windows.test.d.ts +1 -0
- package/dist/backend/llvm/byte-windows.test.js +244 -0
- package/dist/backend/llvm/byte-windows.test.js.map +1 -0
- package/dist/backend/llvm/call-lifetimes.d.ts +17 -5
- package/dist/backend/llvm/call-lifetimes.js +58 -24
- 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 +18 -2
- package/dist/backend/llvm/classes.js +115 -41
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.d.ts +1 -0
- package/dist/backend/llvm/classes.test.js +132 -0
- package/dist/backend/llvm/classes.test.js.map +1 -0
- 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 +27 -0
- package/dist/backend/llvm/constant-callbacks.js +450 -0
- package/dist/backend/llvm/constant-callbacks.js.map +1 -0
- package/dist/backend/llvm/constant-callbacks.test.d.ts +1 -0
- package/dist/backend/llvm/constant-callbacks.test.js +261 -0
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -0
- 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 +35 -1
- package/dist/backend/llvm/dyn.js +196 -35
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +143 -4
- package/dist/backend/llvm/emitter.js +882 -136
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +82 -14
- 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-bytes.js +11 -0
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +151 -25
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +37 -14
- 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 +210 -28
- 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 +58 -23
- 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 +18 -0
- package/dist/backend/llvm/integer-remainder.js +117 -0
- package/dist/backend/llvm/integer-remainder.js.map +1 -0
- package/dist/backend/llvm/layouts.d.ts +2 -1
- package/dist/backend/llvm/layouts.js +4 -3
- 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-abi.js +7 -0
- package/dist/backend/llvm/lib-abi.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +7 -22
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +3 -4
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +15 -0
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.d.ts +13 -3
- package/dist/backend/llvm/local-array-reads.js +159 -77
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +105 -4
- 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/loop-array-borrows.d.ts +11 -0
- package/dist/backend/llvm/loop-array-borrows.js +70 -0
- package/dist/backend/llvm/loop-array-borrows.js.map +1 -0
- package/dist/backend/llvm/loop-array-borrows.test.d.ts +1 -0
- package/dist/backend/llvm/loop-array-borrows.test.js +145 -0
- package/dist/backend/llvm/loop-array-borrows.test.js.map +1 -0
- package/dist/backend/llvm/map-read-lifetimes.d.ts +5 -0
- package/dist/backend/llvm/map-read-lifetimes.js +20 -5
- package/dist/backend/llvm/map-read-lifetimes.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/reference-effects.d.ts +2 -1
- package/dist/backend/llvm/reference-effects.js +7 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- 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 +73 -3
- package/dist/backend/llvm/shapes.js +281 -34
- 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/split-loops.d.ts +48 -0
- package/dist/backend/llvm/split-loops.js +183 -0
- package/dist/backend/llvm/split-loops.js.map +1 -0
- package/dist/backend/llvm/split.js +0 -7
- package/dist/backend/llvm/split.js.map +1 -1
- package/dist/backend/llvm/split.test.js +66 -2
- package/dist/backend/llvm/split.test.js.map +1 -1
- package/dist/backend/llvm/stack-callbacks.d.ts +14 -0
- package/dist/backend/llvm/stack-callbacks.js +72 -0
- package/dist/backend/llvm/stack-callbacks.js.map +1 -0
- package/dist/backend/llvm/stack-captures.d.ts +27 -0
- package/dist/backend/llvm/stack-captures.js +152 -0
- package/dist/backend/llvm/stack-captures.js.map +1 -0
- 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 +48 -7
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-slices.d.ts +20 -0
- package/dist/backend/llvm/string-slices.js +87 -0
- package/dist/backend/llvm/string-slices.js.map +1 -0
- package/dist/backend/llvm/string-slices.test.d.ts +1 -0
- package/dist/backend/llvm/string-slices.test.js +98 -0
- package/dist/backend/llvm/string-slices.test.js.map +1 -0
- 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/llvm/walkers.d.ts +4 -14
- package/dist/backend/llvm/walkers.js +53 -311
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/may-throw.js +4 -1
- 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 +5 -2
- package/dist/backend/native/contracts.js.map +1 -1
- package/dist/backend/native/executable.js +12 -4
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +3 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +7 -0
- package/dist/backend/native-codegen-core.js +21 -0
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +9 -0
- package/dist/backend/native-codegen.js +38 -18
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +70 -2
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +4 -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 +6 -2
- package/dist/backend/native-tools.js +6 -5
- 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 +16 -4
- package/dist/backend/runtime-pack-core.js +31 -13
- 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 +41 -4
- package/dist/backend/runtime-pack-targets.test.js.map +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 +125 -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 +3 -2
- package/dist/executable/executable-cache.js +8 -4
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +35 -0
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/frontend/fork-target.d.ts +5 -0
- package/dist/frontend/fork-target.js +40 -8
- package/dist/frontend/fork-target.js.map +1 -1
- package/dist/frontend/fork-target.test.d.ts +1 -0
- package/dist/frontend/fork-target.test.js +59 -0
- package/dist/frontend/fork-target.test.js.map +1 -0
- 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/binding-analysis.js +2 -2
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.d.ts +2 -11
- package/dist/frontend/lowering/builtins/atomics.js +64 -28
- package/dist/frontend/lowering/builtins/atomics.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/filesystem-calls.d.ts +3 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +51 -4
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +6 -1
- package/dist/frontend/lowering/builtins/module-calls.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/builtins/workers.d.ts +5 -0
- package/dist/frontend/lowering/builtins/workers.js +65 -0
- package/dist/frontend/lowering/builtins/workers.js.map +1 -0
- 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 +11 -0
- package/dist/frontend/lowering/class-assertions.js +104 -0
- package/dist/frontend/lowering/class-assertions.js.map +1 -0
- 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-protocols.d.ts +17 -0
- package/dist/frontend/lowering/class-protocols.js +126 -0
- package/dist/frontend/lowering/class-protocols.js.map +1 -0
- 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 +8 -12
- package/dist/frontend/lowering/containers/array-callbacks.js +415 -136
- 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/bytes.js +12 -34
- package/dist/frontend/lowering/containers/bytes.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/containers/string-and-regexp.js +22 -3
- package/dist/frontend/lowering/containers/string-and-regexp.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 +140 -38
- 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/generic-functions.d.ts +2 -5
- package/dist/frontend/lowering/generic-functions.js +13 -10
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/instantiation-path.d.ts +8 -0
- package/dist/frontend/lowering/instantiation-path.js +10 -0
- package/dist/frontend/lowering/instantiation-path.js.map +1 -0
- package/dist/frontend/lowering/instantiation-path.test.d.ts +1 -0
- package/dist/frontend/lowering/instantiation-path.test.js +23 -0
- package/dist/frontend/lowering/instantiation-path.test.js.map +1 -0
- 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 +12 -7
- 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 +198 -124
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +7 -0
- package/dist/frontend/lowering/lower-classes.js +166 -96
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.js +1 -1
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +9 -2
- package/dist/frontend/lowering/lower-exprs.js +421 -167
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.d.ts +1 -1
- package/dist/frontend/lowering/lower-functions.js +33 -20
- 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-island.js +1 -1
- package/dist/frontend/lowering/lower-island.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.d.ts +1 -0
- package/dist/frontend/lowering/lower-modules.js +54 -11
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +59 -69
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +1 -1
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +50 -1
- package/dist/frontend/lowering/lowerer.js +333 -26
- 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/split-consumers.d.ts +7 -0
- package/dist/frontend/lowering/split-consumers.js +64 -0
- package/dist/frontend/lowering/split-consumers.js.map +1 -0
- 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.d.ts +3 -4
- package/dist/frontend/lowering/surfaces.js +38 -7
- 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/module-source-candidates.d.ts +10 -0
- package/dist/frontend/module-source-candidates.js +40 -0
- package/dist/frontend/module-source-candidates.js.map +1 -0
- package/dist/frontend/module-source-candidates.test.d.ts +1 -0
- package/dist/frontend/module-source-candidates.test.js +53 -0
- package/dist/frontend/module-source-candidates.test.js.map +1 -0
- package/dist/frontend/pipeline.js +2 -2
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program-analysis.d.ts +2 -0
- package/dist/frontend/program-analysis.js +2 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +38 -2
- package/dist/frontend/program.js +457 -88
- 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/ts7/ast-node.js +6 -8
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +42 -1
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.d.ts +4 -0
- package/dist/frontend/ts7/ast-wire.js +28 -0
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/ast.d.ts +2 -1
- package/dist/frontend/ts7/ast.js +8 -4
- package/dist/frontend/ts7/ast.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +8 -2
- package/dist/frontend/ts7/checker.js +41 -5
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +42 -0
- package/dist/frontend/ts7/checker.test.js.map +1 -1
- package/dist/frontend/ts7/program-host.d.ts +7 -0
- package/dist/frontend/ts7/program-host.js +26 -2
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/program-host.test.js +29 -0
- package/dist/frontend/ts7/program-host.test.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +4 -1
- package/dist/frontend/type-mapper.js +133 -16
- 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/frontend/worker-target.d.ts +6 -0
- package/dist/frontend/worker-target.js +108 -0
- package/dist/frontend/worker-target.js.map +1 -0
- package/dist/frontend/worker-target.test.d.ts +1 -0
- package/dist/frontend/worker-target.test.js +71 -0
- package/dist/frontend/worker-target.test.js.map +1 -0
- package/dist/index.js +47 -14
- 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-effects.js +12 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +15 -15
- 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 +85 -23
- package/dist/ir/ir.js +20 -6
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/numeric-call-specialization.d.ts +8 -0
- package/dist/ir/numeric-call-specialization.js +198 -0
- package/dist/ir/numeric-call-specialization.js.map +1 -0
- package/dist/ir/runtime-features.js +4 -3
- package/dist/ir/runtime-features.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 +207 -43
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +356 -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/ir-policy.js +2 -0
- package/dist/library/ir-policy.js.map +1 -1
- 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 +24 -11
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +7 -3
- package/dist/native/compiler.test.js.map +1 -1
- package/dist/native/library.d.ts +2 -1
- package/dist/native/library.js.map +1 -1
- package/dist/native/prepare.js +29 -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/dist/native/sanitizer.test.js +1 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +37 -3
|
@@ -2,6 +2,7 @@ import { dynUndefinedExpr, numLit, varRef } from "../../ir/build.js";
|
|
|
2
2
|
import { lowerDynObjectLiteral } from "./expressions/object-literals.js";
|
|
3
3
|
import { importMetaBindingSource } from "./import-meta.js";
|
|
4
4
|
import { iteratorCanStep, iteratorValue } from "./iterator-consumption.js";
|
|
5
|
+
import { isPrivateSplitConsumer } from "./split-consumers.js";
|
|
5
6
|
import { InternalCompilerError } from "../../errors.js";
|
|
6
7
|
/* Statement lowering: the statement dispatch (lowerStmt), variable
|
|
7
8
|
* declarations including destructuring patterns, scoped blocks, control
|
|
@@ -9,7 +10,7 @@ import { InternalCompilerError } from "../../errors.js";
|
|
|
9
10
|
* explicit resource management, and blocked-binding poisoning. */
|
|
10
11
|
import * as ts from "../ts7/adapter.js";
|
|
11
12
|
import { bindingSource } from "../binding-source.js";
|
|
12
|
-
import { arrayValueRead, arrayValueStore, arrayValueType, unionArrayValueRead, } from "./array-values.js";
|
|
13
|
+
import { arrayValueRead, arrayValueStore, arrayValueType, unionArrayValueRead, lowerSafeIndexRead, } from "./array-values.js";
|
|
13
14
|
import { lowerForAwaitGenerator, lowerForOfGenerator, lowerYieldStarStatement, } from "./lower-generators.js";
|
|
14
15
|
import { lowerForAwaitBuiltin } from "./lower-async-iteration.js";
|
|
15
16
|
import { BOOL, BYTES_U8, CAUGHT, DYN, F64, JSVAL, STRING, UNDEFINED_T, VOID, arrayOf, isDynTypedRefType, isUnitType, shapeHasAccessorSlots, typeEquals, } from "../../ir/ir.js";
|
|
@@ -22,7 +23,6 @@ import { isProvenanceSourceFile } from "../provenance-registry.js";
|
|
|
22
23
|
import { ambientUndefVarRootOf, lowerImportEquals, nsUndefRead, nsWritableTarget, trapDeclRootOf, } from "./lower-namespaces.js";
|
|
23
24
|
import { expandoWritableTarget, lowerExpandoAssignStmt } from "./lower-expando.js";
|
|
24
25
|
import { lowerForOfArrayIter, lowerForOfMap, lowerForOfSearchParams, lowerForOfSet, } from "./containers/for-of.js";
|
|
25
|
-
import { lowerSafeIndexRead } from "./containers/array-methods.js";
|
|
26
26
|
import { objectIterOverIndexShape } from "./containers/indexed-objects.js";
|
|
27
27
|
import { strCharsCall } from "./containers/array-construction.js";
|
|
28
28
|
import { bindingContextualGenericFnNodeOf, bindingGenericFnAliasInfoOf, bindingGenericFnInfoOf, bindingGenericFnNodeOf, implicitLocalFnInfoOf, implicitLocalFnNodeOf, implicitMethodCallInfersReturn, } from "./generic-functions.js";
|
|
@@ -36,7 +36,7 @@ import { classStaticDataFor } from "./class-static-data.js";
|
|
|
36
36
|
import { objectFactorySignature } from "./object-factory-new.js";
|
|
37
37
|
import { isClassCallback, lowerClassCallbackAssign } from "./class-callbacks.js";
|
|
38
38
|
import { classForInHasKey, classPropertiesHelper } from "./class-dynamic-dispatch.js";
|
|
39
|
-
import { genericIfaceBindingKeepsClass
|
|
39
|
+
import { genericIfaceBindingKeepsClass } from "./lower-classes.js";
|
|
40
40
|
import { lowerStreamUnderscoreAssign, streamClassAliasDecl } from "./lower-stream.js";
|
|
41
41
|
import { lowerHttpResPropertyAssignment, lowerHttpServerTimeoutAssignment, lowerServerCloseOverrideAssignment, } from "./lower-server.js";
|
|
42
42
|
import { lowerUrlAssignment } from "./builtins/url.js";
|
|
@@ -44,7 +44,7 @@ import { isNativeFfiRequire, builtinMemberRequireDecl, builtinNamespaceDestructu
|
|
|
44
44
|
import { lowerNodeModuleCall } from "./builtins/module-resolution.js";
|
|
45
45
|
import { registerBuiltinCallableAlias } from "./builtins/callable-aliases.js";
|
|
46
46
|
import { lowerEnumDeclaration } from "./lower-enums.js";
|
|
47
|
-
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";
|
|
48
48
|
import { globalSymbolKey } from "./expressions/global-symbols.js";
|
|
49
49
|
import { lowerShortCircuitAssignment } from "./expressions/nullish-assignment.js";
|
|
50
50
|
import { lowerEnvironmentKey, lowerNativeFunctionAssignment } from "./lower-exprs.js";
|
|
@@ -3041,14 +3041,14 @@ function objectRestValue(lowerer, el, srcRef, srcType, shape) {
|
|
|
3041
3041
|
kind: "recordLit",
|
|
3042
3042
|
fields: rem.map((f) => ({
|
|
3043
3043
|
name: f.name,
|
|
3044
|
-
value: {
|
|
3044
|
+
value: lowerer.presenceKeepingCopy(srcRef(), srcType.shapeId, f.name, {
|
|
3045
3045
|
kind: "recordGet",
|
|
3046
3046
|
obj: srcRef(),
|
|
3047
3047
|
shapeId: srcType.shapeId,
|
|
3048
3048
|
field: f.name,
|
|
3049
3049
|
type: f.type,
|
|
3050
3050
|
loc,
|
|
3051
|
-
},
|
|
3051
|
+
}, loc),
|
|
3052
3052
|
})),
|
|
3053
3053
|
type: {
|
|
3054
3054
|
kind: "record",
|
|
@@ -3082,7 +3082,10 @@ function objectRestValue(lowerer, el, srcRef, srcType, shape) {
|
|
|
3082
3082
|
type: srcField.type,
|
|
3083
3083
|
loc,
|
|
3084
3084
|
};
|
|
3085
|
-
return {
|
|
3085
|
+
return {
|
|
3086
|
+
name: f.name,
|
|
3087
|
+
value: lowerer.presenceKeepingCopy(srcRef(), srcType.shapeId, srcField.name, lowerer.coerceInto(el, read, f.type), loc),
|
|
3088
|
+
};
|
|
3086
3089
|
});
|
|
3087
3090
|
return { kind: "recordLit", fields, type: restT, loc };
|
|
3088
3091
|
}
|
|
@@ -3613,10 +3616,14 @@ export function bindPatternTarget(lowerer, name, value, isLet, out, allowDynObje
|
|
|
3613
3616
|
// through later locals, templates, operators, and narrowing instead
|
|
3614
3617
|
// of being extracted with a checked arm read.
|
|
3615
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.
|
|
3616
3621
|
if (!dynStays &&
|
|
3617
3622
|
value.type.kind === "union" &&
|
|
3618
3623
|
lowerer.armTag(value.type.unionId, UNDEFINED_T) >= 0 &&
|
|
3619
|
-
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))))) {
|
|
3620
3627
|
type = value.type;
|
|
3621
3628
|
runtimeOptional = true;
|
|
3622
3629
|
}
|
|
@@ -4019,10 +4026,13 @@ export function lowerVarDecl(lowerer, decl, isLet) {
|
|
|
4019
4026
|
g.type = DYN;
|
|
4020
4027
|
g.type = inferredOptionalRecordType(lowerer, decl, g.type, raw.type);
|
|
4021
4028
|
const arithmetic = raw.type.kind === "union" ? lowerer.unions.get(raw.type.unionId)?.arms : undefined;
|
|
4022
|
-
if (
|
|
4023
|
-
arithmetic
|
|
4024
|
-
|
|
4025
|
-
|
|
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")))) {
|
|
4026
4036
|
g.type = raw.type;
|
|
4027
4037
|
lowerer.runtimeOptionalArithmeticGlobals.add(g);
|
|
4028
4038
|
}
|
|
@@ -4393,9 +4403,13 @@ export function lowerVarDecl(lowerer, decl, isLet) {
|
|
|
4393
4403
|
arms.some((a) => a.kind === "f64") &&
|
|
4394
4404
|
arms.some((a) => a.kind === "string"));
|
|
4395
4405
|
};
|
|
4396
|
-
const runtimeStringArithmetic =
|
|
4397
|
-
(
|
|
4398
|
-
|
|
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);
|
|
4399
4413
|
if (runtimeStringArithmetic) {
|
|
4400
4414
|
settledType = init.type;
|
|
4401
4415
|
}
|
|
@@ -4499,12 +4513,9 @@ export function lowerVarDecl(lowerer, decl, isLet) {
|
|
|
4499
4513
|
settledType = init.type;
|
|
4500
4514
|
}
|
|
4501
4515
|
}
|
|
4502
|
-
//
|
|
4503
|
-
//
|
|
4504
|
-
|
|
4505
|
-
// class the generic-method calls monomorphize against) — see
|
|
4506
|
-
// genericIfaceBindingKeepsClass.
|
|
4507
|
-
if (settledType.kind === "record" &&
|
|
4516
|
+
// An exact class behind a generic interface keeps its native
|
|
4517
|
+
// representation so generic calls can specialize against its body.
|
|
4518
|
+
if ((settledType.kind === "record" || settledType.kind === "dyn") &&
|
|
4508
4519
|
init.type.kind === "object" &&
|
|
4509
4520
|
genericIfaceBindingKeepsClass(lowerer, decl, settledType)) {
|
|
4510
4521
|
settledType = init.type;
|
|
@@ -4530,7 +4541,7 @@ export function lowerVarDecl(lowerer, decl, isLet) {
|
|
|
4530
4541
|
// subtyping (`const p: {a: number} = wider;`) is rejected, not coerced.
|
|
4531
4542
|
init = lowerer.coerceInto(decl.initializer, init, settledType);
|
|
4532
4543
|
const local = lowerer.declareLocal(decl.name, decl.name.text, settledType, isLet);
|
|
4533
|
-
if (runtimeStringArithmetic &&
|
|
4544
|
+
if (runtimeStringArithmetic && init.type.kind === "union") {
|
|
4534
4545
|
lowerer.runtimeOptionalArithmeticLocals.add(lowerer.runtimeOptionalRootOf(local));
|
|
4535
4546
|
}
|
|
4536
4547
|
if (runtimeOptional) {
|
|
@@ -5018,8 +5029,9 @@ function isStrictDelete(node) {
|
|
|
5018
5029
|
}
|
|
5019
5030
|
/** Statement-position `delete`: process.env keys → process.envUnset
|
|
5020
5031
|
* (unsetenv), pure `Record<string, T>` keys → recordKeyDelete (the
|
|
5021
|
-
* overflow Map delete), declared OPTIONAL fields → the
|
|
5022
|
-
*
|
|
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
|
|
5023
5035
|
* fences with the honest reason — a required field is a struct slot no
|
|
5024
5036
|
* runtime can remove. */
|
|
5025
5037
|
function lowerDeleteStatement(lowerer, expr) {
|
|
@@ -5135,14 +5147,13 @@ function lowerDeleteStatement(lowerer, expr) {
|
|
|
5135
5147
|
if (shape?.indexValue && shape.fields.length === 0 && !shape.tuple) {
|
|
5136
5148
|
return { kind: "recordKeyDelete", obj, shapeId: obj.type.shapeId, key: lowerKey(), loc };
|
|
5137
5149
|
}
|
|
5138
|
-
// `delete r.f` of a declared OPTIONAL field (undefined-armed slot)
|
|
5139
|
-
// the
|
|
5140
|
-
// slot,
|
|
5141
|
-
//
|
|
5142
|
-
//
|
|
5143
|
-
// (
|
|
5144
|
-
//
|
|
5145
|
-
// 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.
|
|
5146
5157
|
const fieldName = ts.isPropertyAccessExpression(target)
|
|
5147
5158
|
? target.name.text
|
|
5148
5159
|
: ts.isStringLiteral(target.argumentExpression)
|
|
@@ -5152,7 +5163,7 @@ function lowerDeleteStatement(lowerer, expr) {
|
|
|
5152
5163
|
? shape?.fields.find((f) => f.name === fieldName)
|
|
5153
5164
|
: undefined;
|
|
5154
5165
|
if (field) {
|
|
5155
|
-
const absent = lowerer.
|
|
5166
|
+
const absent = lowerer.absentFieldValue(field.type, loc);
|
|
5156
5167
|
if (absent) {
|
|
5157
5168
|
return {
|
|
5158
5169
|
kind: "recordSet",
|
|
@@ -5966,7 +5977,7 @@ export function lowerExprStatement(lowerer, expr) {
|
|
|
5966
5977
|
}
|
|
5967
5978
|
const unionWrite = lowerUnionFieldWrite(lowerer, expr.left, expr.right);
|
|
5968
5979
|
if (unionWrite)
|
|
5969
|
-
return unionWrite;
|
|
5980
|
+
return { kind: "exprStmt", expr: unionWrite, loc: locOf(expr) };
|
|
5970
5981
|
const target = lowerer.fieldTarget(expr.left);
|
|
5971
5982
|
if (target) {
|
|
5972
5983
|
const value = lowerer.lowerExprExpecting(expr.right, target.fieldType);
|
|
@@ -6164,27 +6175,7 @@ export function lowerExprStatement(lowerer, expr) {
|
|
|
6164
6175
|
};
|
|
6165
6176
|
}
|
|
6166
6177
|
// Statement position only: pre/post distinction is unobservable, so
|
|
6167
|
-
//
|
|
6168
|
-
if (ts.isPropertyAccessExpression(expr.operand) ||
|
|
6169
|
-
(ts.isElementAccessExpression(expr.operand) && symbolFieldInfo(lowerer, expr.operand))) {
|
|
6170
|
-
// `N.x++` — the namespace-qualified spelling of a module-global
|
|
6171
|
-
// increment (the member's global IS the variable); expando
|
|
6172
|
-
// function members (`foo.count++`) are module globals too.
|
|
6173
|
-
if (ts.isPropertyAccessExpression(expr.operand) && !expr.operand.questionDotToken) {
|
|
6174
|
-
const staticTarget = staticFieldWriteTarget(lowerer, expr.operand);
|
|
6175
|
-
if (staticTarget)
|
|
6176
|
-
return lowerIncDecToTarget(lowerer, expr, staticTarget);
|
|
6177
|
-
const exT = expandoWritableTarget(lowerer, expr.operand);
|
|
6178
|
-
if (exT)
|
|
6179
|
-
return lowerIncDecToTarget(lowerer, expr, exT);
|
|
6180
|
-
const nsT = nsWritableTarget(lowerer, expr.operand);
|
|
6181
|
-
if (nsT)
|
|
6182
|
-
return lowerIncDecToTarget(lowerer, expr, nsT);
|
|
6183
|
-
}
|
|
6184
|
-
// `obj.f++` desugars through the compound-field path (`obj.f += 1`);
|
|
6185
|
-
// `this[kLimit]++` is the same desugar over the symbol-keyed slot.
|
|
6186
|
-
return lowerer.lowerFieldCompound(expr.operand, expr.operator === ts.SyntaxKind.PlusPlusToken ? "+" : "-", null, locOf(expr));
|
|
6187
|
-
}
|
|
6178
|
+
// numeric bindings retain the simple `x = x ± 1` loop form.
|
|
6188
6179
|
if (!ts.isIdentifier(expr.operand)) {
|
|
6189
6180
|
lowerer.unsupported("SC1090", expr.operand, "increment/decrement of non-variables");
|
|
6190
6181
|
}
|
|
@@ -6271,22 +6262,17 @@ function lowerIncDecToTarget(lowerer, expr, target) {
|
|
|
6271
6262
|
const loc = locOf(expr);
|
|
6272
6263
|
const op = expr.operator === ts.SyntaxKind.PlusPlusToken ? "+" : "-";
|
|
6273
6264
|
const readTarget = { kind: "varRef", localId: target.id, type: target.type, loc };
|
|
6274
|
-
|
|
6275
|
-
|
|
6276
|
-
const dynTarget = target.type.kind === "dyn" && isJsSourceFile(expr.getSourceFile());
|
|
6277
|
-
if (target.type.kind !== "f64" && !dynTarget) {
|
|
6278
|
-
lowerer.unsupported("SC1090", expr.operand, "increment/decrement of non-number targets");
|
|
6279
|
-
}
|
|
6265
|
+
if (target.type.kind !== "f64")
|
|
6266
|
+
return { kind: "exprStmt", expr: lowerIncDecTarget(lowerer, expr, target, false), loc };
|
|
6280
6267
|
const computed = {
|
|
6281
6268
|
kind: "bin",
|
|
6282
6269
|
op,
|
|
6283
|
-
left:
|
|
6270
|
+
left: readTarget,
|
|
6284
6271
|
right: { kind: "numLit", value: 1, type: F64, loc },
|
|
6285
6272
|
type: F64,
|
|
6286
6273
|
loc,
|
|
6287
6274
|
};
|
|
6288
|
-
|
|
6289
|
-
return { kind: "assign", localId: target.id, value, loc };
|
|
6275
|
+
return { kind: "assign", localId: target.id, value: computed, loc };
|
|
6290
6276
|
}
|
|
6291
6277
|
/** The shared tail of `x op= e` over a resolved variable/global target —
|
|
6292
6278
|
* desugared to `x = x op e` (x read before e, like JS). Serves the bare-
|
|
@@ -7746,7 +7732,8 @@ export function lowerForOf(lowerer, stmt) {
|
|
|
7746
7732
|
}
|
|
7747
7733
|
}
|
|
7748
7734
|
const elementType = iterable.type.kind === "array" ? iterable.type.elem : tupleSource.elem;
|
|
7749
|
-
const
|
|
7735
|
+
const privateSplit = !awaitArray && isPrivateSplitConsumer(lowerer, iterSrc, iterable);
|
|
7736
|
+
const yieldedT = tupleSource === null && !privateSplit ? arrayValueType(lowerer, elementType) : elementType;
|
|
7750
7737
|
let elemValueT = yieldedT;
|
|
7751
7738
|
let awaitPromiseTag = null;
|
|
7752
7739
|
if (awaitArray) {
|
|
@@ -7794,12 +7781,15 @@ export function lowerForOf(lowerer, stmt) {
|
|
|
7794
7781
|
}
|
|
7795
7782
|
// Native arrays retain their payload ABI; the loop binds the value yielded
|
|
7796
7783
|
// by Get, which is undefined for both holes and present undefined slots.
|
|
7797
|
-
const sourceT = iterable.type;
|
|
7798
|
-
const source = lowerer.declareHiddenLocal("%arrayIterator", sourceT);
|
|
7799
|
-
const cursor = lowerer.declareHiddenLocal("%arrayCursor", F64);
|
|
7800
|
-
cursor.mutable = true;
|
|
7801
7784
|
const forValues = (localId, body) => {
|
|
7802
7785
|
const loc = locOf(stmt);
|
|
7786
|
+
if (privateSplit) {
|
|
7787
|
+
return { kind: "forOf", localId, iterable, body, ...(labels && { labels }), loc };
|
|
7788
|
+
}
|
|
7789
|
+
const sourceT = iterable.type;
|
|
7790
|
+
const source = lowerer.declareHiddenLocal("%arrayIterator", sourceT);
|
|
7791
|
+
const cursor = lowerer.declareHiddenLocal("%arrayCursor", F64);
|
|
7792
|
+
cursor.mutable = true;
|
|
7803
7793
|
const needsClose = awaitArray
|
|
7804
7794
|
? lowerer.declareHiddenLocal("%arrayIteratorNeedsClose", BOOL)
|
|
7805
7795
|
: null;
|