@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
|
@@ -5,6 +5,7 @@ import { lowerArrayCallbackCall } from "./containers/array-callback-call.js";
|
|
|
5
5
|
* own owners; this module selects the applicable call path. */
|
|
6
6
|
import { dynUndefinedExpr, nodeThrowExpr, countedFor, numLit, varRef } from "../../ir/build.js";
|
|
7
7
|
import { lowerBuiltinCall } from "./builtin-calls.js";
|
|
8
|
+
import { threadsImportOf } from "../threads-import.js";
|
|
8
9
|
import { adaptZeroArgTimerCallback, lowerTimersMemberCall, TIMER_MODULE_MEMBERS, } from "./lower-timers.js";
|
|
9
10
|
import { objectEnumerationReceiver } from "./object-enumeration-receiver.js";
|
|
10
11
|
import { InternalCompilerError } from "../../errors.js";
|
|
@@ -335,7 +336,7 @@ export function lowerCall(lowerer, expr) {
|
|
|
335
336
|
// inspect distinction, per arm), Maps/Sets, plain undefined/null,
|
|
336
337
|
// regexes, symbols, error values, Buffers. Shapes inspect cannot
|
|
337
338
|
// render fence honestly with the reason.
|
|
338
|
-
return lowerConsoleInspectArg(lowerer, a, lowered, surface, loc);
|
|
339
|
+
return lowerConsoleInspectArg(lowerer, a, lowerer.deferredFieldSlot(lowered) ?? lowered, surface, loc);
|
|
339
340
|
});
|
|
340
341
|
return withReceiver({
|
|
341
342
|
kind: "intrinsic",
|
|
@@ -795,6 +796,14 @@ export function lowerCall(lowerer, expr) {
|
|
|
795
796
|
if (rf)
|
|
796
797
|
return lowerHttpClientFnCall(lowerer, expr, rf, loc);
|
|
797
798
|
}
|
|
799
|
+
if (threadsImportOf(lowerer.program, expr.expression) === "publish") {
|
|
800
|
+
// @scriptc/threads publish(value): the same value, its graph made
|
|
801
|
+
// immortal and immutable (backend/llvm/publish.ts).
|
|
802
|
+
if (expr.arguments.length !== 1 || ts.isSpreadElement(expr.arguments[0]))
|
|
803
|
+
lowerer.noLowering(`publish with ${expr.arguments.length} arguments`, expr);
|
|
804
|
+
const value = lowerer.lowerExpr(expr.arguments[0]);
|
|
805
|
+
return { kind: "intrinsic", name: "threads.publish", args: [value], type: value.type, loc };
|
|
806
|
+
}
|
|
798
807
|
const bi = lowerer.builtinImportOf(expr.expression);
|
|
799
808
|
if (bi)
|
|
800
809
|
return lowerBuiltinCall(lowerer, expr, bi, loc);
|
|
@@ -850,138 +859,14 @@ export function lowerCall(lowerer, expr) {
|
|
|
850
859
|
// checker-pinned (or checked) to number, where the global's ToNumber
|
|
851
860
|
// coercion is the identity and the tests are Number.isNaN /
|
|
852
861
|
// Number.isFinite exactly (ms's `isFinite(val)` guard).
|
|
853
|
-
if ((expr.expression.text === "parseInt" ||
|
|
862
|
+
if ((expr.expression.text === "parseInt" ||
|
|
863
|
+
expr.expression.text === "isNaN" ||
|
|
864
|
+
expr.expression.text === "parseFloat" ||
|
|
865
|
+
expr.expression.text === "isFinite") &&
|
|
854
866
|
lowerer.isStdlibSymbol(lowerer.resolveValueSymbol(expr.expression) ?? undefined)) {
|
|
855
|
-
const
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
lowerer.noLowering(`${name} with ${expr.arguments.length} argument${expr.arguments.length === 1 ? "" : "s"}`, expr);
|
|
859
|
-
}
|
|
860
|
-
if (name === "isNaN") {
|
|
861
|
-
const x = lowerer.lowerExprExpecting(expr.arguments[0], F64);
|
|
862
|
-
return { kind: "libCall", fn: "num.isNaN", args: [x], type: BOOL, loc };
|
|
863
|
-
}
|
|
864
|
-
const radix = expr.arguments[1]
|
|
865
|
-
? lowerer.lowerExprExpecting(expr.arguments[1], F64)
|
|
866
|
-
: { kind: "numLit", value: 0, type: F64, loc };
|
|
867
|
-
const optional = optionalCallValue(lowerer, expr.arguments[0]);
|
|
868
|
-
if (optional?.type.kind === "union") {
|
|
869
|
-
const def = lowerer.unions.get(optional.type.unionId);
|
|
870
|
-
const stringTag = def?.arms.findIndex((arm) => arm.kind === "string") ?? -1;
|
|
871
|
-
if (def &&
|
|
872
|
-
stringTag >= 0 &&
|
|
873
|
-
def.arms.every((arm) => arm.kind === "string" || isUnitType(arm))) {
|
|
874
|
-
const unionT = optional.type;
|
|
875
|
-
const key = `parseInt.optional:${unionT.unionId}`;
|
|
876
|
-
let helper = lowerer.valueHelpers.get(key);
|
|
877
|
-
if (!helper) {
|
|
878
|
-
helper = `%parseInt.optional.${lowerer.valueHelpers.size}`;
|
|
879
|
-
lowerer.valueHelpers.set(key, helper);
|
|
880
|
-
const value = { kind: "varRef", localId: "value.0", type: unionT, loc };
|
|
881
|
-
const radixRef = { kind: "varRef", localId: "radix.0", type: F64, loc };
|
|
882
|
-
const body = def.arms.flatMap((arm, tag) => isUnitType(arm)
|
|
883
|
-
? [
|
|
884
|
-
{
|
|
885
|
-
kind: "if",
|
|
886
|
-
cond: {
|
|
887
|
-
kind: "unionIsTag",
|
|
888
|
-
unionId: unionT.unionId,
|
|
889
|
-
tag,
|
|
890
|
-
negated: false,
|
|
891
|
-
value,
|
|
892
|
-
type: BOOL,
|
|
893
|
-
loc,
|
|
894
|
-
},
|
|
895
|
-
then: [
|
|
896
|
-
{
|
|
897
|
-
kind: "return",
|
|
898
|
-
value: { kind: "numLit", value: NaN, type: F64, loc },
|
|
899
|
-
loc,
|
|
900
|
-
},
|
|
901
|
-
],
|
|
902
|
-
else_: null,
|
|
903
|
-
loc,
|
|
904
|
-
},
|
|
905
|
-
]
|
|
906
|
-
: []);
|
|
907
|
-
body.push({
|
|
908
|
-
kind: "return",
|
|
909
|
-
value: {
|
|
910
|
-
kind: "libCall",
|
|
911
|
-
fn: "num.parseInt",
|
|
912
|
-
args: [
|
|
913
|
-
{
|
|
914
|
-
kind: "unionNarrow",
|
|
915
|
-
unionId: unionT.unionId,
|
|
916
|
-
tag: stringTag,
|
|
917
|
-
value,
|
|
918
|
-
type: STRING,
|
|
919
|
-
loc,
|
|
920
|
-
},
|
|
921
|
-
radixRef,
|
|
922
|
-
],
|
|
923
|
-
type: F64,
|
|
924
|
-
loc,
|
|
925
|
-
},
|
|
926
|
-
loc,
|
|
927
|
-
});
|
|
928
|
-
lowerer.liftedFns.push({
|
|
929
|
-
name: helper,
|
|
930
|
-
params: [
|
|
931
|
-
{ localId: "value.0", name: "value", type: unionT },
|
|
932
|
-
{ localId: "radix.0", name: "radix", type: F64 },
|
|
933
|
-
],
|
|
934
|
-
returnType: F64,
|
|
935
|
-
locals: [
|
|
936
|
-
{ id: "value.0", name: "value", type: unionT, mutable: true },
|
|
937
|
-
{ id: "radix.0", name: "radix", type: F64, mutable: true },
|
|
938
|
-
],
|
|
939
|
-
body,
|
|
940
|
-
loc,
|
|
941
|
-
});
|
|
942
|
-
}
|
|
943
|
-
return { kind: "call", callee: helper, args: [optional, radix], type: F64, loc };
|
|
944
|
-
}
|
|
945
|
-
}
|
|
946
|
-
const s = lowerer.lowerExprExpecting(expr.arguments[0], STRING);
|
|
947
|
-
return { kind: "libCall", fn: "num.parseInt", args: [s, radix], type: F64, loc };
|
|
948
|
-
}
|
|
949
|
-
// STATIC parseFloat/isFinite over exactly-typed arguments —
|
|
950
|
-
// parseInt's siblings (num.parseFloat is ECMA 19.2.4's decimal-
|
|
951
|
-
// literal prefix parse in scr_string.c; a number-typed isFinite IS
|
|
952
|
-
// Number.isFinite — the global's ToNumber coercion is the identity
|
|
953
|
-
// there, ms's `isFinite(val)` guard). Other argument types fall
|
|
954
|
-
// through to today's island path (--dynamic) or its SC2012 fence:
|
|
955
|
-
// the ToNumber/ToString coercions on arbitrary values stay engine
|
|
956
|
-
// territory. The probe never emits — lowering is IR construction.
|
|
957
|
-
if ((expr.expression.text === "parseFloat" || expr.expression.text === "isFinite") &&
|
|
958
|
-
expr.arguments.length === 1 &&
|
|
959
|
-
lowerer.isStdlibSymbol(lowerer.resolveValueSymbol(expr.expression) ?? undefined)) {
|
|
960
|
-
const name = expr.expression.text;
|
|
961
|
-
if (name === "parseFloat") {
|
|
962
|
-
const optional = optionalCallValue(lowerer, expr.arguments[0]);
|
|
963
|
-
if (optional) {
|
|
964
|
-
const parsed = lowerOptionalStringNumber(lowerer, optional, loc, "num.parseFloat", "parseFloat");
|
|
965
|
-
if (parsed)
|
|
966
|
-
return parsed;
|
|
967
|
-
}
|
|
968
|
-
}
|
|
969
|
-
const probed = tryLowerExpression(lowerer, expr.arguments[0]);
|
|
970
|
-
if (name === "parseFloat" && probed?.type.kind === "string") {
|
|
971
|
-
return { kind: "libCall", fn: "num.parseFloat", args: [probed], type: F64, loc };
|
|
972
|
-
}
|
|
973
|
-
if (name === "parseFloat" && probed?.type.kind === "dyn") {
|
|
974
|
-
return {
|
|
975
|
-
kind: "libCall",
|
|
976
|
-
fn: "num.parseFloat",
|
|
977
|
-
args: [{ kind: "libCall", fn: "dyn.toStringCoerce", args: [probed], type: STRING, loc }],
|
|
978
|
-
type: F64,
|
|
979
|
-
loc,
|
|
980
|
-
};
|
|
981
|
-
}
|
|
982
|
-
if (name === "isFinite" && probed?.type.kind === "f64") {
|
|
983
|
-
return { kind: "libCall", fn: "number.isFinite", args: [probed], type: BOOL, loc };
|
|
984
|
-
}
|
|
867
|
+
const parsed = lowerStaticNumberGlobal(lowerer, expr.expression.text, expr, expr.arguments, loc);
|
|
868
|
+
if (parsed !== null)
|
|
869
|
+
return parsed;
|
|
985
870
|
}
|
|
986
871
|
// STATIC encodeURIComponent/encodeURI/decodeURIComponent
|
|
987
872
|
// (str.encodeUriComponent / str.encodeUri / str.decodeUriComponent —
|
|
@@ -1074,7 +959,16 @@ export function lowerCall(lowerer, expr) {
|
|
|
1074
959
|
lowerer.noLowering(`${name} with ${expr.arguments.length} argument${expr.arguments.length === 1 ? "" : "s"}`, expr);
|
|
1075
960
|
}
|
|
1076
961
|
if (islFn && expr.arguments.length === islFn.args.length) {
|
|
1077
|
-
|
|
962
|
+
// The static forms above already took the exactly-typed argument
|
|
963
|
+
// (a string for parseFloat, a number for isFinite): name the
|
|
964
|
+
// argument type that sent this call to the engine, so the message
|
|
965
|
+
// states the condition rather than reading as if the global itself
|
|
966
|
+
// were unsupported.
|
|
967
|
+
const argText = lowerer.dynamic ? "" : loweredArgumentText(lowerer, expr.arguments[0]);
|
|
968
|
+
const exact = expr.expression.text === "isFinite" ? "number" : "string";
|
|
969
|
+
lowerer.requireDynamicApi(`'${expr.expression.text}' with a '${argText}' argument (only a ${exact} argument compiles statically)`, expr, exact === "string"
|
|
970
|
+
? "convert the argument explicitly first (for example String(x), or narrow the union), or build with --dynamic to run the coercing call in the embedded engine (adds ~620KB to the binary)"
|
|
971
|
+
: "narrow the argument to a number first (isFinite over a number compiles statically), or build with --dynamic to run the coercing call in the embedded engine (adds ~620KB to the binary)");
|
|
1078
972
|
const callee = {
|
|
1079
973
|
kind: "jsOp",
|
|
1080
974
|
op: "globalGet",
|
|
@@ -1889,13 +1783,7 @@ function lowerBufferStaticCallWithNarrowedArg(lowerer, call, access) {
|
|
|
1889
1783
|
}
|
|
1890
1784
|
const narrowedValue = {
|
|
1891
1785
|
...lowered,
|
|
1892
|
-
source:
|
|
1893
|
-
kind: "call",
|
|
1894
|
-
callee: helper,
|
|
1895
|
-
args: [lowered.source],
|
|
1896
|
-
type: narrowed,
|
|
1897
|
-
loc: lowered.source.loc,
|
|
1898
|
-
},
|
|
1786
|
+
source: lowerer.checkedNarrowCall(helper, lowered.source, narrowed, lowered.source.loc),
|
|
1899
1787
|
};
|
|
1900
1788
|
return branded ? { ...branded, args: [narrowedValue] } : narrowedValue;
|
|
1901
1789
|
}
|
|
@@ -4286,7 +4174,7 @@ function reconcileOverloadReturn(lowerer, expr, call) {
|
|
|
4286
4174
|
if (call.type.kind === "union" && rt.kind !== "union") {
|
|
4287
4175
|
const helper = lowerer.narrowedArmHelper(call.type.unionId, rt, call.loc);
|
|
4288
4176
|
if (helper)
|
|
4289
|
-
return
|
|
4177
|
+
return lowerer.checkedNarrowCall(helper, call, rt, call.loc);
|
|
4290
4178
|
}
|
|
4291
4179
|
return lowerer.coerceInto(expr, call, rt);
|
|
4292
4180
|
}
|
|
@@ -7115,9 +7003,12 @@ function lowerObjectStaticCall(lowerer, call, access) {
|
|
|
7115
7003
|
return lowerObjectIterOverIndexShape(lowerer, call, member, argIr, shape);
|
|
7116
7004
|
}
|
|
7117
7005
|
const loc = locOf(call);
|
|
7118
|
-
const
|
|
7119
|
-
if (
|
|
7006
|
+
const checkedT = lowerer.irTypeOf(call);
|
|
7007
|
+
if (checkedT.kind !== "array")
|
|
7120
7008
|
lowerer.badType(call, lowerer.typeOf(call)); // defensive
|
|
7009
|
+
const resultT = member === "entries" && consumesEntryPairs(call)
|
|
7010
|
+
? runtimeOptionalEntriesType(lowerer, argIr, checkedT)
|
|
7011
|
+
: checkedT;
|
|
7121
7012
|
const receiver = objectEnumerationReceiver(lowerer, lowerer.lowerExpr(argNode), argIr, loc);
|
|
7122
7013
|
if (member === "keys") {
|
|
7123
7014
|
// The keys walk is shared with for-in (which iterates exactly the
|
|
@@ -7337,6 +7228,53 @@ function lowerObjectStaticCall(lowerer, call, access) {
|
|
|
7337
7228
|
}
|
|
7338
7229
|
return { kind: "call", callee: helper, args: [receiver], type: resultT, loc };
|
|
7339
7230
|
}
|
|
7231
|
+
/** An entries array consumed pair by pair right where it is built: a
|
|
7232
|
+
* for-of loop or an array callback method. These consumers bind each pair
|
|
7233
|
+
* from the array's own layout, so the pair's value slot can keep a
|
|
7234
|
+
* runtime-optional field's undefined arm. */
|
|
7235
|
+
function consumesEntryPairs(call) {
|
|
7236
|
+
let node = call;
|
|
7237
|
+
while (ts.isParenthesizedExpression(node.parent))
|
|
7238
|
+
node = node.parent;
|
|
7239
|
+
const parent = node.parent;
|
|
7240
|
+
if (ts.isForOfStatement(parent))
|
|
7241
|
+
return parent.expression === node;
|
|
7242
|
+
return (ts.isPropertyAccessExpression(parent) &&
|
|
7243
|
+
parent.expression === node &&
|
|
7244
|
+
ENTRY_PAIR_CALLBACK_METHODS.has(parent.name.text) &&
|
|
7245
|
+
ts.isCallExpression(parent.parent) &&
|
|
7246
|
+
parent.parent.expression === parent);
|
|
7247
|
+
}
|
|
7248
|
+
const ENTRY_PAIR_CALLBACK_METHODS = new Set([
|
|
7249
|
+
"every",
|
|
7250
|
+
"filter",
|
|
7251
|
+
"find",
|
|
7252
|
+
"findIndex",
|
|
7253
|
+
"flatMap",
|
|
7254
|
+
"forEach",
|
|
7255
|
+
"map",
|
|
7256
|
+
"some",
|
|
7257
|
+
]);
|
|
7258
|
+
/** The entries array of a record whose runtime-optional fields (unchecked
|
|
7259
|
+
* indexed reads the checker calls present) can hold undefined: the pair's
|
|
7260
|
+
* value slot gains the undefined arm, so such an entry is listed with its
|
|
7261
|
+
* undefined value as Node lists it. Reads of the slot follow the
|
|
7262
|
+
* runtime-optional field rules. */
|
|
7263
|
+
function runtimeOptionalEntriesType(lowerer, record, resultT) {
|
|
7264
|
+
const shape = lowerer.shapes.get(record.shapeId);
|
|
7265
|
+
if (resultT.elem.kind !== "record" || !shape)
|
|
7266
|
+
return resultT;
|
|
7267
|
+
const pair = lowerer.shapes.get(resultT.elem.shapeId);
|
|
7268
|
+
const slot = pair?.tuple ? pair.fields.find((f) => f.name === "1") : undefined;
|
|
7269
|
+
if (!slot)
|
|
7270
|
+
return resultT;
|
|
7271
|
+
const optional = shape.fields.find((f) => lowerer.isRuntimeOptionalField(record.shapeId, f.name) &&
|
|
7272
|
+
lowerer.runtimeOptionalWidening(f.type, slot.type) !== null);
|
|
7273
|
+
if (!optional)
|
|
7274
|
+
return resultT;
|
|
7275
|
+
const widened = lowerer.runtimeOptionalWidening(optional.type, slot.type);
|
|
7276
|
+
return { kind: "array", elem: lowerer.runtimeOptionalRecordField(resultT.elem, "1", widened) };
|
|
7277
|
+
}
|
|
7340
7278
|
/** `r.f(args)` where `r` is a record and `f` a func-typed field: an
|
|
7341
7279
|
* ordinary indirect call through the field's closure value. Deliberately
|
|
7342
7280
|
* record-only — calling a func-typed CLASS field stays rejected (the
|
|
@@ -7922,13 +7860,7 @@ export function lowerObjectMethodCall(lowerer, call, access) {
|
|
|
7922
7860
|
if (receiver.type.kind === "union") {
|
|
7923
7861
|
const helper = lowerer.narrowedArmHelper(receiver.type.unionId, receiverIr, locOf(access.expression));
|
|
7924
7862
|
if (helper !== null)
|
|
7925
|
-
return
|
|
7926
|
-
kind: "call",
|
|
7927
|
-
callee: helper,
|
|
7928
|
-
args: [receiver],
|
|
7929
|
-
type: receiverIr,
|
|
7930
|
-
loc: locOf(access.expression),
|
|
7931
|
-
};
|
|
7863
|
+
return lowerer.checkedNarrowCall(helper, receiver, receiverIr, locOf(access.expression));
|
|
7932
7864
|
}
|
|
7933
7865
|
return receiver.type.kind === "dyn"
|
|
7934
7866
|
? lowerer.coerceInto(access.expression, receiver, receiverIr)
|
|
@@ -8008,13 +7940,7 @@ export function lowerObjectMethodCall(lowerer, call, access) {
|
|
|
8008
7940
|
if (callee?.type.kind === "union" && callableType !== null) {
|
|
8009
7941
|
const helper = lowerer.narrowedArmHelper(callee.type.unionId, callableType, locOf(access));
|
|
8010
7942
|
if (helper !== null) {
|
|
8011
|
-
callee =
|
|
8012
|
-
kind: "call",
|
|
8013
|
-
callee: helper,
|
|
8014
|
-
args: [callee],
|
|
8015
|
-
type: callableType,
|
|
8016
|
-
loc: locOf(access),
|
|
8017
|
-
};
|
|
7943
|
+
callee = lowerer.checkedNarrowCall(helper, callee, callableType, locOf(access));
|
|
8018
7944
|
}
|
|
8019
7945
|
}
|
|
8020
7946
|
if (callee?.type.kind === "func") {
|
|
@@ -8453,4 +8379,147 @@ function unionObjectMethodHelper(lowerer, sourceCall, receiverT, method, plans,
|
|
|
8453
8379
|
lowerer.liftedFns.push({ name, params, returnType: resultT, locals, body, loc });
|
|
8454
8380
|
return name;
|
|
8455
8381
|
}
|
|
8382
|
+
/** The argument's lowered type for a message (what the static form saw),
|
|
8383
|
+
* or the checker's text when the argument itself does not lower. */
|
|
8384
|
+
function loweredArgumentText(lowerer, arg) {
|
|
8385
|
+
const probed = tryLowerExpression(lowerer, arg);
|
|
8386
|
+
return probed !== null
|
|
8387
|
+
? lowerer.fmt(probed.type)
|
|
8388
|
+
: lowerer.checker.typeToString(lowerer.checker.getTypeAtLocation(arg));
|
|
8389
|
+
}
|
|
8390
|
+
/** The static global number parsers (parseInt/parseFloat/isNaN/isFinite),
|
|
8391
|
+
* shared by the globals and their Number.* aliases. `call` blames arity
|
|
8392
|
+
* fences; null when the argument shape needs the engine (the caller keeps
|
|
8393
|
+
* its island path or SC2012 fence). */
|
|
8394
|
+
export function lowerStaticNumberGlobal(lowerer, name, call, args, loc) {
|
|
8395
|
+
if (name === "parseInt" || name === "isNaN") {
|
|
8396
|
+
const maxArgs = name === "parseInt" ? 2 : 1;
|
|
8397
|
+
if (args.length < 1 || args.length > maxArgs) {
|
|
8398
|
+
lowerer.noLowering(`${name} with ${args.length} argument${args.length === 1 ? "" : "s"}`, call);
|
|
8399
|
+
}
|
|
8400
|
+
if (name === "isNaN") {
|
|
8401
|
+
const x = lowerer.lowerExprExpecting(args[0], F64);
|
|
8402
|
+
return { kind: "libCall", fn: "num.isNaN", args: [x], type: BOOL, loc };
|
|
8403
|
+
}
|
|
8404
|
+
const radix = args[1]
|
|
8405
|
+
? lowerer.lowerExprExpecting(args[1], F64)
|
|
8406
|
+
: { kind: "numLit", value: 0, type: F64, loc };
|
|
8407
|
+
const optional = optionalCallValue(lowerer, args[0]);
|
|
8408
|
+
if (optional?.type.kind === "union") {
|
|
8409
|
+
const def = lowerer.unions.get(optional.type.unionId);
|
|
8410
|
+
const stringTag = def?.arms.findIndex((arm) => arm.kind === "string") ?? -1;
|
|
8411
|
+
if (def &&
|
|
8412
|
+
stringTag >= 0 &&
|
|
8413
|
+
def.arms.every((arm) => arm.kind === "string" || isUnitType(arm))) {
|
|
8414
|
+
const unionT = optional.type;
|
|
8415
|
+
const key = `parseInt.optional:${unionT.unionId}`;
|
|
8416
|
+
let helper = lowerer.valueHelpers.get(key);
|
|
8417
|
+
if (!helper) {
|
|
8418
|
+
helper = `%parseInt.optional.${lowerer.valueHelpers.size}`;
|
|
8419
|
+
lowerer.valueHelpers.set(key, helper);
|
|
8420
|
+
const value = { kind: "varRef", localId: "value.0", type: unionT, loc };
|
|
8421
|
+
const radixRef = { kind: "varRef", localId: "radix.0", type: F64, loc };
|
|
8422
|
+
const body = def.arms.flatMap((arm, tag) => isUnitType(arm)
|
|
8423
|
+
? [
|
|
8424
|
+
{
|
|
8425
|
+
kind: "if",
|
|
8426
|
+
cond: {
|
|
8427
|
+
kind: "unionIsTag",
|
|
8428
|
+
unionId: unionT.unionId,
|
|
8429
|
+
tag,
|
|
8430
|
+
negated: false,
|
|
8431
|
+
value,
|
|
8432
|
+
type: BOOL,
|
|
8433
|
+
loc,
|
|
8434
|
+
},
|
|
8435
|
+
then: [
|
|
8436
|
+
{
|
|
8437
|
+
kind: "return",
|
|
8438
|
+
value: { kind: "numLit", value: NaN, type: F64, loc },
|
|
8439
|
+
loc,
|
|
8440
|
+
},
|
|
8441
|
+
],
|
|
8442
|
+
else_: null,
|
|
8443
|
+
loc,
|
|
8444
|
+
},
|
|
8445
|
+
]
|
|
8446
|
+
: []);
|
|
8447
|
+
body.push({
|
|
8448
|
+
kind: "return",
|
|
8449
|
+
value: {
|
|
8450
|
+
kind: "libCall",
|
|
8451
|
+
fn: "num.parseInt",
|
|
8452
|
+
args: [
|
|
8453
|
+
{
|
|
8454
|
+
kind: "unionNarrow",
|
|
8455
|
+
unionId: unionT.unionId,
|
|
8456
|
+
tag: stringTag,
|
|
8457
|
+
value,
|
|
8458
|
+
type: STRING,
|
|
8459
|
+
loc,
|
|
8460
|
+
},
|
|
8461
|
+
radixRef,
|
|
8462
|
+
],
|
|
8463
|
+
type: F64,
|
|
8464
|
+
loc,
|
|
8465
|
+
},
|
|
8466
|
+
loc,
|
|
8467
|
+
});
|
|
8468
|
+
lowerer.liftedFns.push({
|
|
8469
|
+
name: helper,
|
|
8470
|
+
params: [
|
|
8471
|
+
{ localId: "value.0", name: "value", type: unionT },
|
|
8472
|
+
{ localId: "radix.0", name: "radix", type: F64 },
|
|
8473
|
+
],
|
|
8474
|
+
returnType: F64,
|
|
8475
|
+
locals: [
|
|
8476
|
+
{ id: "value.0", name: "value", type: unionT, mutable: true },
|
|
8477
|
+
{ id: "radix.0", name: "radix", type: F64, mutable: true },
|
|
8478
|
+
],
|
|
8479
|
+
body,
|
|
8480
|
+
loc,
|
|
8481
|
+
});
|
|
8482
|
+
}
|
|
8483
|
+
return { kind: "call", callee: helper, args: [optional, radix], type: F64, loc };
|
|
8484
|
+
}
|
|
8485
|
+
}
|
|
8486
|
+
const s = lowerer.lowerExprExpecting(args[0], STRING);
|
|
8487
|
+
return { kind: "libCall", fn: "num.parseInt", args: [s, radix], type: F64, loc };
|
|
8488
|
+
}
|
|
8489
|
+
// STATIC parseFloat/isFinite over exactly-typed arguments —
|
|
8490
|
+
// parseInt's siblings (num.parseFloat is ECMA 19.2.4's decimal-
|
|
8491
|
+
// literal prefix parse in scr_string.c; a number-typed isFinite IS
|
|
8492
|
+
// Number.isFinite — the global's ToNumber coercion is the identity
|
|
8493
|
+
// there, ms's `isFinite(val)` guard). Other argument types fall
|
|
8494
|
+
// through to today's island path (--dynamic) or its SC2012 fence:
|
|
8495
|
+
// the ToNumber/ToString coercions on arbitrary values stay engine
|
|
8496
|
+
// territory. The probe never emits — lowering is IR construction.
|
|
8497
|
+
if ((name === "parseFloat" || name === "isFinite") && args.length === 1) {
|
|
8498
|
+
if (name === "parseFloat") {
|
|
8499
|
+
const optional = optionalCallValue(lowerer, args[0]);
|
|
8500
|
+
if (optional) {
|
|
8501
|
+
const parsed = lowerOptionalStringNumber(lowerer, optional, loc, "num.parseFloat", "parseFloat");
|
|
8502
|
+
if (parsed)
|
|
8503
|
+
return parsed;
|
|
8504
|
+
}
|
|
8505
|
+
}
|
|
8506
|
+
const probed = tryLowerExpression(lowerer, args[0]);
|
|
8507
|
+
if (name === "parseFloat" && probed?.type.kind === "string") {
|
|
8508
|
+
return { kind: "libCall", fn: "num.parseFloat", args: [probed], type: F64, loc };
|
|
8509
|
+
}
|
|
8510
|
+
if (name === "parseFloat" && probed?.type.kind === "dyn") {
|
|
8511
|
+
return {
|
|
8512
|
+
kind: "libCall",
|
|
8513
|
+
fn: "num.parseFloat",
|
|
8514
|
+
args: [{ kind: "libCall", fn: "dyn.toStringCoerce", args: [probed], type: STRING, loc }],
|
|
8515
|
+
type: F64,
|
|
8516
|
+
loc,
|
|
8517
|
+
};
|
|
8518
|
+
}
|
|
8519
|
+
if (name === "isFinite" && probed?.type.kind === "f64") {
|
|
8520
|
+
return { kind: "libCall", fn: "number.isFinite", args: [probed], type: BOOL, loc };
|
|
8521
|
+
}
|
|
8522
|
+
}
|
|
8523
|
+
return null;
|
|
8524
|
+
}
|
|
8456
8525
|
//# sourceMappingURL=lower-calls.js.map
|