@scriptc/compiler 0.3.1 → 0.3.3
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 +832 -55
- package/dist/backend/cycle-analysis.js +6 -1
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/executable-features.js +1 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/literals.d.ts +7 -0
- package/dist/backend/literals.js +32 -0
- package/dist/backend/literals.js.map +1 -1
- package/dist/backend/literals.test.js +17 -1
- package/dist/backend/literals.test.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +15 -4
- package/dist/backend/llvm/alloc.js +63 -25
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/alloc.test.js +62 -2
- package/dist/backend/llvm/alloc.test.js.map +1 -1
- package/dist/backend/llvm/appended-array-literals.d.ts +2 -0
- package/dist/backend/llvm/appended-array-literals.js +109 -0
- package/dist/backend/llvm/appended-array-literals.js.map +1 -0
- package/dist/backend/llvm/appended-array-literals.test.d.ts +1 -0
- package/dist/backend/llvm/appended-array-literals.test.js +90 -0
- package/dist/backend/llvm/appended-array-literals.test.js.map +1 -0
- package/dist/backend/llvm/array-search.d.ts +8 -0
- package/dist/backend/llvm/array-search.js +52 -0
- package/dist/backend/llvm/array-search.js.map +1 -0
- package/dist/backend/llvm/array-search.test.d.ts +1 -0
- package/dist/backend/llvm/array-search.test.js +72 -0
- package/dist/backend/llvm/array-search.test.js.map +1 -0
- package/dist/backend/llvm/call-lifetimes.d.ts +11 -1
- package/dist/backend/llvm/call-lifetimes.js +74 -4
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +54 -0
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/classes.js +97 -38
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +2 -2
- package/dist/backend/llvm/common.d.ts +1 -1
- package/dist/backend/llvm/common.js +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +5 -0
- package/dist/backend/llvm/dense-array-access.js +18 -13
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +15 -2
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +6 -0
- package/dist/backend/llvm/dyn.js +84 -11
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +108 -16
- package/dist/backend/llvm/emitter.js +598 -108
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +26 -3
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +174 -7
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +11 -0
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.d.ts +8 -0
- package/dist/backend/llvm/expr-callbacks.js +96 -2
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +12 -1
- package/dist/backend/llvm/expr-calls.js +133 -54
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +7 -0
- package/dist/backend/llvm/expr-containers.js +80 -22
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +2 -0
- package/dist/backend/llvm/expr-control.d.ts +8 -0
- package/dist/backend/llvm/expr-control.js +103 -69
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +21 -10
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.d.ts +7 -0
- package/dist/backend/llvm/expr-primitives.js +53 -51
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +19 -5
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.d.ts +8 -0
- package/dist/backend/llvm/expr-stream-bridges.js +111 -39
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +49 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +13 -2
- package/dist/backend/llvm/expr-stream-callbacks.js +80 -5
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/inline-unions.d.ts +48 -0
- package/dist/backend/llvm/inline-unions.js +134 -0
- package/dist/backend/llvm/inline-unions.js.map +1 -0
- package/dist/backend/llvm/inline-unions.test.d.ts +1 -0
- package/dist/backend/llvm/inline-unions.test.js +124 -0
- package/dist/backend/llvm/inline-unions.test.js.map +1 -0
- package/dist/backend/llvm/int32-abi.d.ts +18 -2
- package/dist/backend/llvm/int32-abi.js +23 -2
- package/dist/backend/llvm/int32-abi.js.map +1 -1
- package/dist/backend/llvm/int32-abi.test.js +75 -1
- package/dist/backend/llvm/int32-abi.test.js.map +1 -1
- package/dist/backend/llvm/integer-remainder.d.ts +28 -5
- package/dist/backend/llvm/integer-remainder.js +80 -9
- package/dist/backend/llvm/integer-remainder.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +170 -28
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +181 -5
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +9 -6
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +2 -2
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +208 -9
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +97 -0
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +12 -6
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +6 -3
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.d.ts +26 -2
- package/dist/backend/llvm/local-union-storage.js +132 -12
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +107 -1
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/loop-array-borrows.d.ts +8 -2
- package/dist/backend/llvm/loop-array-borrows.js +93 -13
- package/dist/backend/llvm/loop-array-borrows.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.d.ts +20 -0
- package/dist/backend/llvm/map-number-lookup.js +66 -0
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.d.ts +1 -0
- package/dist/backend/llvm/map-number-lookup.test.js +102 -0
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -0
- package/dist/backend/llvm/map-read-lifetimes.js +1 -0
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +4 -0
- package/dist/backend/llvm/publish.js +3 -1
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/record-results.d.ts +29 -0
- package/dist/backend/llvm/record-results.js +260 -0
- package/dist/backend/llvm/record-results.js.map +1 -0
- package/dist/backend/llvm/reference-effects.js +15 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +29 -9
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/regions.d.ts +68 -0
- package/dist/backend/llvm/regions.js +314 -0
- package/dist/backend/llvm/regions.js.map +1 -0
- package/dist/backend/llvm/regions.test.d.ts +1 -0
- package/dist/backend/llvm/regions.test.js +173 -0
- package/dist/backend/llvm/regions.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 +86 -13
- package/dist/backend/llvm/shapes.js +208 -54
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +68 -9
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/split-loops.js +1 -1
- package/dist/backend/llvm/split-loops.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +29 -0
- package/dist/backend/llvm/stack-objects.js +142 -0
- package/dist/backend/llvm/stack-objects.js.map +1 -0
- package/dist/backend/llvm/stack-objects.test.d.ts +1 -0
- package/dist/backend/llvm/stack-objects.test.js +255 -0
- package/dist/backend/llvm/stack-objects.test.js.map +1 -0
- package/dist/backend/llvm/string-reads.d.ts +4 -1
- package/dist/backend/llvm/string-reads.js +89 -9
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/switch-dispatch.js +5 -4
- package/dist/backend/llvm/switch-dispatch.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +13 -0
- package/dist/backend/llvm/walkers.js +108 -10
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/may-throw.js +10 -4
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +7 -2
- package/dist/backend/native/executable.js +28 -2
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +1 -1
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +3 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +1 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +1 -1
- 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 +1 -0
- package/dist/backend/runtime-pack-core.js +1 -0
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack.test.js +1 -1
- package/dist/backend/target-diagnostics.js +17 -0
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +16 -0
- package/dist/backend/target-diagnostics.test.js.map +1 -1
- package/dist/compat/fetch-profile.js +4 -4
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/contracts/check.js +2 -0
- package/dist/contracts/check.js.map +1 -1
- package/dist/coverage/report.js +1 -1
- package/dist/coverage/report.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +6 -5
- package/dist/diagnostics/diagnostic.js +7 -6
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +1 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/frontend/builtin-modules.d.ts +1 -1
- package/dist/frontend/builtin-modules.js +1 -0
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/comptime-node.js +2 -2
- package/dist/frontend/comptime-node.js.map +1 -1
- package/dist/frontend/experimental-import.d.ts +12 -0
- package/dist/frontend/experimental-import.js +63 -0
- package/dist/frontend/experimental-import.js.map +1 -0
- package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
- package/dist/frontend/lowering/binding-analysis.js +1 -1
- package/dist/frontend/lowering/builtin-calls.d.ts +6 -1
- package/dist/frontend/lowering/builtin-calls.js +36 -0
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
- package/dist/frontend/lowering/builtins/arguments.js +8 -4
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/blob.d.ts +20 -0
- package/dist/frontend/lowering/builtins/blob.js +167 -0
- package/dist/frontend/lowering/builtins/blob.js.map +1 -0
- package/dist/frontend/lowering/builtins/child-process-async.d.ts +2 -2
- package/dist/frontend/lowering/builtins/child-process-async.js +2 -2
- package/dist/frontend/lowering/builtins/child-process-methods.js +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/compression.js +3 -2
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/console.d.ts +16 -6
- package/dist/frontend/lowering/builtins/console.js +33 -9
- package/dist/frontend/lowering/builtins/console.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.js +415 -120
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.js +20 -0
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +10 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +89 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.d.ts +16 -7
- package/dist/frontend/lowering/builtins/filesystem.js +97 -15
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-glob.d.ts +23 -0
- package/dist/frontend/lowering/builtins/fs-glob.js +224 -0
- package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -0
- package/dist/frontend/lowering/builtins/json.d.ts +2 -2
- package/dist/frontend/lowering/builtins/json.js +13 -4
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/key-object.d.ts +13 -0
- package/dist/frontend/lowering/builtins/key-object.js +56 -0
- package/dist/frontend/lowering/builtins/key-object.js.map +1 -0
- package/dist/frontend/lowering/builtins/module-calls.js +60 -12
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.d.ts +1 -0
- package/dist/frontend/lowering/builtins/numbers.js +17 -0
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.d.ts +18 -0
- package/dist/frontend/lowering/builtins/operating-system.js +361 -1
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/performance.d.ts +25 -3
- package/dist/frontend/lowering/builtins/performance.js +340 -5
- package/dist/frontend/lowering/builtins/performance.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +2 -2
- package/dist/frontend/lowering/builtins/process.js +122 -17
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +109 -2
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/properties.d.ts +0 -7
- package/dist/frontend/lowering/builtins/properties.js +39 -11
- package/dist/frontend/lowering/builtins/properties.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +23 -8
- package/dist/frontend/lowering/builtins/readline.js +266 -90
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.d.ts +3 -4
- package/dist/frontend/lowering/builtins/text-codecs.js +3 -4
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.d.ts +8 -0
- package/dist/frontend/lowering/builtins/url.js +36 -0
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.js +1 -1
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +20 -2
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/checked-promise-all.d.ts +10 -3
- package/dist/frontend/lowering/checked-promise-all.js +52 -6
- package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +8 -3
- package/dist/frontend/lowering/class-dynamic-dispatch.js +159 -32
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-protocol-dispatch.d.ts +45 -0
- package/dist/frontend/lowering/class-protocol-dispatch.js +516 -0
- package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -0
- package/dist/frontend/lowering/coercions/structural-plans.js +2 -1
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +3 -3
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/collation-repertoire.js +6 -5
- package/dist/frontend/lowering/collation-repertoire.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +33 -6
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +8 -4
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.d.ts +0 -7
- package/dist/frontend/lowering/containers/array-methods.js +43 -2
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.js +38 -26
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/for-of.d.ts +1 -1
- package/dist/frontend/lowering/containers/for-of.js +5 -1
- package/dist/frontend/lowering/containers/for-of.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +91 -0
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
- package/dist/frontend/lowering/crypto-tables.js +77 -12
- package/dist/frontend/lowering/crypto-tables.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.d.ts +18 -2
- package/dist/frontend/lowering/cycle-initialization.js +166 -12
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.js +7 -2
- package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.test.js +28 -0
- package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js +10 -0
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +21 -68
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/generator-delegation.d.ts +8 -0
- package/dist/frontend/lowering/generator-delegation.js +231 -10
- package/dist/frontend/lowering/generator-delegation.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +2 -2
- package/dist/frontend/lowering/generic-functions.js +2 -2
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/http2-constants.js +1 -1
- package/dist/frontend/lowering/lifetime-regions.d.ts +11 -0
- package/dist/frontend/lowering/lifetime-regions.js +216 -0
- package/dist/frontend/lowering/lifetime-regions.js.map +1 -0
- package/dist/frontend/lowering/lower-array-sort.d.ts +40 -3
- package/dist/frontend/lowering/lower-array-sort.js +661 -194
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.test.js +103 -4
- package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +2 -2
- package/dist/frontend/lowering/lower-async-iteration.d.ts +6 -3
- package/dist/frontend/lowering/lower-async-iteration.js +248 -2
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +173 -111
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +12 -5
- package/dist/frontend/lowering/lower-classes.js +156 -11
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-comptime.d.ts +1 -1
- package/dist/frontend/lowering/lower-comptime.js +4 -4
- package/dist/frontend/lowering/lower-comptime.js.map +1 -1
- package/dist/frontend/lowering/lower-console.d.ts +13 -0
- package/dist/frontend/lowering/lower-console.js +460 -4
- package/dist/frontend/lowering/lower-console.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +6 -0
- package/dist/frontend/lowering/lower-event-emitter.js +124 -38
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-event-target.d.ts +63 -0
- package/dist/frontend/lowering/lower-event-target.js +362 -0
- package/dist/frontend/lowering/lower-event-target.js.map +1 -0
- package/dist/frontend/lowering/lower-expando.js +2 -2
- package/dist/frontend/lowering/lower-exprs.js +247 -42
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.d.ts +15 -7
- package/dist/frontend/lowering/lower-generators.js +183 -99
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +8 -1
- package/dist/frontend/lowering/lower-inspect.js +247 -28
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.js +1 -1
- package/dist/frontend/lowering/lower-modules.d.ts +1 -1
- package/dist/frontend/lowering/lower-modules.js +27 -17
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +2 -2
- package/dist/frontend/lowering/lower-namespaces.js +2 -2
- package/dist/frontend/lowering/lower-server.js +39 -14
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +11 -1
- package/dist/frontend/lowering/lower-stdlib.js +45 -4
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +2 -2
- package/dist/frontend/lowering/lower-stmts.js +112 -23
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +234 -22
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +45 -6
- package/dist/frontend/lowering/lowerer.js +360 -48
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.js +2 -2
- package/dist/frontend/lowering/native-ffi.js.map +1 -1
- package/dist/frontend/lowering/regex-span-reads.d.ts +12 -0
- package/dist/frontend/lowering/regex-span-reads.js +164 -0
- package/dist/frontend/lowering/regex-span-reads.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-records.d.ts +115 -0
- package/dist/frontend/lowering/runtime-optional-records.js +715 -0
- package/dist/frontend/lowering/runtime-optional-records.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-records.test.d.ts +1 -0
- package/dist/frontend/lowering/runtime-optional-records.test.js +175 -0
- package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +7 -3
- package/dist/frontend/lowering/surfaces.js +385 -32
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/var-hoisting.d.ts +3 -0
- package/dist/frontend/lowering/var-hoisting.js +261 -0
- package/dist/frontend/lowering/var-hoisting.js.map +1 -0
- package/dist/frontend/module-syntax.d.ts +1 -1
- package/dist/frontend/module-syntax.js +1 -1
- package/dist/frontend/npm-static-prune.js +1 -1
- package/dist/frontend/npm-static-prune.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-syntax.js +4 -3
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
- package/dist/frontend/pipeline.js +6 -4
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program.d.ts +6 -5
- package/dist/frontend/program.js +42 -22
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +13 -0
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/resolve.js +1 -1
- package/dist/frontend/ts7/adapter.js +1 -1
- package/dist/frontend/ts7/ast-bytes.d.ts +1 -1
- package/dist/frontend/ts7/ast-bytes.js +1 -1
- package/dist/frontend/ts7/semantic-json.d.ts +1 -1
- package/dist/frontend/ts7/semantic-json.js +1 -1
- package/dist/frontend/ts7/semantic-json.js.map +1 -1
- package/dist/frontend/ts7/world-check.js +1 -1
- package/dist/frontend/tsc-codes.js +2 -2
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +28 -1
- package/dist/frontend/type-mapper.js +288 -30
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.d.ts +12 -6
- package/dist/ir/analysis.js +26 -10
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/analysis.test.js +15 -3
- package/dist/ir/analysis.test.js.map +1 -1
- package/dist/ir/builtin-effects.js +108 -2
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +436 -53
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/function-references.test.js +1 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/int32-slots.js +2 -0
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/intrinsic-signatures.js +2 -0
- package/dist/ir/intrinsic-signatures.js.map +1 -1
- package/dist/ir/ir.d.ts +129 -36
- package/dist/ir/ir.js +42 -1
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +1 -0
- package/dist/ir/runtime-features.js +116 -5
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/scalar-records.js +1 -2
- package/dist/ir/scalar-records.js.map +1 -1
- package/dist/ir/serialize.js +1 -1
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/traverse.js +1 -0
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +250 -34
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +125 -0
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/fence-eval.d.ts +1 -1
- package/dist/library/fence-eval.js +5 -4
- package/dist/library/fence-eval.js.map +1 -1
- package/dist/library/ir-policy.js +11 -4
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-profile.js +13 -13
- package/dist/library/library-profile.js.map +1 -1
- package/dist/library/prepare.js +1 -1
- package/dist/library/prepare.js.map +1 -1
- package/dist/library/sidecar.js +3 -3
- package/dist/library/sidecar.js.map +1 -1
- package/dist/native/prepare.js +3 -2
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.test.js +1 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +537 -142
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { dynUndefinedExpr, numLit, varRef } from "../../ir/build.js";
|
|
2
|
+
import { lowerEventObjectPropertyWrite } from "./lower-event-target.js";
|
|
2
3
|
import { lowerDynObjectLiteral } from "./expressions/object-literals.js";
|
|
3
4
|
import { importMetaBindingSource } from "./import-meta.js";
|
|
4
5
|
import { iteratorCanStep, iteratorValue } from "./iterator-consumption.js";
|
|
@@ -40,6 +41,7 @@ import { genericIfaceBindingKeepsClass } from "./lower-classes.js";
|
|
|
40
41
|
import { lowerStreamUnderscoreAssign, streamClassAliasDecl } from "./lower-stream.js";
|
|
41
42
|
import { lowerHttpResPropertyAssignment, lowerHttpServerTimeoutAssignment, lowerServerCloseOverrideAssignment, } from "./lower-server.js";
|
|
42
43
|
import { lowerUrlAssignment } from "./builtins/url.js";
|
|
44
|
+
import { isFspGlobCall, lowerFspGlobForAwait } from "./builtins/fs-glob.js";
|
|
43
45
|
import { isNativeFfiRequire, builtinMemberRequireDecl, builtinNamespaceDestructureModuleOf, createRequireBindingDecl, createRequireCalleeFileOf, createRequireNamespaceDecl, createRequireProgramModuleDecl, createRequireProgramModuleOf, } from "./builtins/module-bindings.js";
|
|
44
46
|
import { lowerNodeModuleCall } from "./builtins/module-resolution.js";
|
|
45
47
|
import { registerBuiltinCallableAlias } from "./builtins/callable-aliases.js";
|
|
@@ -59,6 +61,7 @@ import { probeNodeRequireRefusal } from "../npm.js";
|
|
|
59
61
|
import { constituentTypes } from "../ts7/checker.js";
|
|
60
62
|
import { npmStaticPackageOfPath } from "../npm-static.js";
|
|
61
63
|
import { fenceNodeModuleMutation } from "./lower-node-module.js";
|
|
64
|
+
import { fencePerfEntryKeyWalk } from "./builtins/performance.js";
|
|
62
65
|
/** An opted package's directly-returned empty array may take the function's
|
|
63
66
|
* explicit static return element type. This is the common JS accumulator
|
|
64
67
|
* shape (`const result = []; result.push(value); return result`) and is
|
|
@@ -524,7 +527,7 @@ export function lowerStmts(lowerer, stmts) {
|
|
|
524
527
|
// only — a capture wrapper in force means collection owns the
|
|
525
528
|
// report). The statement's diagnostics move OFF the build and
|
|
526
529
|
// onto the fence: executing the statement throws the first
|
|
527
|
-
// one's message, so
|
|
530
|
+
// one's message, so no diagnostic is dropped — either
|
|
528
531
|
// the statement never runs (Node parity: the construct never
|
|
529
532
|
// executed) or it reports exactly what the compile fence would
|
|
530
533
|
// have said.
|
|
@@ -798,13 +801,14 @@ function varBindingType(lowerer, nameNode) {
|
|
|
798
801
|
}
|
|
799
802
|
if (!type || type.kind === "void")
|
|
800
803
|
return null;
|
|
801
|
-
|
|
804
|
+
// A binding readable before its first store holds undefined until then.
|
|
805
|
+
return lowerer.runtimeOptionalBindingType(nameNode, type);
|
|
802
806
|
}
|
|
803
807
|
/** `var` declarations hoist to their FUNCTION: the binding exists across
|
|
804
808
|
* the whole enclosing function body regardless of block position, and
|
|
805
809
|
* every same-name `var` in that function is the SAME binding (tsc merges
|
|
806
810
|
* the declarations into one symbol, so symbol-keyed resolution gets the
|
|
807
|
-
* merge
|
|
811
|
+
* merge automatically). This mints the one function-scoped slot on first
|
|
808
812
|
* encounter: an IrLocal registered in the function's ROOT scope frame
|
|
809
813
|
* (never popped by block exits) whose `varDecl` is PUSHED into the
|
|
810
814
|
* function-root statement list at the current position — everything
|
|
@@ -849,6 +853,7 @@ function hoistVarBinding(lowerer, symbol, nameNode) {
|
|
|
849
853
|
};
|
|
850
854
|
lowerer.ctx.locals.push(local);
|
|
851
855
|
lowerer.ctx.scopes[0].set(symbol, local);
|
|
856
|
+
noteEarlyReadVar(lowerer, symbol, local);
|
|
852
857
|
// A checked-dynamic slot holds the dyn undefined (a NULL dyn is a
|
|
853
858
|
// trap); everything else rides unassignedSlotInit (interned union arm,
|
|
854
859
|
const wrapped = type.kind === "dyn"
|
|
@@ -869,9 +874,12 @@ function hoistVarBinding(lowerer, symbol, nameNode) {
|
|
|
869
874
|
* bindings (the dyn undefined). Everything else returns false
|
|
870
875
|
* and the reference lands on the named fence in rejectUnresolvedSymbol:
|
|
871
876
|
* a slot of a narrower type has no bit pattern for the `undefined` Node
|
|
872
|
-
* would yield if the capture ran early, and guessing "it won't"
|
|
873
|
-
*
|
|
877
|
+
* would yield if the capture ran early, and guessing "it won't" would
|
|
878
|
+
* produce wrong output without an error. */
|
|
874
879
|
export function predeclareForwardVar(lowerer, symbol) {
|
|
880
|
+
// Module-scope vars already have their global storage.
|
|
881
|
+
if (lowerer.globalsBySymbol.has(symbol))
|
|
882
|
+
return false;
|
|
875
883
|
const decl = lowerer.checker.valueDeclarationOf(symbol);
|
|
876
884
|
if (!decl || !ts.isVariableDeclaration(decl) || !isVarDeclared(decl))
|
|
877
885
|
return false;
|
|
@@ -921,10 +929,20 @@ export function predeclareForwardVar(lowerer, symbol) {
|
|
|
921
929
|
};
|
|
922
930
|
ctx.locals.push(local);
|
|
923
931
|
ctx.scopes[0].set(symbol, local);
|
|
932
|
+
noteEarlyReadVar(lowerer, symbol, local);
|
|
924
933
|
root.out.push({ kind: "varDecl", localId: local.id, init: wrapped, loc: locOf(decl) });
|
|
925
934
|
ctx.hoistedVars.set(symbol, local);
|
|
926
935
|
return true;
|
|
927
936
|
}
|
|
937
|
+
/** A var readable before its first store (the runtime-optional analysis
|
|
938
|
+
* widened it): reads keep the undefined-armed value. */
|
|
939
|
+
function noteEarlyReadVar(lowerer, symbol, local) {
|
|
940
|
+
if (!lowerer.earlyReadVars.has(symbol))
|
|
941
|
+
return;
|
|
942
|
+
const root = lowerer.runtimeOptionalRootOf(local);
|
|
943
|
+
lowerer.runtimeOptionalLocals.add(root);
|
|
944
|
+
lowerer.runtimeOptionalStorageLocals.add(root);
|
|
945
|
+
}
|
|
928
946
|
/** Records the symbols a poisoned DECLARATION statement would have bound
|
|
929
947
|
* (identifier and pattern names alike, for-initializers included) so
|
|
930
948
|
* later references report the SC2004 cascade. Registered bindings win:
|
|
@@ -1131,6 +1149,9 @@ export function lowerStmt(lowerer, stmt) {
|
|
|
1131
1149
|
else if (lowerer.ctx.returnType.kind !== "void") {
|
|
1132
1150
|
lowerer.unsupported("SC1090", stmt, `bare 'return' where the declared return type is '${lowerer.fmt(lowerer.ctx.returnType)}' (JS hands the caller undefined, which this representation cannot hold — return a value, or widen the declared return type with undefined)`);
|
|
1133
1151
|
}
|
|
1152
|
+
// An async generator's bare return has no operand to await.
|
|
1153
|
+
if (lowerer.ctx.isAsync === true && lowerer.ctx.generator)
|
|
1154
|
+
return { kind: "return", value, awaited: true, loc: locOf(stmt) };
|
|
1134
1155
|
return { kind: "return", value, loc: locOf(stmt) };
|
|
1135
1156
|
}
|
|
1136
1157
|
if (ts.isBreakStatement(stmt) || ts.isContinueStatement(stmt)) {
|
|
@@ -2101,7 +2122,7 @@ export function lowerBindingPattern(lowerer, pattern, srcRef, srcType, isLet, ou
|
|
|
2101
2122
|
// reads (base-chain accessors and setter-only rejections resolve
|
|
2102
2123
|
// identically). Rest elements, methods, and names no class on the
|
|
2103
2124
|
// chain declares keep named fences (a detached method would lose its
|
|
2104
|
-
// receiver
|
|
2125
|
+
// receiver without an error; JS binds the prototype function).
|
|
2105
2126
|
if (srcType.kind === "object") {
|
|
2106
2127
|
const info = lowerer.classes.get(srcType.className);
|
|
2107
2128
|
if (!info)
|
|
@@ -3018,12 +3039,12 @@ function objectRestValue(lowerer, el, srcRef, srcType, shape) {
|
|
|
3018
3039
|
* members (methods and accessors stay behind; the checker's rest type
|
|
3019
3040
|
* excludes them too, so the two sides agree). The packed record must
|
|
3020
3041
|
* agree with the checker's rest type field-for-field — a non-public
|
|
3021
|
-
* field IS copied by JS but the rest type cannot name it (
|
|
3042
|
+
* field IS copied by JS but the rest type cannot name it (undiagnosed
|
|
3022
3043
|
* divergence; fence) — and key-for-key in ORDER: the packed shape's
|
|
3023
3044
|
* JSON/Object.keys order is first-seen global metadata, and a checker
|
|
3024
3045
|
* rest type that reorders (own-before-inherited) would make the
|
|
3025
3046
|
* enumeration surfaces diverge from Node, so it fences instead of
|
|
3026
|
-
*
|
|
3047
|
+
* reordering. Runtime-provided chains (Error/EventEmitter/
|
|
3027
3048
|
* stream roots) carry runtime-internal state no record copy can
|
|
3028
3049
|
* reproduce — fenced. ES-#private fields are own but non-enumerable:
|
|
3029
3050
|
* JS skips them and so does the packing. */
|
|
@@ -3033,7 +3054,7 @@ function classInstanceRestValue(lowerer, blame, srcRef, srcType, info, consumed,
|
|
|
3033
3054
|
lowerer.unsupported("SC1031", blame, "rest bindings over class instances with symbol-keyed fields (the copied symbols have no record form)");
|
|
3034
3055
|
}
|
|
3035
3056
|
for (let c = info; c; c = c.base) {
|
|
3036
|
-
if (c.builtinError || c.builtinEmitter || c.builtinStream) {
|
|
3057
|
+
if (c.builtinError || c.builtinEmitter || c.builtinStream || c.builtinEventTarget) {
|
|
3037
3058
|
lowerer.unsupported("SC1031", blame, "rest bindings over runtime-provided class instances (Error/EventEmitter/stream internals have no record form)");
|
|
3038
3059
|
}
|
|
3039
3060
|
}
|
|
@@ -4062,6 +4083,9 @@ function annotatedInitializerTarget(lowerer, name) {
|
|
|
4062
4083
|
function inferredOptionalRecordType(lowerer, decl, declared, actual) {
|
|
4063
4084
|
if (decl.type || hasJsTypeAnnotation(decl))
|
|
4064
4085
|
return declared;
|
|
4086
|
+
const symbol = ts.isIdentifier(decl.name) ? lowerer.resolveValueSymbol(decl.name) : undefined;
|
|
4087
|
+
if (symbol && lowerer.runtimeOptionalRecordsKeptDeclared.has(symbol))
|
|
4088
|
+
return declared;
|
|
4065
4089
|
if (lowerer.isRuntimeOptionalRecordVariant(actual, declared))
|
|
4066
4090
|
return actual;
|
|
4067
4091
|
if (declared.kind !== "record" || actual.kind !== "record")
|
|
@@ -4855,7 +4879,7 @@ function lowerCjsExportStatement(lowerer, cjs) {
|
|
|
4855
4879
|
// through to the declaration) — EXACT for const/function bindings, a
|
|
4856
4880
|
// live-binding lie for `let`: Node copies the VALUE into the table at
|
|
4857
4881
|
// this statement, so later reassignments are invisible to importers.
|
|
4858
|
-
// Mutable bindings fence instead of diverging
|
|
4882
|
+
// Mutable bindings fence instead of diverging from Node.
|
|
4859
4883
|
const fenceMutable = (nameNode) => {
|
|
4860
4884
|
const sym = lowerer.resolveValueSymbol(nameNode);
|
|
4861
4885
|
const g = sym ? lowerer.globalsBySymbol.get(sym) : undefined;
|
|
@@ -5196,6 +5220,12 @@ export function lowerExprStatement(lowerer, expr) {
|
|
|
5196
5220
|
return lowerer.lowerElementWrite(expr);
|
|
5197
5221
|
if (ts.isPropertyAccessExpression(expr.left)) {
|
|
5198
5222
|
fenceNodeModuleMutation(lowerer, expr.left, "assignment");
|
|
5223
|
+
// The writable Event accessors on Event subclass instances.
|
|
5224
|
+
{
|
|
5225
|
+
const eventWrite = lowerEventObjectPropertyWrite(lowerer, expr.left, expr.right);
|
|
5226
|
+
if (eventWrite)
|
|
5227
|
+
return { kind: "exprStmt", expr: eventWrite, loc: locOf(expr) };
|
|
5228
|
+
}
|
|
5199
5229
|
// Native arrays have a writable length property. The runtime grows
|
|
5200
5230
|
// by creating holes and truncates with RC-aware removal; keep this
|
|
5201
5231
|
// as a statement operation so invalid lengths can use the normal
|
|
@@ -5214,7 +5244,7 @@ export function lowerExprStatement(lowerer, expr) {
|
|
|
5214
5244
|
// `process.env.NAME = v` — setenv(3): later env reads and spawned
|
|
5215
5245
|
// children observe the write, exactly Node. Values are strings
|
|
5216
5246
|
// (Node stringifies everything; a non-string RHS fences instead
|
|
5217
|
-
// of
|
|
5247
|
+
// of diverging from Node). The computed-key form lands in
|
|
5218
5248
|
// lowerElementWrite.
|
|
5219
5249
|
if (lowerer.isProcessEnv(expr.left.expression) && !expr.left.questionDotToken) {
|
|
5220
5250
|
const loc = locOf(expr);
|
|
@@ -5275,7 +5305,7 @@ export function lowerExprStatement(lowerer, expr) {
|
|
|
5275
5305
|
// own name: the field's module global assigns. Writes through a
|
|
5276
5306
|
// SUBCLASS name (`D.x = v` creates an OWN property on D in JS —
|
|
5277
5307
|
// different storage) and through class VALUES (the same dynamic
|
|
5278
|
-
// story) are named fences
|
|
5308
|
+
// story) are named fences instead of an incorrect global write.
|
|
5279
5309
|
if (!expr.left.questionDotToken &&
|
|
5280
5310
|
(ts.isIdentifier(expr.left.expression) ||
|
|
5281
5311
|
expr.left.expression.kind === ts.SyntaxKind.ThisKeyword)) {
|
|
@@ -5412,6 +5442,38 @@ export function lowerExprStatement(lowerer, expr) {
|
|
|
5412
5442
|
loc,
|
|
5413
5443
|
};
|
|
5414
5444
|
}
|
|
5445
|
+
if (!expr.left.questionDotToken) {
|
|
5446
|
+
const flag = lowerer.stdlibGlobalMember(expr.left, "process");
|
|
5447
|
+
if (flag === "noDeprecation" || flag === "throwDeprecation") {
|
|
5448
|
+
const loc = locOf(expr);
|
|
5449
|
+
const value = lowerer.lowerExprExpecting(expr.right, DYN);
|
|
5450
|
+
return {
|
|
5451
|
+
kind: "exprStmt",
|
|
5452
|
+
expr: {
|
|
5453
|
+
kind: "libCall",
|
|
5454
|
+
fn: "process.setDeprecationFlag",
|
|
5455
|
+
args: [numLit(flag === "noDeprecation" ? 0 : 1, loc), value],
|
|
5456
|
+
type: VOID,
|
|
5457
|
+
loc,
|
|
5458
|
+
},
|
|
5459
|
+
loc,
|
|
5460
|
+
};
|
|
5461
|
+
}
|
|
5462
|
+
// process.title = name: libuv's uv_set_process_title (the
|
|
5463
|
+
// runtime truncates to the original argument area on POSIX).
|
|
5464
|
+
if (flag === "title") {
|
|
5465
|
+
const loc = locOf(expr);
|
|
5466
|
+
const value = lowerer.lowerExpr(expr.right);
|
|
5467
|
+
if (value.type.kind !== "string") {
|
|
5468
|
+
lowerer.noLowering(`process.title writes of '${lowerer.fmt(value.type)}' values`, expr.right, "assign a string");
|
|
5469
|
+
}
|
|
5470
|
+
return {
|
|
5471
|
+
kind: "exprStmt",
|
|
5472
|
+
expr: { kind: "libCall", fn: "process.setTitle", args: [value], type: VOID, loc },
|
|
5473
|
+
loc,
|
|
5474
|
+
};
|
|
5475
|
+
}
|
|
5476
|
+
}
|
|
5415
5477
|
// `r._read = fn` / `w._write = fn` (and the other underscore
|
|
5416
5478
|
// methods) on a runtime-stream-rooted receiver: Node's
|
|
5417
5479
|
// own-property shadow of the prototype method — the runtime
|
|
@@ -6641,6 +6703,13 @@ export function lowerForOf(lowerer, stmt) {
|
|
|
6641
6703
|
// A synchronous array iterator is also valid in `for await`. Its values
|
|
6642
6704
|
// take the async-from-sync path below; other async sources retain their
|
|
6643
6705
|
// dedicated request protocols.
|
|
6706
|
+
if (stmt.awaitModifier) {
|
|
6707
|
+
let head = stmt.expression;
|
|
6708
|
+
while (ts.isParenthesizedExpression(head))
|
|
6709
|
+
head = head.expression;
|
|
6710
|
+
if (isFspGlobCall(lowerer, head))
|
|
6711
|
+
return lowerFspGlobForAwait(lowerer, stmt, head);
|
|
6712
|
+
}
|
|
6644
6713
|
const awaitArray = !!stmt.awaitModifier && lowerer.mapTypeOf(lowerer.typeOf(stmt.expression))?.kind === "array";
|
|
6645
6714
|
if (stmt.awaitModifier && !awaitArray) {
|
|
6646
6715
|
{
|
|
@@ -6835,7 +6904,7 @@ export function lowerForOf(lowerer, stmt) {
|
|
|
6835
6904
|
if (iterable.type.kind === "string") {
|
|
6836
6905
|
// JS's string iterator walks code POINTS, not units: each pass
|
|
6837
6906
|
// yields the whole character (two UTF-16 units for astral chars,
|
|
6838
|
-
// where charAt
|
|
6907
|
+
// where charAt returns one surrogate half).
|
|
6839
6908
|
return lowerForOfString(lowerer, stmt, iterable, labels);
|
|
6840
6909
|
}
|
|
6841
6910
|
if (iterable.type.kind === "map") {
|
|
@@ -7659,8 +7728,8 @@ function lowerForOfMatchAll(lowerer, stmt, call, stored) {
|
|
|
7659
7728
|
}
|
|
7660
7729
|
/** `for (const ch of s)` over a STRING: JS's string iterator, which walks
|
|
7661
7730
|
* code POINTS — each pass binds the whole character (a two-unit string
|
|
7662
|
-
* for astral chars, where charAt/slice would
|
|
7663
|
-
*
|
|
7731
|
+
* for astral chars, where charAt/slice would return one surrogate half).
|
|
7732
|
+
* Desugars over the UTF-16 cursor machinery: a hidden unit
|
|
7664
7733
|
* index reads the character with the cpAt intrinsic and advances by ITS
|
|
7665
7734
|
* length before the body runs (so `continue` never skips the advance):
|
|
7666
7735
|
*
|
|
@@ -7668,9 +7737,8 @@ function lowerForOfMatchAll(lowerer, stmt, call, stored) {
|
|
|
7668
7737
|
* while (%i < %s.length) { const ch = cpAt(%s, %i); %i += ch.length; <body> } }
|
|
7669
7738
|
*
|
|
7670
7739
|
* Strings are immutable, so the length is stable and there is no
|
|
7671
|
-
* iterator state to unwind on throw; lone
|
|
7672
|
-
*
|
|
7673
|
-
* divergence), so every step lands on a character start. */
|
|
7740
|
+
* iterator state to unwind on throw; a lone surrogate is a one-unit
|
|
7741
|
+
* character, so every step lands on a character start. */
|
|
7674
7742
|
/** for-of over a CLASS ITERABLE (classIteratorOf's shape) — the
|
|
7675
7743
|
* iterator protocol as ordinary method calls:
|
|
7676
7744
|
*
|
|
@@ -8261,15 +8329,35 @@ function lowerForIn(lowerer, stmt) {
|
|
|
8261
8329
|
const recv = lowerer.declareHiddenLocal("%indyn", DYN);
|
|
8262
8330
|
const ref = { kind: "varRef", localId: recv.id, type: DYN, loc };
|
|
8263
8331
|
const keys = {
|
|
8264
|
-
kind: "
|
|
8265
|
-
|
|
8332
|
+
kind: "libCall",
|
|
8333
|
+
fn: "dyn.forInKeyStrings",
|
|
8334
|
+
args: [ref],
|
|
8266
8335
|
type: arrayOf(STRING),
|
|
8267
8336
|
loc,
|
|
8268
8337
|
};
|
|
8269
|
-
|
|
8338
|
+
// A stable snapshot (a typed record's fields) needs no live presence
|
|
8339
|
+
// test per visit.
|
|
8340
|
+
const stable = lowerer.declareHiddenLocal("%instable", BOOL);
|
|
8341
|
+
const loop = lowerForInOverKeys(lowerer, stmt, keys, labels, (key) => ({
|
|
8342
|
+
kind: "ternary",
|
|
8343
|
+
cond: { kind: "varRef", localId: stable.id, type: BOOL, loc },
|
|
8344
|
+
then: { kind: "boolLit", value: true, type: BOOL, loc },
|
|
8345
|
+
else_: classForInHasKey(lowerer, ref, key, loc),
|
|
8346
|
+
type: BOOL,
|
|
8347
|
+
loc,
|
|
8348
|
+
}));
|
|
8270
8349
|
return {
|
|
8271
8350
|
kind: "block",
|
|
8272
|
-
body: [
|
|
8351
|
+
body: [
|
|
8352
|
+
{ kind: "varDecl", localId: recv.id, init: receiver, loc },
|
|
8353
|
+
{
|
|
8354
|
+
kind: "varDecl",
|
|
8355
|
+
localId: stable.id,
|
|
8356
|
+
init: { kind: "libCall", fn: "dyn.forInStable", args: [ref], type: BOOL, loc },
|
|
8357
|
+
loc,
|
|
8358
|
+
},
|
|
8359
|
+
loop,
|
|
8360
|
+
],
|
|
8273
8361
|
loc,
|
|
8274
8362
|
};
|
|
8275
8363
|
}
|
|
@@ -8286,7 +8374,8 @@ function lowerForIn(lowerer, stmt) {
|
|
|
8286
8374
|
// Accessor-carrying shapes: Node's for-in visits the accessor
|
|
8287
8375
|
// NAMES (own enumerable properties) — the static key walk omits
|
|
8288
8376
|
// them (accessor slots live outside declaredOrder), so the loop
|
|
8289
|
-
// fences rather than
|
|
8377
|
+
// fences rather than skip keys.
|
|
8378
|
+
fencePerfEntryKeyWalk(lowerer, receiver.type, stmt.expression, "for-in");
|
|
8290
8379
|
if (shapeHasAccessorSlots(rShape)) {
|
|
8291
8380
|
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)");
|
|
8292
8381
|
}
|