@scriptc/compiler 0.2.7 → 0.2.8
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 +2 -0
- package/dist/backend/llvm/alloc.d.ts +3 -0
- package/dist/backend/llvm/alloc.js +54 -13
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/blocks.d.ts +9 -0
- package/dist/backend/llvm/blocks.js +9 -0
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/borrowed-receivers.d.ts +7 -0
- package/dist/backend/llvm/borrowed-receivers.js +39 -0
- package/dist/backend/llvm/borrowed-receivers.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.d.ts +4 -1
- package/dist/backend/llvm/call-lifetimes.js +14 -3
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +8 -3
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/checked-narrows.d.ts +24 -0
- package/dist/backend/llvm/checked-narrows.js +108 -0
- package/dist/backend/llvm/checked-narrows.js.map +1 -0
- package/dist/backend/llvm/checked-narrows.test.d.ts +1 -0
- package/dist/backend/llvm/checked-narrows.test.js +208 -0
- package/dist/backend/llvm/checked-narrows.test.js.map +1 -0
- package/dist/backend/llvm/classes.d.ts +13 -1
- package/dist/backend/llvm/classes.js +26 -18
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +32 -3
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/debug-info.d.ts +6 -2
- package/dist/backend/llvm/debug-info.js +11 -1
- package/dist/backend/llvm/debug-info.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +89 -0
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +4 -0
- package/dist/backend/llvm/dyn.js +31 -20
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +184 -11
- package/dist/backend/llvm/emitter.js +1189 -125
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +21 -1
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +4 -4
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +1 -1
- package/dist/backend/llvm/expr-bytes.js +85 -8
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.js +29 -21
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +5 -0
- package/dist/backend/llvm/expr-calls.js +55 -10
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +7 -1
- package/dist/backend/llvm/expr-containers.js +230 -27
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-control.js +25 -10
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +72 -21
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-island.js +3 -8
- package/dist/backend/llvm/expr-island.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +41 -12
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +50 -2
- package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +28 -14
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +41 -31
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.js +6 -3
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/layouts.d.ts +2 -1
- package/dist/backend/llvm/layouts.js +2 -2
- package/dist/backend/llvm/layouts.js.map +1 -1
- package/dist/backend/llvm/lib-abi.js +10 -0
- package/dist/backend/llvm/lib-abi.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +7 -11
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +8 -8
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +1 -0
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +73 -13
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +7 -3
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.js +10 -6
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +3 -2
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.d.ts +18 -0
- package/dist/backend/llvm/map-number-lookup.js +62 -0
- package/dist/backend/llvm/map-number-lookup.js.map +1 -0
- package/dist/backend/llvm/map-read-lifetimes.d.ts +6 -0
- package/dist/backend/llvm/map-read-lifetimes.js +24 -3
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +38 -19
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.d.ts +68 -0
- package/dist/backend/llvm/nullable-unions.js +132 -0
- package/dist/backend/llvm/nullable-unions.js.map +1 -0
- package/dist/backend/llvm/publish.d.ts +58 -0
- package/dist/backend/llvm/publish.js +286 -0
- package/dist/backend/llvm/publish.js.map +1 -0
- package/dist/backend/llvm/rebound-parameters.d.ts +12 -0
- package/dist/backend/llvm/rebound-parameters.js +72 -0
- package/dist/backend/llvm/rebound-parameters.js.map +1 -0
- package/dist/backend/llvm/rebound-parameters.test.d.ts +1 -0
- package/dist/backend/llvm/rebound-parameters.test.js +67 -0
- package/dist/backend/llvm/rebound-parameters.test.js.map +1 -0
- package/dist/backend/llvm/reference-effects.d.ts +18 -2
- package/dist/backend/llvm/reference-effects.js +106 -16
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-effects.test.js +52 -1
- package/dist/backend/llvm/reference-effects.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +45 -17
- package/dist/backend/llvm/shapes.js +131 -53
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +33 -8
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/stack-unions.test.js +5 -2
- package/dist/backend/llvm/stack-unions.test.js.map +1 -1
- package/dist/backend/llvm/string-construction.d.ts +10 -0
- package/dist/backend/llvm/string-construction.js +42 -0
- package/dist/backend/llvm/string-construction.js.map +1 -1
- package/dist/backend/llvm/string-key-hash.d.ts +9 -2
- package/dist/backend/llvm/string-key-hash.js +20 -3
- package/dist/backend/llvm/string-key-hash.js.map +1 -1
- package/dist/backend/llvm/string-key-hash.test.js +14 -3
- package/dist/backend/llvm/string-key-hash.test.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +24 -11
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-reads.d.ts +7 -0
- package/dist/backend/llvm/string-reads.js +76 -0
- package/dist/backend/llvm/string-reads.js.map +1 -0
- package/dist/backend/llvm/switch-dispatch.test.js +1 -1
- package/dist/backend/llvm/switch-dispatch.test.js.map +1 -1
- package/dist/backend/llvm/test-boxed-unions.d.ts +5 -0
- package/dist/backend/llvm/test-boxed-unions.js +13 -0
- package/dist/backend/llvm/test-boxed-unions.js.map +1 -0
- package/dist/backend/llvm/union-repr.d.ts +15 -0
- package/dist/backend/llvm/union-repr.js +89 -0
- package/dist/backend/llvm/union-repr.js.map +1 -0
- package/dist/backend/llvm/virtual-borrows.d.ts +31 -0
- package/dist/backend/llvm/virtual-borrows.js +82 -0
- package/dist/backend/llvm/virtual-borrows.js.map +1 -0
- package/dist/backend/llvm/walk-borrows.d.ts +43 -0
- package/dist/backend/llvm/walk-borrows.js +150 -0
- package/dist/backend/llvm/walk-borrows.js.map +1 -0
- package/dist/backend/llvm/walk-borrows.test.d.ts +1 -0
- package/dist/backend/llvm/walk-borrows.test.js +119 -0
- package/dist/backend/llvm/walk-borrows.test.js.map +1 -0
- package/dist/backend/llvm/walkers.d.ts +5 -1
- package/dist/backend/llvm/walkers.js +24 -21
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/may-throw.d.ts +29 -1
- package/dist/backend/may-throw.js +346 -3
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +113 -1
- package/dist/backend/may-throw.test.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +1 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +7 -5
- package/dist/backend/native-codegen-core.js +14 -9
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +4 -0
- package/dist/backend/native-codegen.js +49 -2
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +41 -10
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-tools.d.ts +2 -0
- package/dist/backend/native-tools.js +3 -0
- package/dist/backend/native-tools.js.map +1 -1
- package/dist/backend/publication.d.ts +28 -0
- package/dist/backend/publication.js +155 -0
- package/dist/backend/publication.js.map +1 -0
- package/dist/backend/publication.test.d.ts +1 -0
- package/dist/backend/publication.test.js +72 -0
- package/dist/backend/publication.test.js.map +1 -0
- 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 +1 -1
- package/dist/backend/runtime-pack.test.js +1 -1
- package/dist/cli/command.js +70 -7
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +4 -1
- package/dist/cli/usage.js +8 -1
- package/dist/cli/usage.js.map +1 -1
- package/dist/compile-types.d.ts +12 -3
- package/dist/coverage/report.d.ts +25 -2
- package/dist/coverage/report.js +161 -33
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/verdict-cache.d.ts +63 -0
- package/dist/coverage/verdict-cache.js +193 -0
- package/dist/coverage/verdict-cache.js.map +1 -0
- package/dist/coverage/verdict-cache.test.d.ts +1 -0
- package/dist/coverage/verdict-cache.test.js +52 -0
- package/dist/coverage/verdict-cache.test.js.map +1 -0
- package/dist/coverage/verdict-semantic.d.ts +2 -0
- package/dist/coverage/verdict-semantic.js +24 -0
- package/dist/coverage/verdict-semantic.js.map +1 -0
- package/dist/coverage/verdict-startup.d.ts +15 -0
- package/dist/coverage/verdict-startup.js +66 -0
- package/dist/coverage/verdict-startup.js.map +1 -0
- package/dist/diagnostics/diagnostic.d.ts +29 -1
- package/dist/diagnostics/diagnostic.js +74 -4
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +130 -0
- package/dist/diagnostics/envelope.js +257 -0
- package/dist/diagnostics/envelope.js.map +1 -0
- package/dist/diagnostics/envelope.test.d.ts +1 -0
- package/dist/diagnostics/envelope.test.js +91 -0
- package/dist/diagnostics/envelope.test.js.map +1 -0
- package/dist/diagnostics/render.d.ts +3 -0
- package/dist/diagnostics/render.js +13 -2
- package/dist/diagnostics/render.js.map +1 -1
- package/dist/executable/prepare.d.ts +4 -0
- package/dist/executable/prepare.js +7 -1
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +1 -0
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/lowering/array-values.d.ts +7 -0
- package/dist/frontend/lowering/array-values.js +120 -4
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.js +29 -1
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +4 -0
- package/dist/frontend/lowering/builtins/process.js +10 -0
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/workers.js +4 -2
- package/dist/frontend/lowering/builtins/workers.js.map +1 -1
- package/dist/frontend/lowering/class-assertions.d.ts +8 -0
- package/dist/frontend/lowering/class-assertions.js +217 -1
- package/dist/frontend/lowering/class-assertions.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.js +8 -5
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/coercions/state.d.ts +6 -0
- package/dist/frontend/lowering/coercions/state.js +2 -0
- package/dist/frontend/lowering/coercions/state.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.d.ts +8 -0
- package/dist/frontend/lowering/coercions/unions.js +67 -2
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/collation-repertoire.d.ts +1 -0
- package/dist/frontend/lowering/collation-repertoire.js +19 -0
- package/dist/frontend/lowering/collation-repertoire.js.map +1 -0
- package/dist/frontend/lowering/construction-escapes.d.ts +38 -0
- package/dist/frontend/lowering/construction-escapes.js +146 -0
- package/dist/frontend/lowering/construction-escapes.js.map +1 -0
- package/dist/frontend/lowering/construction-escapes.test.d.ts +1 -0
- package/dist/frontend/lowering/construction-escapes.test.js +150 -0
- package/dist/frontend/lowering/construction-escapes.test.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +81 -44
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +15 -2
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +231 -12
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +43 -1
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +7 -63
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.d.ts +6 -1
- package/dist/frontend/lowering/cycle-initialization.js +59 -33
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
- package/dist/frontend/lowering/divergences.d.ts +9 -0
- package/dist/frontend/lowering/divergences.js +630 -0
- package/dist/frontend/lowering/divergences.js.map +1 -0
- package/dist/frontend/lowering/expressions/object-literals.js +40 -2
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +5 -0
- package/dist/frontend/lowering/lower-calls.js +226 -157
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +4 -0
- package/dist/frontend/lowering/lower-classes.js +72 -22
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +13 -0
- package/dist/frontend/lowering/lower-exprs.js +431 -107
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.d.ts +19 -13
- package/dist/frontend/lowering/lower-generators.js +67 -44
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +3 -2
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-island.d.ts +1 -1
- package/dist/frontend/lowering/lower-island.js +24 -7
- package/dist/frontend/lowering/lower-island.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +90 -1
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +36 -6
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +78 -2
- package/dist/frontend/lowering/lowerer.js +986 -73
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-bounds.d.ts +19 -0
- package/dist/frontend/lowering/runtime-optional-bounds.js +354 -0
- package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-bounds.test.d.ts +1 -0
- package/dist/frontend/lowering/runtime-optional-bounds.test.js +66 -0
- package/dist/frontend/lowering/runtime-optional-bounds.test.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-elements.d.ts +117 -0
- package/dist/frontend/lowering/runtime-optional-elements.js +738 -0
- package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-guards.d.ts +36 -0
- package/dist/frontend/lowering/runtime-optional-guards.js +375 -0
- package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-guards.test.d.ts +1 -0
- package/dist/frontend/lowering/runtime-optional-guards.test.js +92 -0
- package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-ownership.d.ts +63 -0
- package/dist/frontend/lowering/runtime-optional-ownership.js +382 -0
- package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-provenance.d.ts +2 -1
- package/dist/frontend/lowering/runtime-optional-provenance.js +2 -1
- package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
- package/dist/frontend/lowering/string-index-bounds.d.ts +36 -0
- package/dist/frontend/lowering/string-index-bounds.js +537 -0
- package/dist/frontend/lowering/string-index-bounds.js.map +1 -0
- package/dist/frontend/lowering/string-index-bounds.test.d.ts +1 -0
- package/dist/frontend/lowering/string-index-bounds.test.js +223 -0
- package/dist/frontend/lowering/string-index-bounds.test.js.map +1 -0
- package/dist/frontend/lowering/union-narrow.d.ts +2 -0
- package/dist/frontend/lowering/union-narrow.js +10 -6
- package/dist/frontend/lowering/union-narrow.js.map +1 -1
- package/dist/frontend/program-analysis.d.ts +10 -0
- package/dist/frontend/program-analysis.js +7 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +25 -0
- package/dist/frontend/program.js +613 -17
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +64 -1
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/resolve.d.ts +6 -0
- package/dist/frontend/resolve.js +14 -0
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/threads-import.d.ts +5 -0
- package/dist/frontend/threads-import.js +21 -0
- package/dist/frontend/threads-import.js.map +1 -0
- package/dist/frontend/type-mapper.d.ts +3 -0
- package/dist/frontend/type-mapper.js +72 -6
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/worker-target.d.ts +4 -0
- package/dist/frontend/worker-target.js +8 -1
- package/dist/frontend/worker-target.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +47 -9
- package/dist/index.js.map +1 -1
- package/dist/ir/build.d.ts +5 -0
- package/dist/ir/build.js +7 -0
- package/dist/ir/build.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +3 -0
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/int32-slots.d.ts +72 -0
- package/dist/ir/int32-slots.js +837 -0
- package/dist/ir/int32-slots.js.map +1 -0
- package/dist/ir/int32-slots.test.d.ts +1 -0
- package/dist/ir/int32-slots.test.js +222 -0
- package/dist/ir/int32-slots.test.js.map +1 -0
- package/dist/ir/integer-ranges.d.ts +19 -3
- package/dist/ir/integer-ranges.js +168 -23
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +74 -2
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +24 -6
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/validate.js +21 -2
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +39 -0
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/native/cache.d.ts +3 -0
- package/dist/native/cache.js +49 -1
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cache.test.js +21 -1
- package/dist/native/cache.test.js.map +1 -1
- package/dist/native/cli.js +1 -1
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.d.ts +5 -0
- package/dist/native/compiler.js +51 -4
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/prepare.d.ts +4 -0
- package/dist/native/prepare.js +2 -1
- package/dist/native/prepare.js.map +1 -1
- package/dist/startup-cache.d.ts +2 -0
- package/dist/startup-cache.js +2 -0
- package/dist/startup-cache.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +1 -1
|
@@ -7,6 +7,7 @@ import * as ts from "../../ts7/adapter.js";
|
|
|
7
7
|
import { BOOL, DYN, F64, JSVAL, STRING, UNDEFINED_T, arrayOf, isRefCounted, isUnitType, typeEquals, } from "../../../ir/ir.js";
|
|
8
8
|
import { ARRAY_METHODS } from "../surfaces.js";
|
|
9
9
|
import { tryLowerExpression } from "../expressions/try-lower-expression.js";
|
|
10
|
+
import { isSafeToRepeat } from "../expressions/evaluation-safety.js";
|
|
10
11
|
import { isJsSourceFile, locOf } from "../../program.js";
|
|
11
12
|
import { islandPrimitiveExit, lowerDynDispatchMethodCall } from "../lower-calls.js";
|
|
12
13
|
import { arrayIndexPresent, arrayValueRead, arrayValueStore, arrayValueType, } from "../array-values.js";
|
|
@@ -17,6 +18,121 @@ import { lowerArrayUnionHofCall, lowerArraySortCall, lowerArrayHofCall, lowerArr
|
|
|
17
18
|
import { lowerArraySpreadItems, lowerArrayValueItems, widenArraySpread, } from "./array-construction.js";
|
|
18
19
|
import { arrayLengthDeclaration } from "./array-iteration.js";
|
|
19
20
|
import { lowerArrayCallback, callbackArrayElement, requireProducedArrayElement, } from "./callback-arguments.js";
|
|
21
|
+
/** `a.push(v, ...)` where some argument is a runtime-optional read of the
|
|
22
|
+
* element type (an unchecked array read or a hole-observing iteration
|
|
23
|
+
* binding). Every argument evaluates before the first append; a present
|
|
24
|
+
* value takes the ordinary push (and its inline dense fast path), while a
|
|
25
|
+
* missing one appends a present-undefined slot at the current length,
|
|
26
|
+
* exactly what Node stores. The result is the final length. Pure
|
|
27
|
+
* receivers and arguments are repeated instead of copied into temporaries:
|
|
28
|
+
* appends run no user code, so repeated reads observe the same values. */
|
|
29
|
+
function lowerOptionalArrayPush(lowerer, receiver, values, elem, loc) {
|
|
30
|
+
const stmts = [];
|
|
31
|
+
const pure = isSafeToRepeat(receiver) && values.every(isSafeToRepeat);
|
|
32
|
+
const stable = (value, name) => {
|
|
33
|
+
if (pure)
|
|
34
|
+
return value;
|
|
35
|
+
const temp = lowerer.declareHiddenLocal(name, value.type);
|
|
36
|
+
stmts.push({ kind: "varDecl", localId: temp.id, init: value, loc });
|
|
37
|
+
return varRef(temp.id, value.type, loc);
|
|
38
|
+
};
|
|
39
|
+
const target = stable(receiver, "%pushTarget");
|
|
40
|
+
const args = values.map((value) => stable(value, "%pushValue"));
|
|
41
|
+
const length = () => ({
|
|
42
|
+
kind: "arrIntrinsic",
|
|
43
|
+
method: "length",
|
|
44
|
+
receiver: target,
|
|
45
|
+
args: [],
|
|
46
|
+
type: F64,
|
|
47
|
+
loc,
|
|
48
|
+
});
|
|
49
|
+
const push = (value) => ({
|
|
50
|
+
kind: "exprStmt",
|
|
51
|
+
expr: { kind: "arrIntrinsic", method: "push", receiver: target, args: [value], type: F64, loc },
|
|
52
|
+
loc,
|
|
53
|
+
});
|
|
54
|
+
for (const value of args) {
|
|
55
|
+
if (value.type.kind === "union" && lowerer.runtimeOptionalWidening(value.type, elem) !== null) {
|
|
56
|
+
const unionId = value.type.unionId;
|
|
57
|
+
stmts.push({
|
|
58
|
+
kind: "if",
|
|
59
|
+
cond: {
|
|
60
|
+
kind: "unionIsTag",
|
|
61
|
+
unionId,
|
|
62
|
+
tag: lowerer.armTag(unionId, UNDEFINED_T),
|
|
63
|
+
negated: false,
|
|
64
|
+
value,
|
|
65
|
+
type: BOOL,
|
|
66
|
+
loc,
|
|
67
|
+
},
|
|
68
|
+
then: [{ kind: "arraySetUndefined", arr: target, index: length(), loc }],
|
|
69
|
+
else_: [push(lowerer.coerceToExpected(value, elem))],
|
|
70
|
+
loc,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
stmts.push(push(lowerer.coerceToExpected(value, elem)));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return { kind: "seqExpr", stmts, result: length(), type: F64, loc };
|
|
78
|
+
}
|
|
79
|
+
/** `a.splice(start, count, v)` where v may hold undefined at run time.
|
|
80
|
+
* Receiver, start, count, and v evaluate once, in order; a present v is
|
|
81
|
+
* inserted as a plain element literal (which a statement-position splice
|
|
82
|
+
* then inserts without any temporary array), a missing one through the
|
|
83
|
+
* present-undefined item array. Both arms return the removed elements. */
|
|
84
|
+
function lowerOptionalSpliceItem(lowerer, receiver, positions, value, elem, arrType, loc) {
|
|
85
|
+
const stmts = [];
|
|
86
|
+
const repeatable = (e) => e.kind === "numLit" || isSafeToRepeat(e);
|
|
87
|
+
const pure = repeatable(receiver) && positions.every(repeatable) && repeatable(value);
|
|
88
|
+
const stable = (e, name) => {
|
|
89
|
+
if (pure)
|
|
90
|
+
return e;
|
|
91
|
+
const temp = lowerer.declareHiddenLocal(name, e.type);
|
|
92
|
+
stmts.push({ kind: "varDecl", localId: temp.id, init: e, loc });
|
|
93
|
+
return varRef(temp.id, e.type, loc);
|
|
94
|
+
};
|
|
95
|
+
const target = stable(receiver, "%spliceTarget");
|
|
96
|
+
const bounds = positions.map((position) => stable(position, "%splicePosition"));
|
|
97
|
+
const item = stable(value, "%spliceValue");
|
|
98
|
+
if (item.type.kind !== "union")
|
|
99
|
+
throw new InternalCompilerError("runtime-optional splice item is not a union");
|
|
100
|
+
const splice = (items) => ({
|
|
101
|
+
kind: "arrIntrinsic",
|
|
102
|
+
method: "spliceInsert",
|
|
103
|
+
receiver: target,
|
|
104
|
+
args: [...bounds, items],
|
|
105
|
+
type: arrType,
|
|
106
|
+
loc,
|
|
107
|
+
});
|
|
108
|
+
return {
|
|
109
|
+
kind: "seqExpr",
|
|
110
|
+
stmts,
|
|
111
|
+
result: {
|
|
112
|
+
kind: "ternary",
|
|
113
|
+
cond: {
|
|
114
|
+
kind: "unionIsTag",
|
|
115
|
+
unionId: item.type.unionId,
|
|
116
|
+
tag: lowerer.armTag(item.type.unionId, UNDEFINED_T),
|
|
117
|
+
negated: false,
|
|
118
|
+
value: item,
|
|
119
|
+
type: BOOL,
|
|
120
|
+
loc,
|
|
121
|
+
},
|
|
122
|
+
then: splice(lowerArrayValueItems(lowerer, [item], elem, arrType, loc)),
|
|
123
|
+
else_: splice({
|
|
124
|
+
kind: "arrayLit",
|
|
125
|
+
elems: [lowerer.coerceToExpected(item, elem)],
|
|
126
|
+
type: arrType,
|
|
127
|
+
loc,
|
|
128
|
+
}),
|
|
129
|
+
type: arrType,
|
|
130
|
+
loc,
|
|
131
|
+
},
|
|
132
|
+
type: arrType,
|
|
133
|
+
loc,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
20
136
|
function primitivePositionType(lowerer, type) {
|
|
21
137
|
if (type.kind === "union") {
|
|
22
138
|
return (lowerer.unions.get(type.unionId)?.arms.every((arm) => primitivePositionType(lowerer, arm)) ??
|
|
@@ -510,10 +626,13 @@ export function lowerArrayMethodCall(lowerer, call, access) {
|
|
|
510
626
|
}
|
|
511
627
|
const valueProbes = call.arguments.map((arg) => tryLowerExpression(lowerer, arg));
|
|
512
628
|
if (valueProbes.some((probe) => probe !== null && lowerer.runtimeOptionalWidening(probe.type, elem) !== null)) {
|
|
629
|
+
if (name === "push") {
|
|
630
|
+
return lowerOptionalArrayPush(lowerer, receiver, call.arguments.map((arg) => lowerer.lowerExpr(arg)), elem, loc);
|
|
631
|
+
}
|
|
513
632
|
const items = lowerArrayValueItems(lowerer, call.arguments.map((arg) => lowerer.lowerExpr(arg)), elem, receiverIr, loc);
|
|
514
633
|
return {
|
|
515
634
|
kind: "arrIntrinsic",
|
|
516
|
-
method:
|
|
635
|
+
method: "unshiftSpread",
|
|
517
636
|
receiver,
|
|
518
637
|
args: [items],
|
|
519
638
|
type: F64,
|
|
@@ -536,6 +655,9 @@ export function lowerArrayMethodCall(lowerer, call, access) {
|
|
|
536
655
|
};
|
|
537
656
|
}
|
|
538
657
|
if (name === "pop") {
|
|
658
|
+
// An unused result needs no value at all: drop the last slot.
|
|
659
|
+
if (resultDiscarded(call))
|
|
660
|
+
return lowerDiscardedPop(lowerer, access.expression, loc);
|
|
539
661
|
// Widen a union payload through the normal array-read machinery
|
|
540
662
|
// before removing it. Reinterpreting the stored union's tag as the
|
|
541
663
|
// result union would confuse arms when undefined changes their order.
|
|
@@ -634,6 +756,9 @@ export function lowerArrayMethodCall(lowerer, call, access) {
|
|
|
634
756
|
const hasSpread = itemNodes.some(ts.isSpreadElement);
|
|
635
757
|
const itemProbes = hasSpread ? [] : itemNodes.map((arg) => tryLowerExpression(lowerer, arg));
|
|
636
758
|
const statefulItems = itemProbes.some((probe) => probe !== null && lowerer.runtimeOptionalWidening(probe.type, elem) !== null);
|
|
759
|
+
if (statefulItems && itemNodes.length === 1) {
|
|
760
|
+
return lowerOptionalSpliceItem(lowerer, receiver, args, lowerer.lowerExpr(itemNodes[0]), elem, receiverIr, loc);
|
|
761
|
+
}
|
|
637
762
|
const items = hasSpread
|
|
638
763
|
? lowerArraySpreadItems(lowerer, itemNodes, elem, receiverIr, loc)
|
|
639
764
|
: statefulItems
|
|
@@ -722,7 +847,80 @@ export function lowerArrayMethodCall(lowerer, call, access) {
|
|
|
722
847
|
// reduce / reduceRight
|
|
723
848
|
return lowerArrayReduceCall(lowerer, call, access, name, elem);
|
|
724
849
|
}
|
|
725
|
-
/**
|
|
850
|
+
/** The call's value is never read: an expression statement, a `void`
|
|
851
|
+
* operand, the left of a comma, or a for-loop initializer or update. */
|
|
852
|
+
function resultDiscarded(call) {
|
|
853
|
+
let child = call;
|
|
854
|
+
let parent = call.parent;
|
|
855
|
+
while (parent && ts.isParenthesizedExpression(parent)) {
|
|
856
|
+
child = parent;
|
|
857
|
+
parent = parent.parent;
|
|
858
|
+
}
|
|
859
|
+
if (!parent)
|
|
860
|
+
return false;
|
|
861
|
+
if (ts.isExpressionStatement(parent) || ts.isVoidExpression(parent))
|
|
862
|
+
return true;
|
|
863
|
+
if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === ts.SyntaxKind.CommaToken)
|
|
864
|
+
return parent.left === child || resultDiscarded(parent);
|
|
865
|
+
return (ts.isForStatement(parent) && (parent.initializer === child || parent.incrementor === child));
|
|
866
|
+
}
|
|
867
|
+
/** `xs.pop()` whose result is unused: truncate a non-empty array by one
|
|
868
|
+
* slot. Truncation releases the removed element and leaves the length of
|
|
869
|
+
* an empty array at zero, as pop does (pop's own `length = 0` store, a
|
|
870
|
+
* no-op unless the array is frozen). */
|
|
871
|
+
function lowerDiscardedPop(lowerer, source, loc) {
|
|
872
|
+
const receiver = lowerer.lowerExpr(source);
|
|
873
|
+
const arr = lowerer.declareHiddenLocal("%popArray", receiver.type);
|
|
874
|
+
const arrRef = varRef(arr.id, arr.type, loc);
|
|
875
|
+
const length = lowerer.declareHiddenLocal("%popLength", F64);
|
|
876
|
+
const lengthRef = varRef(length.id, F64, loc);
|
|
877
|
+
return {
|
|
878
|
+
kind: "seqExpr",
|
|
879
|
+
stmts: [
|
|
880
|
+
{ kind: "varDecl", localId: arr.id, init: receiver, loc },
|
|
881
|
+
{
|
|
882
|
+
kind: "varDecl",
|
|
883
|
+
localId: length.id,
|
|
884
|
+
init: {
|
|
885
|
+
kind: "arrIntrinsic",
|
|
886
|
+
method: "length",
|
|
887
|
+
receiver: arrRef,
|
|
888
|
+
args: [],
|
|
889
|
+
type: F64,
|
|
890
|
+
loc,
|
|
891
|
+
},
|
|
892
|
+
loc,
|
|
893
|
+
},
|
|
894
|
+
{
|
|
895
|
+
kind: "if",
|
|
896
|
+
cond: { kind: "bin", op: ">", left: lengthRef, right: numLit(0, loc), type: BOOL, loc },
|
|
897
|
+
then: [
|
|
898
|
+
{
|
|
899
|
+
kind: "arraySetLength",
|
|
900
|
+
arr: arrRef,
|
|
901
|
+
length: {
|
|
902
|
+
kind: "bin",
|
|
903
|
+
op: "-",
|
|
904
|
+
left: lengthRef,
|
|
905
|
+
right: numLit(1, loc),
|
|
906
|
+
type: F64,
|
|
907
|
+
loc,
|
|
908
|
+
},
|
|
909
|
+
loc,
|
|
910
|
+
pop: true,
|
|
911
|
+
},
|
|
912
|
+
],
|
|
913
|
+
else_: [{ kind: "arraySetLength", arr: arrRef, length: numLit(0, loc), loc, pop: true }],
|
|
914
|
+
loc,
|
|
915
|
+
},
|
|
916
|
+
],
|
|
917
|
+
// The value is never read; any placeholder scalar keeps it unboxed.
|
|
918
|
+
result: numLit(0, loc),
|
|
919
|
+
type: F64,
|
|
920
|
+
loc,
|
|
921
|
+
};
|
|
922
|
+
}
|
|
923
|
+
/** Read before removal so it cannot destroy the result's owned payload.
|
|
726
924
|
* The source is evaluated once and empty/sparse arrays yield undefined using
|
|
727
925
|
* the same slot-state checks as an indexed read. */
|
|
728
926
|
function lowerUnionArrayRemoval(lowerer, source, elem, first, loc) {
|
|
@@ -760,18 +958,39 @@ function lowerUnionArrayRemoval(lowerer, source, elem, first, loc) {
|
|
|
760
958
|
loc,
|
|
761
959
|
},
|
|
762
960
|
{ kind: "varDecl", localId: result.id, init: value, loc },
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
961
|
+
first
|
|
962
|
+
? {
|
|
963
|
+
kind: "exprStmt",
|
|
964
|
+
expr: {
|
|
965
|
+
kind: "arrIntrinsic",
|
|
966
|
+
method: "splice",
|
|
967
|
+
receiver: arrRef,
|
|
968
|
+
args: [indexRef, numLit(1, loc)],
|
|
969
|
+
type: arr.type,
|
|
970
|
+
loc,
|
|
971
|
+
},
|
|
972
|
+
loc,
|
|
973
|
+
}
|
|
974
|
+
: {
|
|
975
|
+
// Removing the last slot is a truncation: no removed-element
|
|
976
|
+
// array, and an empty array keeps length zero.
|
|
977
|
+
kind: "if",
|
|
978
|
+
cond: {
|
|
979
|
+
kind: "bin",
|
|
980
|
+
op: ">=",
|
|
981
|
+
left: indexRef,
|
|
982
|
+
right: numLit(0, loc),
|
|
983
|
+
type: BOOL,
|
|
984
|
+
loc,
|
|
985
|
+
},
|
|
986
|
+
then: [{ kind: "arraySetLength", arr: arrRef, length: indexRef, loc, pop: true }],
|
|
987
|
+
// Pop's `length = 0` store on an empty array (a no-op unless the
|
|
988
|
+
// array is frozen).
|
|
989
|
+
else_: [
|
|
990
|
+
{ kind: "arraySetLength", arr: arrRef, length: numLit(0, loc), loc, pop: true },
|
|
991
|
+
],
|
|
771
992
|
loc,
|
|
772
993
|
},
|
|
773
|
-
loc,
|
|
774
|
-
},
|
|
775
994
|
],
|
|
776
995
|
result: varRef(result.id, result.type, loc),
|
|
777
996
|
type: result.type,
|