@scriptc/compiler 0.4.6 → 0.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ambient/node-fallback/events.d.ts +6 -1
- package/ambient/node-fallback/fs-promises.d.ts +1 -1
- package/ambient/node-fallback/fs.d.ts +54 -10
- package/ambient/node-fallback/http.d.ts +3 -1
- package/ambient/node-fallback/net.d.ts +19 -0
- package/ambient/node-fallback/querystring.d.ts +3 -3
- package/ambient/scriptc-node-fallback.d.ts +58 -13
- package/dist/backend/executable-features.js +13 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.d.ts +12 -1
- package/dist/backend/immutability.js +50 -4
- package/dist/backend/immutability.js.map +1 -1
- package/dist/backend/immutability.test.js +95 -1
- package/dist/backend/immutability.test.js.map +1 -1
- package/dist/backend/library-pack.js +2 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/linker.d.ts +11 -0
- package/dist/backend/linker.js +31 -3
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/lld.d.ts +7 -2
- package/dist/backend/lld.js +5 -3
- package/dist/backend/lld.js.map +1 -1
- package/dist/backend/lld.test.js +10 -4
- package/dist/backend/lld.test.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +50 -1
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/cpu-dispatch.js +6 -5
- package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +53 -1
- package/dist/backend/llvm/dyn.js +221 -9
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +1 -1
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-module.js +148 -50
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-statements.js +39 -19
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +29 -2
- package/dist/backend/llvm/emitter.js +86 -7
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +4 -1
- package/dist/backend/llvm/expr-calls.js +20 -4
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +209 -16
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +94 -11
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.d.ts +8 -0
- package/dist/backend/llvm/expr-stream-bridges.js +42 -2
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +16 -0
- package/dist/backend/llvm/expr-stream-callbacks.js +206 -20
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/integer-values.d.ts +2 -0
- package/dist/backend/llvm/integer-values.js +6 -0
- package/dist/backend/llvm/integer-values.js.map +1 -1
- package/dist/backend/llvm/js-ic.d.ts +38 -0
- package/dist/backend/llvm/js-ic.js +295 -1
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +20 -0
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +116 -11
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +136 -24
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +70 -0
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +67 -0
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/loop-entry-versions.d.ts +2 -2
- package/dist/backend/llvm/loop-entry-versions.js +43 -21
- package/dist/backend/llvm/loop-entry-versions.js.map +1 -1
- package/dist/backend/llvm/loop-state.d.ts +7 -1
- package/dist/backend/llvm/loop-state.js +20 -2
- package/dist/backend/llvm/loop-state.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.d.ts +3 -1
- package/dist/backend/llvm/map-number-lookup.js +7 -3
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +52 -11
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/receiver-brackets.test.d.ts +1 -0
- package/dist/backend/llvm/receiver-brackets.test.js +68 -0
- package/dist/backend/llvm/receiver-brackets.test.js.map +1 -0
- package/dist/backend/llvm/record-views.d.ts +22 -2
- package/dist/backend/llvm/record-views.js +139 -10
- package/dist/backend/llvm/record-views.js.map +1 -1
- package/dist/backend/llvm/record-views.test.js +76 -0
- package/dist/backend/llvm/record-views.test.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +1 -0
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +3 -0
- package/dist/backend/llvm/shapes.js +18 -3
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +4 -0
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.d.ts +10 -1
- package/dist/backend/llvm/speculative-integers.js +59 -8
- package/dist/backend/llvm/speculative-integers.js.map +1 -1
- package/dist/backend/llvm/unwind-abi.d.ts +3 -3
- package/dist/backend/llvm/unwind-abi.js +8 -3
- package/dist/backend/llvm/unwind-abi.js.map +1 -1
- package/dist/backend/llvm/walkers.js +1 -1
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +54 -0
- package/dist/backend/native/executable.js +87 -5
- 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.js +5 -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.js +3 -0
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +43 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-link-info.js +1 -0
- package/dist/backend/native-link-info.js.map +1 -1
- package/dist/backend/native-profile.d.ts +4 -1
- package/dist/backend/native-profile.js +12 -1
- package/dist/backend/native-profile.js.map +1 -1
- package/dist/backend/native-profile.test.js +10 -0
- package/dist/backend/native-profile.test.js.map +1 -1
- package/dist/backend/publication.d.ts +4 -1
- package/dist/backend/publication.js +4 -2
- package/dist/backend/publication.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 +31 -7
- package/dist/backend/runtime-pack-core.js +21 -1
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.d.ts +18 -1
- package/dist/backend/runtime-pack-native.js +138 -29
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-native.test.js +166 -4
- package/dist/backend/runtime-pack-native.test.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +3 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.d.ts +7 -0
- package/dist/backend/runtime-pack.js +25 -3
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +3 -11
- 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 +264 -3
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/backend/vendor-inputs.d.ts +36 -0
- package/dist/backend/vendor-inputs.js +42 -0
- package/dist/backend/vendor-inputs.js.map +1 -1
- package/dist/backend/vendor-inputs.test.js +28 -1
- package/dist/backend/vendor-inputs.test.js.map +1 -1
- package/dist/backend/warm-cache.js +2 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/compat/fetch-profile.d.ts +7 -1
- package/dist/compat/fetch-profile.js +23 -10
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +7 -0
- package/dist/contracts/check.d.ts +3 -0
- package/dist/contracts/check.js +18 -5
- package/dist/contracts/check.js.map +1 -1
- package/dist/coverage/surface-manifest.js +1 -1
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/diagnostics/codes.d.ts +6 -0
- package/dist/diagnostics/codes.js +6 -0
- package/dist/diagnostics/codes.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +50 -0
- package/dist/diagnostics/diagnostic.js +142 -3
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/dynamic-tier.js +3 -1
- package/dist/diagnostics/dynamic-tier.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +29 -0
- package/dist/executable/executable-cache.js +18 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +5 -1
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.d.ts +13 -3
- package/dist/executable/prepare.js +271 -18
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/early-errors.d.ts +14 -0
- package/dist/frontend/early-errors.js +305 -0
- package/dist/frontend/early-errors.js.map +1 -0
- package/dist/frontend/early-errors.test.d.ts +1 -0
- package/dist/frontend/early-errors.test.js +42 -0
- package/dist/frontend/early-errors.test.js.map +1 -0
- package/dist/frontend/inferred-js-diagnostics.test.js +23 -0
- package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +47 -0
- package/dist/frontend/input-tracker.js +173 -36
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +86 -2
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/js-inference.d.ts +2 -0
- package/dist/frontend/js-inference.js +18 -0
- package/dist/frontend/js-inference.js.map +1 -0
- package/dist/frontend/lowering/binding-analysis.d.ts +2 -1
- package/dist/frontend/lowering/binding-analysis.js +65 -1
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/builtin-calls.js +9 -0
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtin-namespaces.d.ts +1 -1
- package/dist/frontend/lowering/builtin-namespaces.js +19 -2
- package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.d.ts +7 -0
- package/dist/frontend/lowering/builtins/child-process-methods.js +50 -10
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.js +5 -1
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.d.ts +1 -1
- package/dist/frontend/lowering/builtins/dates.js +23 -1
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/environment.d.ts +55 -0
- package/dist/frontend/lowering/builtins/environment.js +213 -2
- package/dist/frontend/lowering/builtins/environment.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +47 -16
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.d.ts +25 -7
- package/dist/frontend/lowering/builtins/filesystem.js +185 -16
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +39 -2
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +8 -0
- package/dist/frontend/lowering/builtins/module-resolution.js +31 -5
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.d.ts +3 -2
- package/dist/frontend/lowering/builtins/operating-system.js +5 -4
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +17 -1
- package/dist/frontend/lowering/builtins/process.js +285 -19
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/querystring.d.ts +8 -0
- package/dist/frontend/lowering/builtins/querystring.js +202 -18
- package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.js +21 -3
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/reflection.js +60 -1
- package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.js +208 -59
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +20 -1
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/v8.d.ts +5 -5
- package/dist/frontend/lowering/builtins/v8.js +7 -5
- package/dist/frontend/lowering/builtins/v8.js.map +1 -1
- package/dist/frontend/lowering/builtins/web-streams-dyn.d.ts +17 -2
- package/dist/frontend/lowering/builtins/web-streams-dyn.js +97 -9
- package/dist/frontend/lowering/builtins/web-streams-dyn.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +77 -0
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/cjs-exports-object.d.ts +3 -0
- package/dist/frontend/lowering/cjs-exports-object.js +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
- package/dist/frontend/lowering/cjs-inline-require.js +5 -0
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +5 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +114 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.js +59 -10
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.js +15 -0
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/class-views.d.ts +13 -0
- package/dist/frontend/lowering/class-views.js +51 -0
- package/dist/frontend/lowering/class-views.js.map +1 -0
- package/dist/frontend/lowering/coercions/function-adapters.d.ts +15 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +54 -10
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/state.d.ts +7 -0
- package/dist/frontend/lowering/coercions/state.js +7 -0
- package/dist/frontend/lowering/coercions/state.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +60 -3
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +29 -1
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +8 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +132 -28
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +16 -5
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +16 -0
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.js +4 -0
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.d.ts +11 -0
- package/dist/frontend/lowering/containers/callback-arguments.js +53 -0
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/filter-predicates.d.ts +10 -0
- package/dist/frontend/lowering/containers/filter-predicates.js +69 -3
- package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +46 -2
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/expressions/array-literals.d.ts +14 -0
- package/dist/frontend/lowering/expressions/array-literals.js +26 -10
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +104 -12
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +121 -4
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +143 -3
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +11 -1
- package/dist/frontend/lowering/expressions/keyed-field-targets.js +22 -1
- package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.js +25 -1
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +5 -1
- package/dist/frontend/lowering/expressions/object-literals.js +778 -229
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +66 -20
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +31 -0
- package/dist/frontend/lowering/expressions/property-access.js +796 -12
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +29 -1
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +17 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +132 -17
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/frozen-records.d.ts +6 -0
- package/dist/frontend/lowering/frozen-records.js +10 -4
- package/dist/frontend/lowering/frozen-records.js.map +1 -1
- package/dist/frontend/lowering/frozen-records.test.d.ts +1 -0
- package/dist/frontend/lowering/frozen-records.test.js +44 -0
- package/dist/frontend/lowering/frozen-records.test.js.map +1 -0
- package/dist/frontend/lowering/function-names.d.ts +9 -0
- package/dist/frontend/lowering/function-names.js +95 -0
- package/dist/frontend/lowering/function-names.js.map +1 -0
- package/dist/frontend/lowering/function-returns.js +5 -3
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +49 -0
- package/dist/frontend/lowering/generic-functions.js +365 -7
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/global-values.d.ts +9 -0
- package/dist/frontend/lowering/global-values.js +44 -0
- package/dist/frontend/lowering/global-values.js.map +1 -1
- package/dist/frontend/lowering/handle-properties.js +34 -1
- package/dist/frontend/lowering/handle-properties.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.d.ts +54 -0
- package/dist/frontend/lowering/key-order-witness.js +546 -5
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/lib-boundary.js +14 -0
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +110 -1
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +36 -6
- package/dist/frontend/lowering/lower-builtin-values.js +332 -58
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +22 -1
- package/dist/frontend/lowering/lower-calls.js +427 -48
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.test.d.ts +1 -0
- package/dist/frontend/lowering/lower-calls.test.js +78 -0
- package/dist/frontend/lowering/lower-calls.test.js.map +1 -0
- package/dist/frontend/lowering/lower-classes.d.ts +16 -5
- package/dist/frontend/lowering/lower-classes.js +168 -51
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +9 -0
- package/dist/frontend/lowering/lower-event-emitter.js +383 -41
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +14 -0
- package/dist/frontend/lowering/lower-exprs.js +25 -0
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +2 -0
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +80 -33
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +87 -25
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-node-island.d.ts +35 -4
- package/dist/frontend/lowering/lower-node-island.js +456 -61
- package/dist/frontend/lowering/lower-node-island.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +160 -9
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-shared-modules.js +13 -1
- package/dist/frontend/lowering/lower-shared-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +3 -2
- package/dist/frontend/lowering/lower-stdlib.js +32 -18
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +21 -4
- package/dist/frontend/lowering/lower-stmts.js +580 -103
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +126 -8
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +133 -21
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +139 -3
- package/dist/frontend/lowering/lowerer.js +579 -43
- 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.js +15 -0
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/new-target.js +2 -2
- package/dist/frontend/lowering/nullish-empty-pattern.d.ts +17 -0
- package/dist/frontend/lowering/nullish-empty-pattern.js +118 -0
- package/dist/frontend/lowering/nullish-empty-pattern.js.map +1 -0
- package/dist/frontend/lowering/partial-assertions.d.ts +39 -0
- package/dist/frontend/lowering/partial-assertions.js +195 -0
- package/dist/frontend/lowering/partial-assertions.js.map +1 -0
- package/dist/frontend/lowering/primitive-wrappers.d.ts +34 -0
- package/dist/frontend/lowering/primitive-wrappers.js +220 -0
- package/dist/frontend/lowering/primitive-wrappers.js.map +1 -0
- package/dist/frontend/lowering/private-statics.d.ts +46 -0
- package/dist/frontend/lowering/private-statics.js +322 -0
- package/dist/frontend/lowering/private-statics.js.map +1 -0
- package/dist/frontend/lowering/record-sources.d.ts +12 -1
- package/dist/frontend/lowering/record-sources.js +60 -0
- package/dist/frontend/lowering/record-sources.js.map +1 -1
- package/dist/frontend/lowering/strict-equality.d.ts +4 -0
- package/dist/frontend/lowering/strict-equality.js +14 -0
- package/dist/frontend/lowering/strict-equality.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +27 -0
- package/dist/frontend/lowering/surfaces.js +135 -62
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/unit-journal.d.ts +128 -17
- package/dist/frontend/lowering/unit-journal.js +310 -53
- package/dist/frontend/lowering/unit-journal.js.map +1 -1
- package/dist/frontend/lowering/unit-journal.test.js +91 -3
- package/dist/frontend/lowering/unit-journal.test.js.map +1 -1
- package/dist/frontend/lowering/unit-reuse.d.ts +92 -0
- package/dist/frontend/lowering/unit-reuse.js +1008 -0
- package/dist/frontend/lowering/unit-reuse.js.map +1 -0
- package/dist/frontend/lowering/width-lift.d.ts +12 -0
- package/dist/frontend/npm-file-import.test.d.ts +1 -0
- package/dist/frontend/npm-file-import.test.js +76 -0
- package/dist/frontend/npm-file-import.test.js.map +1 -0
- package/dist/frontend/npm-static.js +17 -2
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm.d.ts +9 -0
- package/dist/frontend/npm.js +82 -0
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/pipeline-native.js +2 -1
- package/dist/frontend/pipeline-native.js.map +1 -1
- package/dist/frontend/pipeline.d.ts +4 -0
- package/dist/frontend/pipeline.js +68 -7
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program-node.d.ts +3 -0
- package/dist/frontend/program-node.js +13 -6
- package/dist/frontend/program-node.js.map +1 -1
- package/dist/frontend/program.d.ts +9 -0
- package/dist/frontend/program.js +159 -7
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/provenance-core.js +4 -0
- package/dist/frontend/provenance-core.js.map +1 -1
- package/dist/frontend/services.d.ts +14 -0
- package/dist/frontend/services.js +52 -2
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/services.test.js +61 -1
- package/dist/frontend/services.test.js.map +1 -1
- package/dist/frontend/shape-inference/analyze.d.ts +5 -0
- package/dist/frontend/shape-inference/analyze.js +104 -4
- package/dist/frontend/shape-inference/analyze.js.map +1 -1
- package/dist/frontend/shape-inference/domain.js +0 -1
- package/dist/frontend/shape-inference/domain.js.map +1 -1
- package/dist/frontend/shape-inference/index.js +5 -1
- package/dist/frontend/shape-inference/index.js.map +1 -1
- package/dist/frontend/shape-inference/memo.d.ts +2 -1
- package/dist/frontend/shape-inference/memo.js +6 -2
- package/dist/frontend/shape-inference/memo.js.map +1 -1
- package/dist/frontend/shape-inference/overlay.d.ts +1 -1
- package/dist/frontend/shape-inference/overlay.js +116 -2
- package/dist/frontend/shape-inference/overlay.js.map +1 -1
- package/dist/frontend/shape-inference/static-objects.js +11 -6
- package/dist/frontend/shape-inference/static-objects.js.map +1 -1
- package/dist/frontend/source-phase-imports.test.d.ts +1 -0
- package/dist/frontend/source-phase-imports.test.js +37 -0
- package/dist/frontend/source-phase-imports.test.js.map +1 -0
- package/dist/frontend/ts7/ast-node.d.ts +6 -1
- package/dist/frontend/ts7/ast-node.js +12 -0
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-wire-protocols.test.js +11 -3
- package/dist/frontend/ts7/ast-wire-protocols.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.js +3 -5
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.d.ts +13 -0
- package/dist/frontend/ts7/checker-backend.js +84 -2
- package/dist/frontend/ts7/checker-backend.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.test.js +126 -2
- package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
- package/dist/frontend/ts7/program-host.d.ts +22 -1
- package/dist/frontend/ts7/program-host.js +49 -4
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/program-host.test.js +83 -0
- package/dist/frontend/ts7/program-host.test.js.map +1 -1
- package/dist/frontend/ts7/rpc-process.d.ts +16 -1
- package/dist/frontend/ts7/rpc-process.js +170 -92
- package/dist/frontend/ts7/rpc-process.js.map +1 -1
- package/dist/frontend/ts7/rpc-process.test.js +49 -21
- package/dist/frontend/ts7/rpc-process.test.js.map +1 -1
- package/dist/frontend/tsc-codes.js +70 -0
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +7 -2
- package/dist/frontend/type-mapper.js +148 -1
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +152 -8
- package/dist/index.js.map +1 -1
- package/dist/ir/api.d.ts +1 -1
- package/dist/ir/api.js +1 -1
- package/dist/ir/api.js.map +1 -1
- package/dist/ir/build.d.ts +3 -2
- package/dist/ir/build.js +4 -2
- package/dist/ir/build.js.map +1 -1
- package/dist/ir/builtin-effects.js +53 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +211 -10
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/codec.d.ts +82 -0
- package/dist/ir/codec.generated.d.ts +13 -0
- package/dist/ir/codec.generated.js +5274 -0
- package/dist/ir/codec.generated.js.map +1 -0
- package/dist/ir/codec.js +325 -0
- package/dist/ir/codec.js.map +1 -0
- package/dist/ir/codec.test.d.ts +1 -0
- package/dist/ir/codec.test.js +225 -0
- package/dist/ir/codec.test.js.map +1 -0
- package/dist/ir/fields.generated.d.ts +20 -10
- package/dist/ir/fields.generated.js +1031 -11
- package/dist/ir/fields.generated.js.map +1 -1
- package/dist/ir/fields.test.js +46 -2
- package/dist/ir/fields.test.js.map +1 -1
- package/dist/ir/function-references.d.ts +5 -4
- package/dist/ir/function-references.js +8 -4
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +7 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/inline-array-sources.js +4 -1
- package/dist/ir/inline-array-sources.js.map +1 -1
- package/dist/ir/inline-array-views.d.ts +13 -0
- package/dist/ir/inline-array-views.js +944 -0
- package/dist/ir/inline-array-views.js.map +1 -0
- package/dist/ir/inline-arrays.d.ts +7 -0
- package/dist/ir/inline-arrays.js +190 -55
- package/dist/ir/inline-arrays.js.map +1 -1
- package/dist/ir/inline-arrays.test.js +140 -2
- package/dist/ir/inline-arrays.test.js.map +1 -1
- package/dist/ir/integer-ranges.js +16 -6
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/ir.d.ts +75 -44
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/js-ic.d.ts +10 -9
- package/dist/ir/js-ic.js +28 -20
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +10 -2
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/jsval.js +374 -63
- package/dist/ir/jsval.js.map +1 -1
- package/dist/ir/jsval.test.js +96 -2
- package/dist/ir/jsval.test.js.map +1 -1
- package/dist/ir/loop-entry-ranges.js +112 -9
- package/dist/ir/loop-entry-ranges.js.map +1 -1
- package/dist/ir/loop-entry-ranges.test.js +40 -0
- package/dist/ir/loop-entry-ranges.test.js.map +1 -1
- package/dist/ir/parameter-versions.d.ts +2 -1
- package/dist/ir/parameter-versions.js +3 -1
- package/dist/ir/parameter-versions.js.map +1 -1
- package/dist/ir/receiver-readers.js +58 -2
- package/dist/ir/receiver-readers.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +60 -1
- package/dist/ir/runtime-features.js +277 -2
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/runtime-features.test.js +165 -1
- package/dist/ir/runtime-features.test.js.map +1 -1
- package/dist/ir/saturating-loop-jams.d.ts +8 -1
- package/dist/ir/saturating-loop-jams.js +46 -7
- package/dist/ir/saturating-loop-jams.js.map +1 -1
- package/dist/ir/saturating-loop-jams.test.js +39 -1
- package/dist/ir/saturating-loop-jams.test.js.map +1 -1
- package/dist/ir/self-captures.js +8 -1
- package/dist/ir/self-captures.js.map +1 -1
- package/dist/ir/self-captures.test.js +15 -0
- package/dist/ir/self-captures.test.js.map +1 -1
- package/dist/ir/serialize.d.ts +3 -2
- package/dist/ir/serialize.js +6 -2
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/validate.js +82 -4
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +46 -0
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/ir-policy.js +3 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/native/cache.js +2 -0
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cli.js +2 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +8 -2
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/prepare.js +32 -3
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.js +53 -3
- package/dist/native/sanitizer.js.map +1 -1
- package/dist/native/sanitizer.test.js +88 -2
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/toolchain.js +9 -2
- package/dist/native/toolchain.js.map +1 -1
- package/dist/node-islands/boundary.d.ts +25 -1
- package/dist/node-islands/boundary.js +28 -2
- package/dist/node-islands/boundary.js.map +1 -1
- package/dist/node-islands/detect.d.ts +18 -1
- package/dist/node-islands/detect.js +365 -40
- package/dist/node-islands/detect.js.map +1 -1
- package/dist/node-islands/detect.test.js +151 -4
- package/dist/node-islands/detect.test.js.map +1 -1
- package/dist/node-islands/effect-gate.js +30 -20
- package/dist/node-islands/effect-gate.js.map +1 -1
- package/dist/node-islands/effect-gate.test.js +4 -1
- package/dist/node-islands/effect-gate.test.js.map +1 -1
- package/dist/node-islands/libnode.d.ts +1 -1
- package/dist/node-islands/libnode.js +1 -1
- package/dist/node-islands/libnode.js.map +1 -1
- package/dist/node-islands/modules.d.ts +28 -0
- package/dist/node-islands/modules.js +156 -0
- package/dist/node-islands/modules.js.map +1 -1
- package/dist/node-islands/modules.test.js +105 -1
- package/dist/node-islands/modules.test.js.map +1 -1
- package/dist/node-islands/policy.js +2 -3
- package/dist/node-islands/policy.js.map +1 -1
- package/dist/node-islands/probe-recorder.d.ts +1 -0
- package/dist/node-islands/probe-recorder.js +596 -0
- package/dist/node-islands/probe-recorder.js.map +1 -0
- package/dist/node-islands/probe-recorder.test.d.ts +1 -0
- package/dist/node-islands/probe-recorder.test.js +80 -0
- package/dist/node-islands/probe-recorder.test.js.map +1 -0
- package/dist/node-islands/report.test.js +2 -0
- package/dist/node-islands/report.test.js.map +1 -1
- package/dist/node-islands/rules.js +4 -0
- package/dist/node-islands/rules.js.map +1 -1
- package/dist/node-islands/scan.d.ts +7 -1
- package/dist/node-islands/scan.js +51 -2
- package/dist/node-islands/scan.js.map +1 -1
- package/dist/node-islands/snapshot.d.ts +38 -1
- package/dist/node-islands/snapshot.js +165 -161
- package/dist/node-islands/snapshot.js.map +1 -1
- package/dist/node-islands/snapshot.test.js +63 -2
- package/dist/node-islands/snapshot.test.js.map +1 -1
- package/dist/node-islands/summary.js +8 -0
- package/dist/node-islands/summary.js.map +1 -1
- package/dist/node-islands/type-strip.d.ts +11 -0
- package/dist/node-islands/type-strip.js +157 -0
- package/dist/node-islands/type-strip.js.map +1 -0
- package/dist/node-islands/type-strip.test.d.ts +1 -0
- package/dist/node-islands/type-strip.test.js +31 -0
- package/dist/node-islands/type-strip.test.js.map +1 -0
- package/dist/project-config.d.ts +4 -0
- package/dist/project-config.js +19 -0
- package/dist/project-config.js.map +1 -1
- package/dist/project-config.test.js +10 -0
- package/dist/project-config.test.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +43 -11
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { expect, test } from "vitest";
|
|
2
|
+
import { DYN } from "../../ir/ir.js";
|
|
3
|
+
import { isPlainDescriptorMap, isPlainObjectLiteral } from "./lower-calls.js";
|
|
4
|
+
const loc = { file: "descriptors.ts", start: 0, end: 1 };
|
|
5
|
+
function dynObjLit() {
|
|
6
|
+
return { kind: "dynObjLit", fields: [], type: DYN, loc };
|
|
7
|
+
}
|
|
8
|
+
function recordLit() {
|
|
9
|
+
return { kind: "recordLit", fields: [], type: { kind: "record", shapeId: "r1" }, loc };
|
|
10
|
+
}
|
|
11
|
+
function recordClone() {
|
|
12
|
+
return {
|
|
13
|
+
kind: "recordClone",
|
|
14
|
+
source: recordLit(),
|
|
15
|
+
overrides: [],
|
|
16
|
+
type: { kind: "record", shapeId: "r1" },
|
|
17
|
+
loc,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function dynFrom(value) {
|
|
21
|
+
return { kind: "dynFrom", value, type: DYN, loc };
|
|
22
|
+
}
|
|
23
|
+
test("a plain object keeps the default descriptor reader", () => {
|
|
24
|
+
expect(isPlainObjectLiteral(dynObjLit())).toBe(true);
|
|
25
|
+
// A typed object literal boxes into dyn through dynFrom, and so does any
|
|
26
|
+
// expression already of a record type (a variable, a clone).
|
|
27
|
+
expect(isPlainObjectLiteral(dynFrom(recordLit()))).toBe(true);
|
|
28
|
+
expect(isPlainObjectLiteral(dynFrom(recordClone()))).toBe(true);
|
|
29
|
+
const recordVariable = {
|
|
30
|
+
kind: "varRef",
|
|
31
|
+
localId: "p1",
|
|
32
|
+
type: { kind: "record", shapeId: "r1" },
|
|
33
|
+
loc,
|
|
34
|
+
};
|
|
35
|
+
expect(isPlainObjectLiteral(dynFrom(recordVariable))).toBe(true);
|
|
36
|
+
});
|
|
37
|
+
test("any other descriptor may be an object of any kind and takes the any-object entry points", () => {
|
|
38
|
+
const variable = { kind: "varRef", localId: "p0", type: DYN, loc };
|
|
39
|
+
const array = { kind: "dynArrLit", elems: [], type: DYN, loc };
|
|
40
|
+
const call = {
|
|
41
|
+
kind: "libCall",
|
|
42
|
+
fn: "dyn.objCreate",
|
|
43
|
+
args: [dynObjLit()],
|
|
44
|
+
type: DYN,
|
|
45
|
+
loc,
|
|
46
|
+
};
|
|
47
|
+
for (const expr of [variable, dynFrom(variable), array, call])
|
|
48
|
+
expect(isPlainObjectLiteral(expr)).toBe(false);
|
|
49
|
+
});
|
|
50
|
+
test("a descriptor map is plain only when every descriptor in it is plain", () => {
|
|
51
|
+
const key = { kind: "strLit", value: "a", type: { kind: "string" }, loc };
|
|
52
|
+
const variable = { kind: "varRef", localId: "p0", type: DYN, loc };
|
|
53
|
+
const map = (value) => ({
|
|
54
|
+
kind: "dynObjLit",
|
|
55
|
+
fields: [{ key, value }],
|
|
56
|
+
type: DYN,
|
|
57
|
+
loc,
|
|
58
|
+
});
|
|
59
|
+
const shapes = new Map([
|
|
60
|
+
["r1", { id: "r1", fields: [] }],
|
|
61
|
+
["plain", { id: "plain", fields: [{ name: "a", type: { kind: "record", shapeId: "r1" } }] }],
|
|
62
|
+
["dyn", { id: "dyn", fields: [{ name: "a", type: DYN }] }],
|
|
63
|
+
]);
|
|
64
|
+
const record = (shapeId) => ({
|
|
65
|
+
kind: "varRef",
|
|
66
|
+
localId: "p1",
|
|
67
|
+
type: { kind: "record", shapeId },
|
|
68
|
+
loc,
|
|
69
|
+
});
|
|
70
|
+
const getRecord = (id) => shapes.get(id);
|
|
71
|
+
expect(isPlainDescriptorMap(map(dynObjLit()), getRecord)).toBe(true);
|
|
72
|
+
expect(isPlainDescriptorMap(dynFrom(record("plain")), getRecord)).toBe(true);
|
|
73
|
+
// `{ a: view }` with `view` a DataView, an array or any other dyn value.
|
|
74
|
+
expect(isPlainDescriptorMap(map(variable), getRecord)).toBe(false);
|
|
75
|
+
expect(isPlainDescriptorMap(dynFrom(record("dyn")), getRecord)).toBe(false);
|
|
76
|
+
expect(isPlainDescriptorMap(variable, getRecord)).toBe(false);
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=lower-calls.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lower-calls.test.js","sourceRoot":"","sources":["../../../src/frontend/lowering/lower-calls.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,15 @@ export declare function returnsOnlyThis(member: ts.MethodDeclaration): boolean;
|
|
|
13
13
|
* claim setters). Used only to narrow a call's result back to the
|
|
14
14
|
* receiver's class. */
|
|
15
15
|
export declare function returnsOnlyThisValue(member: ts.MethodDeclaration): boolean;
|
|
16
|
-
|
|
16
|
+
/** True when evaluating this class definition creates a class VALUE more
|
|
17
|
+
* than once, so each evaluation must mint its own constructor object,
|
|
18
|
+
* prototype and statics. A function body runs per call, a loop body per
|
|
19
|
+
* iteration, and an instance field initializer (or constructor parameter
|
|
20
|
+
* default) per construction. A class expression nested in a STATIC member
|
|
21
|
+
* initializer, a computed key or the heritage follows its enclosing
|
|
22
|
+
* class's own evaluation, so the walk continues through those.
|
|
23
|
+
* Top-level definitions evaluated once keep the immortal template. */
|
|
24
|
+
export declare function perEvaluationClass(decl: ts.ClassLikeDeclaration): boolean;
|
|
17
25
|
export declare function storedClassValueType(lowerer: Lowerer, expression: ts.Expression, visiting?: Set<import("../ts7/ast-node.js").AstNode>): IrType | null;
|
|
18
26
|
export interface ClassMethodSignature {
|
|
19
27
|
params: ParamShape[];
|
|
@@ -594,10 +602,13 @@ export declare function staticReceiverClass(lowerer: Lowerer, receiver: ts.Expre
|
|
|
594
602
|
* property access `site`, or a destructuring element over `C` whose
|
|
595
603
|
* initializer is `site`. Null when the class has no such member. */
|
|
596
604
|
export declare function lowerClassStaticRead(lowerer: Lowerer, info: ClassInfo, name: string, receiver: ts.Expression, site: ts.Expression): IrExpr | null;
|
|
597
|
-
/** Collect a class expression once per enclosing specialization.
|
|
598
|
-
*
|
|
599
|
-
*
|
|
600
|
-
*
|
|
605
|
+
/** Collect a class expression once per enclosing specialization. A class
|
|
606
|
+
* definition the program can EVALUATE more than once (perEvaluationClass:
|
|
607
|
+
* a function body, a loop body, an instance initializer) allocates fresh
|
|
608
|
+
* constructor objects, so identity, statics and prototype belong to that
|
|
609
|
+
* evaluation; definitions evaluated once use immortal templates. Static
|
|
610
|
+
* initialization remains limited to whole top-level initializers, where
|
|
611
|
+
* pendingClassExprInits preserves its evaluation point. */
|
|
601
612
|
export declare function lowerClassExpressionInfo(lowerer: Lowerer, expr: ts.ClassLikeDeclaration): ClassInfo;
|
|
602
613
|
/** `class {…}` in expression position: a class definition bound to no
|
|
603
614
|
* statement — once the static side is a value, the expression IS the
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { lowerWrapperNew } from "./primitive-wrappers.js";
|
|
1
2
|
import { lowerAsyncLocalStorageOptions } from "./builtins/async-context.js";
|
|
2
3
|
import { shapeOverlayAnnotated } from "../shape-inference/index.js";
|
|
3
4
|
import { DATE_TIME_FIELD, dateRootOf, dateSuperCall, isDatePrototypeMethod, lowerDateSuperMethodCall, } from "./builtins/date-classes.js";
|
|
@@ -131,13 +132,41 @@ export function returnsOnlyThisValue(member) {
|
|
|
131
132
|
ts.forEachChild(body, visit);
|
|
132
133
|
return valid;
|
|
133
134
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
135
|
+
/** True when evaluating this class definition creates a class VALUE more
|
|
136
|
+
* than once, so each evaluation must mint its own constructor object,
|
|
137
|
+
* prototype and statics. A function body runs per call, a loop body per
|
|
138
|
+
* iteration, and an instance field initializer (or constructor parameter
|
|
139
|
+
* default) per construction. A class expression nested in a STATIC member
|
|
140
|
+
* initializer, a computed key or the heritage follows its enclosing
|
|
141
|
+
* class's own evaluation, so the walk continues through those.
|
|
142
|
+
* Top-level definitions evaluated once keep the immortal template. */
|
|
143
|
+
export function perEvaluationClass(decl) {
|
|
144
|
+
let child = decl;
|
|
145
|
+
for (let parent = decl.parent; parent && !ts.isSourceFile(parent); child = parent, parent = parent.parent) {
|
|
146
|
+
if (ts.isFunctionLike(parent) || ts.isClassStaticBlockDeclaration(parent))
|
|
147
|
+
return true;
|
|
148
|
+
if (ts.isForStatement(parent) ||
|
|
149
|
+
ts.isForInStatement(parent) ||
|
|
150
|
+
ts.isForOfStatement(parent) ||
|
|
151
|
+
ts.isWhileStatement(parent) ||
|
|
152
|
+
ts.isDoStatement(parent))
|
|
153
|
+
return true;
|
|
154
|
+
if ((ts.isClassDeclaration(parent) || ts.isClassExpression(parent)) && perInstanceMember(child))
|
|
137
155
|
return true;
|
|
138
156
|
}
|
|
139
157
|
return false;
|
|
140
158
|
}
|
|
159
|
+
/** True when `node` — the direct child of the enclosing class on the path
|
|
160
|
+
* to a nested class definition — is evaluated once per INSTANCE: an
|
|
161
|
+
* instance field with an initializer, or a constructor whose parameters
|
|
162
|
+
* have defaults (parameter properties included). */
|
|
163
|
+
function perInstanceMember(node) {
|
|
164
|
+
if (ts.isConstructorDeclaration(node))
|
|
165
|
+
return node.parameters.nodes.some((param) => param.initializer !== undefined);
|
|
166
|
+
if (!ts.isPropertyDeclaration(node) || node.initializer === undefined)
|
|
167
|
+
return false;
|
|
168
|
+
return !ts.getModifiers(node)?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword);
|
|
169
|
+
}
|
|
141
170
|
export function storedClassValueType(lowerer, expression, visiting = new Set()) {
|
|
142
171
|
if (visiting.has(expression))
|
|
143
172
|
return null;
|
|
@@ -145,7 +174,7 @@ export function storedClassValueType(lowerer, expression, visiting = new Set())
|
|
|
145
174
|
if (ts.isParenthesizedExpression(expression))
|
|
146
175
|
return storedClassValueType(lowerer, expression.expression, visiting);
|
|
147
176
|
if (ts.isClassExpression(expression) &&
|
|
148
|
-
!
|
|
177
|
+
!perEvaluationClass(expression) &&
|
|
149
178
|
!lowerer.collectingExprClasses.has(expression)) {
|
|
150
179
|
const info = lowerer.lowerClassExpressionInfo(expression);
|
|
151
180
|
return { kind: "classval", className: info.def.name };
|
|
@@ -189,7 +218,7 @@ export function storedClassValueType(lowerer, expression, visiting = new Set())
|
|
|
189
218
|
const declaration = constructor && ts.isConstructorDeclaration(constructor) ? constructor.parent : undefined;
|
|
190
219
|
if (declaration &&
|
|
191
220
|
ts.isClassExpression(declaration) &&
|
|
192
|
-
!
|
|
221
|
+
!perEvaluationClass(declaration) &&
|
|
193
222
|
!lowerer.collectingExprClasses.has(declaration)) {
|
|
194
223
|
const info = lowerer.lowerClassExpressionInfo(declaration);
|
|
195
224
|
return { kind: "classval", className: info.def.name };
|
|
@@ -1461,7 +1490,13 @@ mixin) {
|
|
|
1461
1490
|
const emitterBase = lowerer.builtinEmitterInfoOf(resolved);
|
|
1462
1491
|
const streamBaseNs = builtinStreamInfoOf(lowerer, resolved);
|
|
1463
1492
|
if (emitterBase || streamBaseNs) {
|
|
1464
|
-
|
|
1493
|
+
// An EventEmitter's type argument is the listener MAP, a pure
|
|
1494
|
+
// typing aid: the emitter base is one runtime class whatever the
|
|
1495
|
+
// map says, and the map's keys never reach the layout (Node's
|
|
1496
|
+
// own generic erases at runtime), so `extends
|
|
1497
|
+
// EventEmitter<MyEvents>` adopts the same base. A stream base's
|
|
1498
|
+
// argument IS the element layout, which still has to be concrete.
|
|
1499
|
+
if (!emitterBase && t.typeArguments?.nodes)
|
|
1465
1500
|
lowerer.unsupported("SC1090", t, "extending generic classes");
|
|
1466
1501
|
base = (emitterBase ?? streamBaseNs);
|
|
1467
1502
|
continue;
|
|
@@ -1652,7 +1687,12 @@ mixin) {
|
|
|
1652
1687
|
base = instBase;
|
|
1653
1688
|
continue;
|
|
1654
1689
|
}
|
|
1655
|
-
|
|
1690
|
+
// An EventEmitter base's type argument is the listener MAP — a pure
|
|
1691
|
+
// typing aid (the runtime base is one emitter class whatever the map
|
|
1692
|
+
// says, and Node erases it too), so `extends EventEmitter<Events>`
|
|
1693
|
+
// adopts the same base. Every other generic base still refuses:
|
|
1694
|
+
// its argument can carry a layout.
|
|
1695
|
+
if (t.typeArguments?.nodes && lowerer.builtinEmitterInfoOf(symbol) === null)
|
|
1656
1696
|
lowerer.unsupported("SC1090", t, "extending generic classes");
|
|
1657
1697
|
if (named?.extendsArray)
|
|
1658
1698
|
lowerer.unsupported("SC1090", t, `extending '${t.expression.text}', a class that extends Array (one level of Array subclass compiles)`);
|
|
@@ -1674,7 +1714,7 @@ mixin) {
|
|
|
1674
1714
|
throw new PoisonError();
|
|
1675
1715
|
}
|
|
1676
1716
|
}
|
|
1677
|
-
if (base?.localClass && !
|
|
1717
|
+
if (base?.localClass && !perEvaluationClass(decl) && !computedBase && !factoryBaseExpression) {
|
|
1678
1718
|
const heritage = decl.heritageClauses?.nodes.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword)?.types?.nodes[0];
|
|
1679
1719
|
if (heritage)
|
|
1680
1720
|
factoryBaseExpression = heritage.expression;
|
|
@@ -1741,7 +1781,13 @@ mixin) {
|
|
|
1741
1781
|
decl.members.nodes.some((member) => ts.isAccessor(member) &&
|
|
1742
1782
|
!ts.isPrivateIdentifier(member.name) &&
|
|
1743
1783
|
member.modifiers?.nodes.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword))) &&
|
|
1744
|
-
|
|
1784
|
+
// A private static ACCESSOR has no native storage yet, and a private
|
|
1785
|
+
// static method that reads `arguments` would lose the arguments past
|
|
1786
|
+
// its parameters when called through its value (`this.#m` returned by
|
|
1787
|
+
// a getter): keep such a class on the static path, whose public
|
|
1788
|
+
// static accessors refuse.
|
|
1789
|
+
!decl.members.nodes.some((member) => (ts.isAccessor(member) ||
|
|
1790
|
+
(ts.isMethodDeclaration(member) && bodyReadsArguments(member))) &&
|
|
1745
1791
|
ts.isPrivateIdentifier(member.name) &&
|
|
1746
1792
|
ts
|
|
1747
1793
|
.getModifiers(member)
|
|
@@ -1796,17 +1842,31 @@ mixin) {
|
|
|
1796
1842
|
});
|
|
1797
1843
|
};
|
|
1798
1844
|
for (const member of decl.members.nodes) {
|
|
1799
|
-
if ((
|
|
1845
|
+
if ((perEvaluationClass(decl) || checkedStatics) &&
|
|
1800
1846
|
(isJsSourceFile(ts.getSourceFileOfNode(decl)) ||
|
|
1801
|
-
(
|
|
1847
|
+
(perEvaluationClass(decl) && ts.isMethodDeclaration(member))) &&
|
|
1802
1848
|
(ts.isClassStaticBlockDeclaration(member) ||
|
|
1803
1849
|
ts
|
|
1804
1850
|
.getModifiers(member)
|
|
1805
1851
|
?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword))) {
|
|
1806
|
-
|
|
1807
|
-
|
|
1852
|
+
// A private static of a declaration-level class keeps its native
|
|
1853
|
+
// storage (the %C.static:#m function, the %g.s.C.#x global): the
|
|
1854
|
+
// constructor object never carries a property for it, and every
|
|
1855
|
+
// access brand-checks its receiver (private-statics.ts). A field
|
|
1856
|
+
// also stays in runtimeStatics, so its initializer runs in source
|
|
1857
|
+
// order with the constructor's other initializers.
|
|
1858
|
+
const privateStatic = checkedStatics &&
|
|
1859
|
+
!perEvaluationClass(decl) &&
|
|
1860
|
+
member.name !== undefined &&
|
|
1861
|
+
ts.isPrivateIdentifier(member.name);
|
|
1862
|
+
if (!privateStatic) {
|
|
1863
|
+
runtimeStatics.push(member);
|
|
1864
|
+
continue;
|
|
1865
|
+
}
|
|
1866
|
+
if (ts.isPropertyDeclaration(member))
|
|
1867
|
+
runtimeStatics.push(member);
|
|
1808
1868
|
}
|
|
1809
|
-
if (
|
|
1869
|
+
if (perEvaluationClass(decl) &&
|
|
1810
1870
|
isJsSourceFile(ts.getSourceFileOfNode(decl)) &&
|
|
1811
1871
|
(ts.isMethodDeclaration(member) || ts.isAccessor(member)) &&
|
|
1812
1872
|
member.body &&
|
|
@@ -1900,7 +1960,7 @@ mixin) {
|
|
|
1900
1960
|
}
|
|
1901
1961
|
staticMethods.set(member.name.text, { params: shapes, ret: ft.ret, member });
|
|
1902
1962
|
if (implicitMonoFile(ts.getSourceFileOfNode(decl)) &&
|
|
1903
|
-
!
|
|
1963
|
+
!perEvaluationClass(decl) &&
|
|
1904
1964
|
inst === undefined &&
|
|
1905
1965
|
decl.typeParameters === undefined) {
|
|
1906
1966
|
const implicit = implicitAnyParamSymbolsOf(lowerer, member, true);
|
|
@@ -2530,7 +2590,7 @@ mixin) {
|
|
|
2530
2590
|
// name (the override stays on the vtable), a shadowed field, or
|
|
2531
2591
|
// a generic-class instantiation's member.
|
|
2532
2592
|
if (implicitMonoFile(ts.getSourceFileOfNode(decl)) &&
|
|
2533
|
-
!
|
|
2593
|
+
!perEvaluationClass(decl) &&
|
|
2534
2594
|
ts.isIdentifier(member.name) &&
|
|
2535
2595
|
!lowerer.virtualJsMethods.has(member) &&
|
|
2536
2596
|
!lowerer.checkedJsOverrideMethods.has(member) &&
|
|
@@ -2741,7 +2801,7 @@ mixin) {
|
|
|
2741
2801
|
// boundary (lowerClassMethodMemberInner).
|
|
2742
2802
|
const ownAsync = member.modifiers?.nodes.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword) === true;
|
|
2743
2803
|
if (!fencedJsOverride &&
|
|
2744
|
-
!
|
|
2804
|
+
!perEvaluationClass(decl) &&
|
|
2745
2805
|
overridden.sig.gen === undefined &&
|
|
2746
2806
|
// An async base's slot answers its promise: a Promise type, or
|
|
2747
2807
|
// the checked-dynamic value of an untyped async method.
|
|
@@ -2830,7 +2890,7 @@ mixin) {
|
|
|
2830
2890
|
!returnAdapters.has(mName) &&
|
|
2831
2891
|
(asyncMember || overridden.sig.async === true) &&
|
|
2832
2892
|
!isJsSourceFile(ts.getSourceFileOfNode(member)) &&
|
|
2833
|
-
!
|
|
2893
|
+
!perEvaluationClass(decl) &&
|
|
2834
2894
|
member.asteriskToken === undefined &&
|
|
2835
2895
|
overridden.sig.gen === undefined &&
|
|
2836
2896
|
!overridden.sig.abstract &&
|
|
@@ -3622,7 +3682,7 @@ mixin) {
|
|
|
3622
3682
|
lowerer.subclassLinks++;
|
|
3623
3683
|
}
|
|
3624
3684
|
lowerer.classes.set(className, info);
|
|
3625
|
-
if (computedBase && !
|
|
3685
|
+
if (computedBase && !perEvaluationClass(decl)) {
|
|
3626
3686
|
info.def.baseValueGlobal = `%g.${className}.computedBase`;
|
|
3627
3687
|
lowerer.globalsList.push({
|
|
3628
3688
|
id: info.def.baseValueGlobal,
|
|
@@ -3631,7 +3691,7 @@ mixin) {
|
|
|
3631
3691
|
mutable: false,
|
|
3632
3692
|
});
|
|
3633
3693
|
}
|
|
3634
|
-
if (factoryBaseExpression && !
|
|
3694
|
+
if (factoryBaseExpression && !perEvaluationClass(decl)) {
|
|
3635
3695
|
info.def.baseValueGlobal = `%g.${className}.computedBase`;
|
|
3636
3696
|
lowerer.globalsList.push({
|
|
3637
3697
|
id: info.def.baseValueGlobal,
|
|
@@ -3640,7 +3700,7 @@ mixin) {
|
|
|
3640
3700
|
mutable: false,
|
|
3641
3701
|
});
|
|
3642
3702
|
}
|
|
3643
|
-
if (callableBase && !
|
|
3703
|
+
if (callableBase && !perEvaluationClass(decl)) {
|
|
3644
3704
|
lowerer.globalsList.push({ id: callableBase.constructorId, name: `${className} base`, type: DYN, mutable: false }, {
|
|
3645
3705
|
id: callableBase.prototypeId,
|
|
3646
3706
|
name: `${className} base prototype`,
|
|
@@ -4109,7 +4169,11 @@ function lowerStaticFieldInitsInner(lowerer, info) {
|
|
|
4109
4169
|
});
|
|
4110
4170
|
}
|
|
4111
4171
|
const items = [
|
|
4112
|
-
|
|
4172
|
+
// A runtime-statics class initializes its private static fields with
|
|
4173
|
+
// its other initializers (initializeRuntimeStatics).
|
|
4174
|
+
...info.staticFields
|
|
4175
|
+
.filter((f) => !(info.runtimeStatics && f.name.startsWith("#")))
|
|
4176
|
+
.map((f) => ({
|
|
4113
4177
|
pos: ts.tokenStartOfNode(f.initializer),
|
|
4114
4178
|
kind: "field",
|
|
4115
4179
|
f,
|
|
@@ -4721,7 +4785,7 @@ export function lowerClassStaticRead(lowerer, info, name, receiver, site) {
|
|
|
4721
4785
|
["now", "parse", "UTC"].includes(name) &&
|
|
4722
4786
|
!(ts.isCallExpression(site.parent) && site.parent.expression === site))
|
|
4723
4787
|
lowerer.noLowering(`Date.${name} read through a class that extends Date`, site);
|
|
4724
|
-
if (hasRuntimeStatics(info) && !found?.field)
|
|
4788
|
+
if (hasRuntimeStatics(info) && !found?.field && !name.startsWith("#"))
|
|
4725
4789
|
return {
|
|
4726
4790
|
kind: "dynKeyGet",
|
|
4727
4791
|
value: lowerer.coerceToExpected(classValueRef(lowerer, info, receiver), DYN),
|
|
@@ -4889,10 +4953,13 @@ function privateNamesOnlyOnThis(expr) {
|
|
|
4889
4953
|
}
|
|
4890
4954
|
return true;
|
|
4891
4955
|
}
|
|
4892
|
-
/** Collect a class expression once per enclosing specialization.
|
|
4893
|
-
*
|
|
4894
|
-
*
|
|
4895
|
-
*
|
|
4956
|
+
/** Collect a class expression once per enclosing specialization. A class
|
|
4957
|
+
* definition the program can EVALUATE more than once (perEvaluationClass:
|
|
4958
|
+
* a function body, a loop body, an instance initializer) allocates fresh
|
|
4959
|
+
* constructor objects, so identity, statics and prototype belong to that
|
|
4960
|
+
* evaluation; definitions evaluated once use immortal templates. Static
|
|
4961
|
+
* initialization remains limited to whole top-level initializers, where
|
|
4962
|
+
* pendingClassExprInits preserves its evaluation point. */
|
|
4896
4963
|
export function lowerClassExpressionInfo(lowerer, expr) {
|
|
4897
4964
|
const cached = lowerer.exprClassInfoByName.get(lowerer.classNamer(expr));
|
|
4898
4965
|
if (cached)
|
|
@@ -4907,14 +4974,12 @@ export function lowerClassExpressionInfo(lowerer, expr) {
|
|
|
4907
4974
|
if (lowerer.collectingExprClasses.has(expr)) {
|
|
4908
4975
|
lowerer.unsupported("SC1090", expr, "class expressions whose extends chain re-enters their own collection (a cyclic base through property assignments)");
|
|
4909
4976
|
}
|
|
4910
|
-
let local = false;
|
|
4911
4977
|
for (let p = expr.parent; p !== undefined && !ts.isSourceFile(p); p = p.parent) {
|
|
4912
4978
|
if (ts.isClassStaticBlockDeclaration(p)) {
|
|
4913
4979
|
lowerer.unsupported("SC1090", expr, "class expressions inside static blocks");
|
|
4914
4980
|
}
|
|
4915
|
-
if (ts.isFunctionLike(p))
|
|
4916
|
-
local = true;
|
|
4917
4981
|
}
|
|
4982
|
+
const local = perEvaluationClass(expr);
|
|
4918
4983
|
if (local &&
|
|
4919
4984
|
expr.members.nodes.some((member) => member.name && ts.isPrivateIdentifier(member.name)) &&
|
|
4920
4985
|
!localPrivateFieldsAgree(expr)) {
|
|
@@ -5539,7 +5604,9 @@ function staticCallOn(lowerer, call, access, info, throughValue) {
|
|
|
5539
5604
|
if (date)
|
|
5540
5605
|
return date;
|
|
5541
5606
|
}
|
|
5542
|
-
if ((hasRuntimeStatics(info) &&
|
|
5607
|
+
if ((hasRuntimeStatics(info) &&
|
|
5608
|
+
!access.name.text.startsWith("#") &&
|
|
5609
|
+
!findStaticOn(lowerer, info, access.name.text)?.field) ||
|
|
5543
5610
|
(info.callableBase &&
|
|
5544
5611
|
!findStaticOn(lowerer, info, access.name.text) &&
|
|
5545
5612
|
!findGenericStaticOn(lowerer, info, access.name.text)))
|
|
@@ -5925,7 +5992,9 @@ export function lowerClassValueProperty(lowerer, expr) {
|
|
|
5925
5992
|
if (info?.def.runtime && member !== "name")
|
|
5926
5993
|
return null;
|
|
5927
5994
|
if (info &&
|
|
5928
|
-
((hasRuntimeStatics(info) &&
|
|
5995
|
+
((hasRuntimeStatics(info) &&
|
|
5996
|
+
!member.startsWith("#") &&
|
|
5997
|
+
!findStaticOn(lowerer, info, member)?.field) ||
|
|
5929
5998
|
(info.callableBase && !findStaticOn(lowerer, info, member))))
|
|
5930
5999
|
return {
|
|
5931
6000
|
kind: "dynKeyGet",
|
|
@@ -6142,7 +6211,7 @@ function localSubclassesOf(lowerer, base) {
|
|
|
6142
6211
|
ts.walkPreorder(sf, (node) => {
|
|
6143
6212
|
if ((ts.isClassDeclaration(node) || ts.isClassExpression(node)) &&
|
|
6144
6213
|
node.heritageClauses !== undefined &&
|
|
6145
|
-
|
|
6214
|
+
perEvaluationClass(node)) {
|
|
6146
6215
|
const extended = extendedClassNode(lowerer, node);
|
|
6147
6216
|
if (extended) {
|
|
6148
6217
|
const list = index.get(extended);
|
|
@@ -8473,6 +8542,20 @@ function lowerProgramClassNew(lowerer, expr, declaredInfo, loc) {
|
|
|
8473
8542
|
loc,
|
|
8474
8543
|
});
|
|
8475
8544
|
}
|
|
8545
|
+
/** The supported map layout a contextual type pins for `new Map()`: the type
|
|
8546
|
+
* itself, or the single map arm of a union — a nullable annotation such as
|
|
8547
|
+
* `Map<K, V> | undefined`, or `ReadonlyMap<K, V> | undefined`, where a Map
|
|
8548
|
+
* value can only inhabit the map arm and the no-argument constructor gives
|
|
8549
|
+
* the checker nothing to infer the type arguments from. */
|
|
8550
|
+
function contextualMapLayout(lowerer, ctx) {
|
|
8551
|
+
const mapped = lowerer.mapTypeOf(ctx);
|
|
8552
|
+
if (mapped?.kind === "map")
|
|
8553
|
+
return mapped;
|
|
8554
|
+
if (mapped?.kind !== "union")
|
|
8555
|
+
return null;
|
|
8556
|
+
const arms = (lowerer.unions.get(mapped.unionId)?.arms ?? []).filter((arm) => arm.kind === "map");
|
|
8557
|
+
return arms.length === 1 ? arms[0] : null;
|
|
8558
|
+
}
|
|
8476
8559
|
function assignedThisFieldType(lowerer, expr) {
|
|
8477
8560
|
const parent = expr.parent;
|
|
8478
8561
|
if (!ts.isBinaryExpression(parent) ||
|
|
@@ -8571,6 +8654,9 @@ export function lowerNew(lowerer, expr) {
|
|
|
8571
8654
|
return lowerWithInlineRequireInit(lowerer, req, () => lowerNew(lowerer, expr));
|
|
8572
8655
|
}
|
|
8573
8656
|
}
|
|
8657
|
+
const wrapper = lowerWrapperNew(lowerer, expr);
|
|
8658
|
+
if (wrapper)
|
|
8659
|
+
return wrapper;
|
|
8574
8660
|
const worker = lowerWorkerNew(lowerer, expr);
|
|
8575
8661
|
if (worker)
|
|
8576
8662
|
return worker;
|
|
@@ -8644,7 +8730,15 @@ export function lowerNew(lowerer, expr) {
|
|
|
8644
8730
|
expr.expression.name.text === "Segmenter" &&
|
|
8645
8731
|
lowerer.isStdlibGlobal(expr.expression.expression, "Intl")) {
|
|
8646
8732
|
const args = expr.arguments?.nodes ?? [];
|
|
8647
|
-
|
|
8733
|
+
// An argument whose value IS undefined: exactly undefined, or void. A
|
|
8734
|
+
// union that merely includes undefined may hold a locale or an options
|
|
8735
|
+
// object at run time, and the constructor cannot inspect either — such
|
|
8736
|
+
// an argument is refused below rather than silently read as the default
|
|
8737
|
+
// locale or the default options.
|
|
8738
|
+
const undefinedArg = (arg) => {
|
|
8739
|
+
const flags = lowerer.typeOf(arg).flags;
|
|
8740
|
+
return flags === ts.TypeFlags.Undefined || flags === ts.TypeFlags.Void;
|
|
8741
|
+
};
|
|
8648
8742
|
// A literal language tag: Unicode grapheme clusters have no locale
|
|
8649
8743
|
// tailoring. Only tags of the form language[-script][-region] are
|
|
8650
8744
|
// accepted; each is well-formed, so Node constructs the segmenter
|
|
@@ -8654,27 +8748,28 @@ export function lowerNew(lowerer, expr) {
|
|
|
8654
8748
|
if (args.length > 2 || (args[0] && !undefinedArg(args[0]) && !literalLocale(args[0]))) {
|
|
8655
8749
|
lowerer.noLowering("Intl.Segmenter locale negotiation", expr, "omit the locale, pass undefined, or pass one language tag as a string literal");
|
|
8656
8750
|
}
|
|
8657
|
-
//
|
|
8658
|
-
//
|
|
8659
|
-
//
|
|
8660
|
-
// TypeScript sources keep the
|
|
8751
|
+
// Word segmentation lowers through ICU (scr_intl.c). Sentence
|
|
8752
|
+
// segmentation does not: JavaScript dependencies may construct sentence
|
|
8753
|
+
// segmenters they use only on some paths, so the construction compiles
|
|
8754
|
+
// and their segment() throws SC2020; TypeScript sources keep the
|
|
8755
|
+
// build-time refusal.
|
|
8661
8756
|
const granularities = isJsSourceFile(ts.getSourceFileOfNode(expr))
|
|
8662
8757
|
? ["grapheme", "word", "sentence"]
|
|
8663
|
-
: ["grapheme"];
|
|
8758
|
+
: ["grapheme", "word"];
|
|
8664
8759
|
const options = args[1];
|
|
8665
8760
|
let granularity = "grapheme";
|
|
8666
8761
|
if (options && !undefinedArg(options)) {
|
|
8667
8762
|
// An object literal of `granularity` entries (none: the default; a
|
|
8668
8763
|
// repeated key: the last one, as in JavaScript).
|
|
8669
8764
|
if (!ts.isObjectLiteralExpression(options))
|
|
8670
|
-
lowerer.noLowering("Intl.Segmenter options", options, 'the native segmenter supports default options
|
|
8765
|
+
lowerer.noLowering("Intl.Segmenter options", options, 'the native segmenter supports default options, { granularity: "grapheme" } and { granularity: "word" }; sentence segmentation remains unsupported');
|
|
8671
8766
|
for (const property of options.properties.nodes) {
|
|
8672
8767
|
if (!ts.isPropertyAssignment(property) ||
|
|
8673
8768
|
!(ts.isIdentifier(property.name) || ts.isStringLiteral(property.name)) ||
|
|
8674
8769
|
property.name.text !== "granularity" ||
|
|
8675
8770
|
!ts.isStringLiteral(property.initializer) ||
|
|
8676
8771
|
!granularities.includes(property.initializer.text)) {
|
|
8677
|
-
lowerer.noLowering("Intl.Segmenter options", options, 'the native segmenter supports default options
|
|
8772
|
+
lowerer.noLowering("Intl.Segmenter options", options, 'the native segmenter supports default options, { granularity: "grapheme" } and { granularity: "word" }; sentence segmentation remains unsupported');
|
|
8678
8773
|
}
|
|
8679
8774
|
granularity = property.initializer.text;
|
|
8680
8775
|
}
|
|
@@ -8688,12 +8783,28 @@ export function lowerNew(lowerer, expr) {
|
|
|
8688
8783
|
loc: locOf(arg),
|
|
8689
8784
|
};
|
|
8690
8785
|
});
|
|
8786
|
+
// Grapheme segmentation is the engine-free table-driven segmenter
|
|
8787
|
+
// (scr_grapheme.c). NOTE: once ICU is established everywhere, this fast
|
|
8788
|
+
// path is deleted in favor of ICU's character iterator (design I4).
|
|
8691
8789
|
let result = { kind: "libCall", fn: "intl.segmenterNew", args: [], type: DYN, loc };
|
|
8692
|
-
|
|
8693
|
-
|
|
8694
|
-
|
|
8790
|
+
if (granularity === "word") {
|
|
8791
|
+
// ICU's word iterator at the requested locale; a literal language tag
|
|
8792
|
+
// is the locale, and the empty string means the default locale (what
|
|
8793
|
+
// Node negotiates when the argument is absent or undefined).
|
|
8794
|
+
const tag = args[0] !== undefined && ts.isStringLiteralLike(args[0]) ? args[0].text : "";
|
|
8795
|
+
result = {
|
|
8796
|
+
kind: "libCall",
|
|
8797
|
+
fn: "icu.segmenterWord",
|
|
8798
|
+
args: [strLit(tag, loc)],
|
|
8799
|
+
type: DYN,
|
|
8800
|
+
loc,
|
|
8801
|
+
};
|
|
8802
|
+
}
|
|
8803
|
+
// A sentence segmenter carries its segment() refusal, which coverage
|
|
8804
|
+
// lists as deferred to runtime.
|
|
8805
|
+
if (granularity === "sentence") {
|
|
8695
8806
|
const surface = `Intl.Segmenter segmentation with granularity '${granularity}'`;
|
|
8696
|
-
lowerer.runtimeFences.push(noLoweringDiag(surface, loc, "only grapheme segmenters segment;
|
|
8807
|
+
lowerer.runtimeFences.push(noLoweringDiag(surface, loc, "only grapheme and word segmenters segment; sentence segmenters construct"));
|
|
8697
8808
|
const line = ts.getLineAndCharacterOfPosition(ts.getSourceFileOfNode(expr), loc.start).line;
|
|
8698
8809
|
const refusal = `${surface} is not supported yet [SC2020 at ${loc.file}:${line + 1}]`;
|
|
8699
8810
|
result = {
|
|
@@ -9234,8 +9345,9 @@ export function lowerNew(lowerer, expr) {
|
|
|
9234
9345
|
// starting at 0 (nothing buffered). A literal Buffer encoding folds
|
|
9235
9346
|
// its alias at compile time; any other encoding argument is
|
|
9236
9347
|
// normalized at run time (Node's normalizeEncoding, which throws
|
|
9237
|
-
// ERR_UNKNOWN_ENCODING for an unknown name).
|
|
9238
|
-
//
|
|
9348
|
+
// ERR_UNKNOWN_ENCODING for an unknown name). An encoding that may not
|
|
9349
|
+
// be a string takes strdec.encodingValue, which formats the error
|
|
9350
|
+
// with %s. Omitted means utf8, Node's default.
|
|
9239
9351
|
if (symbol && ts.symbolName(symbol) === "StringDecoder" && lowerer.isStdlibSymbol(symbol)) {
|
|
9240
9352
|
const args = expr.arguments?.nodes ?? [];
|
|
9241
9353
|
if (args.length > 1) {
|
|
@@ -9248,11 +9360,16 @@ export function lowerNew(lowerer, expr) {
|
|
|
9248
9360
|
: encT.isStringLiteralType()
|
|
9249
9361
|
? knownBufEncoding(encT.value)
|
|
9250
9362
|
: undefined;
|
|
9363
|
+
const textual = (type) => type.isUnionType()
|
|
9364
|
+
? ts.constituentTypes(type).every(textual)
|
|
9365
|
+
: (type.flags &
|
|
9366
|
+
(ts.TypeFlags.StringLike | ts.TypeFlags.Undefined | ts.TypeFlags.Null)) !==
|
|
9367
|
+
0;
|
|
9251
9368
|
const encoding = encName !== undefined
|
|
9252
9369
|
? { kind: "strLit", value: encName, type: STRING, loc }
|
|
9253
9370
|
: {
|
|
9254
9371
|
kind: "libCall",
|
|
9255
|
-
fn: "strdec.encoding",
|
|
9372
|
+
fn: textual(encT) ? "strdec.encoding" : "strdec.encodingValue",
|
|
9256
9373
|
args: [lowerer.lowerExprExpecting(encNode, DYN)],
|
|
9257
9374
|
type: STRING,
|
|
9258
9375
|
loc,
|
|
@@ -9357,10 +9474,10 @@ export function lowerNew(lowerer, expr) {
|
|
|
9357
9474
|
}
|
|
9358
9475
|
else if (mapped?.kind !== "map" || contextualSeed) {
|
|
9359
9476
|
const ctx = lowerer.checker.getContextualType(expr);
|
|
9360
|
-
const
|
|
9361
|
-
if (ctx &&
|
|
9477
|
+
const ctxMap = ctx ? contextualMapLayout(lowerer, ctx) : null;
|
|
9478
|
+
if (ctx && ctxMap !== null) {
|
|
9362
9479
|
tsType = ctx;
|
|
9363
|
-
mapped =
|
|
9480
|
+
mapped = ctxMap;
|
|
9364
9481
|
}
|
|
9365
9482
|
}
|
|
9366
9483
|
// `new Map(source)` the checker types `Map<any, any>` because the
|