@scriptc/compiler 0.4.3 → 0.4.5
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 +270 -72
- package/ambient/scriptc-overrides.d.ts +21 -0
- package/dist/backend/executable-features.js +3 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/library-pack.js +2 -1
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/linker.js +11 -1
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/lld.d.ts +9 -0
- package/dist/backend/lld.js +48 -0
- package/dist/backend/lld.js.map +1 -0
- package/dist/backend/lld.test.d.ts +1 -0
- package/dist/backend/lld.test.js +53 -0
- package/dist/backend/lld.test.js.map +1 -0
- package/dist/backend/llvm/appended-array-literals.d.ts +11 -1
- package/dist/backend/llvm/appended-array-literals.js +29 -0
- package/dist/backend/llvm/appended-array-literals.js.map +1 -1
- package/dist/backend/llvm/blocks.js +10 -1
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.d.ts +13 -4
- package/dist/backend/llvm/bytes-alias.js +16 -5
- package/dist/backend/llvm/bytes-alias.js.map +1 -1
- package/dist/backend/llvm/bytes-bounds.d.ts +5 -1
- package/dist/backend/llvm/bytes-bounds.js +199 -2
- package/dist/backend/llvm/bytes-bounds.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.d.ts +45 -3
- package/dist/backend/llvm/bytes-loop-versions.js +244 -20
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +18 -6
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.d.ts +8 -2
- package/dist/backend/llvm/call-lifetimes.js +87 -18
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +132 -0
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +3 -2
- package/dist/backend/llvm/classes.js +4 -4
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +14 -2
- package/dist/backend/llvm/counted-loops.js +54 -5
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- package/dist/backend/llvm/debug-info.d.ts +42 -1
- package/dist/backend/llvm/debug-info.js +72 -6
- package/dist/backend/llvm/debug-info.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.js +2 -2
- package/dist/backend/llvm/dense-array-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.test.js +1 -0
- package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +69 -8
- package/dist/backend/llvm/dyn.js +396 -49
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +30 -16
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-journal.d.ts +8 -4
- package/dist/backend/llvm/emit-journal.js +75 -5
- package/dist/backend/llvm/emit-journal.js.map +1 -1
- package/dist/backend/llvm/emit-module.d.ts +4 -0
- package/dist/backend/llvm/emit-module.js +74 -29
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-statements.js +297 -28
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +144 -13
- package/dist/backend/llvm/emitter.js +523 -92
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +11 -2
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +11 -13
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +6 -4
- package/dist/backend/llvm/expr-bytes.js +45 -16
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +13 -11
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +11 -0
- package/dist/backend/llvm/expr-containers.js +101 -9
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +3 -0
- package/dist/backend/llvm/expr-control.js +83 -0
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.d.ts +1 -1
- package/dist/backend/llvm/expr-dynamic.js +22 -4
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +121 -14
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +111 -26
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/forked-analysis.d.ts +8 -0
- package/dist/backend/llvm/forked-analysis.js +43 -0
- package/dist/backend/llvm/forked-analysis.js.map +1 -0
- package/dist/backend/llvm/integer-values.d.ts +12 -0
- package/dist/backend/llvm/integer-values.js +69 -5
- package/dist/backend/llvm/integer-values.js.map +1 -1
- package/dist/backend/llvm/integer-views.d.ts +2 -1
- package/dist/backend/llvm/integer-views.js +12 -1
- package/dist/backend/llvm/integer-views.js.map +1 -1
- package/dist/backend/llvm/js-ic.d.ts +4 -0
- package/dist/backend/llvm/js-ic.js +133 -15
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/layouts.d.ts +1 -0
- package/dist/backend/llvm/layouts.js.map +1 -1
- package/dist/backend/llvm/lazy-captures.d.ts +6 -1
- package/dist/backend/llvm/lazy-captures.js +10 -5
- package/dist/backend/llvm/lazy-captures.js.map +1 -1
- package/dist/backend/llvm/lib-abi.d.ts +5 -0
- package/dist/backend/llvm/lib-abi.js +19 -0
- package/dist/backend/llvm/lib-abi.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +249 -33
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.d.ts +10 -0
- package/dist/backend/llvm/lib-filesystem.js +32 -0
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.js +2 -2
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +2 -0
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +48 -1
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +64 -0
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-tls.js +28 -3
- package/dist/backend/llvm/lib-tls.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +2 -1
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/loop-array-borrows.d.ts +4 -1
- package/dist/backend/llvm/loop-array-borrows.js +11 -5
- package/dist/backend/llvm/loop-array-borrows.js.map +1 -1
- package/dist/backend/llvm/map-entry-fusion.d.ts +5 -3
- package/dist/backend/llvm/map-entry-fusion.js +20 -11
- package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
- package/dist/backend/llvm/map-entry-fusion.test.js +14 -6
- package/dist/backend/llvm/map-entry-fusion.test.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.d.ts +16 -6
- package/dist/backend/llvm/map-number-lookup.js +41 -9
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +70 -2
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.d.ts +25 -2
- package/dist/backend/llvm/map-read-lifetimes.js +136 -6
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +8 -3
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.d.ts +5 -0
- package/dist/backend/llvm/nullable-unions.js +29 -2
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.test.js +25 -1
- package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
- package/dist/backend/llvm/publish.js +3 -3
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/record-union-keys.test.d.ts +1 -0
- package/dist/backend/llvm/record-union-keys.test.js +161 -0
- package/dist/backend/llvm/record-union-keys.test.js.map +1 -0
- package/dist/backend/llvm/reference-effects.js +3 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/serialized-ir-emission.test.js +2 -0
- package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +4 -5
- package/dist/backend/llvm/shapes.js +106 -58
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +14 -2
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.d.ts +50 -3
- package/dist/backend/llvm/speculative-integers.js +411 -24
- package/dist/backend/llvm/speculative-integers.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.test.js +103 -1
- package/dist/backend/llvm/speculative-integers.test.js.map +1 -1
- package/dist/backend/llvm/split.d.ts +10 -1
- package/dist/backend/llvm/split.js +243 -59
- package/dist/backend/llvm/split.js.map +1 -1
- package/dist/backend/llvm/split.test.js +92 -13
- package/dist/backend/llvm/split.test.js.map +1 -1
- package/dist/backend/llvm/stack-captures.js +1 -5
- package/dist/backend/llvm/stack-captures.js.map +1 -1
- package/dist/backend/llvm/stack-objects.test.js +3 -2
- package/dist/backend/llvm/stack-objects.test.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-reads.d.ts +13 -0
- package/dist/backend/llvm/string-reads.js +22 -0
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/string-slices.d.ts +36 -2
- package/dist/backend/llvm/string-slices.js +308 -12
- package/dist/backend/llvm/string-slices.js.map +1 -1
- package/dist/backend/llvm/string-slices.test.js +182 -3
- package/dist/backend/llvm/string-slices.test.js.map +1 -1
- package/dist/backend/llvm/string-unit-versions.d.ts +11 -0
- package/dist/backend/llvm/string-unit-versions.js +191 -0
- package/dist/backend/llvm/string-unit-versions.js.map +1 -0
- package/dist/backend/llvm/string-unit-versions.test.d.ts +1 -0
- package/dist/backend/llvm/string-unit-versions.test.js +117 -0
- package/dist/backend/llvm/string-unit-versions.test.js.map +1 -0
- package/dist/backend/llvm/test-boxed-unions.d.ts +5 -2
- package/dist/backend/llvm/test-boxed-unions.js +24 -8
- package/dist/backend/llvm/test-boxed-unions.js.map +1 -1
- package/dist/backend/llvm/union-repr.d.ts +4 -3
- package/dist/backend/llvm/union-repr.js +6 -5
- package/dist/backend/llvm/union-repr.js.map +1 -1
- package/dist/backend/llvm/unwind-abi.d.ts +52 -0
- package/dist/backend/llvm/unwind-abi.js +498 -0
- package/dist/backend/llvm/unwind-abi.js.map +1 -0
- package/dist/backend/llvm/unwind-abi.test.d.ts +1 -0
- package/dist/backend/llvm/unwind-abi.test.js +255 -0
- package/dist/backend/llvm/unwind-abi.test.js.map +1 -0
- package/dist/backend/llvm/walkers.js +13 -0
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/llvm/wrapping-sums.d.ts +14 -10
- package/dist/backend/llvm/wrapping-sums.js +31 -14
- package/dist/backend/llvm/wrapping-sums.js.map +1 -1
- package/dist/backend/loop-polls.d.ts +6 -0
- package/dist/backend/loop-polls.js +24 -0
- package/dist/backend/loop-polls.js.map +1 -1
- package/dist/backend/may-throw.js +8 -8
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +12 -2
- package/dist/backend/native/executable.js +48 -6
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +4 -3
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/program-shards.d.ts +2 -2
- package/dist/backend/native/program-shards.js +2 -2
- package/dist/backend/native/program-shards.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +4 -1
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native/vendor.d.ts +1 -1
- package/dist/backend/native/vendor.js +1 -1
- package/dist/backend/native/vendor.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +5 -3
- package/dist/backend/native-codegen-core.js +13 -6
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +3 -1
- package/dist/backend/native-codegen.js +4 -3
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +6 -4
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +8 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-profile.d.ts +14 -0
- package/dist/backend/native-profile.js +28 -0
- package/dist/backend/native-profile.js.map +1 -1
- package/dist/backend/native-profile.test.js +8 -1
- package/dist/backend/native-profile.test.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +11 -11
- package/dist/backend/native-toolchain.test.js.map +1 -1
- 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 +3 -1
- package/dist/backend/runtime-pack-core.js +2 -0
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.d.ts +17 -5
- package/dist/backend/runtime-pack-native.js +186 -14
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-native.test.js +160 -3
- package/dist/backend/runtime-pack-native.test.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +2 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +2 -1
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/target-cpu.d.ts +26 -0
- package/dist/backend/target-cpu.js +98 -0
- package/dist/backend/target-cpu.js.map +1 -0
- package/dist/backend/target-cpu.test.d.ts +1 -0
- package/dist/backend/target-cpu.test.js +38 -0
- package/dist/backend/target-cpu.test.js.map +1 -0
- package/dist/backend/vendor-archives.d.ts +4 -1
- package/dist/backend/vendor-archives.js +78 -4
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/backend/vendor-inputs.d.ts +3 -1
- package/dist/backend/vendor-inputs.js +3 -1
- package/dist/backend/vendor-inputs.js.map +1 -1
- package/dist/backend/warm-cache.js +1 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/cli/command.js +98 -12
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +25 -1
- package/dist/cli/usage.js +40 -3
- package/dist/cli/usage.js.map +1 -1
- package/dist/compat/fetch-profile.d.ts +15 -6
- package/dist/compat/fetch-profile.js +519 -498
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +14 -0
- package/dist/contracts/int32-elements.js +2 -1
- package/dist/contracts/int32-elements.js.map +1 -1
- package/dist/coverage/report.d.ts +14 -3
- package/dist/coverage/report.js +216 -0
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +25 -25
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/coverage/verdict-cache.d.ts +2 -0
- package/dist/coverage/verdict-cache.js +10 -1
- package/dist/coverage/verdict-cache.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +19 -0
- package/dist/diagnostics/diagnostic.js +53 -2
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +54 -0
- package/dist/diagnostics/envelope.js +7 -1
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/diagnostics/render.d.ts +7 -0
- package/dist/diagnostics/render.js +15 -4
- package/dist/diagnostics/render.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +6 -0
- package/dist/executable/executable-cache.js +5 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +3 -0
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +5 -1
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +26 -2
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/decl-projection.js +105 -10
- package/dist/frontend/decl-projection.js.map +1 -1
- package/dist/frontend/fork-target.js +67 -1
- package/dist/frontend/fork-target.js.map +1 -1
- package/dist/frontend/fork-target.test.js +43 -0
- package/dist/frontend/fork-target.test.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +4 -1
- package/dist/frontend/input-tracker.js +42 -4
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +45 -0
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/lowering/abstract-equality.js +38 -1
- package/dist/frontend/lowering/abstract-equality.js.map +1 -1
- package/dist/frontend/lowering/argument-counts.d.ts +36 -0
- package/dist/frontend/lowering/argument-counts.js +201 -0
- package/dist/frontend/lowering/argument-counts.js.map +1 -0
- package/dist/frontend/lowering/array-values.d.ts +27 -0
- package/dist/frontend/lowering/array-values.js +112 -0
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/binding-analysis.d.ts +3 -0
- package/dist/frontend/lowering/binding-analysis.js +9 -3
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/builtin-namespaces.d.ts +13 -0
- package/dist/frontend/lowering/builtin-namespaces.js +238 -0
- package/dist/frontend/lowering/builtin-namespaces.js.map +1 -0
- package/dist/frontend/lowering/builtins/async-context.d.ts +8 -2
- package/dist/frontend/lowering/builtins/async-context.js +62 -3
- package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
- package/dist/frontend/lowering/builtins/compression.d.ts +4 -3
- package/dist/frontend/lowering/builtins/compression.js +86 -5
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.js +3 -1
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/date-classes.js +17 -1
- package/dist/frontend/lowering/builtins/date-classes.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.d.ts +19 -5
- package/dist/frontend/lowering/builtins/dates.js +163 -9
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +29 -4
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-glob.js +6 -3
- package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-paths.d.ts +43 -5
- package/dist/frontend/lowering/builtins/fs-paths.js +245 -93
- package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-streams.d.ts +4 -0
- package/dist/frontend/lowering/builtins/fs-streams.js +24 -1
- package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.d.ts +4 -1
- package/dist/frontend/lowering/builtins/json.js +9 -3
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-bindings.d.ts +6 -0
- package/dist/frontend/lowering/builtins/module-bindings.js +23 -1
- package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +6 -3
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +5 -0
- package/dist/frontend/lowering/builtins/module-resolution.js +95 -4
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.d.ts +1 -1
- package/dist/frontend/lowering/builtins/promises.js +293 -139
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +5 -1
- package/dist/frontend/lowering/builtins/readline.js +22 -11
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/reflection.d.ts +4 -1
- package/dist/frontend/lowering/builtins/reflection.js +41 -1
- package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.js +31 -2
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/webassembly.js +4 -1
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
- package/dist/frontend/lowering/builtins/x509.d.ts +33 -0
- package/dist/frontend/lowering/builtins/x509.js +431 -0
- package/dist/frontend/lowering/builtins/x509.js.map +1 -0
- package/dist/frontend/lowering/call-arguments.js +44 -0
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +1 -2
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
- package/dist/frontend/lowering/cjs-inline-require.d.ts +32 -0
- package/dist/frontend/lowering/cjs-inline-require.js +308 -5
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
- package/dist/frontend/lowering/class-attributes.d.ts +7 -0
- package/dist/frontend/lowering/class-attributes.js +52 -10
- package/dist/frontend/lowering/class-attributes.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +23 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +288 -9
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.js +97 -26
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-method-values.js +71 -1
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +25 -0
- package/dist/frontend/lowering/class-protocols.js +183 -1
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.d.ts +8 -0
- package/dist/frontend/lowering/class-prototypes.js +83 -2
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-to-primitive.d.ts +5 -0
- package/dist/frontend/lowering/class-to-primitive.js +79 -7
- package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
- package/dist/frontend/lowering/coercions/state.d.ts +1 -0
- package/dist/frontend/lowering/coercions/state.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +89 -10
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.d.ts +4 -2
- package/dist/frontend/lowering/coercions/unions.js +13 -6
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/completion-callbacks.d.ts +4 -0
- package/dist/frontend/lowering/completion-callbacks.js +146 -0
- package/dist/frontend/lowering/completion-callbacks.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +5 -4
- package/dist/frontend/lowering/containers/array-callbacks.js +58 -21
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.d.ts +4 -1
- package/dist/frontend/lowering/containers/array-construction.js +107 -9
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +96 -8
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +346 -77
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +25 -17
- package/dist/frontend/lowering/containers/bytes.js +453 -45
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +11 -1
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +12 -0
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +73 -25
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +4 -4
- package/dist/frontend/lowering/containers/iterator-helpers.js +8 -2
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/replacer-params.d.ts +37 -0
- package/dist/frontend/lowering/containers/replacer-params.js +294 -0
- package/dist/frontend/lowering/containers/replacer-params.js.map +1 -0
- package/dist/frontend/lowering/containers/replacer-params.test.d.ts +1 -0
- package/dist/frontend/lowering/containers/replacer-params.test.js +61 -0
- package/dist/frontend/lowering/containers/replacer-params.test.js.map +1 -0
- package/dist/frontend/lowering/containers/string-and-regexp.js +2 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +7 -3
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.d.ts +4 -2
- package/dist/frontend/lowering/cycle-initialization.js +4 -1
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
- package/dist/frontend/lowering/date-values.d.ts +14 -0
- package/dist/frontend/lowering/date-values.js +254 -0
- package/dist/frontend/lowering/date-values.js.map +1 -0
- package/dist/frontend/lowering/deferred-module-initializers.js +16 -8
- package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.test.js +22 -6
- package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
- package/dist/frontend/lowering/dispatch-sites.js +1 -0
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
- package/dist/frontend/lowering/expressions/array-literals.d.ts +0 -8
- package/dist/frontend/lowering/expressions/array-literals.js +125 -26
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +102 -26
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +129 -6
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +66 -4
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.d.ts +2 -1
- package/dist/frontend/lowering/expressions/narrowing.js +8 -1
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +8 -2
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.js +121 -34
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +76 -11
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +12 -1
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +37 -11
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/f64-handles.d.ts +8 -0
- package/dist/frontend/lowering/f64-handles.js +16 -0
- package/dist/frontend/lowering/f64-handles.js.map +1 -0
- package/dist/frontend/lowering/frozen-records.d.ts +5 -0
- package/dist/frontend/lowering/frozen-records.js +12 -4
- package/dist/frontend/lowering/frozen-records.js.map +1 -1
- package/dist/frontend/lowering/function-context.d.ts +3 -0
- package/dist/frontend/lowering/function-context.js.map +1 -1
- package/dist/frontend/lowering/function-returns.js +30 -0
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.js +17 -6
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/indexed-unions.d.ts +54 -0
- package/dist/frontend/lowering/indexed-unions.js +401 -0
- package/dist/frontend/lowering/indexed-unions.js.map +1 -0
- package/dist/frontend/lowering/instantiation-path.d.ts +3 -2
- package/dist/frontend/lowering/instantiation-path.js.map +1 -1
- package/dist/frontend/lowering/instantiation-path.test.js +6 -4
- package/dist/frontend/lowering/instantiation-path.test.js.map +1 -1
- package/dist/frontend/lowering/iterator-adapters.d.ts +4 -2
- package/dist/frontend/lowering/iterator-adapters.js +26 -33
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/js-collection-types.d.ts +11 -0
- package/dist/frontend/lowering/js-collection-types.js +490 -0
- package/dist/frontend/lowering/js-collection-types.js.map +1 -0
- package/dist/frontend/lowering/key-order-witness.js +210 -32
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +104 -4
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lib-boundary.js +2 -2
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.d.ts +14 -0
- package/dist/frontend/lowering/lower-assert.js +298 -29
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.js +3 -3
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +116 -10
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +59 -7
- package/dist/frontend/lowering/lower-classes.js +668 -222
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-console.js +2 -1
- package/dist/frontend/lowering/lower-console.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +5 -0
- package/dist/frontend/lowering/lower-exprs.js +254 -3
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +7 -0
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +5 -4
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +1 -1
- package/dist/frontend/lowering/lower-inspect.js +299 -57
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +49 -22
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +3 -0
- package/dist/frontend/lowering/lower-namespaces.js +44 -1
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-module.js +1 -1
- package/dist/frontend/lowering/lower-node-module.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +126 -32
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +4 -1
- package/dist/frontend/lowering/lower-stdlib.js +51 -37
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +393 -79
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +515 -121
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +82 -12
- package/dist/frontend/lowering/lowerer.js +317 -44
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +1 -1
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/module-namespace-elements.d.ts +13 -0
- package/dist/frontend/lowering/module-namespace-elements.js +118 -1
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/object-factory-new.d.ts +5 -0
- package/dist/frontend/lowering/object-factory-new.js +20 -6
- package/dist/frontend/lowering/object-factory-new.js.map +1 -1
- package/dist/frontend/lowering/overload-choice.d.ts +33 -0
- package/dist/frontend/lowering/overload-choice.js +190 -0
- package/dist/frontend/lowering/overload-choice.js.map +1 -0
- package/dist/frontend/lowering/private-brands.d.ts +5 -0
- package/dist/frontend/lowering/private-brands.js +39 -0
- package/dist/frontend/lowering/private-brands.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-elements.d.ts +6 -0
- package/dist/frontend/lowering/runtime-optional-elements.js +14 -3
- package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
- package/dist/frontend/lowering/sanitize-class-types.js +2 -0
- package/dist/frontend/lowering/sanitize-class-types.js.map +1 -1
- package/dist/frontend/lowering/site-dependencies.d.ts +7 -2
- package/dist/frontend/lowering/site-dependencies.js +0 -15
- package/dist/frontend/lowering/site-dependencies.js.map +1 -1
- package/dist/frontend/lowering/site-dependencies.test.js +7 -5
- package/dist/frontend/lowering/site-dependencies.test.js.map +1 -1
- package/dist/frontend/lowering/string-index-bounds.d.ts +7 -4
- package/dist/frontend/lowering/string-index-bounds.js +21 -7
- package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +12 -3
- package/dist/frontend/lowering/surfaces.js +1630 -1540
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
- package/dist/frontend/lowering/symbol-fields.js +45 -2
- package/dist/frontend/lowering/symbol-fields.js.map +1 -1
- package/dist/frontend/lowering/union-narrow.d.ts +5 -2
- package/dist/frontend/lowering/union-narrow.js +6 -3
- package/dist/frontend/lowering/union-narrow.js.map +1 -1
- package/dist/frontend/lowering/union-narrow.test.js +10 -0
- package/dist/frontend/lowering/union-narrow.test.js.map +1 -1
- package/dist/frontend/npm-static-namespace-defaults.d.ts +6 -0
- package/dist/frontend/npm-static-namespace-defaults.js +163 -0
- package/dist/frontend/npm-static-namespace-defaults.js.map +1 -0
- package/dist/frontend/npm-static-namespace-defaults.test.d.ts +1 -0
- package/dist/frontend/npm-static-namespace-defaults.test.js +72 -0
- package/dist/frontend/npm-static-namespace-defaults.test.js.map +1 -0
- package/dist/frontend/npm-static-prune.js +152 -111
- package/dist/frontend/npm-static-prune.js.map +1 -1
- package/dist/frontend/npm-static.js +35 -32
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/package-shims.d.ts +7 -4
- package/dist/frontend/package-shims.js +39 -40
- package/dist/frontend/package-shims.js.map +1 -1
- package/dist/frontend/pipeline-native.d.ts +2 -2
- package/dist/frontend/pipeline-native.js +2 -2
- package/dist/frontend/pipeline-native.js.map +1 -1
- package/dist/frontend/pipeline.d.ts +19 -2
- package/dist/frontend/pipeline.js +103 -12
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program-analysis.d.ts +7 -1
- package/dist/frontend/program-analysis.js +8 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +28 -5
- package/dist/frontend/program.js +422 -76
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/resolve.d.ts +2 -0
- package/dist/frontend/resolve.js +5 -0
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/services.d.ts +3 -0
- package/dist/frontend/services.js +31 -4
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/shape-inference/analyze.d.ts +93 -0
- package/dist/frontend/shape-inference/analyze.js +3138 -0
- package/dist/frontend/shape-inference/analyze.js.map +1 -0
- package/dist/frontend/shape-inference/constant-graphs.d.ts +54 -0
- package/dist/frontend/shape-inference/constant-graphs.js +357 -0
- package/dist/frontend/shape-inference/constant-graphs.js.map +1 -0
- package/dist/frontend/shape-inference/domain.d.ts +32 -0
- package/dist/frontend/shape-inference/domain.js +104 -0
- package/dist/frontend/shape-inference/domain.js.map +1 -0
- package/dist/frontend/shape-inference/index.d.ts +7 -0
- package/dist/frontend/shape-inference/index.js +19 -0
- package/dist/frontend/shape-inference/index.js.map +1 -0
- package/dist/frontend/shape-inference/report.d.ts +21 -0
- package/dist/frontend/shape-inference/report.js +348 -0
- package/dist/frontend/shape-inference/report.js.map +1 -0
- package/dist/frontend/token-equivalence.d.ts +6 -0
- package/dist/frontend/token-equivalence.js +66 -9
- package/dist/frontend/token-equivalence.js.map +1 -1
- package/dist/frontend/token-equivalence.test.js +33 -1
- package/dist/frontend/token-equivalence.test.js.map +1 -1
- package/dist/frontend/ts7/checker-features.d.ts +15 -0
- package/dist/frontend/ts7/checker-features.js +45 -0
- package/dist/frontend/ts7/checker-features.js.map +1 -0
- package/dist/frontend/ts7/checker-features.test.d.ts +1 -0
- package/dist/frontend/ts7/checker-features.test.js +40 -0
- package/dist/frontend/ts7/checker-features.test.js.map +1 -0
- package/dist/frontend/ts7/checker-server.d.ts +19 -0
- package/dist/frontend/ts7/checker-server.js +46 -0
- package/dist/frontend/ts7/checker-server.js.map +1 -0
- package/dist/frontend/ts7/checker-server.test.d.ts +1 -0
- package/dist/frontend/ts7/checker-server.test.js +38 -0
- package/dist/frontend/ts7/checker-server.test.js.map +1 -0
- package/dist/frontend/ts7/lib-diagnostics.js +39 -13
- package/dist/frontend/ts7/lib-diagnostics.js.map +1 -1
- package/dist/frontend/ts7/lib-diagnostics.test.js +40 -0
- package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -1
- package/dist/frontend/ts7/native-api.d.ts +1 -0
- package/dist/frontend/ts7/native-api.js +25 -2
- package/dist/frontend/ts7/native-api.js.map +1 -1
- package/dist/frontend/ts7/native-process.d.ts +9 -2
- package/dist/frontend/ts7/native-process.js +22 -4
- package/dist/frontend/ts7/native-process.js.map +1 -1
- package/dist/frontend/ts7/program-host.d.ts +11 -0
- package/dist/frontend/ts7/program-host.js +36 -22
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.d.ts +9 -0
- package/dist/frontend/ts7/semantic-json.js +25 -5
- package/dist/frontend/ts7/semantic-json.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.d.ts +3 -0
- package/dist/frontend/ts7/semantic-model.js +8 -1
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +6 -1
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-types.d.ts +1 -1
- package/dist/frontend/ts7/semantic-types.js +1 -1
- package/dist/frontend/ts7/semantic-types.js.map +1 -1
- package/dist/frontend/ts7/source-parser.js +3 -1
- package/dist/frontend/ts7/source-parser.js.map +1 -1
- package/dist/frontend/tsc-codes.js +10 -0
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +18 -6
- package/dist/frontend/type-mapper.js +205 -44
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +44 -3
- package/dist/index.js +39 -8
- package/dist/index.js.map +1 -1
- package/dist/ir/builtin-effects.js +37 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +7 -2
- package/dist/ir/builtin-signatures.js +5104 -4894
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +4 -2
- package/dist/ir/callback-specialization.js +24 -9
- package/dist/ir/callback-specialization.js.map +1 -1
- package/dist/ir/capture-values.js +4 -2
- package/dist/ir/capture-values.js.map +1 -1
- package/dist/ir/char-unit-locals.d.ts +12 -2
- package/dist/ir/char-unit-locals.js +400 -58
- package/dist/ir/char-unit-locals.js.map +1 -1
- package/dist/ir/char-unit-locals.test.js +111 -0
- package/dist/ir/char-unit-locals.test.js.map +1 -1
- package/dist/ir/constant-globals.js +18 -4
- package/dist/ir/constant-globals.js.map +1 -1
- package/dist/ir/expression-inlining.d.ts +15 -0
- package/dist/ir/expression-inlining.js +166 -0
- package/dist/ir/expression-inlining.js.map +1 -0
- package/dist/ir/expression-inlining.test.d.ts +1 -0
- package/dist/ir/expression-inlining.test.js +123 -0
- package/dist/ir/expression-inlining.test.js.map +1 -0
- package/dist/ir/function-references.js +2 -0
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +6 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/int32-arrays.d.ts +27 -6
- package/dist/ir/int32-arrays.js +106 -18
- package/dist/ir/int32-arrays.js.map +1 -1
- package/dist/ir/int32-slots.d.ts +26 -1
- package/dist/ir/int32-slots.js +291 -5
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +38 -0
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loop-facts.d.ts +5 -0
- package/dist/ir/integer-loop-facts.js +90 -1
- package/dist/ir/integer-loop-facts.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +14 -1
- package/dist/ir/integer-loops.js +107 -11
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +70 -0
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.js +18 -2
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +64 -4
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +63 -11
- package/dist/ir/ir.js +47 -7
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +2 -1
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/js-ic.d.ts +10 -3
- package/dist/ir/js-ic.js +14 -2
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +11 -0
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/node-index.d.ts +7 -0
- package/dist/ir/node-index.js +32 -0
- package/dist/ir/node-index.js.map +1 -1
- package/dist/ir/receiver-readers.d.ts +6 -1
- package/dist/ir/receiver-readers.js +53 -28
- package/dist/ir/receiver-readers.js.map +1 -1
- package/dist/ir/row-pairs.d.ts +15 -0
- package/dist/ir/row-pairs.js +373 -0
- package/dist/ir/row-pairs.js.map +1 -0
- package/dist/ir/row-pairs.test.d.ts +1 -0
- package/dist/ir/row-pairs.test.js +129 -0
- package/dist/ir/row-pairs.test.js.map +1 -0
- package/dist/ir/runtime-features.d.ts +17 -4
- package/dist/ir/runtime-features.js +94 -13
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/scalar-records.d.ts +15 -0
- package/dist/ir/scalar-records.js +301 -1
- package/dist/ir/scalar-records.js.map +1 -1
- package/dist/ir/scalar-records.test.js +181 -1
- package/dist/ir/scalar-records.test.js.map +1 -1
- package/dist/ir/self-captures.js +8 -0
- package/dist/ir/self-captures.js.map +1 -1
- package/dist/ir/validate.js +78 -28
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/fence-eval.js +4 -4
- package/dist/library/fence-eval.js.map +1 -1
- package/dist/library/ir-policy.js +5 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.d.ts +1 -0
- package/dist/library/library-cache.js +1 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +13 -0
- package/dist/library/library-cache.test.js.map +1 -1
- package/dist/native/cache.d.ts +5 -1
- package/dist/native/cache.js +15 -3
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cli.js +6 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.d.ts +3 -0
- package/dist/native/compiler.js +72 -26
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +87 -2
- package/dist/native/compiler.test.js.map +1 -1
- package/dist/native/executable-cache-open.test.d.ts +1 -0
- package/dist/native/executable-cache-open.test.js +80 -0
- package/dist/native/executable-cache-open.test.js.map +1 -0
- package/dist/native/executable-cache.d.ts +43 -3
- package/dist/native/executable-cache.js +177 -36
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/executable-cache.test.js +103 -0
- package/dist/native/executable-cache.test.js.map +1 -1
- package/dist/native/prepare.d.ts +1 -1
- package/dist/native/prepare.js +49 -17
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +69 -3
- package/dist/native/prepare.test.js.map +1 -1
- package/dist/native/sanitizer.d.ts +1 -1
- package/dist/native/sanitizer.js +17 -3
- package/dist/native/sanitizer.js.map +1 -1
- package/dist/native/sanitizer.test.js +4 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/node-islands/classify.d.ts +14 -0
- package/dist/node-islands/classify.js +114 -0
- package/dist/node-islands/classify.js.map +1 -0
- package/dist/node-islands/detect.d.ts +13 -0
- package/dist/node-islands/detect.js +805 -0
- package/dist/node-islands/detect.js.map +1 -0
- package/dist/node-islands/detect.test.d.ts +1 -0
- package/dist/node-islands/detect.test.js +136 -0
- package/dist/node-islands/detect.test.js.map +1 -0
- package/dist/node-islands/origin.d.ts +21 -0
- package/dist/node-islands/origin.js +60 -0
- package/dist/node-islands/origin.js.map +1 -0
- package/dist/node-islands/policy.d.ts +49 -0
- package/dist/node-islands/policy.js +130 -0
- package/dist/node-islands/policy.js.map +1 -0
- package/dist/node-islands/report.d.ts +22 -0
- package/dist/node-islands/report.js +326 -0
- package/dist/node-islands/report.js.map +1 -0
- package/dist/node-islands/report.test.d.ts +1 -0
- package/dist/node-islands/report.test.js +228 -0
- package/dist/node-islands/report.test.js.map +1 -0
- package/dist/node-islands/rules.d.ts +20 -0
- package/dist/node-islands/rules.js +91 -0
- package/dist/node-islands/rules.js.map +1 -0
- package/dist/node-islands/scan.d.ts +53 -0
- package/dist/node-islands/scan.js +104 -0
- package/dist/node-islands/scan.js.map +1 -0
- package/dist/node-islands/summary.d.ts +78 -0
- package/dist/node-islands/summary.js +26 -0
- package/dist/node-islands/summary.js.map +1 -0
- package/dist/project-config.d.ts +50 -0
- package/dist/project-config.js +372 -0
- package/dist/project-config.js.map +1 -0
- package/dist/project-config.test.d.ts +1 -0
- package/dist/project-config.test.js +154 -0
- package/dist/project-config.test.js.map +1 -0
- package/dist/wasm/discover.js +6 -31
- package/dist/wasm/discover.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +21 -38
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { lowerTupleAliasDecl, stripTypeWrappers } from "./typed-arguments.js";
|
|
2
|
+
import { allBytesArms, indexedUnionArms, lowerIndexedUnionMember, lowerIndexedUnionNumberRead, lowerIndexedUnionRead, } from "./indexed-unions.js";
|
|
2
3
|
import { declaredMemberOf, isPromisePrototypeRead } from "./expressions/property-access.js";
|
|
3
4
|
import { hostsAll } from "./expressions/hosted-narrowing.js";
|
|
4
5
|
import { requestGeneralStreamSurface } from "./general-streams.js";
|
|
@@ -23,18 +24,20 @@ import { InternalCompilerError } from "../../errors.js";
|
|
|
23
24
|
* explicit resource management, and blocked-binding poisoning. */
|
|
24
25
|
import * as ts from "../ts7/adapter.js";
|
|
25
26
|
import { lowerOptionalIndex } from "./undefined-index.js";
|
|
27
|
+
import { builtinNamespaceValue } from "./builtin-namespaces.js";
|
|
26
28
|
import { processDataMemberValue, programReadsExitCode } from "./builtins/process.js";
|
|
27
29
|
import { requireInitFlagStmt } from "./require-initialization.js";
|
|
28
30
|
import { isJsonRequireDecl } from "./json-require.js";
|
|
31
|
+
import { isTimeValueDateDeclaration } from "./date-values.js";
|
|
29
32
|
import { bindingSource } from "../binding-source.js";
|
|
30
33
|
import { lowerConstructorReturn } from "./constructor-returns.js";
|
|
31
|
-
import { cjsExportValueByName, cjsNamespaceDestructureOf, cjsTableMethodEntry, inlineProgramRequireOf, requireNestedPatternsOf, } from "./cjs-inline-require.js";
|
|
34
|
+
import { cjsExportValueByName, cjsNamespaceDestructureOf, cjsTableMethodEntry, inlineProgramRequireOf, requireNestedPatternsOf, splitRequireAssignmentOf, splitRequireBindingOf, splitRequireBindingOfIdent, splitRequireEarlyReadOf, wholeExportSymbolOfModule, } from "./cjs-inline-require.js";
|
|
32
35
|
import { cjsExportMemberWriteGlobalOf, isCjsExportsIdentifier, isCjsModuleExports, isFreshExportsReset, } from "./cjs-exports-object.js";
|
|
33
36
|
import { isDeadTscHelperDecl, tscInteropBindingOfDecl } from "./cjs-tsc-interop.js";
|
|
34
37
|
import { arrayValueRead, arrayValueStore, arrayValueType, unionArrayValueRead, lowerSafeIndexRead, } from "./array-values.js";
|
|
35
38
|
import { lowerForAwaitGenerator, lowerForOfGenerator, lowerYieldStarStatement, } from "./lower-generators.js";
|
|
36
39
|
import { classAsyncGeneratorIterator, lowerForAwaitBuiltin } from "./lower-async-iteration.js";
|
|
37
|
-
import { BOOL, BYTES_U8, CAUGHT, DYN, F64, SEARCH_PARAMS_T, STRING, UNDEFINED_T, VOID, arrayOf, isDynTypedRefType, isUnitType, shapeHasAccessorSlots, typeEquals, } from "../../ir/ir.js";
|
|
40
|
+
import { BOOL, BYTES_U8, CAUGHT, DATE_T, DYN, F64, SEARCH_PARAMS_T, STRING, UNDEFINED_T, VOID, arrayOf, isDynTypedRefType, isUnitType, shapeHasAccessorSlots, typeEquals, } from "../../ir/ir.js";
|
|
38
41
|
import { PoisonError, boundIdentifiersOf, dynFallbackType, neverTaintedJsType, staticImportNamespaceType, } from "./lowerer.js";
|
|
39
42
|
import { enforceLibBoundary, lowerSurplusCalls } from "./lib-boundary.js";
|
|
40
43
|
import { cjsExportAssignmentOf, cjsExportChainOf, cjsVoidInitPreambleReals, cjsExportDiscardReason, cjsExportTargetLiteral, isCjsJsFile, isEsModuleStamp, isJsSourceFile, locOf, requireEarlyReference, requireSpecOf, } from "../program.js";
|
|
@@ -50,7 +53,7 @@ import { lowerForOfHelperChain } from "./containers/iterator-helpers.js";
|
|
|
50
53
|
import { objectIterOverIndexShape } from "./containers/indexed-objects.js";
|
|
51
54
|
import { strCharsCall } from "./containers/array-construction.js";
|
|
52
55
|
import { bindingContextualGenericFnNodeOf, bindingGenericFnAliasInfoOf, bindingGenericFnInfoOf, bindingGenericFnNodeOf, genericBindingPresenceStore, genericBindingStoredValue, implicitLocalFnInfoOf, implicitLocalFnNodeOf, implicitMethodCallInfersReturn, genericLocalClassBinding, } from "./generic-functions.js";
|
|
53
|
-
import { bindingNeverReassigned, deadUnmappableBinding, nullishExprUnitOf, nullishGenericBindingUnitOf, } from "./binding-analysis.js";
|
|
56
|
+
import { bindingNeverReassigned, deadUnmappableBinding, fileWritesBinding, nullishExprUnitOf, nullishGenericBindingUnitOf, } from "./binding-analysis.js";
|
|
54
57
|
import { hasExplicitJsDocReturn } from "./function-returns.js";
|
|
55
58
|
import { recordKeysArrayCall } from "./lower-calls.js";
|
|
56
59
|
import { registerOverloadedCallableAlias } from "./call-signatures.js";
|
|
@@ -60,7 +63,7 @@ import { classStaticDataFor } from "./class-static-data.js";
|
|
|
60
63
|
import { objectFactorySignature } from "./object-factory-new.js";
|
|
61
64
|
import { isClassCallback, lowerClassCallbackAssign } from "./class-callbacks.js";
|
|
62
65
|
import { classForInHasKey, classPropertiesHelper } from "./class-dynamic-dispatch.js";
|
|
63
|
-
import { genericIfaceBindingKeepsClass, superConditionLead } from "./lower-classes.js";
|
|
66
|
+
import { genericIfaceBindingKeepsClass, lowerClassStaticRead, staticReceiverClass, superConditionLead, } from "./lower-classes.js";
|
|
64
67
|
import { lowerStreamUnderscoreAssign, streamClassAliasDecl, streamSidesOf, } from "./lower-stream.js";
|
|
65
68
|
import { staticAssertInstanceDecl } from "./assert-instances.js";
|
|
66
69
|
import { lowerHttpResPropertyAssignment, lowerHttpServerTimeoutAssignment, lowerNetServerMaxConnectionsAssignment, lowerServerCloseOverrideAssignment, } from "./lower-server.js";
|
|
@@ -90,6 +93,7 @@ import { constituentTypes } from "../ts7/checker.js";
|
|
|
90
93
|
import { npmStaticPackageOfPath } from "../npm-static.js";
|
|
91
94
|
import { fenceNodeModuleMutation } from "./lower-node-module.js";
|
|
92
95
|
import { fencePerfEntryKeyWalk } from "./builtins/performance.js";
|
|
96
|
+
import { fenceX509KeyWalk } from "./builtins/x509.js";
|
|
93
97
|
import { classGeneratorIterable } from "./class-iterables.js";
|
|
94
98
|
import { iterableUnionOf, lowerForOfIterable } from "./iterable-values.js";
|
|
95
99
|
/** An opted package's directly-returned empty array may take the function's
|
|
@@ -1371,7 +1375,39 @@ const THROWN_AS_DYN = new Set([
|
|
|
1371
1375
|
"bytes",
|
|
1372
1376
|
"func",
|
|
1373
1377
|
"regex",
|
|
1378
|
+
"date",
|
|
1374
1379
|
]);
|
|
1380
|
+
/** A `return` at the top level of a CommonJS module (preflight admits it
|
|
1381
|
+
* there only): it ends the module's evaluation, and its value is
|
|
1382
|
+
* evaluated and discarded, as Node's module wrapper does. Top-level
|
|
1383
|
+
* bindings and export assignments after it would be left uninitialized
|
|
1384
|
+
* where Node leaves them in their temporal dead zone or absent, so a
|
|
1385
|
+
* module with any keeps a refusal. Null for a return inside a function. */
|
|
1386
|
+
function lowerModuleLevelReturn(lowerer, stmt) {
|
|
1387
|
+
let top = stmt;
|
|
1388
|
+
while (top.parent !== undefined && !ts.isSourceFile(top.parent)) {
|
|
1389
|
+
if (ts.isFunctionLike(top.parent) || ts.isClassStaticBlockDeclaration(top.parent))
|
|
1390
|
+
return null;
|
|
1391
|
+
top = top.parent;
|
|
1392
|
+
}
|
|
1393
|
+
const sf = top.parent;
|
|
1394
|
+
if (sf === undefined || !ts.isSourceFile(sf))
|
|
1395
|
+
return null;
|
|
1396
|
+
const stmts = sf.statements.nodes;
|
|
1397
|
+
const later = stmts.slice(stmts.indexOf(top) + 1);
|
|
1398
|
+
if (later.some((s) => ts.isVariableStatement(s) || ts.isClassDeclaration(s) || cjsExportAssignmentOf(s) !== null)) {
|
|
1399
|
+
lowerer.unsupported("SC1090", stmt, "a top-level return in a CommonJS module that declares variables or classes, or assigns exports, after it");
|
|
1400
|
+
}
|
|
1401
|
+
const loc = locOf(stmt);
|
|
1402
|
+
const ret = { kind: "return", value: null, loc };
|
|
1403
|
+
if (!stmt.expression)
|
|
1404
|
+
return ret;
|
|
1405
|
+
return {
|
|
1406
|
+
kind: "block",
|
|
1407
|
+
body: [{ kind: "exprStmt", expr: lowerer.lowerExpr(stmt.expression), loc }, ret],
|
|
1408
|
+
loc,
|
|
1409
|
+
};
|
|
1410
|
+
}
|
|
1375
1411
|
export function lowerStmt(lowerer, stmt) {
|
|
1376
1412
|
if (ownPrototypeResetStatement(lowerer, stmt))
|
|
1377
1413
|
return { kind: "block", body: [], loc: locOf(stmt) };
|
|
@@ -1473,6 +1509,9 @@ export function lowerStmt(lowerer, stmt) {
|
|
|
1473
1509
|
if (ts.isLabeledStatement(stmt))
|
|
1474
1510
|
return lowerLabeled(lowerer, stmt);
|
|
1475
1511
|
if (ts.isReturnStatement(stmt)) {
|
|
1512
|
+
const moduleReturn = lowerModuleLevelReturn(lowerer, stmt);
|
|
1513
|
+
if (moduleReturn)
|
|
1514
|
+
return moduleReturn;
|
|
1476
1515
|
// Implicit-any instance RETURN INFERENCE (function-returns.ts
|
|
1477
1516
|
// resolveInferredReturn): the value lowers BARE and the statement
|
|
1478
1517
|
// records itself — the post-pass settles the instance's return type
|
|
@@ -1558,9 +1597,7 @@ export function lowerStmt(lowerer, stmt) {
|
|
|
1558
1597
|
return { kind: "rethrow", localId: caughtLocal.id, loc: locOf(stmt) };
|
|
1559
1598
|
}
|
|
1560
1599
|
// Exception-representable values move into the runtime's exception
|
|
1561
|
-
// cell. `throw f()` of a void call has no value
|
|
1562
|
-
// storage internally, but cannot preserve its object kind through the
|
|
1563
|
-
// untyped catch boundary. Reject both rather than changing JS identity.
|
|
1600
|
+
// cell. `throw f()` of a void call has no value.
|
|
1564
1601
|
let value = lowerer.lowerExpr(stmt.expression);
|
|
1565
1602
|
if (value.type.kind === "void")
|
|
1566
1603
|
lowerer.badType(stmt.expression, lowerer.typeOf(stmt.expression));
|
|
@@ -1574,15 +1611,12 @@ export function lowerStmt(lowerer, stmt) {
|
|
|
1574
1611
|
value = { kind: "dynFrom", value, liveRef: true, type: DYN, loc: locOf(stmt.expression) };
|
|
1575
1612
|
}
|
|
1576
1613
|
else if (THROWN_AS_DYN.has(value.type.kind) && lowerer.dynConvertible(value.type)) {
|
|
1577
|
-
// Arrays, Maps, Sets, typed arrays, Buffers, functions, regexes
|
|
1578
|
-
// unions over them keep their identity and contents the
|
|
1579
|
-
// the catch binding, `typeof`, `instanceof`,
|
|
1580
|
-
// inspection and typed views read the thrown object.
|
|
1614
|
+
// Arrays, Maps, Sets, typed arrays, Buffers, functions, regexes,
|
|
1615
|
+
// Dates and unions over them keep their identity and contents the
|
|
1616
|
+
// same way: the catch binding, `typeof`, `instanceof`,
|
|
1617
|
+
// `Array.isArray`, inspection and typed views read the thrown object.
|
|
1581
1618
|
value = lowerer.coerceInto(stmt.expression, value, DYN);
|
|
1582
1619
|
}
|
|
1583
|
-
if (value.type.kind === "date") {
|
|
1584
|
-
lowerer.unsupported("SC1090", stmt.expression, "throwing Date values (catch bindings cannot preserve Date's object kind; throw an Error or primitive instead)");
|
|
1585
|
-
}
|
|
1586
1620
|
// A dyn throw rides the REF cell arm (scr_throw_ref over the checked-dynamic tree
|
|
1587
1621
|
// node — identity preserved through catch bindings, caughtToDyn
|
|
1588
1622
|
// passes it back by reference). The JS-lane traced-call shape:
|
|
@@ -1662,6 +1696,19 @@ export function lowerVarStatement(lowerer, stmt) {
|
|
|
1662
1696
|
});
|
|
1663
1697
|
}
|
|
1664
1698
|
function lowerVarDeclarator(lowerer, stmt, decl, isConst, isLet) {
|
|
1699
|
+
// `var m; m = require("./x")`: the declaration is alias plumbing; the
|
|
1700
|
+
// assignment owns the module's run-once %init (cjs-inline-require.ts).
|
|
1701
|
+
// A read that code before the assignment can reach keeps Node's hoisted
|
|
1702
|
+
// `undefined` divergence visible at build time, like a var require
|
|
1703
|
+
// declaration below runnable code.
|
|
1704
|
+
const split = splitRequireBindingOf(lowerer, decl);
|
|
1705
|
+
if (split !== null) {
|
|
1706
|
+
const early = splitRequireEarlyReadOf(lowerer, split);
|
|
1707
|
+
if (early !== null) {
|
|
1708
|
+
lowerer.unsupported("SC1013", early, `var require() binding '${decl.name.text}' below code that can reach it (Node reads undefined before the require runs, which is not modeled — assign the require above the code that can run first)`);
|
|
1709
|
+
}
|
|
1710
|
+
return [];
|
|
1711
|
+
}
|
|
1665
1712
|
// The canonical ESM bridge to a compiled program module. Like a
|
|
1666
1713
|
// top-level CommonJS require declaration, the binding is alias
|
|
1667
1714
|
// plumbing while the dependency evaluates at this statement's
|
|
@@ -2290,7 +2337,7 @@ export function lowerBindingPattern(lowerer, pattern, srcRef, srcType, isLet, ou
|
|
|
2290
2337
|
const itRef = () => ({ kind: "varRef", localId: it.id, type: citPat.iterT, loc });
|
|
2291
2338
|
for (const el of pattern.elements.nodes) {
|
|
2292
2339
|
const stepLoc = locOf(el);
|
|
2293
|
-
const step = lowerer.classIteratorNextCall(citPat, itRef(), stepLoc);
|
|
2340
|
+
const step = lowerer.classIteratorNextCall(citPat, itRef(), null, stepLoc);
|
|
2294
2341
|
if (ts.isOmittedExpression(el) || el.name === undefined) {
|
|
2295
2342
|
out.push({ kind: "exprStmt", expr: step, loc: stepLoc });
|
|
2296
2343
|
continue;
|
|
@@ -2564,6 +2611,16 @@ export function lowerBindingPattern(lowerer, pattern, srcRef, srcType, isLet, ou
|
|
|
2564
2611
|
lowerer.lowerBindingPattern(pattern, () => lowerer.coerceToExpected(srcRef(), DYN), DYN, isLet, out, dynSpell, allowDynObject);
|
|
2565
2612
|
return;
|
|
2566
2613
|
}
|
|
2614
|
+
// A class in a JavaScript file, destructured through its own name
|
|
2615
|
+
// (`const { ANY, parse } = Comparator`): each element is the static
|
|
2616
|
+
// read `Comparator.ANY` — the static getter, field or method as Node
|
|
2617
|
+
// reads it, with the element's default applied when the read answers
|
|
2618
|
+
// undefined. Other class-valued sources keep the refusal below.
|
|
2619
|
+
if (srcType.kind === "classval" &&
|
|
2620
|
+
ts.isObjectBindingPattern(pattern) &&
|
|
2621
|
+
isJsSourceFile(ts.getSourceFileOfNode(pattern)) &&
|
|
2622
|
+
lowerClassValuePattern(lowerer, pattern, isLet, out))
|
|
2623
|
+
return;
|
|
2567
2624
|
if (srcType.kind === "dyn") {
|
|
2568
2625
|
// A runtime computed first key evaluates after RequireObjectCoercible:
|
|
2569
2626
|
// a nullish source throws before the key's side effects run. Later
|
|
@@ -3559,7 +3616,8 @@ function stdlibGlobalTokenDestructure(lowerer, decl, isLet) {
|
|
|
3559
3616
|
value =
|
|
3560
3617
|
canonical === "crypto"
|
|
3561
3618
|
? { kind: "libCall", fn: "webcrypto.object", args: [], type: DYN, loc: locOf(el) }
|
|
3562
|
-
:
|
|
3619
|
+
: (builtinNamespaceValue(lowerer, canonical, locOf(el)) ??
|
|
3620
|
+
builtinGlobalValue(canonical, locOf(el), true));
|
|
3563
3621
|
}
|
|
3564
3622
|
else if (globalName === "console" && !CONSOLE_CALL_MEMBERS.has(propName)) {
|
|
3565
3623
|
token = `[builtin console.${propName}]`;
|
|
@@ -3636,6 +3694,46 @@ function stdlibGlobalTokenDestructure(lowerer, decl, isLet) {
|
|
|
3636
3694
|
}
|
|
3637
3695
|
return out;
|
|
3638
3696
|
}
|
|
3697
|
+
/** `const { ANY, parse } = Comparator` in a JavaScript file, where the
|
|
3698
|
+
* declaration's initializer names the class exactly (staticReceiverClass):
|
|
3699
|
+
* one static read per element, left to right. False, with nothing
|
|
3700
|
+
* emitted, for other sources (a parameter or nested pattern over a class
|
|
3701
|
+
* value), which keep the class-value refusal. */
|
|
3702
|
+
function lowerClassValuePattern(lowerer, pattern, isLet, out) {
|
|
3703
|
+
const decl = pattern.parent;
|
|
3704
|
+
if (!ts.isVariableDeclaration(decl) || decl.initializer === undefined)
|
|
3705
|
+
return false;
|
|
3706
|
+
let receiver = decl.initializer;
|
|
3707
|
+
while (ts.isParenthesizedExpression(receiver))
|
|
3708
|
+
receiver = receiver.expression;
|
|
3709
|
+
const info = staticReceiverClass(lowerer, receiver);
|
|
3710
|
+
if (info === null)
|
|
3711
|
+
return false;
|
|
3712
|
+
for (const el of pattern.elements.nodes) {
|
|
3713
|
+
if (el.name === undefined)
|
|
3714
|
+
continue;
|
|
3715
|
+
if (el.dotDotDotToken)
|
|
3716
|
+
lowerer.unsupported("SC1031", el, "rest bindings over class values (the rest object copies the class's own enumerable statics)");
|
|
3717
|
+
const prop = el.propertyName ?? el.name;
|
|
3718
|
+
const name = ts.isIdentifier(prop) ||
|
|
3719
|
+
ts.isComputedPropertyName(prop) ||
|
|
3720
|
+
ts.isStringLiteralLike(prop) ||
|
|
3721
|
+
ts.isNumericLiteral(prop)
|
|
3722
|
+
? patternKeyNameOf(lowerer, prop)
|
|
3723
|
+
: null;
|
|
3724
|
+
if (name === null)
|
|
3725
|
+
lowerer.unsupported("SC1031", el, "destructuring with computed keys that do not fold to one property name");
|
|
3726
|
+
if (name === "prototype" || name.startsWith("#"))
|
|
3727
|
+
lowerer.unsupported("SC1031", el, `destructuring '${name}' from a class value`);
|
|
3728
|
+
let value = lowerClassStaticRead(lowerer, info, name, receiver, receiver);
|
|
3729
|
+
if (value === null)
|
|
3730
|
+
lowerer.unsupported("SC1031", el, `destructuring the property '${name}' the class '${info.def.jsName ?? info.def.name}' does not declare as a static`);
|
|
3731
|
+
if (el.initializer)
|
|
3732
|
+
value = applyBindingDefault(lowerer, el, value);
|
|
3733
|
+
lowerer.bindPatternTarget(el.name, value, isLet, out);
|
|
3734
|
+
}
|
|
3735
|
+
return true;
|
|
3736
|
+
}
|
|
3639
3737
|
/** `x = dflt` on a pattern position whose source value always EXISTS
|
|
3640
3738
|
* (tuple positions, record fields): JS evaluates the default exactly
|
|
3641
3739
|
* when the value is undefined — the undefined-arm ternary, lazy, so
|
|
@@ -4535,6 +4633,15 @@ export function lowerVarDecl(lowerer, decl, isLet) {
|
|
|
4535
4633
|
if (alias)
|
|
4536
4634
|
return alias;
|
|
4537
4635
|
}
|
|
4636
|
+
// A Date local whose identity no use observes stores its time value.
|
|
4637
|
+
if (isTimeValueDateDeclaration(lowerer, decl)) {
|
|
4638
|
+
const loc = locOf(decl);
|
|
4639
|
+
const date = lowerer.lowerExprExpecting(decl.initializer, DATE_T);
|
|
4640
|
+
const local = lowerer.declareLocal(decl.name, decl.name.text, F64, isLet || lowerer.timeValueDateWrites.has(decl));
|
|
4641
|
+
lowerer.timeValueDateLocals.add(local);
|
|
4642
|
+
const init = { kind: "libCall", fn: "date.getTime", args: [date], type: F64, loc };
|
|
4643
|
+
return { kind: "varDecl", localId: local.id, init, loc };
|
|
4644
|
+
}
|
|
4538
4645
|
// A NULLISH generic binding (`const i: I<A & B> = null as any` — the
|
|
4539
4646
|
// declared type has no mapping, the value is provably null/undefined
|
|
4540
4647
|
// forever): no storage exists; reads know the value (member reads and
|
|
@@ -5833,7 +5940,7 @@ function lowerDynSwitch(lowerer, stmt, disc, labels) {
|
|
|
5833
5940
|
loc: locOf(expression),
|
|
5834
5941
|
};
|
|
5835
5942
|
}
|
|
5836
|
-
if (
|
|
5943
|
+
if (!lowerer.dynConvertible(test.type)) {
|
|
5837
5944
|
lowerer.unsupported("SC1100", expression, "switch case values that cannot compare strictly with 'unknown'");
|
|
5838
5945
|
}
|
|
5839
5946
|
return {
|
|
@@ -6126,6 +6233,63 @@ function lowerDeleteStatement(lowerer, expr) {
|
|
|
6126
6233
|
}
|
|
6127
6234
|
lowerer.unsupported("SC1090", expr, `'delete' on '${lowerer.fmt(obj.type)}' receivers (process.env keys and pure Record<string, T> keys delete)`);
|
|
6128
6235
|
}
|
|
6236
|
+
/** True when the `var`/`let` binding `nameNode` names cannot change after
|
|
6237
|
+
* the top-level CommonJS export statement `exportNode` that exports it by
|
|
6238
|
+
* reference, so importers read the value Node copies at the export: its
|
|
6239
|
+
* module's top level declares it once, with an initializer that runs
|
|
6240
|
+
* before the export, and nothing assigns it. The initializer runs earlier
|
|
6241
|
+
* in the same module, or in a module the exporting module required before
|
|
6242
|
+
* the export (`var hljs = require('./core'); module.exports = hljs;` over
|
|
6243
|
+
* highlight.js's `var highlight = HLJS({}); module.exports = highlight;`). */
|
|
6244
|
+
function unchangedAfterExport(lowerer, nameNode, exportNode) {
|
|
6245
|
+
const topLevelDeclaration = (symbol) => {
|
|
6246
|
+
const decl = symbol.declarations.length === 1 ? symbol.declarations[0] : undefined;
|
|
6247
|
+
return decl !== undefined &&
|
|
6248
|
+
ts.isVariableDeclaration(decl) &&
|
|
6249
|
+
ts.isIdentifier(decl.name) &&
|
|
6250
|
+
decl.initializer !== undefined &&
|
|
6251
|
+
ts.isVariableDeclarationList(decl.parent) &&
|
|
6252
|
+
ts.isVariableStatement(decl.parent.parent) &&
|
|
6253
|
+
ts.isSourceFile(decl.parent.parent.parent)
|
|
6254
|
+
? decl
|
|
6255
|
+
: null;
|
|
6256
|
+
};
|
|
6257
|
+
const exportFile = ts.getSourceFileOfNode(exportNode);
|
|
6258
|
+
let exportStatement = exportNode;
|
|
6259
|
+
for (let parent = exportNode.parent; parent !== undefined && !ts.isSourceFile(parent);) {
|
|
6260
|
+
if (ts.isFunctionLike(parent) || ts.isClassDeclaration(parent) || ts.isClassExpression(parent))
|
|
6261
|
+
return false;
|
|
6262
|
+
exportStatement = parent;
|
|
6263
|
+
parent = parent.parent;
|
|
6264
|
+
}
|
|
6265
|
+
const runsBeforeExport = (decl) => {
|
|
6266
|
+
const statement = decl.parent?.parent;
|
|
6267
|
+
return statement?.parent === exportFile && statement.end <= exportStatement.pos;
|
|
6268
|
+
};
|
|
6269
|
+
const sym = lowerer.resolveValueSymbol(nameNode);
|
|
6270
|
+
const decl = sym ? topLevelDeclaration(sym) : null;
|
|
6271
|
+
if (!sym || !decl || !bindingNeverReassigned(lowerer, sym, decl))
|
|
6272
|
+
return false;
|
|
6273
|
+
if (ts.getSourceFileOfNode(decl) === exportFile)
|
|
6274
|
+
return runsBeforeExport(decl);
|
|
6275
|
+
// A binding of another module: the exporting module's own binding
|
|
6276
|
+
// `nameNode` names holds that module's require, evaluated before the
|
|
6277
|
+
// export, and this file does not assign the binding either.
|
|
6278
|
+
const local = lowerer.checker.getSymbolAtLocation(nameNode);
|
|
6279
|
+
const localDecl = local ? topLevelDeclaration(local) : null;
|
|
6280
|
+
if (!localDecl || !runsBeforeExport(localDecl))
|
|
6281
|
+
return false;
|
|
6282
|
+
let init = localDecl.initializer;
|
|
6283
|
+
while (ts.isParenthesizedExpression(init))
|
|
6284
|
+
init = init.expression;
|
|
6285
|
+
if (!ts.isCallExpression(init) ||
|
|
6286
|
+
!ts.isIdentifier(init.expression) ||
|
|
6287
|
+
init.expression.text !== "require" ||
|
|
6288
|
+
init.arguments.nodes.length !== 1 ||
|
|
6289
|
+
!ts.isStringLiteralLike(init.arguments.nodes[0]))
|
|
6290
|
+
return false;
|
|
6291
|
+
return !fileWritesBinding(sym, exportFile, (ident) => lowerer.resolveValueSymbol(ident));
|
|
6292
|
+
}
|
|
6129
6293
|
/** A top-level CommonJS export statement (see cjsExportAssignmentOf):
|
|
6130
6294
|
* `exports.f = <expr>` and each expression-valued property of
|
|
6131
6295
|
* `module.exports = { ... }` assign their pre-registered export globals
|
|
@@ -6304,7 +6468,7 @@ function lowerCjsExportStatement(lowerer, cjs) {
|
|
|
6304
6468
|
const fenceMutable = (nameNode) => {
|
|
6305
6469
|
const sym = lowerer.resolveValueSymbol(nameNode);
|
|
6306
6470
|
const g = sym ? lowerer.globalsBySymbol.get(sym) : undefined;
|
|
6307
|
-
if (g?.mutable) {
|
|
6471
|
+
if (g?.mutable && !unchangedAfterExport(lowerer, nameNode, cjs.expr)) {
|
|
6308
6472
|
lowerer.unsupported("SC1090", nameNode, `exporting the mutable 'let' binding '${nameNode.text}' by reference (Node copies its VALUE at this statement — declare it const, or export a function that reads it)`);
|
|
6309
6473
|
}
|
|
6310
6474
|
};
|
|
@@ -6411,6 +6575,22 @@ function lowerCjsSingleValueExport(lowerer, expr, loc) {
|
|
|
6411
6575
|
return lowerer.requireInitStmt(req.spec, req.call) ?? { kind: "block", body: [], loc };
|
|
6412
6576
|
}
|
|
6413
6577
|
if (ts.isIdentifier(rhs)) {
|
|
6578
|
+
const split = splitRequireBindingOfIdent(lowerer, rhs);
|
|
6579
|
+
if (split !== null) {
|
|
6580
|
+
if (wholeExportSymbolOfModule(lowerer, split.dep) === null) {
|
|
6581
|
+
lowerer.unsupported("SC1090", rhs, `the exports object of '${split.spec}' as a value (its exports compile to a static table: read require(${JSON.stringify(split.spec)}).member directly)`);
|
|
6582
|
+
}
|
|
6583
|
+
const root = lowerer.globalsByDeclNode.get(expr);
|
|
6584
|
+
if (root !== undefined) {
|
|
6585
|
+
return {
|
|
6586
|
+
kind: "assign",
|
|
6587
|
+
localId: root.id,
|
|
6588
|
+
value: lowerer.lowerExprExpecting(rhs, root.type),
|
|
6589
|
+
loc: locOf(rhs),
|
|
6590
|
+
};
|
|
6591
|
+
}
|
|
6592
|
+
return { kind: "block", body: [], loc };
|
|
6593
|
+
}
|
|
6414
6594
|
const sym = lowerer.resolveValueSymbol(rhs);
|
|
6415
6595
|
if (!sym)
|
|
6416
6596
|
return null;
|
|
@@ -6429,7 +6609,7 @@ function lowerCjsSingleValueExport(lowerer, expr, loc) {
|
|
|
6429
6609
|
}
|
|
6430
6610
|
const g = lowerer.globalsBySymbol.get(sym);
|
|
6431
6611
|
if (g) {
|
|
6432
|
-
if (g.mutable) {
|
|
6612
|
+
if (g.mutable && !unchangedAfterExport(lowerer, rhs, expr)) {
|
|
6433
6613
|
lowerer.unsupported("SC1090", rhs, `exporting the mutable 'let' binding '${rhs.text}' by reference (Node copies its VALUE at this statement — declare it const, or export a function that reads it)`);
|
|
6434
6614
|
}
|
|
6435
6615
|
return { kind: "block", body: [], loc };
|
|
@@ -7213,6 +7393,14 @@ export function lowerExprStatement(lowerer, expr) {
|
|
|
7213
7393
|
if (!ts.isIdentifier(expr.left)) {
|
|
7214
7394
|
lowerer.unsupported("SC1090", expr.left, "assignment to non-variables");
|
|
7215
7395
|
}
|
|
7396
|
+
const splitAssign = splitRequireAssignmentOf(lowerer, expr);
|
|
7397
|
+
if (splitAssign !== null) {
|
|
7398
|
+
return (lowerer.requireInitStmt(splitAssign.spec, splitAssign.call) ?? {
|
|
7399
|
+
kind: "block",
|
|
7400
|
+
body: [],
|
|
7401
|
+
loc: locOf(expr),
|
|
7402
|
+
});
|
|
7403
|
+
}
|
|
7216
7404
|
const target = lowerer.resolveWritable(expr.left);
|
|
7217
7405
|
if (!target)
|
|
7218
7406
|
lowerer.rejectUnresolved(expr.left, `assignment to '${expr.left.text}' (not a writable local or module global)`);
|
|
@@ -7498,7 +7686,9 @@ function destrSpellingOf(rhs) {
|
|
|
7498
7686
|
return base === null ? null : `${base}.${e.name.text}`;
|
|
7499
7687
|
}
|
|
7500
7688
|
// `table[key]` and `list[0]`; V8 prints a numeric key in its canonical
|
|
7501
|
-
// number form (`o[1.50]` reads "o[1.5]")
|
|
7689
|
+
// number form (`o[1.50]` reads "o[1.5]"), and a string key as a property
|
|
7690
|
+
// name with its text decoded (`o["a.b"]` and `o[\`a.b\`]` read "o.a.b").
|
|
7691
|
+
// The message is a C string, so a key holding NUL keeps the refusal.
|
|
7502
7692
|
if (ts.isElementAccessExpression(e) && !e.questionDotToken) {
|
|
7503
7693
|
const base = destrSpellingOf(e.expression);
|
|
7504
7694
|
const key = e.argumentExpression;
|
|
@@ -7508,6 +7698,9 @@ function destrSpellingOf(rhs) {
|
|
|
7508
7698
|
return `${base}[${key.text}]`;
|
|
7509
7699
|
if (ts.isNumericLiteral(key))
|
|
7510
7700
|
return `${base}[${String(Number(key.text))}]`;
|
|
7701
|
+
if ((ts.isStringLiteral(key) || ts.isNoSubstitutionTemplateLiteral(key)) &&
|
|
7702
|
+
!key.text.includes("\0"))
|
|
7703
|
+
return `${base}.${key.text}`;
|
|
7511
7704
|
return null;
|
|
7512
7705
|
}
|
|
7513
7706
|
if (ts.isCallExpression(e) && !e.questionDotToken) {
|
|
@@ -8476,16 +8669,31 @@ export function lowerForOf(lowerer, stmt) {
|
|
|
8476
8669
|
// iterator are awaited as the async-from-sync iterator awaits them, and
|
|
8477
8670
|
// a value that is not iterable throws Node's TypeError.
|
|
8478
8671
|
const headT = lowerer.mapTypeOf(lowerer.typeOf(stmt.expression));
|
|
8479
|
-
|
|
8672
|
+
// A class instance whose [Symbol.asyncIterator]() (or
|
|
8673
|
+
// [Symbol.iterator]()) returns an iterator object takes the same
|
|
8674
|
+
// checked-dynamic protocol over the boxed instance.
|
|
8675
|
+
const headClass = headT?.kind === "object" ? lowerer.classes.get(headT.className) : undefined;
|
|
8676
|
+
const classAsync = headClass !== undefined && lowerer.findMethodOn(headClass, "sym:asyncIterator") !== null;
|
|
8677
|
+
// Without [Symbol.asyncIterator], the loop opens [Symbol.iterator]() and
|
|
8678
|
+
// awaits its values, as the async-from-sync iterator does.
|
|
8679
|
+
const classSync = headClass !== undefined &&
|
|
8680
|
+
!classAsync &&
|
|
8681
|
+
lowerer.findMethodOn(headClass, "sym:iterator") !== null;
|
|
8682
|
+
const classIterable = classAsync || classSync;
|
|
8683
|
+
const syncGenerator = (headT?.kind === "generator" && headT.async !== true) ||
|
|
8684
|
+
classIterable ||
|
|
8685
|
+
isJsSourceFile(stmt.getSourceFile());
|
|
8480
8686
|
if (lowerer.ctx.isAsync && (syncGenerator || isUntypedIterable(lowerer, stmt.expression))) {
|
|
8481
8687
|
const iterable = lowerer.lowerExpr(stmt.expression);
|
|
8482
8688
|
if (iterable.type.kind === "generator" && iterable.type.async)
|
|
8483
8689
|
return lowerForAwaitGenerator(lowerer, stmt, iterable, labels);
|
|
8484
8690
|
if (iterable.type.kind === "dyn")
|
|
8485
8691
|
return lowerForOfDyn(lowerer, stmt, iterable, labels, true);
|
|
8486
|
-
if ((iterable.type.kind === "generator" ||
|
|
8692
|
+
if ((iterable.type.kind === "generator" ||
|
|
8693
|
+
classIterable ||
|
|
8694
|
+
isJsSourceFile(stmt.getSourceFile())) &&
|
|
8487
8695
|
lowerer.dynConvertible(iterable.type))
|
|
8488
|
-
return lowerForOfDyn(lowerer, stmt, lowerer.coerceToExpected(iterable, DYN), labels, true);
|
|
8696
|
+
return lowerForOfDyn(lowerer, stmt, lowerer.coerceToExpected(iterable, DYN), labels, true, classSync && iterable.type.kind === "object");
|
|
8489
8697
|
}
|
|
8490
8698
|
// A NodeJS.ReadableStream iterates as the general Readable.
|
|
8491
8699
|
requestGeneralStreamSurface(lowerer, stmt.expression);
|
|
@@ -8667,7 +8875,7 @@ export function lowerForOf(lowerer, stmt) {
|
|
|
8667
8875
|
loc: locOf(iterSrc),
|
|
8668
8876
|
};
|
|
8669
8877
|
}
|
|
8670
|
-
if (iterable.type.kind === "bytes") {
|
|
8878
|
+
if (iterable.type.kind === "bytes" || indexedUnionArms(lowerer, iterable.type)) {
|
|
8671
8879
|
return lowerForOfBytes(lowerer, stmt, iterable, labels);
|
|
8672
8880
|
}
|
|
8673
8881
|
if (iterable.type.kind !== "array") {
|
|
@@ -8706,15 +8914,21 @@ export function lowerForOf(lowerer, stmt) {
|
|
|
8706
8914
|
return lowerForOfGenerator(lowerer, stmt, generator, labels);
|
|
8707
8915
|
// Class iterables ([Symbol.iterator]() + next() — classIteratorOf)
|
|
8708
8916
|
// drive the same protocol with ordinary method calls.
|
|
8709
|
-
const cit = lowerer.classIteratorOf(iterable.type);
|
|
8917
|
+
const cit = lowerer.classIteratorOf(iterable.type, { records: true, close: true });
|
|
8710
8918
|
if (cit)
|
|
8711
8919
|
return lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels);
|
|
8712
8920
|
// A declared [Symbol.iterator] whose shape classIteratorOf refused
|
|
8713
8921
|
// (an `any`-typed iterator or result, a declared return()/throw()):
|
|
8714
8922
|
// name the protocol, not the class.
|
|
8715
8923
|
const info = lowerer.classes.get(iterable.type.className);
|
|
8924
|
+
// In JavaScript the inferred shape is often a union of result
|
|
8925
|
+
// objects: the loop runs the iterator protocol over the boxed value.
|
|
8926
|
+
if (info &&
|
|
8927
|
+
isJsSourceFile(ts.getSourceFileOfNode(stmt)) &&
|
|
8928
|
+
lowerer.findMethodOn(info, "sym:iterator"))
|
|
8929
|
+
return lowerForOfDyn(lowerer, stmt, lowerer.coerceInto(stmt.expression, iterable, DYN), labels);
|
|
8716
8930
|
if (info && lowerer.findMethodOn(info, "sym:iterator")) {
|
|
8717
|
-
lowerer.unsupported("SC1090", stmt.expression, `for-of over this [Symbol.iterator] shape (the method must take no parameters and return an object whose zero-parameter next() returns a { value, done? } record with a boolean done
|
|
8931
|
+
lowerer.unsupported("SC1090", stmt.expression, `for-of over this [Symbol.iterator] shape (the method must take no parameters and return an object whose zero-parameter next() returns a { value, done? } record with a boolean done, and whose return(), if any, takes no parameters and returns an object)`);
|
|
8718
8932
|
}
|
|
8719
8933
|
}
|
|
8720
8934
|
if (iterable.type.kind === "record" && lowerer.shapes.get(iterable.type.shapeId)?.tuple) {
|
|
@@ -9242,40 +9456,53 @@ function lowerForOfStoredNumericIterator(lowerer, stmt, state, labels) {
|
|
|
9242
9456
|
lowerer.unsupported("SC1031", decl.name);
|
|
9243
9457
|
const loc = locOf(stmt);
|
|
9244
9458
|
const sourceT = state.sourceType;
|
|
9245
|
-
|
|
9459
|
+
// A union of typed arrays and number arrays (indexed-unions.ts) reads
|
|
9460
|
+
// through its arms' own length and element reads.
|
|
9461
|
+
const unionArms = indexedUnionArms(lowerer, sourceT);
|
|
9462
|
+
if (!((sourceT.kind === "array" && sourceT.elem.kind === "f64") ||
|
|
9463
|
+
sourceT.kind === "bytes" ||
|
|
9464
|
+
unionArms)) {
|
|
9246
9465
|
throw new InternalCompilerError("internal: retained numeric iterator has a non-numeric source");
|
|
9247
9466
|
}
|
|
9248
9467
|
const indexRef = () => varRef(state.indexLocalId, F64, loc);
|
|
9249
9468
|
const doneRef = () => varRef(state.doneLocalId, BOOL, loc);
|
|
9250
9469
|
const sourceRef = () => varRef(state.sourceLocalId, sourceT, loc);
|
|
9251
|
-
const sourceLength = () =>
|
|
9252
|
-
?
|
|
9253
|
-
|
|
9254
|
-
|
|
9255
|
-
|
|
9256
|
-
|
|
9257
|
-
|
|
9258
|
-
|
|
9259
|
-
|
|
9260
|
-
|
|
9261
|
-
|
|
9262
|
-
|
|
9263
|
-
|
|
9264
|
-
|
|
9265
|
-
|
|
9266
|
-
|
|
9267
|
-
|
|
9268
|
-
|
|
9269
|
-
|
|
9270
|
-
|
|
9271
|
-
|
|
9272
|
-
|
|
9273
|
-
|
|
9274
|
-
|
|
9275
|
-
|
|
9276
|
-
|
|
9277
|
-
|
|
9278
|
-
|
|
9470
|
+
const sourceLength = () => unionArms
|
|
9471
|
+
? lowerIndexedUnionMember(lowerer, sourceRef(), unionArms, "length", loc)
|
|
9472
|
+
: sourceT.kind === "array"
|
|
9473
|
+
? {
|
|
9474
|
+
kind: "arrIntrinsic",
|
|
9475
|
+
method: "length",
|
|
9476
|
+
receiver: sourceRef(),
|
|
9477
|
+
args: [],
|
|
9478
|
+
type: F64,
|
|
9479
|
+
loc,
|
|
9480
|
+
}
|
|
9481
|
+
: {
|
|
9482
|
+
kind: "bytesIntrinsic",
|
|
9483
|
+
method: "length",
|
|
9484
|
+
receiver: sourceRef(),
|
|
9485
|
+
args: [],
|
|
9486
|
+
type: F64,
|
|
9487
|
+
loc,
|
|
9488
|
+
};
|
|
9489
|
+
const valueT = sourceT.kind === "array" || (unionArms && !allBytesArms(unionArms))
|
|
9490
|
+
? arrayValueType(lowerer, F64)
|
|
9491
|
+
: F64;
|
|
9492
|
+
const sourceValue = () => unionArms
|
|
9493
|
+
? allBytesArms(unionArms)
|
|
9494
|
+
? lowerIndexedUnionNumberRead(lowerer, sourceRef(), unionArms, indexRef(), loc)
|
|
9495
|
+
: lowerIndexedUnionRead(lowerer, sourceRef(), unionArms, indexRef(), loc)
|
|
9496
|
+
: sourceT.kind === "array"
|
|
9497
|
+
? arrayValueRead(lowerer, sourceRef(), indexRef(), F64, loc)
|
|
9498
|
+
: {
|
|
9499
|
+
kind: "bytesIntrinsic",
|
|
9500
|
+
method: "get",
|
|
9501
|
+
receiver: sourceRef(),
|
|
9502
|
+
args: [indexRef()],
|
|
9503
|
+
type: F64,
|
|
9504
|
+
loc,
|
|
9505
|
+
};
|
|
9279
9506
|
const one = { kind: "numLit", value: 1, type: F64, loc };
|
|
9280
9507
|
lowerer.scopes.push(new Map());
|
|
9281
9508
|
try {
|
|
@@ -9535,11 +9762,13 @@ function lowerForOfMatchAll(lowerer, stmt, call, stored) {
|
|
|
9535
9762
|
* } }
|
|
9536
9763
|
*
|
|
9537
9764
|
* A result record with NO done field never terminates — exactly JS
|
|
9538
|
-
* (undefined is falsy forever; Node loops forever too).
|
|
9539
|
-
*
|
|
9540
|
-
*
|
|
9541
|
-
*
|
|
9542
|
-
*
|
|
9765
|
+
* (undefined is falsy forever; Node loops forever too). An iterator with
|
|
9766
|
+
* return() is closed when the loop leaves after a value arrived (break,
|
|
9767
|
+
* return, or a throw from the body), as IteratorClose does: a done flag
|
|
9768
|
+
* set around each step guards the call in a finally, and after a throw
|
|
9769
|
+
* from the body an error from return() is dropped. A throw from next()
|
|
9770
|
+
* does not close. `done: true` results bind nothing (the loop breaks
|
|
9771
|
+
* before the value read), matching JS's ignore-the-final-value rule. */
|
|
9543
9772
|
function lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels) {
|
|
9544
9773
|
let exprTarget = null;
|
|
9545
9774
|
let exprTargetNode = null;
|
|
@@ -9573,7 +9802,22 @@ function lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels) {
|
|
|
9573
9802
|
const r = lowerer.declareHiddenLocal("%cir", cit.resultT);
|
|
9574
9803
|
const recvRef = { kind: "varRef", localId: recv.id, type: iterable.type, loc };
|
|
9575
9804
|
const itRef = () => ({ kind: "varRef", localId: it.id, type: cit.iterT, loc });
|
|
9805
|
+
const nextRead = lowerer.classIteratorNextRead(cit, itRef(), loc);
|
|
9806
|
+
const next = nextRead ? lowerer.declareHiddenLocal("%cin", nextRead.type) : null;
|
|
9576
9807
|
const rRef = () => ({ kind: "varRef", localId: r.id, type: cit.resultT, loc });
|
|
9808
|
+
const done = cit.hasReturn ? lowerer.declareHiddenLocal("%cid", BOOL) : null;
|
|
9809
|
+
if (done)
|
|
9810
|
+
done.mutable = true;
|
|
9811
|
+
const setDone = (value) => done
|
|
9812
|
+
? [
|
|
9813
|
+
{
|
|
9814
|
+
kind: "assign",
|
|
9815
|
+
localId: done.id,
|
|
9816
|
+
value: { kind: "boolLit", value, type: BOOL, loc },
|
|
9817
|
+
loc,
|
|
9818
|
+
},
|
|
9819
|
+
]
|
|
9820
|
+
: [];
|
|
9577
9821
|
const varTarget = exprTarget ?? (decl ? forOfVarTarget(lowerer, decl) : null);
|
|
9578
9822
|
const x = varTarget
|
|
9579
9823
|
? lowerer.declareHiddenLocal("%vof", cit.valueT)
|
|
@@ -9581,10 +9825,11 @@ function lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels) {
|
|
|
9581
9825
|
const xRef = { kind: "varRef", localId: x.id, type: cit.valueT, loc };
|
|
9582
9826
|
const blame = decl?.name ?? exprTargetNode ?? stmt.initializer;
|
|
9583
9827
|
const head = [
|
|
9828
|
+
...setDone(true),
|
|
9584
9829
|
{
|
|
9585
9830
|
kind: "varDecl",
|
|
9586
9831
|
localId: r.id,
|
|
9587
|
-
init: lowerer.classIteratorNextCall(cit, itRef(), loc),
|
|
9832
|
+
init: lowerer.classIteratorNextCall(cit, itRef(), next ? varRef(next.id, next.type, loc) : null, loc),
|
|
9588
9833
|
loc,
|
|
9589
9834
|
},
|
|
9590
9835
|
...(cit.hasDone
|
|
@@ -9628,8 +9873,16 @@ function lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels) {
|
|
|
9628
9873
|
},
|
|
9629
9874
|
]
|
|
9630
9875
|
: []),
|
|
9876
|
+
...setDone(false),
|
|
9631
9877
|
];
|
|
9632
9878
|
const body = lowerer.inCtl("loop", () => lowerer.lowerScopedBlock(stmt.statement), labels);
|
|
9879
|
+
const loop = {
|
|
9880
|
+
kind: "while",
|
|
9881
|
+
cond: { kind: "boolLit", value: true, type: BOOL, loc },
|
|
9882
|
+
body: [...head, ...body],
|
|
9883
|
+
...(labels && { labels }),
|
|
9884
|
+
loc,
|
|
9885
|
+
};
|
|
9633
9886
|
return {
|
|
9634
9887
|
kind: "block",
|
|
9635
9888
|
body: [
|
|
@@ -9640,13 +9893,48 @@ function lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels) {
|
|
|
9640
9893
|
init: lowerer.classIteratorOpenCall(cit, recvRef, loc),
|
|
9641
9894
|
loc,
|
|
9642
9895
|
},
|
|
9643
|
-
|
|
9644
|
-
kind: "
|
|
9645
|
-
|
|
9646
|
-
|
|
9647
|
-
|
|
9648
|
-
|
|
9649
|
-
|
|
9896
|
+
...(next && nextRead
|
|
9897
|
+
? [{ kind: "varDecl", localId: next.id, init: nextRead, loc }]
|
|
9898
|
+
: []),
|
|
9899
|
+
...(done
|
|
9900
|
+
? [
|
|
9901
|
+
{
|
|
9902
|
+
kind: "varDecl",
|
|
9903
|
+
localId: done.id,
|
|
9904
|
+
init: { kind: "boolLit", value: true, type: BOOL, loc },
|
|
9905
|
+
loc,
|
|
9906
|
+
},
|
|
9907
|
+
{
|
|
9908
|
+
kind: "tryCatch",
|
|
9909
|
+
tryBody: [loop],
|
|
9910
|
+
catchBody: null,
|
|
9911
|
+
catchLocalId: null,
|
|
9912
|
+
dropFinallyErrors: true,
|
|
9913
|
+
finallyBody: [
|
|
9914
|
+
{
|
|
9915
|
+
kind: "if",
|
|
9916
|
+
cond: {
|
|
9917
|
+
kind: "unary",
|
|
9918
|
+
op: "!",
|
|
9919
|
+
operand: { kind: "varRef", localId: done.id, type: BOOL, loc },
|
|
9920
|
+
type: BOOL,
|
|
9921
|
+
loc,
|
|
9922
|
+
},
|
|
9923
|
+
then: [
|
|
9924
|
+
{
|
|
9925
|
+
kind: "exprStmt",
|
|
9926
|
+
expr: lowerer.classIteratorReturnCall(cit, itRef(), loc),
|
|
9927
|
+
loc,
|
|
9928
|
+
},
|
|
9929
|
+
],
|
|
9930
|
+
else_: null,
|
|
9931
|
+
loc,
|
|
9932
|
+
},
|
|
9933
|
+
],
|
|
9934
|
+
loc,
|
|
9935
|
+
},
|
|
9936
|
+
]
|
|
9937
|
+
: [loop]),
|
|
9650
9938
|
],
|
|
9651
9939
|
loc,
|
|
9652
9940
|
};
|
|
@@ -9658,7 +9946,7 @@ function lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels) {
|
|
|
9658
9946
|
/** A checked IteratorRecord stays live throughout the loop. Cache next once,
|
|
9659
9947
|
* read done before value, and close only after a yielded value has arrived.
|
|
9660
9948
|
* Abrupt body throws retain precedence over errors raised by return(). */
|
|
9661
|
-
function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false) {
|
|
9949
|
+
function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false, syncOpen = false) {
|
|
9662
9950
|
const loc = locOf(stmt);
|
|
9663
9951
|
const spell = notIterableSpelling(stmt.expression, asyncLoop ? "async iterable" : "iterable");
|
|
9664
9952
|
const iterator = lowerer.declareHiddenLocal("%dofIterator", DYN);
|
|
@@ -9668,6 +9956,7 @@ function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false) {
|
|
|
9668
9956
|
done.mutable = true;
|
|
9669
9957
|
const value = lowerer.declareHiddenLocal("%dofValue", DYN);
|
|
9670
9958
|
const returned = lowerer.declareHiddenLocal("%dofReturn", DYN);
|
|
9959
|
+
const closed = lowerer.declareHiddenLocal("%dofClosed", DYN);
|
|
9671
9960
|
const needsClose = lowerer.declareHiddenLocal("%dofNeedsClose", BOOL);
|
|
9672
9961
|
needsClose.mutable = true;
|
|
9673
9962
|
const error = lowerer.declareHiddenLocal("%dofError", CAUGHT);
|
|
@@ -9732,9 +10021,10 @@ function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false) {
|
|
|
9732
10021
|
},
|
|
9733
10022
|
then: [
|
|
9734
10023
|
{
|
|
9735
|
-
kind: "
|
|
10024
|
+
kind: "varDecl",
|
|
10025
|
+
localId: closed.id,
|
|
9736
10026
|
// return()'s (awaited) result must be an object, as for next().
|
|
9737
|
-
|
|
10027
|
+
init: asyncLoop
|
|
9738
10028
|
? check(awaitDyn({
|
|
9739
10029
|
kind: "dynCall",
|
|
9740
10030
|
callee: varRef(returned.id, DYN, loc),
|
|
@@ -9747,6 +10037,27 @@ function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false) {
|
|
|
9747
10037
|
: call(varRef(returned.id, DYN, loc)),
|
|
9748
10038
|
loc,
|
|
9749
10039
|
},
|
|
10040
|
+
// A synchronous iterator's return() result is read as the
|
|
10041
|
+
// async-from-sync iterator reads it: done, then the value, which is
|
|
10042
|
+
// awaited, so a rejected promise there rejects the loop.
|
|
10043
|
+
...(syncIterator
|
|
10044
|
+
? [
|
|
10045
|
+
{
|
|
10046
|
+
kind: "if",
|
|
10047
|
+
cond: varRef(syncIterator.id, BOOL, loc),
|
|
10048
|
+
then: [
|
|
10049
|
+
{ kind: "exprStmt", expr: get(varRef(closed.id, DYN, loc), "done"), loc },
|
|
10050
|
+
{
|
|
10051
|
+
kind: "exprStmt",
|
|
10052
|
+
expr: awaitDyn(get(varRef(closed.id, DYN, loc), "value")),
|
|
10053
|
+
loc,
|
|
10054
|
+
},
|
|
10055
|
+
],
|
|
10056
|
+
else_: null,
|
|
10057
|
+
loc,
|
|
10058
|
+
},
|
|
10059
|
+
]
|
|
10060
|
+
: []),
|
|
9750
10061
|
],
|
|
9751
10062
|
else_: null,
|
|
9752
10063
|
loc,
|
|
@@ -9855,7 +10166,7 @@ function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false) {
|
|
|
9855
10166
|
localId: iterator.id,
|
|
9856
10167
|
init: check({
|
|
9857
10168
|
kind: "libCall",
|
|
9858
|
-
fn: asyncLoop ? "dyn.asyncIteratorOpen" : "dyn.iterator",
|
|
10169
|
+
fn: asyncLoop && !syncOpen ? "dyn.asyncIteratorOpen" : "dyn.iterator",
|
|
9859
10170
|
args: [iterable, { kind: "strLit", value: spell, type: STRING, loc }],
|
|
9860
10171
|
type: DYN,
|
|
9861
10172
|
loc,
|
|
@@ -9867,13 +10178,15 @@ function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false) {
|
|
|
9867
10178
|
{
|
|
9868
10179
|
kind: "varDecl",
|
|
9869
10180
|
localId: syncIterator.id,
|
|
9870
|
-
init:
|
|
9871
|
-
kind: "
|
|
9872
|
-
|
|
9873
|
-
|
|
9874
|
-
|
|
9875
|
-
|
|
9876
|
-
|
|
10181
|
+
init: syncOpen
|
|
10182
|
+
? { kind: "boolLit", value: true, type: BOOL, loc }
|
|
10183
|
+
: {
|
|
10184
|
+
kind: "libCall",
|
|
10185
|
+
fn: "dyn.asyncIteratorWasSync",
|
|
10186
|
+
args: [],
|
|
10187
|
+
type: BOOL,
|
|
10188
|
+
loc,
|
|
10189
|
+
},
|
|
9877
10190
|
loc,
|
|
9878
10191
|
},
|
|
9879
10192
|
]
|
|
@@ -10275,6 +10588,7 @@ function lowerForIn(lowerer, stmt) {
|
|
|
10275
10588
|
// them (accessor slots live outside declaredOrder), so the loop
|
|
10276
10589
|
// fences rather than skip keys.
|
|
10277
10590
|
fencePerfEntryKeyWalk(lowerer, receiver.type, stmt.expression, "for-in");
|
|
10591
|
+
fenceX509KeyWalk(lowerer, receiver.type, stmt.expression, "for-in");
|
|
10278
10592
|
if (shapeHasAccessorSlots(rShape)) {
|
|
10279
10593
|
lowerer.unsupported("SC1090", stmt.expression, "for-in over a shape carrying get/set accessor properties (Node visits the accessor names — the static key walk cannot; read the properties explicitly)");
|
|
10280
10594
|
}
|