@scriptc/compiler 0.4.4 → 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 +198 -44
- 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 +238 -20
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +11 -4
- 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 +70 -1
- 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 +65 -8
- package/dist/backend/llvm/dyn.js +375 -40
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +28 -8
- 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 +58 -23
- 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 +134 -13
- package/dist/backend/llvm/emitter.js +514 -87
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +6 -4
- package/dist/backend/llvm/expr-bytes.js +31 -8
- 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 +87 -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 +107 -9
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +95 -22
- 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 +7 -0
- package/dist/backend/llvm/integer-values.js +42 -2
- 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 +128 -42
- 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 +11 -0
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +43 -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/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/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 +104 -51
- 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-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/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/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.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-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/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 +78 -11
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +22 -1
- package/dist/cli/usage.js +33 -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 +7 -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 +52 -1
- 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 +3 -0
- package/dist/executable/executable-cache.js +1 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +1 -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/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/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/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 +159 -8
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +26 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.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-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.js +144 -1
- 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 -1
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/cjs-inline-require.js +1 -1
- 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 +13 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +174 -9
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.js +43 -8
- 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-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/containers/array-callbacks.js +51 -15
- 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 +102 -9
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +85 -5
- 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/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 +9 -6
- package/dist/frontend/lowering/date-values.js +63 -16
- package/dist/frontend/lowering/date-values.js.map +1 -1
- 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 +119 -26
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +38 -0
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +50 -6
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +35 -3
- 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 +65 -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 +6 -1
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +20 -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 +15 -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/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/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 +283 -26
- 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 +97 -7
- 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 +647 -176
- 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 +52 -5
- 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 +4 -3
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +264 -46
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +28 -17
- 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 +294 -46
- 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 +52 -10
- package/dist/frontend/lowering/lowerer.js +249 -37
- 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/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 +1576 -1539
- 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 +102 -11
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program-analysis.d.ts +2 -0
- package/dist/frontend/program-analysis.js +3 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +15 -0
- package/dist/frontend/program.js +227 -64
- 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.js +3 -1
- package/dist/frontend/ts7/semantic-model.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 +160 -28
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +44 -3
- package/dist/index.js +27 -8
- package/dist/index.js.map +1 -1
- package/dist/ir/builtin-effects.js +29 -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 -4950
- 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 +284 -5
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +5 -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 +93 -7
- 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 +50 -8
- package/dist/ir/ir.js +38 -12
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/js-ic.d.ts +25 -5
- package/dist/ir/js-ic.js +93 -13
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +153 -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 +69 -12
- 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 +37 -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 +4 -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.js +38 -16
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +51 -1
- 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 +20 -35
|
@@ -24,6 +24,7 @@ import { InternalCompilerError } from "../../errors.js";
|
|
|
24
24
|
* explicit resource management, and blocked-binding poisoning. */
|
|
25
25
|
import * as ts from "../ts7/adapter.js";
|
|
26
26
|
import { lowerOptionalIndex } from "./undefined-index.js";
|
|
27
|
+
import { builtinNamespaceValue } from "./builtin-namespaces.js";
|
|
27
28
|
import { processDataMemberValue, programReadsExitCode } from "./builtins/process.js";
|
|
28
29
|
import { requireInitFlagStmt } from "./require-initialization.js";
|
|
29
30
|
import { isJsonRequireDecl } from "./json-require.js";
|
|
@@ -52,7 +53,7 @@ import { lowerForOfHelperChain } from "./containers/iterator-helpers.js";
|
|
|
52
53
|
import { objectIterOverIndexShape } from "./containers/indexed-objects.js";
|
|
53
54
|
import { strCharsCall } from "./containers/array-construction.js";
|
|
54
55
|
import { bindingContextualGenericFnNodeOf, bindingGenericFnAliasInfoOf, bindingGenericFnInfoOf, bindingGenericFnNodeOf, genericBindingPresenceStore, genericBindingStoredValue, implicitLocalFnInfoOf, implicitLocalFnNodeOf, implicitMethodCallInfersReturn, genericLocalClassBinding, } from "./generic-functions.js";
|
|
55
|
-
import { bindingNeverReassigned, deadUnmappableBinding, nullishExprUnitOf, nullishGenericBindingUnitOf, } from "./binding-analysis.js";
|
|
56
|
+
import { bindingNeverReassigned, deadUnmappableBinding, fileWritesBinding, nullishExprUnitOf, nullishGenericBindingUnitOf, } from "./binding-analysis.js";
|
|
56
57
|
import { hasExplicitJsDocReturn } from "./function-returns.js";
|
|
57
58
|
import { recordKeysArrayCall } from "./lower-calls.js";
|
|
58
59
|
import { registerOverloadedCallableAlias } from "./call-signatures.js";
|
|
@@ -62,7 +63,7 @@ import { classStaticDataFor } from "./class-static-data.js";
|
|
|
62
63
|
import { objectFactorySignature } from "./object-factory-new.js";
|
|
63
64
|
import { isClassCallback, lowerClassCallbackAssign } from "./class-callbacks.js";
|
|
64
65
|
import { classForInHasKey, classPropertiesHelper } from "./class-dynamic-dispatch.js";
|
|
65
|
-
import { genericIfaceBindingKeepsClass, superConditionLead } from "./lower-classes.js";
|
|
66
|
+
import { genericIfaceBindingKeepsClass, lowerClassStaticRead, staticReceiverClass, superConditionLead, } from "./lower-classes.js";
|
|
66
67
|
import { lowerStreamUnderscoreAssign, streamClassAliasDecl, streamSidesOf, } from "./lower-stream.js";
|
|
67
68
|
import { staticAssertInstanceDecl } from "./assert-instances.js";
|
|
68
69
|
import { lowerHttpResPropertyAssignment, lowerHttpServerTimeoutAssignment, lowerNetServerMaxConnectionsAssignment, lowerServerCloseOverrideAssignment, } from "./lower-server.js";
|
|
@@ -92,6 +93,7 @@ import { constituentTypes } from "../ts7/checker.js";
|
|
|
92
93
|
import { npmStaticPackageOfPath } from "../npm-static.js";
|
|
93
94
|
import { fenceNodeModuleMutation } from "./lower-node-module.js";
|
|
94
95
|
import { fencePerfEntryKeyWalk } from "./builtins/performance.js";
|
|
96
|
+
import { fenceX509KeyWalk } from "./builtins/x509.js";
|
|
95
97
|
import { classGeneratorIterable } from "./class-iterables.js";
|
|
96
98
|
import { iterableUnionOf, lowerForOfIterable } from "./iterable-values.js";
|
|
97
99
|
/** An opted package's directly-returned empty array may take the function's
|
|
@@ -1373,7 +1375,39 @@ const THROWN_AS_DYN = new Set([
|
|
|
1373
1375
|
"bytes",
|
|
1374
1376
|
"func",
|
|
1375
1377
|
"regex",
|
|
1378
|
+
"date",
|
|
1376
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
|
+
}
|
|
1377
1411
|
export function lowerStmt(lowerer, stmt) {
|
|
1378
1412
|
if (ownPrototypeResetStatement(lowerer, stmt))
|
|
1379
1413
|
return { kind: "block", body: [], loc: locOf(stmt) };
|
|
@@ -1475,6 +1509,9 @@ export function lowerStmt(lowerer, stmt) {
|
|
|
1475
1509
|
if (ts.isLabeledStatement(stmt))
|
|
1476
1510
|
return lowerLabeled(lowerer, stmt);
|
|
1477
1511
|
if (ts.isReturnStatement(stmt)) {
|
|
1512
|
+
const moduleReturn = lowerModuleLevelReturn(lowerer, stmt);
|
|
1513
|
+
if (moduleReturn)
|
|
1514
|
+
return moduleReturn;
|
|
1478
1515
|
// Implicit-any instance RETURN INFERENCE (function-returns.ts
|
|
1479
1516
|
// resolveInferredReturn): the value lowers BARE and the statement
|
|
1480
1517
|
// records itself — the post-pass settles the instance's return type
|
|
@@ -1560,9 +1597,7 @@ export function lowerStmt(lowerer, stmt) {
|
|
|
1560
1597
|
return { kind: "rethrow", localId: caughtLocal.id, loc: locOf(stmt) };
|
|
1561
1598
|
}
|
|
1562
1599
|
// Exception-representable values move into the runtime's exception
|
|
1563
|
-
// cell. `throw f()` of a void call has no value
|
|
1564
|
-
// storage internally, but cannot preserve its object kind through the
|
|
1565
|
-
// untyped catch boundary. Reject both rather than changing JS identity.
|
|
1600
|
+
// cell. `throw f()` of a void call has no value.
|
|
1566
1601
|
let value = lowerer.lowerExpr(stmt.expression);
|
|
1567
1602
|
if (value.type.kind === "void")
|
|
1568
1603
|
lowerer.badType(stmt.expression, lowerer.typeOf(stmt.expression));
|
|
@@ -1576,15 +1611,12 @@ export function lowerStmt(lowerer, stmt) {
|
|
|
1576
1611
|
value = { kind: "dynFrom", value, liveRef: true, type: DYN, loc: locOf(stmt.expression) };
|
|
1577
1612
|
}
|
|
1578
1613
|
else if (THROWN_AS_DYN.has(value.type.kind) && lowerer.dynConvertible(value.type)) {
|
|
1579
|
-
// Arrays, Maps, Sets, typed arrays, Buffers, functions, regexes
|
|
1580
|
-
// unions over them keep their identity and contents the
|
|
1581
|
-
// the catch binding, `typeof`, `instanceof`,
|
|
1582
|
-
// 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.
|
|
1583
1618
|
value = lowerer.coerceInto(stmt.expression, value, DYN);
|
|
1584
1619
|
}
|
|
1585
|
-
if (value.type.kind === "date") {
|
|
1586
|
-
lowerer.unsupported("SC1090", stmt.expression, "throwing Date values (catch bindings cannot preserve Date's object kind; throw an Error or primitive instead)");
|
|
1587
|
-
}
|
|
1588
1620
|
// A dyn throw rides the REF cell arm (scr_throw_ref over the checked-dynamic tree
|
|
1589
1621
|
// node — identity preserved through catch bindings, caughtToDyn
|
|
1590
1622
|
// passes it back by reference). The JS-lane traced-call shape:
|
|
@@ -2305,7 +2337,7 @@ export function lowerBindingPattern(lowerer, pattern, srcRef, srcType, isLet, ou
|
|
|
2305
2337
|
const itRef = () => ({ kind: "varRef", localId: it.id, type: citPat.iterT, loc });
|
|
2306
2338
|
for (const el of pattern.elements.nodes) {
|
|
2307
2339
|
const stepLoc = locOf(el);
|
|
2308
|
-
const step = lowerer.classIteratorNextCall(citPat, itRef(), stepLoc);
|
|
2340
|
+
const step = lowerer.classIteratorNextCall(citPat, itRef(), null, stepLoc);
|
|
2309
2341
|
if (ts.isOmittedExpression(el) || el.name === undefined) {
|
|
2310
2342
|
out.push({ kind: "exprStmt", expr: step, loc: stepLoc });
|
|
2311
2343
|
continue;
|
|
@@ -2579,6 +2611,16 @@ export function lowerBindingPattern(lowerer, pattern, srcRef, srcType, isLet, ou
|
|
|
2579
2611
|
lowerer.lowerBindingPattern(pattern, () => lowerer.coerceToExpected(srcRef(), DYN), DYN, isLet, out, dynSpell, allowDynObject);
|
|
2580
2612
|
return;
|
|
2581
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;
|
|
2582
2624
|
if (srcType.kind === "dyn") {
|
|
2583
2625
|
// A runtime computed first key evaluates after RequireObjectCoercible:
|
|
2584
2626
|
// a nullish source throws before the key's side effects run. Later
|
|
@@ -3574,7 +3616,8 @@ function stdlibGlobalTokenDestructure(lowerer, decl, isLet) {
|
|
|
3574
3616
|
value =
|
|
3575
3617
|
canonical === "crypto"
|
|
3576
3618
|
? { kind: "libCall", fn: "webcrypto.object", args: [], type: DYN, loc: locOf(el) }
|
|
3577
|
-
:
|
|
3619
|
+
: (builtinNamespaceValue(lowerer, canonical, locOf(el)) ??
|
|
3620
|
+
builtinGlobalValue(canonical, locOf(el), true));
|
|
3578
3621
|
}
|
|
3579
3622
|
else if (globalName === "console" && !CONSOLE_CALL_MEMBERS.has(propName)) {
|
|
3580
3623
|
token = `[builtin console.${propName}]`;
|
|
@@ -3651,6 +3694,46 @@ function stdlibGlobalTokenDestructure(lowerer, decl, isLet) {
|
|
|
3651
3694
|
}
|
|
3652
3695
|
return out;
|
|
3653
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
|
+
}
|
|
3654
3737
|
/** `x = dflt` on a pattern position whose source value always EXISTS
|
|
3655
3738
|
* (tuple positions, record fields): JS evaluates the default exactly
|
|
3656
3739
|
* when the value is undefined — the undefined-arm ternary, lazy, so
|
|
@@ -4554,7 +4637,7 @@ export function lowerVarDecl(lowerer, decl, isLet) {
|
|
|
4554
4637
|
if (isTimeValueDateDeclaration(lowerer, decl)) {
|
|
4555
4638
|
const loc = locOf(decl);
|
|
4556
4639
|
const date = lowerer.lowerExprExpecting(decl.initializer, DATE_T);
|
|
4557
|
-
const local = lowerer.declareLocal(decl.name, decl.name.text, F64, isLet);
|
|
4640
|
+
const local = lowerer.declareLocal(decl.name, decl.name.text, F64, isLet || lowerer.timeValueDateWrites.has(decl));
|
|
4558
4641
|
lowerer.timeValueDateLocals.add(local);
|
|
4559
4642
|
const init = { kind: "libCall", fn: "date.getTime", args: [date], type: F64, loc };
|
|
4560
4643
|
return { kind: "varDecl", localId: local.id, init, loc };
|
|
@@ -6150,6 +6233,63 @@ function lowerDeleteStatement(lowerer, expr) {
|
|
|
6150
6233
|
}
|
|
6151
6234
|
lowerer.unsupported("SC1090", expr, `'delete' on '${lowerer.fmt(obj.type)}' receivers (process.env keys and pure Record<string, T> keys delete)`);
|
|
6152
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
|
+
}
|
|
6153
6293
|
/** A top-level CommonJS export statement (see cjsExportAssignmentOf):
|
|
6154
6294
|
* `exports.f = <expr>` and each expression-valued property of
|
|
6155
6295
|
* `module.exports = { ... }` assign their pre-registered export globals
|
|
@@ -6328,7 +6468,7 @@ function lowerCjsExportStatement(lowerer, cjs) {
|
|
|
6328
6468
|
const fenceMutable = (nameNode) => {
|
|
6329
6469
|
const sym = lowerer.resolveValueSymbol(nameNode);
|
|
6330
6470
|
const g = sym ? lowerer.globalsBySymbol.get(sym) : undefined;
|
|
6331
|
-
if (g?.mutable) {
|
|
6471
|
+
if (g?.mutable && !unchangedAfterExport(lowerer, nameNode, cjs.expr)) {
|
|
6332
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)`);
|
|
6333
6473
|
}
|
|
6334
6474
|
};
|
|
@@ -6469,7 +6609,7 @@ function lowerCjsSingleValueExport(lowerer, expr, loc) {
|
|
|
6469
6609
|
}
|
|
6470
6610
|
const g = lowerer.globalsBySymbol.get(sym);
|
|
6471
6611
|
if (g) {
|
|
6472
|
-
if (g.mutable) {
|
|
6612
|
+
if (g.mutable && !unchangedAfterExport(lowerer, rhs, expr)) {
|
|
6473
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)`);
|
|
6474
6614
|
}
|
|
6475
6615
|
return { kind: "block", body: [], loc };
|
|
@@ -8529,16 +8669,31 @@ export function lowerForOf(lowerer, stmt) {
|
|
|
8529
8669
|
// iterator are awaited as the async-from-sync iterator awaits them, and
|
|
8530
8670
|
// a value that is not iterable throws Node's TypeError.
|
|
8531
8671
|
const headT = lowerer.mapTypeOf(lowerer.typeOf(stmt.expression));
|
|
8532
|
-
|
|
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());
|
|
8533
8686
|
if (lowerer.ctx.isAsync && (syncGenerator || isUntypedIterable(lowerer, stmt.expression))) {
|
|
8534
8687
|
const iterable = lowerer.lowerExpr(stmt.expression);
|
|
8535
8688
|
if (iterable.type.kind === "generator" && iterable.type.async)
|
|
8536
8689
|
return lowerForAwaitGenerator(lowerer, stmt, iterable, labels);
|
|
8537
8690
|
if (iterable.type.kind === "dyn")
|
|
8538
8691
|
return lowerForOfDyn(lowerer, stmt, iterable, labels, true);
|
|
8539
|
-
if ((iterable.type.kind === "generator" ||
|
|
8692
|
+
if ((iterable.type.kind === "generator" ||
|
|
8693
|
+
classIterable ||
|
|
8694
|
+
isJsSourceFile(stmt.getSourceFile())) &&
|
|
8540
8695
|
lowerer.dynConvertible(iterable.type))
|
|
8541
|
-
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");
|
|
8542
8697
|
}
|
|
8543
8698
|
// A NodeJS.ReadableStream iterates as the general Readable.
|
|
8544
8699
|
requestGeneralStreamSurface(lowerer, stmt.expression);
|
|
@@ -8759,15 +8914,21 @@ export function lowerForOf(lowerer, stmt) {
|
|
|
8759
8914
|
return lowerForOfGenerator(lowerer, stmt, generator, labels);
|
|
8760
8915
|
// Class iterables ([Symbol.iterator]() + next() — classIteratorOf)
|
|
8761
8916
|
// drive the same protocol with ordinary method calls.
|
|
8762
|
-
const cit = lowerer.classIteratorOf(iterable.type);
|
|
8917
|
+
const cit = lowerer.classIteratorOf(iterable.type, { records: true, close: true });
|
|
8763
8918
|
if (cit)
|
|
8764
8919
|
return lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels);
|
|
8765
8920
|
// A declared [Symbol.iterator] whose shape classIteratorOf refused
|
|
8766
8921
|
// (an `any`-typed iterator or result, a declared return()/throw()):
|
|
8767
8922
|
// name the protocol, not the class.
|
|
8768
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);
|
|
8769
8930
|
if (info && lowerer.findMethodOn(info, "sym:iterator")) {
|
|
8770
|
-
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)`);
|
|
8771
8932
|
}
|
|
8772
8933
|
}
|
|
8773
8934
|
if (iterable.type.kind === "record" && lowerer.shapes.get(iterable.type.shapeId)?.tuple) {
|
|
@@ -9601,11 +9762,13 @@ function lowerForOfMatchAll(lowerer, stmt, call, stored) {
|
|
|
9601
9762
|
* } }
|
|
9602
9763
|
*
|
|
9603
9764
|
* A result record with NO done field never terminates — exactly JS
|
|
9604
|
-
* (undefined is falsy forever; Node loops forever too).
|
|
9605
|
-
*
|
|
9606
|
-
*
|
|
9607
|
-
*
|
|
9608
|
-
*
|
|
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. */
|
|
9609
9772
|
function lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels) {
|
|
9610
9773
|
let exprTarget = null;
|
|
9611
9774
|
let exprTargetNode = null;
|
|
@@ -9639,7 +9802,22 @@ function lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels) {
|
|
|
9639
9802
|
const r = lowerer.declareHiddenLocal("%cir", cit.resultT);
|
|
9640
9803
|
const recvRef = { kind: "varRef", localId: recv.id, type: iterable.type, loc };
|
|
9641
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;
|
|
9642
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
|
+
: [];
|
|
9643
9821
|
const varTarget = exprTarget ?? (decl ? forOfVarTarget(lowerer, decl) : null);
|
|
9644
9822
|
const x = varTarget
|
|
9645
9823
|
? lowerer.declareHiddenLocal("%vof", cit.valueT)
|
|
@@ -9647,10 +9825,11 @@ function lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels) {
|
|
|
9647
9825
|
const xRef = { kind: "varRef", localId: x.id, type: cit.valueT, loc };
|
|
9648
9826
|
const blame = decl?.name ?? exprTargetNode ?? stmt.initializer;
|
|
9649
9827
|
const head = [
|
|
9828
|
+
...setDone(true),
|
|
9650
9829
|
{
|
|
9651
9830
|
kind: "varDecl",
|
|
9652
9831
|
localId: r.id,
|
|
9653
|
-
init: lowerer.classIteratorNextCall(cit, itRef(), loc),
|
|
9832
|
+
init: lowerer.classIteratorNextCall(cit, itRef(), next ? varRef(next.id, next.type, loc) : null, loc),
|
|
9654
9833
|
loc,
|
|
9655
9834
|
},
|
|
9656
9835
|
...(cit.hasDone
|
|
@@ -9694,8 +9873,16 @@ function lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels) {
|
|
|
9694
9873
|
},
|
|
9695
9874
|
]
|
|
9696
9875
|
: []),
|
|
9876
|
+
...setDone(false),
|
|
9697
9877
|
];
|
|
9698
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
|
+
};
|
|
9699
9886
|
return {
|
|
9700
9887
|
kind: "block",
|
|
9701
9888
|
body: [
|
|
@@ -9706,13 +9893,48 @@ function lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels) {
|
|
|
9706
9893
|
init: lowerer.classIteratorOpenCall(cit, recvRef, loc),
|
|
9707
9894
|
loc,
|
|
9708
9895
|
},
|
|
9709
|
-
|
|
9710
|
-
kind: "
|
|
9711
|
-
|
|
9712
|
-
|
|
9713
|
-
|
|
9714
|
-
|
|
9715
|
-
|
|
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]),
|
|
9716
9938
|
],
|
|
9717
9939
|
loc,
|
|
9718
9940
|
};
|
|
@@ -9724,7 +9946,7 @@ function lowerForOfClassIterator(lowerer, stmt, iterable, cit, labels) {
|
|
|
9724
9946
|
/** A checked IteratorRecord stays live throughout the loop. Cache next once,
|
|
9725
9947
|
* read done before value, and close only after a yielded value has arrived.
|
|
9726
9948
|
* Abrupt body throws retain precedence over errors raised by return(). */
|
|
9727
|
-
function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false) {
|
|
9949
|
+
function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false, syncOpen = false) {
|
|
9728
9950
|
const loc = locOf(stmt);
|
|
9729
9951
|
const spell = notIterableSpelling(stmt.expression, asyncLoop ? "async iterable" : "iterable");
|
|
9730
9952
|
const iterator = lowerer.declareHiddenLocal("%dofIterator", DYN);
|
|
@@ -9734,6 +9956,7 @@ function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false) {
|
|
|
9734
9956
|
done.mutable = true;
|
|
9735
9957
|
const value = lowerer.declareHiddenLocal("%dofValue", DYN);
|
|
9736
9958
|
const returned = lowerer.declareHiddenLocal("%dofReturn", DYN);
|
|
9959
|
+
const closed = lowerer.declareHiddenLocal("%dofClosed", DYN);
|
|
9737
9960
|
const needsClose = lowerer.declareHiddenLocal("%dofNeedsClose", BOOL);
|
|
9738
9961
|
needsClose.mutable = true;
|
|
9739
9962
|
const error = lowerer.declareHiddenLocal("%dofError", CAUGHT);
|
|
@@ -9798,9 +10021,10 @@ function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false) {
|
|
|
9798
10021
|
},
|
|
9799
10022
|
then: [
|
|
9800
10023
|
{
|
|
9801
|
-
kind: "
|
|
10024
|
+
kind: "varDecl",
|
|
10025
|
+
localId: closed.id,
|
|
9802
10026
|
// return()'s (awaited) result must be an object, as for next().
|
|
9803
|
-
|
|
10027
|
+
init: asyncLoop
|
|
9804
10028
|
? check(awaitDyn({
|
|
9805
10029
|
kind: "dynCall",
|
|
9806
10030
|
callee: varRef(returned.id, DYN, loc),
|
|
@@ -9813,6 +10037,27 @@ function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false) {
|
|
|
9813
10037
|
: call(varRef(returned.id, DYN, loc)),
|
|
9814
10038
|
loc,
|
|
9815
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
|
+
: []),
|
|
9816
10061
|
],
|
|
9817
10062
|
else_: null,
|
|
9818
10063
|
loc,
|
|
@@ -9921,7 +10166,7 @@ function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false) {
|
|
|
9921
10166
|
localId: iterator.id,
|
|
9922
10167
|
init: check({
|
|
9923
10168
|
kind: "libCall",
|
|
9924
|
-
fn: asyncLoop ? "dyn.asyncIteratorOpen" : "dyn.iterator",
|
|
10169
|
+
fn: asyncLoop && !syncOpen ? "dyn.asyncIteratorOpen" : "dyn.iterator",
|
|
9925
10170
|
args: [iterable, { kind: "strLit", value: spell, type: STRING, loc }],
|
|
9926
10171
|
type: DYN,
|
|
9927
10172
|
loc,
|
|
@@ -9933,13 +10178,15 @@ function lowerForOfDyn(lowerer, stmt, iterable, labels, asyncLoop = false) {
|
|
|
9933
10178
|
{
|
|
9934
10179
|
kind: "varDecl",
|
|
9935
10180
|
localId: syncIterator.id,
|
|
9936
|
-
init:
|
|
9937
|
-
kind: "
|
|
9938
|
-
|
|
9939
|
-
|
|
9940
|
-
|
|
9941
|
-
|
|
9942
|
-
|
|
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
|
+
},
|
|
9943
10190
|
loc,
|
|
9944
10191
|
},
|
|
9945
10192
|
]
|
|
@@ -10341,6 +10588,7 @@ function lowerForIn(lowerer, stmt) {
|
|
|
10341
10588
|
// them (accessor slots live outside declaredOrder), so the loop
|
|
10342
10589
|
// fences rather than skip keys.
|
|
10343
10590
|
fencePerfEntryKeyWalk(lowerer, receiver.type, stmt.expression, "for-in");
|
|
10591
|
+
fenceX509KeyWalk(lowerer, receiver.type, stmt.expression, "for-in");
|
|
10344
10592
|
if (shapeHasAccessorSlots(rShape)) {
|
|
10345
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)");
|
|
10346
10594
|
}
|