@scriptc/compiler 0.2.6 → 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 +7 -18
- package/dist/backend/cycle-analysis.d.ts +21 -9
- package/dist/backend/cycle-analysis.js +139 -67
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-analysis.test.js +283 -3
- package/dist/backend/cycle-analysis.test.js.map +1 -1
- package/dist/backend/cycle-mutability.d.ts +39 -0
- package/dist/backend/cycle-mutability.js +205 -0
- package/dist/backend/cycle-mutability.js.map +1 -0
- package/dist/backend/link-plan-core.d.ts +2 -1
- package/dist/backend/link-plan-core.js +15 -3
- package/dist/backend/link-plan-core.js.map +1 -1
- package/dist/backend/link-plan.d.ts +2 -1
- package/dist/backend/link-plan.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +43 -0
- package/dist/backend/llvm/alloc.js +246 -0
- package/dist/backend/llvm/alloc.js.map +1 -0
- package/dist/backend/llvm/alloc.test.d.ts +1 -0
- package/dist/backend/llvm/alloc.test.js +102 -0
- package/dist/backend/llvm/alloc.test.js.map +1 -0
- 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 +18 -3
- package/dist/backend/llvm/call-lifetimes.js +54 -19
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +178 -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 +16 -1
- package/dist/backend/llvm/classes.js +60 -49
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +68 -6
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +13 -0
- package/dist/backend/llvm/common.js +30 -0
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +19 -3
- package/dist/backend/llvm/constant-callbacks.js +289 -52
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +140 -3
- package/dist/backend/llvm/constant-callbacks.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.d.ts +29 -0
- package/dist/backend/llvm/dense-array-access.js +335 -0
- package/dist/backend/llvm/dense-array-access.js.map +1 -0
- package/dist/backend/llvm/dense-array-access.test.d.ts +1 -0
- package/dist/backend/llvm/dense-array-access.test.js +238 -0
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +38 -0
- package/dist/backend/llvm/dyn.js +213 -14
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +308 -15
- package/dist/backend/llvm/emitter.js +1788 -206
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +89 -7
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +62 -8
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-async.test.d.ts +1 -0
- package/dist/backend/llvm/expr-async.test.js +62 -0
- package/dist/backend/llvm/expr-async.test.js.map +1 -0
- 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 +118 -15
- 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 +246 -32
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-control.js +113 -8
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dispatch.js +2 -0
- package/dist/backend/llvm/expr-dispatch.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +244 -44
- 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.d.ts +1 -1
- package/dist/backend/llvm/expr-primitives.js +93 -36
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +51 -3
- package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +31 -17
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +96 -29
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +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/integer-remainder.d.ts +11 -0
- package/dist/backend/llvm/integer-remainder.js +91 -0
- package/dist/backend/llvm/integer-remainder.js.map +1 -1
- package/dist/backend/llvm/layouts.d.ts +3 -1
- package/dist/backend/llvm/layouts.js +3 -2
- package/dist/backend/llvm/layouts.js.map +1 -1
- package/dist/backend/llvm/lazy-captures.d.ts +16 -0
- package/dist/backend/llvm/lazy-captures.js +96 -0
- package/dist/backend/llvm/lazy-captures.js.map +1 -0
- package/dist/backend/llvm/lazy-captures.test.d.ts +1 -0
- package/dist/backend/llvm/lazy-captures.test.js +78 -0
- package/dist/backend/llvm/lazy-captures.test.js.map +1 -0
- 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 +10 -15
- 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.d.ts +5 -1
- package/dist/backend/llvm/local-array-reads.js +147 -26
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +85 -4
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.d.ts +5 -1
- package/dist/backend/llvm/local-union-storage.js +54 -8
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +94 -6
- 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 +39 -20
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/nullable-fields.d.ts +28 -0
- package/dist/backend/llvm/nullable-fields.js +45 -0
- package/dist/backend/llvm/nullable-fields.js.map +1 -0
- package/dist/backend/llvm/nullable-fields.test.d.ts +1 -0
- package/dist/backend/llvm/nullable-fields.test.js +48 -0
- package/dist/backend/llvm/nullable-fields.test.js.map +1 -0
- 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/serialized-ir-emission.test.d.ts +1 -0
- package/dist/backend/llvm/serialized-ir-emission.test.js +52 -0
- package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +104 -9
- package/dist/backend/llvm/shapes.js +356 -46
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +139 -5
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/stack-callbacks.js +2 -3
- package/dist/backend/llvm/stack-callbacks.js.map +1 -1
- package/dist/backend/llvm/stack-captures.d.ts +3 -1
- package/dist/backend/llvm/stack-captures.js +5 -3
- package/dist/backend/llvm/stack-captures.js.map +1 -1
- package/dist/backend/llvm/stack-unions.test.js +43 -3
- 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-construction.test.js +1 -1
- package/dist/backend/llvm/string-key-hash.d.ts +15 -0
- package/dist/backend/llvm/string-key-hash.js +76 -0
- package/dist/backend/llvm/string-key-hash.js.map +1 -0
- package/dist/backend/llvm/string-key-hash.test.d.ts +1 -0
- package/dist/backend/llvm/string-key-hash.test.js +45 -0
- package/dist/backend/llvm/string-key-hash.test.js.map +1 -0
- package/dist/backend/llvm/string-lifetimes.test.js +65 -15
- 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.js +1 -1
- package/dist/backend/llvm/switch-dispatch.js.map +1 -1
- package/dist/backend/llvm/switch-dispatch.test.js +3 -3
- 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 +349 -3
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +114 -2
- package/dist/backend/may-throw.test.js.map +1 -1
- package/dist/backend/native/cache-warm.d.ts +2 -1
- package/dist/backend/native/cache-warm.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +3 -2
- package/dist/backend/native/contracts.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 +7 -4
- 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 +9 -0
- package/dist/backend/native-codegen.js +53 -2
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +64 -10
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +3 -2
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-link-info.d.ts +2 -1
- package/dist/backend/native-link-info.js.map +1 -1
- package/dist/backend/native-link-info.test.js +2 -2
- package/dist/backend/native-link-info.test.js.map +1 -1
- package/dist/backend/native-tools.d.ts +5 -1
- package/dist/backend/native-tools.js +3 -1
- package/dist/backend/native-tools.js.map +1 -1
- package/dist/backend/optimization.d.ts +25 -0
- package/dist/backend/optimization.js +21 -0
- package/dist/backend/optimization.js.map +1 -0
- package/dist/backend/optimization.test.d.ts +1 -0
- package/dist/backend/optimization.test.js +24 -0
- package/dist/backend/optimization.test.js.map +1 -0
- 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-core.d.ts +15 -4
- package/dist/backend/runtime-pack-core.js +23 -12
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.d.ts +7 -3
- package/dist/backend/runtime-pack-native.js +0 -3
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack.d.ts +20 -2
- package/dist/backend/runtime-pack.js +23 -0
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +115 -2
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +1 -1
- package/dist/backend/targets.d.ts +2 -1
- package/dist/backend/targets.js +1 -1
- package/dist/backend/targets.js.map +1 -1
- package/dist/cli/command.js +75 -11
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/host.d.ts +2 -1
- package/dist/cli/usage.d.ts +4 -1
- package/dist/cli/usage.js +13 -3
- package/dist/cli/usage.js.map +1 -1
- package/dist/compile-types.d.ts +17 -5
- 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 +84 -12
- 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/executable-cache.d.ts +2 -2
- package/dist/executable/executable-cache.js +7 -4
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +20 -0
- package/dist/executable/executable-cache.test.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/abstract-equality.js +5 -49
- package/dist/frontend/lowering/abstract-equality.js.map +1 -1
- package/dist/frontend/lowering/array-values.d.ts +30 -0
- package/dist/frontend/lowering/array-values.js +246 -1
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.js +17 -2
- package/dist/frontend/lowering/builtins/errors.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 +10 -17
- package/dist/frontend/lowering/builtins/process.js +66 -29
- 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/caught-value-dispatch.d.ts +11 -0
- package/dist/frontend/lowering/caught-value-dispatch.js +87 -0
- package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -0
- package/dist/frontend/lowering/class-assertions.d.ts +12 -0
- package/dist/frontend/lowering/class-assertions.js +229 -5
- package/dist/frontend/lowering/class-assertions.js.map +1 -1
- package/dist/frontend/lowering/class-callbacks.d.ts +3 -3
- package/dist/frontend/lowering/class-callbacks.js +18 -5
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +12 -6
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.d.ts +5 -0
- package/dist/frontend/lowering/class-method-mutations.js +472 -0
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -0
- package/dist/frontend/lowering/class-method-values.js +25 -5
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.js +8 -2
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-unions.d.ts +16 -0
- package/dist/frontend/lowering/class-unions.js +127 -0
- package/dist/frontend/lowering/class-unions.js.map +1 -0
- package/dist/frontend/lowering/coercions/builders.js +8 -1
- package/dist/frontend/lowering/coercions/builders.js.map +1 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +2 -0
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/identity.d.ts +7 -0
- package/dist/frontend/lowering/coercions/identity.js +26 -0
- package/dist/frontend/lowering/coercions/identity.js.map +1 -0
- 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/structural.js +9 -6
- package/dist/frontend/lowering/coercions/structural.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/collection-narrowing.d.ts +6 -0
- package/dist/frontend/lowering/collection-narrowing.js +31 -0
- package/dist/frontend/lowering/collection-narrowing.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-callback-call.d.ts +7 -0
- package/dist/frontend/lowering/containers/array-callback-call.js +52 -0
- package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +416 -65
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.d.ts +7 -0
- package/dist/frontend/lowering/containers/array-concat.js +130 -0
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -0
- package/dist/frontend/lowering/containers/array-construction.d.ts +2 -0
- package/dist/frontend/lowering/containers/array-construction.js +110 -5
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.d.ts +1 -11
- package/dist/frontend/lowering/containers/array-methods.js +274 -144
- 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/collection-methods.js +10 -1
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +56 -70
- package/dist/frontend/lowering/containers/indexed-objects.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 +46 -0
- package/dist/frontend/lowering/cycle-initialization.js +303 -0
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -0
- 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/evaluation-safety.js +4 -0
- package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +178 -34
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-field-write.d.ts +4 -4
- package/dist/frontend/lowering/expressions/union-field-write.js +54 -44
- package/dist/frontend/lowering/expressions/union-field-write.js.map +1 -1
- package/dist/frontend/lowering/iterator-adapters.d.ts +20 -0
- package/dist/frontend/lowering/iterator-adapters.js +605 -0
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -0
- package/dist/frontend/lowering/lower-array-sort.d.ts +1 -1
- package/dist/frontend/lowering/lower-array-sort.js +44 -5
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.test.d.ts +1 -0
- package/dist/frontend/lowering/lower-array-sort.test.js +31 -0
- package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -0
- package/dist/frontend/lowering/lower-assert.js +7 -0
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.js +1 -0
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +8 -3
- package/dist/frontend/lowering/lower-calls.js +388 -278
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +6 -0
- package/dist/frontend/lowering/lower-classes.js +117 -65
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +22 -2
- package/dist/frontend/lowering/lower-exprs.js +811 -254
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +32 -19
- package/dist/frontend/lowering/lower-functions.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 +29 -4
- 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 +100 -3
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +82 -64
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +115 -2
- package/dist/frontend/lowering/lowerer.js +1266 -88
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.js +3 -1
- package/dist/frontend/lowering/native-ffi.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 +16 -0
- package/dist/frontend/lowering/runtime-optional-provenance.js +41 -0
- package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -0
- package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
- package/dist/frontend/lowering/strict-equality.d.ts +9 -0
- package/dist/frontend/lowering/strict-equality.js +116 -0
- package/dist/frontend/lowering/strict-equality.js.map +1 -0
- 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/surfaces.js +3 -0
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/union-comparison.d.ts +5 -0
- package/dist/frontend/lowering/union-comparison.js +47 -0
- package/dist/frontend/lowering/union-comparison.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 +63 -2
- package/dist/frontend/program.js +1038 -61
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +122 -6
- 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 +4 -1
- package/dist/frontend/type-mapper.js +161 -20
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.js +15 -3
- package/dist/frontend/type-mapper.test.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 +70 -16
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.d.ts +3 -1
- package/dist/ir/analysis.js +4 -0
- package/dist/ir/analysis.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 +5 -3
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/constant-tables.test.js +1 -1
- package/dist/ir/initializer-bindings.test.js +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 +101 -20
- package/dist/ir/ir.js +20 -6
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/scalar-records.test.js +1 -1
- package/dist/ir/serialize.d.ts +1 -1
- package/dist/ir/serialize.js +3 -3
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/traverse.js +8 -0
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +139 -22
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +308 -8
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/fence-eval.test.js +1 -1
- package/dist/library/int-infer.test.js +4 -4
- package/dist/library/library-cache.test.js +5 -5
- package/dist/library/library-profile.d.ts +2 -1
- package/dist/library/library-profile.js +4 -3
- package/dist/library/library-profile.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/compiler.test.js +2 -2
- package/dist/native/library.d.ts +2 -1
- package/dist/native/library.js.map +1 -1
- package/dist/native/prepare.d.ts +4 -0
- package/dist/native/prepare.js +28 -3
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.d.ts +3 -2
- package/dist/native/sanitizer.js +3 -13
- package/dist/native/sanitizer.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 +8 -2
|
@@ -5,10 +5,15 @@ import { isRefCounted, typeEquals, typeKey } from "../../ir/ir.js";
|
|
|
5
5
|
import { mangleResolveThunk } from "../mangle.js";
|
|
6
6
|
import { elemAccess, FN_ATTRS, mapKeyAccess, mapKeyKindNum, mapKeyParamType, mapValKindNum, traceArg, vAdapters, } from "./shapes.js";
|
|
7
7
|
import { F64_INF, f64Lit } from "./common.js";
|
|
8
|
+
import { MUTATING_COLLECTION_METHODS } from "../publication.js";
|
|
8
9
|
import { borrowsStringInputs, emitStringInputs } from "./string-lifetimes.js";
|
|
9
|
-
import { emitMapLookupKey, borrowsMapReadInputs, borrowsMapMutationReceiver, } from "./map-read-lifetimes.js";
|
|
10
|
+
import { emitMapLookupKey, borrowsMapReadInputs, borrowsMapMutationReceiver, inlineNumberKey, } from "./map-read-lifetimes.js";
|
|
11
|
+
import { emitNumberMapGetRef, emitNumberMapGetScalar, emitNumberMapHas, } from "./map-number-lookup.js";
|
|
10
12
|
import { emitBorrowedInput } from "./borrowed-inputs.js";
|
|
11
13
|
import { emitStringSliceRead } from "./string-slices.js";
|
|
14
|
+
import { STRING_CHAR_CODE_AT_DECL, STRING_UTF16_LEN_DECL } from "./string-reads.js";
|
|
15
|
+
import { emitDenseArrayNumber, emitDenseArrayPush } from "./dense-array-access.js";
|
|
16
|
+
import { emitUnionWiden } from "./expr-records.js";
|
|
12
17
|
export function resolveThunkFor(host, inner) {
|
|
13
18
|
const key = typeKey(inner);
|
|
14
19
|
let sym = host.resolveThunks.get(key);
|
|
@@ -21,9 +26,9 @@ export function resolveThunkFor(host, inner) {
|
|
|
21
26
|
}
|
|
22
27
|
return sym;
|
|
23
28
|
}
|
|
24
|
-
export function tagInSet(host, uName, tags) {
|
|
29
|
+
export function tagInSet(host, uName, unionId, tags) {
|
|
25
30
|
const B = host.B;
|
|
26
|
-
const tag = host.unionTag(uName);
|
|
31
|
+
const tag = host.unionTag(uName, unionId);
|
|
27
32
|
let acc = "";
|
|
28
33
|
for (const t of tags) {
|
|
29
34
|
const c = B.tmp();
|
|
@@ -40,11 +45,7 @@ export function tagInSet(host, uName, tags) {
|
|
|
40
45
|
return acc;
|
|
41
46
|
}
|
|
42
47
|
export function arrPush(host, arr, acc, value) {
|
|
43
|
-
|
|
44
|
-
host.declare(`declare double @scr_arr_push_${acc}(ptr, ${argTy === "i1" ? "i1 zeroext" : argTy})`);
|
|
45
|
-
const t = host.B.tmp();
|
|
46
|
-
host.B.line(`${t} = call double @scr_arr_push_${acc}(ptr ${arr}, ${argTy} ${value})`);
|
|
47
|
-
return t;
|
|
48
|
+
return emitDenseArrayPush(host, arr, acc, value);
|
|
48
49
|
}
|
|
49
50
|
/** Move evaluated values through one bounded slot buffer per call site. */
|
|
50
51
|
export function emitArrayValues(host, arr, acc, values, prepend = false, sharedBuffer) {
|
|
@@ -95,6 +96,97 @@ export function emitArrayValues(host, arr, acc, values, prepend = false, sharedB
|
|
|
95
96
|
}
|
|
96
97
|
return result;
|
|
97
98
|
}
|
|
99
|
+
/** A splice whose removed-elements array is discarded (statement position)
|
|
100
|
+
* and whose insertion items, if any, are plain evaluated values: evaluate
|
|
101
|
+
* the receiver, start, count, and items in order, then splice the values in
|
|
102
|
+
* without a result or argument array. Returns false for every other shape,
|
|
103
|
+
* which keeps the ordinary intrinsic. */
|
|
104
|
+
export function emitDiscardedSplice(host, e) {
|
|
105
|
+
if (!discardsSplice(e))
|
|
106
|
+
return false;
|
|
107
|
+
emitDiscarded(host, e);
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
/** The plain-value items of a splice that can drop its result, or null. */
|
|
111
|
+
function droppableSpliceItems(e) {
|
|
112
|
+
if (e.kind !== "arrIntrinsic" || e.receiver.type.kind !== "array")
|
|
113
|
+
return null;
|
|
114
|
+
if (e.method === "splice")
|
|
115
|
+
return [];
|
|
116
|
+
if (e.method !== "spliceInsert")
|
|
117
|
+
return null;
|
|
118
|
+
const list = e.args[2];
|
|
119
|
+
if (list?.kind !== "arrayLit" || (list.spreads?.length ?? 0) > 0)
|
|
120
|
+
return null;
|
|
121
|
+
return list.elems.length <= 64 ? list.elems : null;
|
|
122
|
+
}
|
|
123
|
+
/** A droppable splice, possibly behind statements or one arm of a
|
|
124
|
+
* conditional (the runtime-optional item lowering). */
|
|
125
|
+
function discardsSplice(e) {
|
|
126
|
+
if (e.kind === "seqExpr")
|
|
127
|
+
return discardsSplice(e.result);
|
|
128
|
+
if (e.kind === "ternary")
|
|
129
|
+
return discardsSplice(e.then) || discardsSplice(e.else_);
|
|
130
|
+
return droppableSpliceItems(e) !== null;
|
|
131
|
+
}
|
|
132
|
+
/** Emit an expression whose value is unused. Ternary arms keep their own
|
|
133
|
+
* frames, exactly like an evaluated conditional. */
|
|
134
|
+
function emitDiscarded(host, e) {
|
|
135
|
+
const B = host.B;
|
|
136
|
+
if (e.kind === "seqExpr") {
|
|
137
|
+
for (const s of e.stmts)
|
|
138
|
+
host.emitStmt(s);
|
|
139
|
+
emitDiscarded(host, e.result);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (e.kind === "ternary") {
|
|
143
|
+
const c = host.emitExpr(e.cond);
|
|
144
|
+
const lt = B.newLabel("drop.t"), lf = B.newLabel("drop.f"), lj = B.newLabel("drop.j");
|
|
145
|
+
B.condBr(c.name, lt, lf);
|
|
146
|
+
for (const [label, arm] of [
|
|
147
|
+
[lt, e.then],
|
|
148
|
+
[lf, e.else_],
|
|
149
|
+
]) {
|
|
150
|
+
B.startBlock(label);
|
|
151
|
+
host.frames.push([]);
|
|
152
|
+
emitDiscarded(host, arm);
|
|
153
|
+
host.releaseFrame(host.frames.pop());
|
|
154
|
+
B.br(lj);
|
|
155
|
+
}
|
|
156
|
+
B.startBlock(lj);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const items = droppableSpliceItems(e);
|
|
160
|
+
if (items === null || e.kind !== "arrIntrinsic" || e.receiver.type.kind !== "array") {
|
|
161
|
+
host.emitExpr(e);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const r = emitBorrowedInput(host, e.receiver);
|
|
165
|
+
const acc = elemAccess(e.receiver.type.elem);
|
|
166
|
+
const start = host.emitExpr(e.args[0]);
|
|
167
|
+
const count = e.args[1] ? host.emitExpr(e.args[1]).name : F64_INF;
|
|
168
|
+
const values = items.map((item) => host.emitExpr(item));
|
|
169
|
+
if (acc === "ref")
|
|
170
|
+
values.forEach((value) => host.moveTemp(value));
|
|
171
|
+
let buffer = "null";
|
|
172
|
+
if (values.length > 0) {
|
|
173
|
+
buffer = B.tmp();
|
|
174
|
+
B.entryAllocas.push(`${buffer} = alloca [${values.length} x i64]`);
|
|
175
|
+
values.forEach((value, i) => {
|
|
176
|
+
const slot = B.tmp(), pointer = B.tmp();
|
|
177
|
+
const pack = acc === "f64"
|
|
178
|
+
? `bitcast double ${value.name} to i64`
|
|
179
|
+
: acc === "bool"
|
|
180
|
+
? `zext i1 ${value.name} to i64`
|
|
181
|
+
: `ptrtoint ptr ${value.name} to i64`;
|
|
182
|
+
B.line(`${slot} = ${pack}`);
|
|
183
|
+
B.line(`${pointer} = getelementptr inbounds i64, ptr ${buffer}, ${host.sizeType} ${i}`);
|
|
184
|
+
B.line(`store i64 ${slot}, ptr ${pointer}`);
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
host.declare(`declare void @scr_arr_splice_drop(ptr, double, double, ${host.sizeType}, ptr)`);
|
|
188
|
+
B.line(`call void @scr_arr_splice_drop(ptr ${r.name}, double ${start.name}, double ${count}, ${host.sizeType} ${values.length}, ptr ${buffer})`);
|
|
189
|
+
}
|
|
98
190
|
export function emitArrayCopyLoop(host, dst, src, acc) {
|
|
99
191
|
void acc;
|
|
100
192
|
host.declare(`declare double @scr_arr_push_spread(ptr, ptr)`);
|
|
@@ -126,10 +218,19 @@ export function emitStrIntrinsic(host, e) {
|
|
|
126
218
|
};
|
|
127
219
|
const method = e.method;
|
|
128
220
|
switch (method) {
|
|
129
|
-
case "length":
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
221
|
+
case "length": {
|
|
222
|
+
// sc_str_utf16_len (string-reads.ts) answers proven-ASCII strings inline.
|
|
223
|
+
host.declare(STRING_UTF16_LEN_DECL);
|
|
224
|
+
const t = B.tmp();
|
|
225
|
+
B.line(`${t} = call double @sc_str_utf16_len(ptr ${r.name})`);
|
|
226
|
+
return { name: t, type: e.type };
|
|
227
|
+
}
|
|
228
|
+
case "charCodeAt": {
|
|
229
|
+
host.declare(STRING_CHAR_CODE_AT_DECL);
|
|
230
|
+
const t = B.tmp();
|
|
231
|
+
B.line(`${t} = call double @sc_str_char_code_at(ptr ${r.name}, double ${args[0].name})`);
|
|
232
|
+
return { name: t, type: e.type };
|
|
233
|
+
}
|
|
133
234
|
case "charAt":
|
|
134
235
|
return call("scr_str_char_at", "ptr (ptr, double)", `ptr ${r.name}, double ${args[0].name}`, "ptr", true);
|
|
135
236
|
case "indexOf":
|
|
@@ -156,8 +257,12 @@ export function emitStrIntrinsic(host, e) {
|
|
|
156
257
|
return call("scr_str_slice", "ptr (ptr, double, double)", `ptr ${r.name}, double ${args[0]?.name ?? f64Lit(0)}, double ${args[1]?.name ?? F64_INF}`, "ptr", true);
|
|
157
258
|
case "substring":
|
|
158
259
|
return call("scr_str_substring", "ptr (ptr, double, double)", `ptr ${r.name}, double ${args[0].name}, double ${args[1]?.name ?? F64_INF}`, "ptr", true);
|
|
159
|
-
case "repeat":
|
|
160
|
-
|
|
260
|
+
case "repeat": {
|
|
261
|
+
// A negative or infinite count throws Node's catchable RangeError.
|
|
262
|
+
const result = call("scr_str_repeat", "ptr (ptr, double)", `ptr ${r.name}, double ${args[0].name}`, "ptr", true);
|
|
263
|
+
host.emitPendingCheck();
|
|
264
|
+
return result;
|
|
265
|
+
}
|
|
161
266
|
case "trim":
|
|
162
267
|
return call("scr_str_trim", "ptr (ptr)", `ptr ${r.name}`, "ptr", true);
|
|
163
268
|
case "trimStart":
|
|
@@ -248,6 +353,8 @@ export function emitArrIntrinsic(host, e) {
|
|
|
248
353
|
const table = e.receiver.kind === "varRef"
|
|
249
354
|
? host.constantNumericTables.get(e.receiver.localId)
|
|
250
355
|
: undefined;
|
|
356
|
+
if (!table && elem.kind === "f64")
|
|
357
|
+
return { name: emitDenseArrayNumber(host, r.name, index, e.args[0]), type: e.type };
|
|
251
358
|
host.declare(`declare double @scr_arr_get_number(ptr, double)`);
|
|
252
359
|
const t = B.tmp();
|
|
253
360
|
B.line(`${t} = call double @${table ? `${table.symbol}_get` : "scr_arr_get_number"}(ptr ${r.name}, double ${index.name})`);
|
|
@@ -276,12 +383,19 @@ export function emitArrIntrinsic(host, e) {
|
|
|
276
383
|
// the last push's return, or the unchanged length for Node's
|
|
277
384
|
// no-op zero-argument call.
|
|
278
385
|
const vs = e.args.map((a) => host.emitExpr(a));
|
|
386
|
+
host.emitPublishedArrayGuard(r.name, e.receiver.type, 1, f64Lit(0), f64Lit(vs.length));
|
|
279
387
|
return { name: emitArrayValues(host, r.name, acc, vs), type: e.type };
|
|
280
388
|
}
|
|
281
389
|
case "pushSpread": {
|
|
282
390
|
// `a.push(...src)`: append src's elements in order (borrowed src,
|
|
283
391
|
// count snapshotted). Result: the new length.
|
|
284
392
|
const src = emitBorrowedInput(host, e.args[0]);
|
|
393
|
+
if (host.publishedTypes?.containerGuarded(e.receiver.type) === true) {
|
|
394
|
+
host.declare(`declare double @scr_arr_len(ptr)`);
|
|
395
|
+
const n = B.tmp();
|
|
396
|
+
B.line(`${n} = call double @scr_arr_len(ptr ${src.name})`);
|
|
397
|
+
host.emitPublishedArrayGuard(r.name, e.receiver.type, 1, f64Lit(0), n);
|
|
398
|
+
}
|
|
285
399
|
host.emitArrayCopyLoop(r.name, src.name, acc);
|
|
286
400
|
host.declare(`declare double @scr_arr_len(ptr)`);
|
|
287
401
|
const t = B.tmp();
|
|
@@ -299,11 +413,18 @@ export function emitArrIntrinsic(host, e) {
|
|
|
299
413
|
// Evaluate every argument before the first mutation, then insert
|
|
300
414
|
// from right to left so the final front order is source order.
|
|
301
415
|
const vs = e.args.map((a) => host.emitExpr(a));
|
|
416
|
+
host.emitPublishedArrayGuard(r.name, e.receiver.type, 4, f64Lit(0), f64Lit(vs.length));
|
|
302
417
|
return { name: emitArrayValues(host, r.name, acc, vs, true), type: e.type };
|
|
303
418
|
}
|
|
304
419
|
case "unshiftSpread": {
|
|
305
420
|
// The runtime snapshots the borrowed source and handles self-spread.
|
|
306
421
|
const src = emitBorrowedInput(host, e.args[0]);
|
|
422
|
+
if (host.publishedTypes?.containerGuarded(e.receiver.type) === true) {
|
|
423
|
+
host.declare(`declare double @scr_arr_len(ptr)`);
|
|
424
|
+
const n = B.tmp();
|
|
425
|
+
B.line(`${n} = call double @scr_arr_len(ptr ${src.name})`);
|
|
426
|
+
host.emitPublishedArrayGuard(r.name, e.receiver.type, 4, f64Lit(0), n);
|
|
427
|
+
}
|
|
307
428
|
host.declare(`declare double @scr_arr_unshift_spread(ptr, ptr)`);
|
|
308
429
|
const t = B.tmp();
|
|
309
430
|
B.line(`${t} = call double @scr_arr_unshift_spread(ptr ${r.name}, ptr ${src.name})`);
|
|
@@ -311,6 +432,7 @@ export function emitArrIntrinsic(host, e) {
|
|
|
311
432
|
}
|
|
312
433
|
case "pop":
|
|
313
434
|
case "shift": {
|
|
435
|
+
host.emitPublishedArrayGuard(r.name, e.receiver.type, method === "pop" ? 2 : 6);
|
|
314
436
|
const dynamic = elem.kind === "dyn" && e.type.kind === "dyn";
|
|
315
437
|
if (!dynamic && e.type.kind !== "union")
|
|
316
438
|
throw new InternalCompilerError("llvm emitter bug: array removal result is not a union");
|
|
@@ -343,7 +465,7 @@ export function emitArrIntrinsic(host, e) {
|
|
|
343
465
|
B.line(`${value} = icmp ne i64 ${raw}, 0`);
|
|
344
466
|
else
|
|
345
467
|
B.line(`${value} = inttoptr i64 ${raw} to ptr`);
|
|
346
|
-
B.line(`store ptr ${dynamic || sameUnion ? value : host.unionNewOwned(tag, { name: value, type: elem })}, ptr ${resultSlot}`);
|
|
468
|
+
B.line(`store ptr ${dynamic || sameUnion || e.type.kind !== "union" ? value : host.unionNewOwned(e.type.unionId, tag, { name: value, type: elem })}, ptr ${resultSlot}`);
|
|
347
469
|
B.br(lj);
|
|
348
470
|
B.startBlock(la);
|
|
349
471
|
if (dynamic) {
|
|
@@ -413,13 +535,28 @@ export function emitArrIntrinsic(host, e) {
|
|
|
413
535
|
}
|
|
414
536
|
case "sortPrimitive":
|
|
415
537
|
case "toSortedPrimitive": {
|
|
538
|
+
if (e.method === "sortPrimitive")
|
|
539
|
+
host.emitPublishedArrayGuard(r.name, e.receiver.type, 7);
|
|
416
540
|
host.declare(`declare ptr @scr_arr_sort_primitive(ptr, i1 zeroext)`);
|
|
417
541
|
const result = B.tmp();
|
|
418
542
|
B.line(`${result} = call ptr @scr_arr_sort_primitive(ptr ${r.name}, i1 ${e.method === "toSortedPrimitive" ? 1 : 0})`);
|
|
419
543
|
return host.own({ name: result, type: e.type });
|
|
420
544
|
}
|
|
545
|
+
case "sortValues": {
|
|
546
|
+
// The runtime invokes the borrowed comparator with the callValue ABI
|
|
547
|
+
// and stops at the first pending exception.
|
|
548
|
+
const count = host.emitExpr(e.args[0]);
|
|
549
|
+
const comparator = emitBorrowedInput(host, e.args[1]);
|
|
550
|
+
const cmp = e.args[1].type;
|
|
551
|
+
const arity = cmp.kind === "func" ? cmp.params.length : 0;
|
|
552
|
+
host.declare(`declare void @scr_arr_sort_values(ptr, double, ptr, i32)`);
|
|
553
|
+
B.line(`call void @scr_arr_sort_values(ptr ${r.name}, double ${count.name}, ptr ${comparator.name}, i32 ${arity})`);
|
|
554
|
+
host.emitPendingCheck();
|
|
555
|
+
return { name: "", type: e.type };
|
|
556
|
+
}
|
|
421
557
|
case "reverse": {
|
|
422
558
|
// Mutates in place and returns the same receiver as a fresh +1.
|
|
559
|
+
host.emitPublishedArrayGuard(r.name, e.receiver.type, 7);
|
|
423
560
|
host.declare(`declare ptr @scr_arr_reverse(ptr)`);
|
|
424
561
|
const t = B.tmp();
|
|
425
562
|
B.line(`${t} = call ptr @scr_arr_reverse(ptr ${r.name})`);
|
|
@@ -429,6 +566,7 @@ export function emitArrIntrinsic(host, e) {
|
|
|
429
566
|
case "fill":
|
|
430
567
|
case "fillUndefined": {
|
|
431
568
|
const args = e.args.map((arg) => host.emitExpr(arg));
|
|
569
|
+
host.emitPublishedArrayGuard(r.name, e.receiver.type, 7);
|
|
432
570
|
const helper = e.method === "copyWithin"
|
|
433
571
|
? "scr_arr_copy_within"
|
|
434
572
|
: e.method === "fillUndefined"
|
|
@@ -477,6 +615,7 @@ export function emitArrIntrinsic(host, e) {
|
|
|
477
615
|
// removes to the end (+Infinity, the slice convention).
|
|
478
616
|
const start = host.emitExpr(e.args[0]);
|
|
479
617
|
const cnt = e.args[1] ? host.emitExpr(e.args[1]).name : F64_INF;
|
|
618
|
+
host.emitPublishedArrayGuard(r.name, e.receiver.type, 7);
|
|
480
619
|
host.declare(`declare ptr @scr_arr_splice(ptr, double, double)`);
|
|
481
620
|
const t = B.tmp();
|
|
482
621
|
B.line(`${t} = call ptr @scr_arr_splice(ptr ${r.name}, double ${start.name}, double ${cnt})`);
|
|
@@ -486,6 +625,7 @@ export function emitArrIntrinsic(host, e) {
|
|
|
486
625
|
const start = host.emitExpr(e.args[0]);
|
|
487
626
|
const count = host.emitExpr(e.args[1]);
|
|
488
627
|
const items = emitBorrowedInput(host, e.args[2]);
|
|
628
|
+
host.emitPublishedArrayGuard(r.name, e.receiver.type, 7);
|
|
489
629
|
host.declare(`declare ptr @scr_arr_splice_insert(ptr, double, double, ptr)`);
|
|
490
630
|
const t = B.tmp();
|
|
491
631
|
B.line(`${t} = call ptr @scr_arr_splice_insert(ptr ${r.name}, double ${start.name}, double ${count.name}, ptr ${items.name})`);
|
|
@@ -508,6 +648,16 @@ export function emitArrIntrinsic(host, e) {
|
|
|
508
648
|
}
|
|
509
649
|
export function wrapNullable(host, raw, present, valueType, valueTag, resultType, absentTag) {
|
|
510
650
|
const B = host.B;
|
|
651
|
+
if (host.nullableUnions.has(resultType.unionId)) {
|
|
652
|
+
// A nullable union is its present payload, or the absent arm's encoding.
|
|
653
|
+
const absent = host.unitInstanceRef(resultType.unionId, absentTag);
|
|
654
|
+
if (raw === present && absent === "null")
|
|
655
|
+
return host.own({ name: present, type: resultType });
|
|
656
|
+
const isnull = B.tmp(), t = B.tmp();
|
|
657
|
+
B.line(`${isnull} = icmp eq ptr ${raw}, null`);
|
|
658
|
+
B.line(`${t} = select i1 ${isnull}, ptr ${absent}, ptr ${present}`);
|
|
659
|
+
return host.own({ name: t, type: resultType });
|
|
660
|
+
}
|
|
511
661
|
const slot = B.slot();
|
|
512
662
|
B.entryAllocas.push(`${slot} = alloca ptr`);
|
|
513
663
|
const isnull = B.tmp();
|
|
@@ -517,7 +667,7 @@ export function wrapNullable(host, raw, present, valueType, valueTag, resultType
|
|
|
517
667
|
const lj = B.newLabel("nw.j");
|
|
518
668
|
B.condBr(isnull, la, lp);
|
|
519
669
|
B.startBlock(lp);
|
|
520
|
-
B.line(`store ptr ${host.unionNewOwned(valueTag, { name: present, type: valueType })}, ptr ${slot}`);
|
|
670
|
+
B.line(`store ptr ${host.unionNewOwned(resultType.unionId, valueTag, { name: present, type: valueType })}, ptr ${slot}`);
|
|
521
671
|
B.br(lj);
|
|
522
672
|
B.startBlock(la);
|
|
523
673
|
B.line(`store ptr ${host.unitInstanceRef(resultType.unionId, absentTag)}, ptr ${slot}`);
|
|
@@ -601,6 +751,10 @@ export function emitMapLikeIntrinsic(host, e) {
|
|
|
601
751
|
const kAcc = mapKeyAccess(key);
|
|
602
752
|
const kTy = mapKeyParamType(kAcc);
|
|
603
753
|
const method = e.method;
|
|
754
|
+
// A published Map or Set rejects mutation (the guard precedes the
|
|
755
|
+
// operands, which each method evaluates itself).
|
|
756
|
+
if (MUTATING_COLLECTION_METHODS.has(method))
|
|
757
|
+
host.emitPublishedCollectionGuard(r.name, receiverType);
|
|
604
758
|
if (method === "clone" || method === "keySet") {
|
|
605
759
|
const keysOnly = method === "keySet" || receiverType.kind === "set";
|
|
606
760
|
const checked = key.kind === "dyn" &&
|
|
@@ -704,12 +858,48 @@ export function emitMapLikeIntrinsic(host, e) {
|
|
|
704
858
|
if (!def || undefTag < 0)
|
|
705
859
|
throw new InternalCompilerError("llvm emitter bug: map get union lacks its undefined arm");
|
|
706
860
|
const absent = host.unitInstanceRef(e.type.unionId, undefTag);
|
|
707
|
-
if (value.kind === "union"
|
|
861
|
+
if (value.kind === "union" &&
|
|
862
|
+
host.nullableUnions.has(value.unionId) &&
|
|
863
|
+
!typeEquals(value, e.type)) {
|
|
864
|
+
// A nullable `C | null` value widens into `C | null | undefined`:
|
|
865
|
+
// NULL is the stored null, so presence decides the undefined arm.
|
|
866
|
+
host.declare(`declare zeroext i1 @scr_map_has_${kAcc}(ptr, ${kTy})`);
|
|
708
867
|
host.declare(`declare ptr @scr_map_get_${kAcc}_ref(ptr, ${kTy})`);
|
|
868
|
+
const has = B.tmp();
|
|
869
|
+
B.line(`${has} = call zeroext i1 @scr_map_has_${kAcc}(ptr ${r.name}, ${k.args})`);
|
|
870
|
+
const slot = B.slot();
|
|
871
|
+
B.entryAllocas.push(`${slot} = alloca ptr`);
|
|
872
|
+
const lp = B.newLabel("mgn.p");
|
|
873
|
+
const la = B.newLabel("mgn.a");
|
|
874
|
+
const lj = B.newLabel("mgn.j");
|
|
875
|
+
B.condBr(has, lp, la);
|
|
876
|
+
B.startBlock(lp);
|
|
709
877
|
const raw = B.tmp();
|
|
878
|
+
B.line(`${raw} = call ptr @scr_map_get_${kAcc}_ref(ptr ${r.name}, ${k.args})`);
|
|
879
|
+
const widened = emitUnionWiden(host, raw, value.unionId, e.type.unionId, true);
|
|
880
|
+
B.line(`store ptr ${widened}, ptr ${slot}`);
|
|
881
|
+
B.br(lj);
|
|
882
|
+
B.startBlock(la);
|
|
883
|
+
B.line(`store ptr ${absent}, ptr ${slot}`);
|
|
884
|
+
B.br(lj);
|
|
885
|
+
B.startBlock(lj);
|
|
886
|
+
const t = B.tmp();
|
|
887
|
+
B.line(`${t} = load ptr, ptr ${slot}`);
|
|
888
|
+
return host.own({ name: t, type: e.type });
|
|
889
|
+
}
|
|
890
|
+
const numberKey = inlineNumberKey(k);
|
|
891
|
+
if (value.kind === "union") {
|
|
710
892
|
const isnull = B.tmp();
|
|
711
893
|
const t = B.tmp();
|
|
712
|
-
|
|
894
|
+
let raw;
|
|
895
|
+
if (numberKey !== null) {
|
|
896
|
+
raw = emitNumberMapGetRef(host, r.name, numberKey, value);
|
|
897
|
+
}
|
|
898
|
+
else {
|
|
899
|
+
host.declare(`declare ptr @scr_map_get_${kAcc}_ref(ptr, ${kTy})`);
|
|
900
|
+
raw = B.tmp();
|
|
901
|
+
B.line(`${raw} = call ptr @scr_map_get_${kAcc}_ref(ptr ${r.name}, ${k.args})`);
|
|
902
|
+
}
|
|
713
903
|
B.line(`${isnull} = icmp eq ptr ${raw}, null`);
|
|
714
904
|
B.line(`${t} = select i1 ${isnull}, ptr ${absent}, ptr ${raw}`);
|
|
715
905
|
return host.own({ name: t, type: e.type });
|
|
@@ -719,12 +909,36 @@ export function emitMapLikeIntrinsic(host, e) {
|
|
|
719
909
|
throw new InternalCompilerError("llvm emitter bug: map get union lacks its value arm");
|
|
720
910
|
if (value.kind === "f64" || value.kind === "bool") {
|
|
721
911
|
const outTy = value.kind === "f64" ? "double" : "i8";
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
912
|
+
let found;
|
|
913
|
+
let readHit;
|
|
914
|
+
if (numberKey !== null) {
|
|
915
|
+
const scalar = emitNumberMapGetScalar(host, r.name, numberKey);
|
|
916
|
+
found = scalar.found;
|
|
917
|
+
readHit = () => {
|
|
918
|
+
const hit = B.tmp();
|
|
919
|
+
B.line(value.kind === "f64"
|
|
920
|
+
? `${hit} = bitcast i64 ${scalar.bits} to double`
|
|
921
|
+
: `${hit} = icmp ne i64 ${scalar.bits}, 0`);
|
|
922
|
+
return hit;
|
|
923
|
+
};
|
|
924
|
+
}
|
|
925
|
+
else {
|
|
926
|
+
const outSlot = B.slot();
|
|
927
|
+
B.entryAllocas.push(`${outSlot} = alloca ${outTy}`);
|
|
928
|
+
B.line(`store ${outTy} ${value.kind === "f64" ? f64Lit(0) : "0"}, ptr ${outSlot}`);
|
|
929
|
+
host.declare(`declare zeroext i1 @scr_map_get_${kAcc}_${value.kind === "f64" ? "f64" : "bool"}(ptr, ${kTy}, ptr)`);
|
|
930
|
+
found = B.tmp();
|
|
931
|
+
B.line(`${found} = call zeroext i1 @scr_map_get_${kAcc}_${value.kind === "f64" ? "f64" : "bool"}(ptr ${r.name}, ${k.args}, ptr ${outSlot})`);
|
|
932
|
+
readHit = () => {
|
|
933
|
+
const rawOut = B.tmp();
|
|
934
|
+
B.line(`${rawOut} = load ${outTy}, ptr ${outSlot}`);
|
|
935
|
+
if (value.kind !== "bool")
|
|
936
|
+
return rawOut;
|
|
937
|
+
const hit = B.tmp();
|
|
938
|
+
B.line(`${hit} = trunc i8 ${rawOut} to i1`);
|
|
939
|
+
return hit;
|
|
940
|
+
};
|
|
941
|
+
}
|
|
728
942
|
const slot = B.slot();
|
|
729
943
|
B.entryAllocas.push(`${slot} = alloca ptr`);
|
|
730
944
|
const lp = B.newLabel("mg.p");
|
|
@@ -732,14 +946,8 @@ export function emitMapLikeIntrinsic(host, e) {
|
|
|
732
946
|
const lj = B.newLabel("mg.j");
|
|
733
947
|
B.condBr(found, lp, la);
|
|
734
948
|
B.startBlock(lp);
|
|
735
|
-
const
|
|
736
|
-
B.line(
|
|
737
|
-
let hit = rawOut;
|
|
738
|
-
if (value.kind === "bool") {
|
|
739
|
-
hit = B.tmp();
|
|
740
|
-
B.line(`${hit} = trunc i8 ${rawOut} to i1`);
|
|
741
|
-
}
|
|
742
|
-
B.line(`store ptr ${host.unionNewOwned(valueTag, { name: hit, type: value })}, ptr ${slot}`);
|
|
949
|
+
const hit = readHit();
|
|
950
|
+
B.line(`store ptr ${host.unionNewOwned(e.type.unionId, valueTag, { name: hit, type: value })}, ptr ${slot}`);
|
|
743
951
|
B.br(lj);
|
|
744
952
|
B.startBlock(la);
|
|
745
953
|
B.line(`store ptr ${absent}, ptr ${slot}`);
|
|
@@ -749,6 +957,10 @@ export function emitMapLikeIntrinsic(host, e) {
|
|
|
749
957
|
B.line(`${t} = load ptr, ptr ${slot}`);
|
|
750
958
|
return host.own({ name: t, type: e.type });
|
|
751
959
|
}
|
|
960
|
+
if (numberKey !== null && isRefCounted(value)) {
|
|
961
|
+
const raw = emitNumberMapGetRef(host, r.name, numberKey, value);
|
|
962
|
+
return host.wrapNullable(raw, raw, value, valueTag, e.type, undefTag);
|
|
963
|
+
}
|
|
752
964
|
host.declare(`declare ptr @scr_map_get_${kAcc}_ref(ptr, ${kTy})`);
|
|
753
965
|
const raw = B.tmp();
|
|
754
966
|
B.line(`${raw} = call ptr @scr_map_get_${kAcc}_ref(ptr ${r.name}, ${k.args})`);
|
|
@@ -778,6 +990,8 @@ export function emitMapLikeIntrinsic(host, e) {
|
|
|
778
990
|
}
|
|
779
991
|
case "has": {
|
|
780
992
|
const k = borrowInputs ? host.emitReadReceiver(e.args[0]) : host.emitExpr(e.args[0]);
|
|
993
|
+
if (kAcc === "f64")
|
|
994
|
+
return { name: emitNumberMapHas(host, r.name, k.name), type: e.type };
|
|
781
995
|
host.declare(`declare zeroext i1 @scr_map_has_${kAcc}(ptr, ${kTy})`);
|
|
782
996
|
const t = B.tmp();
|
|
783
997
|
B.line(`${t} = call zeroext i1 @scr_map_has_${kAcc}(ptr ${r.name}, ${kTy} ${k.name})`);
|