@scriptc/compiler 0.3.2 → 0.3.4
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 +1202 -64
- package/dist/backend/cycle-analysis.js +6 -1
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-mutability.d.ts +5 -0
- package/dist/backend/cycle-mutability.js +62 -3
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.js +1 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/library-pack.js +1 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/llvm/alloc.js +24 -10
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/alloc.test.js +47 -1
- package/dist/backend/llvm/alloc.test.js.map +1 -1
- 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 +12 -1
- package/dist/backend/llvm/call-lifetimes.js +41 -11
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +85 -1
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/classes.js +87 -36
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +6 -1
- package/dist/backend/llvm/common.js +8 -1
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +5 -0
- package/dist/backend/llvm/dense-array-access.js +3 -3
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +44 -1
- package/dist/backend/llvm/dyn.js +251 -36
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +77 -14
- package/dist/backend/llvm/emitter.js +461 -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 +52 -1
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +9 -0
- package/dist/backend/llvm/expr-bytes.js +169 -63
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.js +16 -2
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +3 -1
- package/dist/backend/llvm/expr-calls.js +57 -2
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +57 -19
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +19 -8
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +28 -30
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +8 -4
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +35 -32
- package/dist/backend/llvm/expr-stream-bridges.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/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/intern-tables.test.d.ts +1 -0
- package/dist/backend/llvm/intern-tables.test.js +77 -0
- package/dist/backend/llvm/intern-tables.test.js.map +1 -0
- package/dist/backend/llvm/lib-datagram.js +10 -0
- package/dist/backend/llvm/lib-datagram.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +255 -29
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +176 -7
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +25 -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.d.ts +5 -0
- package/dist/backend/llvm/lib-shared.js +212 -1
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +184 -0
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/lib-test.js +9 -0
- package/dist/backend/llvm/lib-test.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +7 -3
- 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 +2 -0
- package/dist/backend/llvm/local-union-storage.js +5 -0
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +1 -0
- 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 +24 -0
- package/dist/backend/llvm/map-number-lookup.js +88 -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 +158 -0
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -0
- package/dist/backend/llvm/map-read-lifetimes.d.ts +9 -0
- package/dist/backend/llvm/map-read-lifetimes.js +90 -1
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +129 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +9 -0
- package/dist/backend/llvm/publish.js +25 -4
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/record-results.d.ts +8 -5
- package/dist/backend/llvm/record-results.js +20 -12
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +13 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +19 -2
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/regions.d.ts +5 -1
- package/dist/backend/llvm/regions.js +24 -10
- package/dist/backend/llvm/regions.js.map +1 -1
- package/dist/backend/llvm/serialized-ir-emission.test.js +2 -0
- package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +56 -10
- package/dist/backend/llvm/shapes.js +178 -39
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +61 -3
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/stack-objects.js +16 -4
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/stack-objects.test.js +3 -0
- package/dist/backend/llvm/stack-objects.test.js.map +1 -1
- package/dist/backend/llvm/string-reads.js +2 -2
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/string-slices.js +2 -2
- package/dist/backend/llvm/string-slices.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +11 -0
- package/dist/backend/llvm/walkers.js +106 -10
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/may-throw.js +13 -4
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +5 -2
- package/dist/backend/native/executable.js +27 -8
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +2 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +4 -4
- package/dist/backend/native-codegen-core.js +4 -6
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.test.js +7 -8
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +3 -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/publication.js +3 -1
- 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-targets.test.js +2 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +2 -1
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/target-diagnostics.js +11 -1
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +4 -1
- package/dist/backend/target-diagnostics.test.js.map +1 -1
- package/dist/backend/warm-cache.js +1 -0
- package/dist/backend/warm-cache.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 +1 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +1 -0
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/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 +5 -1
- package/dist/frontend/experimental-import.js +28 -3
- package/dist/frontend/experimental-import.js.map +1 -1
- package/dist/frontend/lowering/assert-instances.d.ts +38 -0
- package/dist/frontend/lowering/assert-instances.js +269 -0
- package/dist/frontend/lowering/assert-instances.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/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.d.ts +18 -0
- package/dist/frontend/lowering/builtins/compression.js +178 -4
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/constants.js +7 -2
- package/dist/frontend/lowering/builtins/constants.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.d.ts +6 -0
- package/dist/frontend/lowering/builtins/crypto.js +526 -121
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.js +23 -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/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 +44 -11
- package/dist/frontend/lowering/builtins/module-calls.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 +107 -14
- package/dist/frontend/lowering/builtins/process.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/timers.d.ts +3 -0
- package/dist/frontend/lowering/builtins/timers.js +109 -23
- package/dist/frontend/lowering/builtins/timers.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 +26 -2
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +2 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +171 -13
- 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 +4 -7
- package/dist/frontend/lowering/containers/array-callbacks.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/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/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/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 +16 -12
- package/dist/frontend/lowering/expressions/object-literals.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/intern-tables.d.ts +13 -0
- package/dist/frontend/lowering/intern-tables.js +536 -0
- package/dist/frontend/lowering/intern-tables.js.map +1 -0
- package/dist/frontend/lowering/lower-array-sort.d.ts +12 -1
- package/dist/frontend/lowering/lower-array-sort.js +561 -191
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.test.js +4 -2
- package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +702 -63
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.d.ts +6 -3
- package/dist/frontend/lowering/lower-async-iteration.js +259 -4
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +118 -12
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +11 -2
- package/dist/frontend/lowering/lower-classes.js +76 -9
- 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-dgram.js +77 -52
- package/dist/frontend/lowering/lower-dgram.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 +124 -22
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +6 -0
- package/dist/frontend/lowering/lower-inspect.js +240 -49
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.js +1 -1
- package/dist/frontend/lowering/lower-mock.d.ts +11 -0
- package/dist/frontend/lowering/lower-mock.js +504 -0
- package/dist/frontend/lowering/lower-mock.js.map +1 -0
- package/dist/frontend/lowering/lower-modules.d.ts +1 -1
- package/dist/frontend/lowering/lower-modules.js +14 -3
- 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.d.ts +3 -0
- package/dist/frontend/lowering/lower-server.js +419 -44
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +7 -1
- package/dist/frontend/lowering/lower-stdlib.js +10 -3
- 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 +69 -14
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +10 -6
- package/dist/frontend/lowering/lower-stream.js +1020 -49
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-test.js +86 -8
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +45 -5
- package/dist/frontend/lowering/lowerer.js +317 -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/pairs-snapshot.d.ts +6 -0
- package/dist/frontend/lowering/pairs-snapshot.js +49 -0
- package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
- 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 +11 -3
- package/dist/frontend/lowering/surfaces.js +334 -37
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/zlib-constants.d.ts +1 -0
- package/dist/frontend/lowering/zlib-constants.js +181 -0
- package/dist/frontend/lowering/zlib-constants.js.map +1 -0
- package/dist/frontend/mock-shapes.d.ts +10 -0
- package/dist/frontend/mock-shapes.js +76 -0
- package/dist/frontend/mock-shapes.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 +3 -3
- package/dist/frontend/program.js +25 -18
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/resolve.d.ts +4 -0
- package/dist/frontend/resolve.js +15 -1
- package/dist/frontend/resolve.js.map +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 +3 -2
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +21 -1
- package/dist/frontend/type-mapper.js +245 -27
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.js +7 -5
- 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 +115 -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 +438 -46
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/int32-slots.js +1 -0
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/ir.d.ts +84 -17
- package/dist/ir/ir.js +54 -1
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +1 -0
- package/dist/ir/runtime-features.js +111 -7
- package/dist/ir/runtime-features.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 +295 -14
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +60 -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/cli.js +1 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +1 -3
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/prepare.js +4 -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 +1279 -221
|
@@ -1,10 +1,16 @@
|
|
|
1
|
+
import { lowerProtocolPropertyRead } from "./class-protocol-dispatch.js";
|
|
1
2
|
import { generatorDrain } from "./iterator-adapters.js";
|
|
3
|
+
import { lowerEventObjectProperty, lowerEventObjectPropertyWrite } from "./lower-event-target.js";
|
|
2
4
|
import { lowerEventStaticProperty } from "./builtins/numbers.js";
|
|
3
5
|
import { lowerUnionEquality, tagEqualityMayMissAlias } from "./strict-equality.js";
|
|
4
6
|
import { isOptionalProcessStreamProperty } from "./builtins/process.js";
|
|
5
7
|
import { lowerWorkerMetadata } from "./builtins/workers.js";
|
|
8
|
+
import { lowerBlobInstanceof } from "./builtins/blob.js";
|
|
9
|
+
import { lowerKeyObjectInstanceof } from "./builtins/key-object.js";
|
|
10
|
+
import { STATS_TYPE_TESTS } from "./builtins/filesystem.js";
|
|
6
11
|
import { threadsImportOf } from "../threads-import.js";
|
|
7
12
|
import { experimentalImportOf, lifetimeRegionMemberOf } from "../experimental-import.js";
|
|
13
|
+
import { lowerInternTableProperty } from "./intern-tables.js";
|
|
8
14
|
import { dynUndefinedExpr, nodeThrowExpr, numLit, strLit, varRef } from "../../ir/build.js";
|
|
9
15
|
import { InternalCompilerError } from "../../errors.js";
|
|
10
16
|
import { SYMBOL_T } from "../../ir/ir.js";
|
|
@@ -17,6 +23,7 @@ import { literalUnionArm } from "../union-discriminants.js";
|
|
|
17
23
|
* ToBoolean/ToString coercion helpers, and field/element reads and writes
|
|
18
24
|
* (FieldTarget). */
|
|
19
25
|
import * as ts from "../ts7/adapter.js";
|
|
26
|
+
import { isZlibStreamMember, lowerZlibStreamBytesWritten } from "./builtins/compression.js";
|
|
20
27
|
import { constituentTypes } from "../ts7/checker.js";
|
|
21
28
|
import { dirname } from "node:path";
|
|
22
29
|
import * as posix from "node:path/posix";
|
|
@@ -24,7 +31,7 @@ import { checkedClassAssertion, checkedClassUnionAssertion } from "./class-asser
|
|
|
24
31
|
import { checkedArmExtraction } from "./coercions/unions.js";
|
|
25
32
|
import { narrowClassUnion, narrowStoredClassValue } from "./class-unions.js";
|
|
26
33
|
import { lowerUnionFieldRead, lowerUnionFieldWrite } from "./expressions/union-fields.js";
|
|
27
|
-
import { captureContextArguments } from "./function-context.js";
|
|
34
|
+
import { captureContextArguments, declareContextLocal } from "./function-context.js";
|
|
28
35
|
import { OBJECT_CALLABLE_VALUES } from "./surfaces.js";
|
|
29
36
|
import { wasiGuestPath } from "../../wasi-paths.js";
|
|
30
37
|
import { BIGINT_T, BYTES_ELEMENT_NAME, BOOL, CAUGHT, DYN, DYN_HANDLE_KINDS, F64, NULL_T, REF_TRUTHY_KINDS, REGEX, RUNTIME_ERROR_CLASSES, SEARCH_PARAMS_T, STRING, UNDEFINED_T, VOID, arrayOf, canAdaptDynFuncTo, canDynCheckTo, canBoxFuncIntoDyn, funcOf, isDynTypedRefType, isSupportedArrayElem, isUnitType, shapeHasAccessorSlots, typeEquals, typeKey, unionContainerArmsOk, } from "../../ir/ir.js";
|
|
@@ -50,7 +57,7 @@ import { funcTypeFromParamShapes } from "./call-signatures.js";
|
|
|
50
57
|
import { implicitMonoFile, objLitGenericFnInfoOf, objLitGenericFnNodeOf, requireObjLitGenericReceiver, } from "./generic-functions.js";
|
|
51
58
|
import { lowerTaggedTemplate } from "./lower-calls.js";
|
|
52
59
|
import { mixinFnOfCallee } from "./lower-mixins.js";
|
|
53
|
-
import { isConstAssertionTypeNode, isGenericCallableMemberType, isOsConstantsType, isParseArgsDynTypeName, underConstAssertion, unitOnlyUnion, withUnitArm, } from "../type-mapper.js";
|
|
60
|
+
import { isConstAssertionTypeNode, isGenericCallableMemberType, isLegacyUrlSymbol, isOsConstantsType, isParseArgsDynTypeName, underConstAssertion, unitOnlyUnion, withUnitArm, } from "../type-mapper.js";
|
|
54
61
|
import { iteratorResultValueRead, lowerYield } from "./lower-generators.js";
|
|
55
62
|
import { errorPropertyRead, errorPropertyWrite, errorToStringCall } from "./error-methods.js";
|
|
56
63
|
import { lowerStreamProperty, lowerStreamStateProperty, streamSidesOf } from "./lower-stream.js";
|
|
@@ -79,6 +86,7 @@ import { lowerUrlAssignment } from "./builtins/url.js";
|
|
|
79
86
|
import { jsBindingHasOpenWrites } from "./lower-stmts.js";
|
|
80
87
|
import { checkedClassInstanceOf } from "./class-construction.js";
|
|
81
88
|
import { lowerModuleNamespaceElement } from "./module-namespace-elements.js";
|
|
89
|
+
import { isPerfEntryType, perfEntryTag } from "./builtins/performance.js";
|
|
82
90
|
/** A template piece's RAW text (String.raw's contract: escapes stay
|
|
83
91
|
* characters). 7's client AST ships no rawText at runtime (the typing
|
|
84
92
|
* declares it; the serialized node data omits it), so the raw span comes
|
|
@@ -855,6 +863,8 @@ function lowerExprInner(lowerer, expr) {
|
|
|
855
863
|
lowerer.noLowering("publish (@scriptc/threads) as a value", expr, "call publish(value) directly");
|
|
856
864
|
if (experimentalImportOf(lowerer.program, expr) === "LifetimeRegion")
|
|
857
865
|
lowerer.noLowering("LifetimeRegion (@scriptc/experimental) as a value", expr, "construct regions with new LifetimeRegion()");
|
|
866
|
+
if (experimentalImportOf(lowerer.program, expr) === "InternTable")
|
|
867
|
+
lowerer.noLowering("InternTable (@scriptc/experimental) as a value", expr, 'open tables with new InternTable("name")');
|
|
858
868
|
}
|
|
859
869
|
{
|
|
860
870
|
const bi = lowerer.builtinImportOf(expr);
|
|
@@ -1427,6 +1437,11 @@ function lowerExprInner(lowerer, expr) {
|
|
|
1427
1437
|
if (member !== null)
|
|
1428
1438
|
lowerer.noLowering(`LifetimeRegion.${member} (@scriptc/experimental) as a value`, expr, `call region.${member}(${member === "run" ? "fn" : ""}) directly`);
|
|
1429
1439
|
}
|
|
1440
|
+
{
|
|
1441
|
+
const table = lowerInternTableProperty(lowerer, expr);
|
|
1442
|
+
if (table)
|
|
1443
|
+
return table;
|
|
1444
|
+
}
|
|
1430
1445
|
// Expando statics may still be absent even when JS inference sees
|
|
1431
1446
|
// the eventual assignment's scalar type. Preserve the checked value.
|
|
1432
1447
|
const staticField = lowerStaticFieldRead(lowerer, expr);
|
|
@@ -1786,7 +1801,7 @@ function lowerExprInner(lowerer, expr) {
|
|
|
1786
1801
|
// attached this name to it (`exports.<name> =` nowhere in the
|
|
1787
1802
|
// file), the honest answer is undefined. tsc types the read off the
|
|
1788
1803
|
// REPLACEMENT (its CJS model is identity-blind), which is exactly
|
|
1789
|
-
// the
|
|
1804
|
+
// the undiagnosed divergence this lowering closes. Reads in modules with
|
|
1790
1805
|
// real `exports.<name> =` attachments keep their fences.
|
|
1791
1806
|
{
|
|
1792
1807
|
const ex = lowerReplacedExportsRead(lowerer, expr);
|
|
@@ -1801,6 +1816,13 @@ function lowerExprInner(lowerer, expr) {
|
|
|
1801
1816
|
if (tm)
|
|
1802
1817
|
return tm;
|
|
1803
1818
|
}
|
|
1819
|
+
// Property signatures of class-backed protocols read implementing
|
|
1820
|
+
// classes' fields directly.
|
|
1821
|
+
if (!hasOptionalChainGuard(expr.expression)) {
|
|
1822
|
+
const typed = lowerProtocolPropertyRead(lowerer, expr);
|
|
1823
|
+
if (typed)
|
|
1824
|
+
return typed;
|
|
1825
|
+
}
|
|
1804
1826
|
const handled = lowerer.lowerProcessEnvGet(expr) ??
|
|
1805
1827
|
lowerer.lowerServerProperty(expr) ??
|
|
1806
1828
|
// diagnostics_channel Channel receivers — name/hasSubscribers
|
|
@@ -1831,6 +1853,7 @@ function lowerExprInner(lowerer, expr) {
|
|
|
1831
1853
|
// the inner access maps no type of its own.
|
|
1832
1854
|
lowerStreamStateProperty(lowerer, expr) ??
|
|
1833
1855
|
lowerStreamObjectProperty(lowerer, expr) ??
|
|
1856
|
+
lowerEventObjectProperty(lowerer, expr) ??
|
|
1834
1857
|
lowerer.lowerUnionProperty(expr) ??
|
|
1835
1858
|
lowerer.lowerFieldRead(expr);
|
|
1836
1859
|
// A union-typed field read narrows like an identifier when the
|
|
@@ -2078,7 +2101,8 @@ function lowerExprInner(lowerer, expr) {
|
|
|
2078
2101
|
if (isParseArgsDynProperty(lowerer, expr) ||
|
|
2079
2102
|
isStatFsDynProperty(lowerer, expr) ||
|
|
2080
2103
|
segmentDataProperty ||
|
|
2081
|
-
osConstants
|
|
2104
|
+
osConstants ||
|
|
2105
|
+
isLegacyUrlSymbol(lowerer.checker.getSymbolAtLocation(expr.name), lowerer)) {
|
|
2082
2106
|
const recv = lowerer.lowerExpr(expr.expression);
|
|
2083
2107
|
if (recv.type.kind === "dyn") {
|
|
2084
2108
|
const key = {
|
|
@@ -4313,10 +4337,10 @@ export function lowerIntrinsicProperty(lowerer, expr) {
|
|
|
4313
4337
|
const receiver = lowerer.lowerExpr(expr.expression);
|
|
4314
4338
|
return { kind: "libCall", fn: "stats.size", args: [receiver], type: F64, loc: locOf(expr) };
|
|
4315
4339
|
}
|
|
4316
|
-
if (
|
|
4340
|
+
if (Object.hasOwn(STATS_TYPE_TESTS, name)) {
|
|
4317
4341
|
lowerer.unsupported("SC1090", expr, `Stats methods as values (call '${name}' directly)`);
|
|
4318
4342
|
}
|
|
4319
|
-
lowerer.noLowering(`Stats.${name}`, expr, "isFile(), isDirectory(), isSymbolicLink(), dev, ino, size, blocks,
|
|
4343
|
+
lowerer.noLowering(`Stats.${name}`, expr, "isFile(), isDirectory(), isSymbolicLink(), isBlockDevice(), isCharacterDevice(), isFIFO(), isSocket(), dev, mode, nlink, uid, gid, rdev, blksize, ino, size, blocks, atimeMs, mtimeMs, ctimeMs, birthtimeMs, atime, mtime, ctime, and birthtime are the supported Stats members", lowerer.checker.getSymbolAtLocation(expr.name));
|
|
4320
4344
|
}
|
|
4321
4345
|
if (kind === "date") {
|
|
4322
4346
|
const methods = new Set([
|
|
@@ -7149,6 +7173,8 @@ export function ensureString(lowerer, e, node) {
|
|
|
7149
7173
|
// prints its elements like an array (not lowered — fenced) — every
|
|
7150
7174
|
// other record is Object.prototype.toString's constant.
|
|
7151
7175
|
const shape = lowerer.shapes.get(e.type.shapeId);
|
|
7176
|
+
if (isPerfEntryType(lowerer, e.type))
|
|
7177
|
+
return perfEntryTag(lowerer, e, e.type, e.loc);
|
|
7152
7178
|
if (shape && !shape.tuple && !shape.fields.some((f) => f.name === "toString")) {
|
|
7153
7179
|
return { kind: "toString", operand: e, type: STRING, loc: e.loc };
|
|
7154
7180
|
}
|
|
@@ -7299,7 +7325,23 @@ export function lowerAsExpression(lowerer, expr) {
|
|
|
7299
7325
|
lowerer.unsupported("SC1090", expr, "opaque structural views of classes or accessor records (name the property's concrete type to retain native accessor dispatch)");
|
|
7300
7326
|
}
|
|
7301
7327
|
const boxed = lowerer.coerceInto(expr, inner, DYN);
|
|
7302
|
-
|
|
7328
|
+
// Only references box live; a scalar or unit source (`value as
|
|
7329
|
+
// unknown as View`) is an ordinary snapshot.
|
|
7330
|
+
const seen = new Set();
|
|
7331
|
+
const live = (type) => {
|
|
7332
|
+
if (type.kind === "record" ||
|
|
7333
|
+
type.kind === "array" ||
|
|
7334
|
+
type.kind === "bytes" ||
|
|
7335
|
+
isDynTypedRefType(type))
|
|
7336
|
+
return true;
|
|
7337
|
+
if (type.kind !== "union" || seen.has(type.unionId))
|
|
7338
|
+
return false;
|
|
7339
|
+
seen.add(type.unionId);
|
|
7340
|
+
return lowerer.unions.get(type.unionId)?.arms.some(live) ?? false;
|
|
7341
|
+
};
|
|
7342
|
+
return boxed.kind === "dynFrom" && live(boxed.value.type)
|
|
7343
|
+
? { ...boxed, liveRef: true }
|
|
7344
|
+
: boxed;
|
|
7303
7345
|
}
|
|
7304
7346
|
// Collection assertions are interface views only: their backing
|
|
7305
7347
|
// value must already have the same native key/element/value layout.
|
|
@@ -7943,6 +7985,13 @@ export function lowerBinary(lowerer, expr) {
|
|
|
7943
7985
|
if (ts.isPropertyAccessExpression(expr.left) || ts.isElementAccessExpression(expr.left)) {
|
|
7944
7986
|
fenceNodeModuleMutation(lowerer, expr.left, "assignment");
|
|
7945
7987
|
}
|
|
7988
|
+
// The writable Event accessors on Event subclass instances, in value
|
|
7989
|
+
// position (`const r = (event.returnValue = false)`).
|
|
7990
|
+
if (op === ts.SyntaxKind.EqualsToken && ts.isPropertyAccessExpression(expr.left)) {
|
|
7991
|
+
const eventWrite = lowerEventObjectPropertyWrite(lowerer, expr.left, expr.right);
|
|
7992
|
+
if (eventWrite)
|
|
7993
|
+
return eventWrite;
|
|
7994
|
+
}
|
|
7946
7995
|
// `x = e` in EXPRESSION position (`while ((idx = s.indexOf("\n")) !== -1)`,
|
|
7947
7996
|
// `f(x = v)`): evaluate e once, write the binding, yield the assigned
|
|
7948
7997
|
// value — JS evaluation order. Variable targets only (locals and module
|
|
@@ -8279,14 +8328,24 @@ export function lowerBinary(lowerer, expr) {
|
|
|
8279
8328
|
reference.kind === "union" ||
|
|
8280
8329
|
DYN_HANDLE_KINDS.has(reference.kind)) &&
|
|
8281
8330
|
lowerer.dynConvertible(reference)) {
|
|
8331
|
+
// Records, arrays and byte views compare by the capsule identity
|
|
8332
|
+
// their dyn reads produce, including when they arrive through a
|
|
8333
|
+
// union (an optional array field read from a typed record).
|
|
8334
|
+
const liveArm = (type) => {
|
|
8335
|
+
if (type.kind === "array" || type.kind === "bytes")
|
|
8336
|
+
return true;
|
|
8337
|
+
const shape = type.kind === "record" ? lowerer.shapes.get(type.shapeId) : undefined;
|
|
8338
|
+
return !!shape && (shape.fields.length > 0 || shape.indexValue !== undefined);
|
|
8339
|
+
};
|
|
8282
8340
|
const boxed = {
|
|
8283
8341
|
kind: "dynFrom",
|
|
8284
8342
|
value: scalarSide,
|
|
8285
8343
|
type: DYN,
|
|
8286
8344
|
loc: scalarSide.loc,
|
|
8287
8345
|
...(reference.kind === "record" ||
|
|
8288
|
-
reference
|
|
8289
|
-
reference.kind === "
|
|
8346
|
+
liveArm(reference) ||
|
|
8347
|
+
(reference.kind === "union" &&
|
|
8348
|
+
(lowerer.unions.get(reference.unionId)?.arms.some(liveArm) ?? false))
|
|
8290
8349
|
? { liveRef: true }
|
|
8291
8350
|
: {}),
|
|
8292
8351
|
};
|
|
@@ -8550,8 +8609,8 @@ export function lowerBinary(lowerer, expr) {
|
|
|
8550
8609
|
// the checker typed the binding as `string`. An optional string is not
|
|
8551
8610
|
// itself a string operand for `+`: `undefined + 1` and
|
|
8552
8611
|
// `undefined + undefined` are NaN, while a present string concatenates.
|
|
8553
|
-
// Keep this predicate exact so a nullable string does not
|
|
8554
|
-
//
|
|
8612
|
+
// Keep this predicate exact so a nullable string does not take the
|
|
8613
|
+
// string path either.
|
|
8555
8614
|
const optionalStringType = (type) => {
|
|
8556
8615
|
if (type.kind !== "union")
|
|
8557
8616
|
return false;
|
|
@@ -9545,6 +9604,7 @@ function typeofAnswer(arm) {
|
|
|
9545
9604
|
case "searchParams":
|
|
9546
9605
|
case "stats":
|
|
9547
9606
|
case "fileHandle":
|
|
9607
|
+
case "dir":
|
|
9548
9608
|
case "spawnRes":
|
|
9549
9609
|
case "child":
|
|
9550
9610
|
case "netServer":
|
|
@@ -10175,6 +10235,14 @@ export function lowerInstanceOf(lowerer, expr, loc) {
|
|
|
10175
10235
|
return { kind: "libCall", fn: "event.is", args: [value, kind], type: BOOL, loc };
|
|
10176
10236
|
}
|
|
10177
10237
|
}
|
|
10238
|
+
{
|
|
10239
|
+
const blob = lowerBlobInstanceof(lowerer, expr);
|
|
10240
|
+
if (blob)
|
|
10241
|
+
return blob;
|
|
10242
|
+
const keyObject = lowerKeyObjectInstanceof(lowerer, expr);
|
|
10243
|
+
if (keyObject)
|
|
10244
|
+
return keyObject;
|
|
10245
|
+
}
|
|
10178
10246
|
if (lowerer.isStdlibGlobal(expr.right, "SharedArrayBuffer")) {
|
|
10179
10247
|
const value = lowerer.coerceInto(expr.left, lowerer.lowerExpr(expr.left), DYN);
|
|
10180
10248
|
return { kind: "libCall", fn: "sharedArrayBuffer.is", args: [value], type: BOOL, loc };
|
|
@@ -10629,7 +10697,7 @@ function lowerPrivateIn(lowerer, expr, priv, loc) {
|
|
|
10629
10697
|
// A GENERIC family: JS has ONE runtime class and ONE brand for every
|
|
10630
10698
|
// instantiation, while these layouts mint one class per instantiation
|
|
10631
10699
|
// — a cross-instantiation check would answer false where Node says
|
|
10632
|
-
// true, so the family
|
|
10700
|
+
// true, so the family reports SC1090 instead of splitting the brand.
|
|
10633
10701
|
if (info.generic || info.genericInstance) {
|
|
10634
10702
|
lowerer.unsupported("SC1090", expr, `'${pname} in …' inside a generic class (JS shares one brand across every instantiation; these layouts mint one class per instantiation)`);
|
|
10635
10703
|
}
|
|
@@ -13027,8 +13095,8 @@ function lowerFieldCompoundValue(lowerer, access, op, rhsNode, loc) {
|
|
|
13027
13095
|
// accounting; dot spelling only — symbol-keyed element targets are
|
|
13028
13096
|
// static fields): read the member (dynKeyGet), VALIDATE it as a
|
|
13029
13097
|
// number (dynCheck — a non-number member throws the catchable
|
|
13030
|
-
// TypeError where JS would ToNumber-coerce;
|
|
13031
|
-
// NaN — SEMANTICS.md), combine, write back (dyn.keySet). The
|
|
13098
|
+
// TypeError where JS would ToNumber-coerce; it throws instead of
|
|
13099
|
+
// producing NaN — SEMANTICS.md), combine, write back (dyn.keySet). The
|
|
13032
13100
|
// receiver and member read are saved before evaluating the RHS.
|
|
13033
13101
|
if (ts.isPropertyAccessExpression(access)) {
|
|
13034
13102
|
let probed = tryLowerExpression(lowerer, access.expression);
|
|
@@ -13102,22 +13170,33 @@ function lowerFieldCompoundValue(lowerer, access, op, rhsNode, loc) {
|
|
|
13102
13170
|
target.obj = save(target.obj, "%compoundReceiver");
|
|
13103
13171
|
// Accessors observe getter, RHS side effects, then setter, all through
|
|
13104
13172
|
// the saved receiver.
|
|
13105
|
-
const
|
|
13173
|
+
const fieldRead = lowerer.fieldGetExpr(target, locOf(access), access);
|
|
13174
|
+
// `+=` on a stored string field reads it into a mutable local, so the
|
|
13175
|
+
// concat below can append to that local in place.
|
|
13176
|
+
const storedString = op === "+" &&
|
|
13177
|
+
fieldRead.type.kind === "string" &&
|
|
13178
|
+
target.fieldType.kind === "string" &&
|
|
13179
|
+
(target.container === "class" || target.container === "record");
|
|
13180
|
+
let read;
|
|
13181
|
+
if (storedString) {
|
|
13182
|
+
const old = declareContextLocal(lowerer.ctx, "%compoundOld", STRING, true, undefined, undefined);
|
|
13183
|
+
body.push({ kind: "varDecl", localId: old.id, init: fieldRead, loc: fieldRead.loc });
|
|
13184
|
+
read = varRef(old.id, STRING, fieldRead.loc);
|
|
13185
|
+
}
|
|
13186
|
+
else {
|
|
13187
|
+
read = save(fieldRead, "%compoundOld");
|
|
13188
|
+
}
|
|
13106
13189
|
const rhs = save(rhsNode ? lowerer.lowerExpr(rhsNode) : { kind: "numLit", value: 1, type: F64, loc }, "%compoundRhs");
|
|
13107
13190
|
const numericRhs = rhs.type.kind === "dyn" && isJsSourceFile(access.getSourceFile())
|
|
13108
13191
|
? { kind: "dynCheck", value: rhs, type: F64, loc: rhs.loc }
|
|
13109
13192
|
: lowerOptionalNumber(lowerer, rhs, loc);
|
|
13110
13193
|
let value;
|
|
13194
|
+
let appended = null;
|
|
13111
13195
|
const numericRead = lowerOptionalNumber(lowerer, read, loc, access);
|
|
13112
13196
|
const bigintValue = rhsNode ? bigintCompoundValue(op, read, rhs, loc) : null;
|
|
13113
13197
|
if (op === "+" && read.type.kind === "string") {
|
|
13114
|
-
|
|
13115
|
-
|
|
13116
|
-
left: read,
|
|
13117
|
-
right: lowerer.ensureString(rhs, rhsNode ?? access),
|
|
13118
|
-
type: STRING,
|
|
13119
|
-
loc,
|
|
13120
|
-
};
|
|
13198
|
+
appended = lowerer.ensureString(rhs, rhsNode ?? access);
|
|
13199
|
+
value = { kind: "strConcat", left: read, right: appended, type: STRING, loc };
|
|
13121
13200
|
}
|
|
13122
13201
|
else if (numericRead.type.kind === "f64" && numericRhs.type.kind === "f64") {
|
|
13123
13202
|
value = { kind: "bin", op, left: numericRead, right: numericRhs, type: F64, loc };
|
|
@@ -13142,6 +13221,26 @@ function lowerFieldCompoundValue(lowerer, access, op, rhsNode, loc) {
|
|
|
13142
13221
|
else {
|
|
13143
13222
|
lowerer.unsupported("SC1043", access);
|
|
13144
13223
|
}
|
|
13224
|
+
if (storedString && rhs.type.kind === "string" && read.kind === "varRef" && appended !== null) {
|
|
13225
|
+
// The field gives up its value before the concat (no code runs in
|
|
13226
|
+
// between: both operands are already strings), and the concat is the
|
|
13227
|
+
// self-append `old = old + rhs`, which hands the local's reference to
|
|
13228
|
+
// the runtime: the old string is then uniquely owned unless something
|
|
13229
|
+
// else holds it, and is appended to in place. Repeated `this.text += s`
|
|
13230
|
+
// is linear rather than a copy per append.
|
|
13231
|
+
const oldId = read.localId;
|
|
13232
|
+
const oldLoc = read.loc;
|
|
13233
|
+
const oldRef = () => varRef(oldId, STRING, oldLoc);
|
|
13234
|
+
const concat = {
|
|
13235
|
+
kind: "strConcat",
|
|
13236
|
+
left: oldRef(),
|
|
13237
|
+
right: appended,
|
|
13238
|
+
type: STRING,
|
|
13239
|
+
loc,
|
|
13240
|
+
};
|
|
13241
|
+
body.push(lowerer.fieldSetStmt(target, { kind: "strLit", value: "", type: STRING, loc }, loc, access), { kind: "assign", localId: oldId, value: concat, loc }, lowerer.fieldSetStmt(target, oldRef(), loc, access));
|
|
13242
|
+
return { kind: "seqExpr", stmts: body, result: oldRef(), type: STRING, loc };
|
|
13243
|
+
}
|
|
13145
13244
|
const result = save(value, "%compoundResult");
|
|
13146
13245
|
body.push(lowerer.fieldSetStmt(target, lowerer.coerceInto(access, result, target.fieldType), loc, access));
|
|
13147
13246
|
return { kind: "seqExpr", stmts: body, result, type: result.type, loc };
|
|
@@ -13158,6 +13257,9 @@ function lowerStreamObjectProperty(lowerer, expr) {
|
|
|
13158
13257
|
const info = lowerer.classes.get(recvT.className);
|
|
13159
13258
|
if (!info || streamSidesOf(lowerer, info) === null)
|
|
13160
13259
|
return null;
|
|
13260
|
+
if (expr.name.text === "bytesWritten" && isZlibStreamMember(lowerer, expr)) {
|
|
13261
|
+
return lowerZlibStreamBytesWritten(lowerer, expr);
|
|
13262
|
+
}
|
|
13161
13263
|
return lowerStreamProperty(lowerer, expr, info);
|
|
13162
13264
|
}
|
|
13163
13265
|
/** The primitive-constructor closure (`String`/`Number`/`Boolean` as a
|