@scriptc/compiler 0.4.2 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ambient/scriptc-node-fallback.d.ts +470 -66
- package/dist/backend/cycle-analysis.d.ts +4 -1
- package/dist/backend/cycle-analysis.js +6 -4
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-analysis.test.js +55 -0
- package/dist/backend/cycle-analysis.test.js.map +1 -1
- package/dist/backend/cycle-mutability.d.ts +7 -0
- package/dist/backend/cycle-mutability.js +19 -1
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.js +2 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.d.ts +6 -3
- package/dist/backend/immutability.js +33 -29
- package/dist/backend/immutability.js.map +1 -1
- package/dist/backend/library-pack.js +1 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +16 -1
- package/dist/backend/llvm/alloc.js +54 -4
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/appended-array-literals.d.ts +2 -1
- package/dist/backend/llvm/appended-array-literals.js +44 -36
- package/dist/backend/llvm/appended-array-literals.js.map +1 -1
- package/dist/backend/llvm/appended-array-literals.test.js +4 -3
- package/dist/backend/llvm/appended-array-literals.test.js.map +1 -1
- package/dist/backend/llvm/array-search.d.ts +4 -3
- package/dist/backend/llvm/array-search.js +21 -9
- package/dist/backend/llvm/array-search.js.map +1 -1
- package/dist/backend/llvm/blocks.d.ts +1 -1
- package/dist/backend/llvm/blocks.js +2 -2
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/byte-windows.js +2 -0
- package/dist/backend/llvm/byte-windows.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.d.ts +6 -1
- package/dist/backend/llvm/bytes-alias.js +8 -2
- package/dist/backend/llvm/bytes-alias.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.d.ts +47 -5
- package/dist/backend/llvm/bytes-loop-versions.js +479 -32
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +263 -2
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/checked-value-lifetimes.js +2 -0
- package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +7 -5
- package/dist/backend/llvm/classes.js +44 -20
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +167 -7
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +9 -3
- package/dist/backend/llvm/common.js +9 -3
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +2 -1
- package/dist/backend/llvm/constant-callbacks.js +83 -52
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +7 -0
- package/dist/backend/llvm/counted-loops.js +18 -0
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- package/dist/backend/llvm/debug-info.js +2 -5
- package/dist/backend/llvm/debug-info.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +39 -8
- package/dist/backend/llvm/dense-array-access.js +222 -52
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +36 -0
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.d.ts +17 -1
- package/dist/backend/llvm/dense-array-loops.js +194 -5
- package/dist/backend/llvm/dense-array-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.test.js +90 -1
- package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
- package/dist/backend/llvm/dyn-handle-tags.test.js +6 -1
- package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +30 -0
- package/dist/backend/llvm/dyn.js +373 -70
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +13 -28
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-journal.d.ts +93 -0
- package/dist/backend/llvm/emit-journal.js +170 -0
- package/dist/backend/llvm/emit-journal.js.map +1 -0
- package/dist/backend/llvm/emit-module.js +211 -33
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-statements.d.ts +0 -4
- package/dist/backend/llvm/emit-statements.js +268 -84
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter-state.d.ts +7 -0
- package/dist/backend/llvm/emitter-state.js +14 -0
- package/dist/backend/llvm/emitter-state.js.map +1 -0
- package/dist/backend/llvm/emitter.d.ts +186 -37
- package/dist/backend/llvm/emitter.js +733 -90
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +65 -7
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +11 -13
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +48 -20
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.js +47 -0
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +28 -14
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +14 -2
- package/dist/backend/llvm/expr-containers.js +143 -37
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +14 -0
- package/dist/backend/llvm/expr-dynamic.js +18 -11
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +119 -38
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +11 -6
- package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
- package/dist/backend/llvm/expr-records.d.ts +12 -0
- package/dist/backend/llvm/expr-records.js +106 -0
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.d.ts +2 -2
- package/dist/backend/llvm/expr-stream-bridges.js +210 -69
- 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-bridges.test.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +2 -2
- package/dist/backend/llvm/expr-stream-callbacks.js +74 -20
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/int32-kind-loops.d.ts +39 -0
- package/dist/backend/llvm/int32-kind-loops.js +106 -0
- package/dist/backend/llvm/int32-kind-loops.js.map +1 -0
- package/dist/backend/llvm/integer-or-nan-indexes.test.d.ts +1 -0
- package/dist/backend/llvm/integer-or-nan-indexes.test.js +118 -0
- package/dist/backend/llvm/integer-or-nan-indexes.test.js.map +1 -0
- package/dist/backend/llvm/integer-values.d.ts +25 -1
- package/dist/backend/llvm/integer-values.js +95 -0
- package/dist/backend/llvm/integer-values.js.map +1 -1
- package/dist/backend/llvm/js-ic.d.ts +1 -1
- package/dist/backend/llvm/js-ic.js +1 -1
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/key-orders.d.ts +7 -0
- package/dist/backend/llvm/key-orders.js +33 -0
- package/dist/backend/llvm/key-orders.js.map +1 -0
- package/dist/backend/llvm/lib-connect.js +4 -0
- package/dist/backend/llvm/lib-connect.js.map +1 -1
- package/dist/backend/llvm/lib-datagram.js +11 -0
- package/dist/backend/llvm/lib-datagram.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +213 -5
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +4 -4
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.js +4 -0
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-lookup.js +16 -6
- package/dist/backend/llvm/lib-lookup.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +37 -1
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +94 -2
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +35 -5
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +115 -19
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +14 -0
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/loop-state.d.ts +33 -0
- package/dist/backend/llvm/loop-state.js +42 -0
- package/dist/backend/llvm/loop-state.js.map +1 -0
- package/dist/backend/llvm/map-number-lookup.d.ts +26 -8
- package/dist/backend/llvm/map-number-lookup.js +91 -31
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +55 -0
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.js +4 -2
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.d.ts +2 -1
- package/dist/backend/llvm/nullable-unions.js +15 -3
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +10 -0
- package/dist/backend/llvm/publish.js +15 -3
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/receivers.js +6 -1
- package/dist/backend/llvm/receivers.js.map +1 -1
- package/dist/backend/llvm/record-results.d.ts +1 -9
- package/dist/backend/llvm/record-results.js +2 -11
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +3 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.d.ts +7 -2
- package/dist/backend/llvm/reference-writes.js +89 -72
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/running-extrema.d.ts +11 -0
- package/dist/backend/llvm/running-extrema.js +115 -0
- package/dist/backend/llvm/running-extrema.js.map +1 -0
- package/dist/backend/llvm/running-extrema.test.d.ts +1 -0
- package/dist/backend/llvm/running-extrema.test.js +89 -0
- package/dist/backend/llvm/running-extrema.test.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +71 -15
- package/dist/backend/llvm/shapes.js +224 -40
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +53 -7
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.d.ts +6 -0
- package/dist/backend/llvm/speculative-integers.js +2 -2
- package/dist/backend/llvm/speculative-integers.js.map +1 -1
- package/dist/backend/llvm/stack-captures.js +1 -5
- package/dist/backend/llvm/stack-captures.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +3 -2
- package/dist/backend/llvm/stack-objects.js +5 -2
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/string-reads.d.ts +12 -0
- package/dist/backend/llvm/string-reads.js +44 -0
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/union-repr.d.ts +4 -3
- package/dist/backend/llvm/union-repr.js +6 -5
- package/dist/backend/llvm/union-repr.js.map +1 -1
- package/dist/backend/llvm/walk-borrows.d.ts +3 -0
- package/dist/backend/llvm/walk-borrows.js +46 -41
- package/dist/backend/llvm/walk-borrows.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +3 -0
- package/dist/backend/llvm/walkers.js +101 -65
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/llvm/wrapping-sums.d.ts +16 -1
- package/dist/backend/llvm/wrapping-sums.js +126 -0
- package/dist/backend/llvm/wrapping-sums.js.map +1 -1
- package/dist/backend/may-throw.d.ts +8 -10
- package/dist/backend/may-throw.js +14 -10
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +5 -0
- package/dist/backend/native/executable.js +7 -0
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +1 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +5 -3
- package/dist/backend/native-codegen-core.js +13 -6
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.test.js +6 -4
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +4 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/publication.d.ts +12 -1
- package/dist/backend/publication.js +37 -14
- package/dist/backend/publication.js.map +1 -1
- package/dist/backend/publication.test.js +30 -0
- package/dist/backend/publication.test.js.map +1 -1
- package/dist/backend/result-slots.d.ts +16 -0
- package/dist/backend/result-slots.js +23 -0
- package/dist/backend/result-slots.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 +1 -0
- package/dist/backend/runtime-pack-core.js +1 -0
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +2 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +2 -1
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/stack-observations.d.ts +2 -1
- package/dist/backend/stack-observations.js +67 -42
- package/dist/backend/stack-observations.js.map +1 -1
- package/dist/backend/target-cpu.d.ts +26 -0
- package/dist/backend/target-cpu.js +98 -0
- package/dist/backend/target-cpu.js.map +1 -0
- package/dist/backend/target-cpu.test.d.ts +1 -0
- package/dist/backend/target-cpu.test.js +38 -0
- package/dist/backend/target-cpu.test.js.map +1 -0
- package/dist/backend/target-diagnostics.js +5 -3
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/warm-cache.js +1 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/cli/command.js +20 -1
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +4 -1
- package/dist/cli/usage.js +10 -3
- package/dist/cli/usage.js.map +1 -1
- package/dist/compat/fetch-profile.js +1 -1
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +7 -0
- package/dist/contracts/check.js +4 -3
- package/dist/contracts/check.js.map +1 -1
- package/dist/contracts/int32-elements.js +10 -2
- package/dist/contracts/int32-elements.js.map +1 -1
- package/dist/coverage/report.js +12 -3
- package/dist/coverage/report.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +4 -0
- package/dist/diagnostics/diagnostic.js +1 -1
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +3 -0
- package/dist/diagnostics/envelope.js +1 -0
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +5 -0
- package/dist/executable/executable-cache.js +5 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +3 -0
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/frontend/decl-projection.d.ts +41 -0
- package/dist/frontend/decl-projection.js +949 -0
- package/dist/frontend/decl-projection.js.map +1 -0
- package/dist/frontend/decl-projection.test.d.ts +1 -0
- package/dist/frontend/decl-projection.test.js +30 -0
- package/dist/frontend/decl-projection.test.js.map +1 -0
- package/dist/frontend/dts-paths.d.ts +15 -0
- package/dist/frontend/dts-paths.js +25 -0
- package/dist/frontend/dts-paths.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +6 -0
- package/dist/frontend/input-tracker.js +51 -28
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +19 -0
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/lowering/array-values.js +100 -2
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/builtins/async-context.d.ts +8 -2
- package/dist/frontend/lowering/builtins/async-context.js +62 -3
- package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.js +46 -15
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.js +13 -2
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.js +87 -10
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.js +4 -1
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +3 -3
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-glob.js +6 -3
- package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-paths.d.ts +43 -5
- package/dist/frontend/lowering/builtins/fs-paths.js +245 -93
- package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -1
- package/dist/frontend/lowering/builtins/global-namespace-keys.d.ts +3 -0
- package/dist/frontend/lowering/builtins/global-namespace-keys.js +122 -0
- package/dist/frontend/lowering/builtins/global-namespace-keys.js.map +1 -0
- package/dist/frontend/lowering/builtins/module-calls.js +6 -3
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.js +9 -1
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.d.ts +7 -1
- package/dist/frontend/lowering/builtins/promises.js +236 -139
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +5 -1
- package/dist/frontend/lowering/builtins/readline.js +35 -3
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +24 -1
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/webassembly.js +6 -3
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +0 -1
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
- package/dist/frontend/lowering/cjs-inline-require.d.ts +32 -0
- package/dist/frontend/lowering/cjs-inline-require.js +307 -4
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
- package/dist/frontend/lowering/class-callbacks.d.ts +5 -2
- package/dist/frontend/lowering/class-callbacks.js +82 -12
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +4 -1
- package/dist/frontend/lowering/class-construction.js +17 -3
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +49 -2
- package/dist/frontend/lowering/class-dynamic-dispatch.js +880 -108
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +47 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-iterables.d.ts +2 -1
- package/dist/frontend/lowering/class-iterables.js +9 -1
- package/dist/frontend/lowering/class-iterables.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.js +83 -24
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +25 -0
- package/dist/frontend/lowering/class-protocols.js +183 -1
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.js +31 -2
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.d.ts +9 -3
- package/dist/frontend/lowering/class-runtime-statics.js +29 -4
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +48 -1
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +91 -1
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/completion-callbacks.d.ts +4 -0
- package/dist/frontend/lowering/completion-callbacks.js +146 -0
- package/dist/frontend/lowering/completion-callbacks.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callback-call.js +2 -2
- package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +5 -4
- package/dist/frontend/lowering/containers/array-callbacks.js +345 -24
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.js +10 -0
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +5 -0
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +26 -3
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +19 -8
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +25 -17
- package/dist/frontend/lowering/containers/bytes.js +455 -46
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +3 -0
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +7 -2
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/filter-predicates.d.ts +6 -0
- package/dist/frontend/lowering/containers/filter-predicates.js +205 -0
- package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -0
- package/dist/frontend/lowering/containers/indexed-objects.d.ts +0 -12
- package/dist/frontend/lowering/containers/indexed-objects.js +46 -7
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +55 -9
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +43 -19
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/date-values.d.ts +11 -0
- package/dist/frontend/lowering/date-values.js +207 -0
- package/dist/frontend/lowering/date-values.js.map +1 -0
- package/dist/frontend/lowering/dispatch-sites.js +15 -1
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
- package/dist/frontend/lowering/divergences.js +9 -1
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/error-methods.js +47 -2
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/expressions/array-literals.js +53 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +100 -28
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +169 -13
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +64 -5
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.js +95 -1
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js +3 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
- package/dist/frontend/lowering/expressions/object-literals.js +138 -51
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +12 -0
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.js +168 -10
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +212 -33
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +6 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-fields.js +4 -0
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +39 -3
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/frozen-records.d.ts +28 -0
- package/dist/frontend/lowering/frozen-records.js +322 -0
- package/dist/frontend/lowering/frozen-records.js.map +1 -0
- package/dist/frontend/lowering/function-returns.js +64 -0
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.js +7 -2
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/indexed-unions.d.ts +54 -0
- package/dist/frontend/lowering/indexed-unions.js +401 -0
- package/dist/frontend/lowering/indexed-unions.js.map +1 -0
- package/dist/frontend/lowering/iterable-values.d.ts +49 -0
- package/dist/frontend/lowering/iterable-values.js +297 -0
- package/dist/frontend/lowering/iterable-values.js.map +1 -0
- package/dist/frontend/lowering/iterator-adapters.js +186 -1
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/js-class-fields.d.ts +8 -0
- package/dist/frontend/lowering/js-class-fields.js +45 -10
- package/dist/frontend/lowering/js-class-fields.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.d.ts +18 -3
- package/dist/frontend/lowering/key-order-witness.js +974 -48
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +530 -10
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +15 -3
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.js +4 -1
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +7 -0
- package/dist/frontend/lowering/lower-calls.js +462 -44
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +11 -2
- package/dist/frontend/lowering/lower-classes.js +324 -69
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +3 -1
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +215 -3
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.d.ts +11 -0
- package/dist/frontend/lowering/lower-functions.js +83 -0
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +42 -32
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.js +6 -3
- package/dist/frontend/lowering/lower-global-value.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +1 -1
- package/dist/frontend/lowering/lower-inspect.js +53 -17
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +53 -5
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.js +5 -1
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +2 -2
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +5 -0
- package/dist/frontend/lowering/lower-stdlib.js +30 -0
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +23 -0
- package/dist/frontend/lowering/lower-stmts.js +553 -81
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +20 -2
- package/dist/frontend/lowering/lower-stream.js +1483 -156
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +107 -8
- package/dist/frontend/lowering/lowerer.js +381 -36
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/module-namespace-elements.d.ts +11 -1
- package/dist/frontend/lowering/module-namespace-elements.js +82 -5
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/new-target.d.ts +12 -0
- package/dist/frontend/lowering/new-target.js +280 -0
- package/dist/frontend/lowering/new-target.js.map +1 -0
- package/dist/frontend/lowering/object-factory-new.d.ts +5 -0
- package/dist/frontend/lowering/object-factory-new.js +20 -6
- package/dist/frontend/lowering/object-factory-new.js.map +1 -1
- package/dist/frontend/lowering/overload-choice.d.ts +33 -0
- package/dist/frontend/lowering/overload-choice.js +190 -0
- package/dist/frontend/lowering/overload-choice.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +3 -0
- package/dist/frontend/lowering/surfaces.js +73 -8
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/undefined-index.d.ts +27 -0
- package/dist/frontend/lowering/undefined-index.js +82 -0
- package/dist/frontend/lowering/undefined-index.js.map +1 -0
- package/dist/frontend/lowering/var-hoisting.js +29 -13
- package/dist/frontend/lowering/var-hoisting.js.map +1 -1
- package/dist/frontend/lowering/width-lift.d.ts +18 -0
- package/dist/frontend/npm-static-bundled-chunks.js +9 -11
- package/dist/frontend/npm-static-bundled-chunks.js.map +1 -1
- package/dist/frontend/npm-static-bundled-chunks.test.js +6 -5
- package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-syntax.js +9 -1
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
- package/dist/frontend/npm-static.js +4 -20
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/package-shims.d.ts +3 -0
- package/dist/frontend/package-shims.js +71 -8
- package/dist/frontend/package-shims.js.map +1 -1
- package/dist/frontend/pipeline.js +19 -11
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/process-fork.d.ts +25 -0
- package/dist/frontend/process-fork.js +2 -0
- package/dist/frontend/process-fork.js.map +1 -0
- package/dist/frontend/program-analysis.d.ts +5 -1
- package/dist/frontend/program-analysis.js +5 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +21 -6
- package/dist/frontend/program.js +681 -83
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +43 -3
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/token-equivalence.d.ts +3 -0
- package/dist/frontend/token-equivalence.js +409 -0
- package/dist/frontend/token-equivalence.js.map +1 -0
- package/dist/frontend/token-equivalence.test.d.ts +1 -0
- package/dist/frontend/token-equivalence.test.js +67 -0
- package/dist/frontend/token-equivalence.test.js.map +1 -0
- package/dist/frontend/ts7/ast-node.d.ts +22 -0
- package/dist/frontend/ts7/ast-node.js +1048 -103
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +24 -0
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.d.ts +4 -3
- package/dist/frontend/ts7/ast-wire.js +34 -24
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.test.js +23 -0
- package/dist/frontend/ts7/ast-wire.test.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.d.ts +3 -4
- package/dist/frontend/ts7/checker-backend.js +2 -2
- package/dist/frontend/ts7/checker-backend.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.test.js +5 -9
- package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +4 -0
- package/dist/frontend/ts7/checker.js +7 -0
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/lib-diagnostics.d.ts +24 -0
- package/dist/frontend/ts7/lib-diagnostics.js +307 -0
- package/dist/frontend/ts7/lib-diagnostics.js.map +1 -0
- package/dist/frontend/ts7/lib-diagnostics.test.d.ts +1 -0
- package/dist/frontend/ts7/lib-diagnostics.test.js +199 -0
- package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -0
- package/dist/frontend/ts7/program-host.d.ts +7 -0
- package/dist/frontend/ts7/program-host.js +25 -2
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.d.ts +3 -0
- package/dist/frontend/ts7/semantic-model.js +5 -0
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +6 -1
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-types.d.ts +1 -1
- package/dist/frontend/ts7/semantic-types.js +1 -1
- package/dist/frontend/ts7/semantic-types.js.map +1 -1
- package/dist/frontend/ts7/session.d.ts +14 -1
- package/dist/frontend/ts7/session.js +22 -0
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +13 -1
- package/dist/frontend/type-mapper.js +229 -20
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +0 -5
- package/dist/index.js +46 -4
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js +5 -3
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/array-length-stability.d.ts +4 -0
- package/dist/ir/array-length-stability.js +19 -6
- package/dist/ir/array-length-stability.js.map +1 -1
- package/dist/ir/array-length-stability.test.js +24 -0
- package/dist/ir/array-length-stability.test.js.map +1 -1
- package/dist/ir/builtin-effects.d.ts +7 -0
- package/dist/ir/builtin-effects.js +60 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +6 -4
- package/dist/ir/builtin-signatures.js +222 -13
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +2 -1
- package/dist/ir/callback-specialization.js +23 -18
- package/dist/ir/callback-specialization.js.map +1 -1
- package/dist/ir/char-unit-locals.d.ts +19 -0
- package/dist/ir/char-unit-locals.js +185 -0
- package/dist/ir/char-unit-locals.js.map +1 -0
- package/dist/ir/char-unit-locals.test.d.ts +1 -0
- package/dist/ir/char-unit-locals.test.js +94 -0
- package/dist/ir/char-unit-locals.test.js.map +1 -0
- package/dist/ir/final-fields.d.ts +2 -1
- package/dist/ir/final-fields.js +14 -16
- package/dist/ir/final-fields.js.map +1 -1
- package/dist/ir/function-references.d.ts +2 -0
- package/dist/ir/function-references.js +2 -0
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +3 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/initializer-bindings.d.ts +2 -1
- package/dist/ir/initializer-bindings.js +27 -20
- package/dist/ir/initializer-bindings.js.map +1 -1
- package/dist/ir/int32-arrays.d.ts +108 -0
- package/dist/ir/int32-arrays.js +831 -0
- package/dist/ir/int32-arrays.js.map +1 -0
- package/dist/ir/int32-slots.d.ts +24 -2
- package/dist/ir/int32-slots.js +266 -57
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +33 -0
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +3 -3
- package/dist/ir/integer-loops.js +28 -10
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +10 -0
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.d.ts +5 -0
- package/dist/ir/integer-ranges.js +125 -12
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +30 -0
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +83 -10
- package/dist/ir/ir.js +77 -6
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +23 -2
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/js-ic.d.ts +4 -0
- package/dist/ir/js-ic.js +17 -1
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +46 -0
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/node-index.d.ts +57 -0
- package/dist/ir/node-index.js +215 -0
- package/dist/ir/node-index.js.map +1 -0
- package/dist/ir/paired-while-loops.d.ts +25 -0
- package/dist/ir/paired-while-loops.js +335 -0
- package/dist/ir/paired-while-loops.js.map +1 -0
- package/dist/ir/paired-while-loops.test.d.ts +1 -0
- package/dist/ir/paired-while-loops.test.js +163 -0
- package/dist/ir/paired-while-loops.test.js.map +1 -0
- package/dist/ir/parameter-versions.d.ts +25 -0
- package/dist/ir/parameter-versions.js +300 -0
- package/dist/ir/parameter-versions.js.map +1 -0
- package/dist/ir/runtime-features.d.ts +34 -13
- package/dist/ir/runtime-features.js +177 -39
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/serialize.d.ts +12 -2
- package/dist/ir/serialize.js +16 -3
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.js +17 -0
- package/dist/ir/serialize.test.js.map +1 -1
- package/dist/ir/traverse.js +18 -6
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +167 -40
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/ir-policy.js +3 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/native/cache.d.ts +6 -1
- package/dist/native/cache.js +28 -5
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cache.test.js +16 -2
- package/dist/native/cache.test.js.map +1 -1
- package/dist/native/cli.js +21 -1
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +8 -6
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/executable-cache.d.ts +1 -1
- package/dist/native/executable-cache.js +2 -2
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/prepare.d.ts +4 -2
- package/dist/native/prepare.js +130 -32
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +96 -20
- package/dist/native/prepare.test.js.map +1 -1
- package/dist/native/sanitizer.test.js +2 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/text-file.d.ts +13 -3
- package/dist/native/text-file.js +63 -9
- package/dist/native/text-file.js.map +1 -1
- package/dist/native/text-file.test.d.ts +1 -0
- package/dist/native/text-file.test.js +49 -0
- package/dist/native/text-file.test.js.map +1 -0
- package/dist/native/toolchain.js +4 -4
- package/dist/native/toolchain.js.map +1 -1
- package/dist/native/toolchain.test.js +3 -3
- package/dist/native/toolchain.test.js.map +1 -1
- package/package.json +21 -21
- package/shims/chalk/v5.ts +688 -0
- package/shims/hono-node-server/v2.ts +645 -0
- package/shims/hot-shots/client.ts +1126 -0
- package/shims/hot-shots/v8-unix-dgram.ts +8 -0
- package/shims/hot-shots/v8.ts +8 -0
- package/surface-manifest.json +27 -7
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { type IrExpr, type IrType } from "../../ir/ir.js";
|
|
2
2
|
import { type MapKeyAccess } from "./shapes.js";
|
|
3
3
|
import type { LlvmEmitterContext, LlValue } from "./expr-context.js";
|
|
4
|
+
import { type ArrayAccess } from "./dense-array-access.js";
|
|
4
5
|
export declare function resolveThunkFor(host: LlvmEmitterContext, inner: IrType): string;
|
|
5
6
|
export declare function tagInSet(host: LlvmEmitterContext, uName: string, unionId: string, tags: number[]): string;
|
|
6
|
-
|
|
7
|
+
/** `element`: the array's element type, or null for arrays whose
|
|
8
|
+
* elements are not compact class references (dense-array-access.ts
|
|
9
|
+
* slotKind). */
|
|
10
|
+
export declare function arrPush(host: LlvmEmitterContext, arr: string, acc: ArrayAccess, value: string, element: IrType | null): string;
|
|
7
11
|
/** Move evaluated values through one bounded slot buffer per call site. */
|
|
8
|
-
export declare function emitArrayValues(host: LlvmEmitterContext, arr: string, acc:
|
|
12
|
+
export declare function emitArrayValues(host: LlvmEmitterContext, arr: string, acc: ArrayAccess, element: IrType, values: LlValue[], prepend?: boolean, sharedBuffer?: string): string;
|
|
9
13
|
/** A splice whose removed-elements array is discarded (statement position)
|
|
10
14
|
* and whose insertion items, if any, are plain evaluated values: evaluate
|
|
11
15
|
* the receiver, start, count, and items in order, then splice the values in
|
|
@@ -13,6 +17,14 @@ export declare function emitArrayValues(host: LlvmEmitterContext, arr: string, a
|
|
|
13
17
|
* which keeps the ordinary intrinsic. */
|
|
14
18
|
export declare function emitDiscardedSplice(host: LlvmEmitterContext, e: IrExpr): boolean;
|
|
15
19
|
export declare function emitArrayCopyLoop(host: LlvmEmitterContext, dst: string, src: string, acc: "f64" | "bool" | "ref"): void;
|
|
20
|
+
/** `s.charCodeAt(i)` in place of `s.charAt(i)`, the same index read as a
|
|
21
|
+
* code unit. The emitter records the charAt it stands for
|
|
22
|
+
* (charAtUnitReads), so a loop version's proof for the charAt covers it. */
|
|
23
|
+
export declare function charAtUnitRead(host: LlvmEmitterContext, charAt: IrExpr & {
|
|
24
|
+
kind: "strIntrinsic";
|
|
25
|
+
}): IrExpr & {
|
|
26
|
+
kind: "strIntrinsic";
|
|
27
|
+
};
|
|
16
28
|
export declare function emitStrIntrinsic(host: LlvmEmitterContext, e: IrExpr & {
|
|
17
29
|
kind: "strIntrinsic";
|
|
18
30
|
}): LlValue;
|
|
@@ -2,30 +2,34 @@
|
|
|
2
2
|
import { arraySearchHelperName, arraySearchKind } from "./array-search.js";
|
|
3
3
|
import { InternalCompilerError } from "../../errors.js";
|
|
4
4
|
import { isStableReceiverOperand, undefinedArmTag } from "../../ir/analysis.js";
|
|
5
|
-
import { isRefCounted, typeEquals, typeKey } from "../../ir/ir.js";
|
|
5
|
+
import { F64, isRefCounted, typeEquals, typeKey } from "../../ir/ir.js";
|
|
6
6
|
import { mangleResolveThunk } from "../mangle.js";
|
|
7
7
|
import { arrOps, elemAccess, FN_ATTRS, mapKeyAccess, mapKeyKindNum, mapKeyParamType, mapValKindNum, traceArg, vAdapters, } from "./shapes.js";
|
|
8
8
|
import { F64_INF, f64Lit, loadArrCount, sizeToDouble } from "./common.js";
|
|
9
9
|
import { MUTATING_COLLECTION_METHODS } from "../publication.js";
|
|
10
10
|
import { borrowsStringInputs, emitStringInputs } from "./string-lifetimes.js";
|
|
11
11
|
import { emitMapLookupKey, borrowsMapReadInputs, borrowsMapMutationReceiver, inlineNumberKey, entryStringKey, } from "./map-read-lifetimes.js";
|
|
12
|
-
import { emitMapIterCount, emitMapIterEntry, emitMapIterSlot, mapEntryLayout, emitMapIterStart, emitNumberMapGetRef, emitNumberMapGetScalar, emitNumberMapHas, emitNumberMapSetScalar, emitStringMapGetRef, emitStringMapGetScalar, emitStringMapHas, } from "./map-number-lookup.js";
|
|
12
|
+
import { emitMapIterCount, emitMapIterEntry, emitMapIterSlot, compactMapValues, mapEntryLayout, emitMapIterStart, emitMapSize, emitNumberMapGetRef, emitNumberMapGetScalar, emitNumberMapHas, emitNumberMapSetScalar, emitStringMapGetRef, emitStringMapGetScalar, emitStringMapHas, } from "./map-number-lookup.js";
|
|
13
13
|
import { emitBorrowedInput } from "./borrowed-inputs.js";
|
|
14
14
|
import { emitFusedMapSet, rememberMapEntry } from "./map-entry-fusion.js";
|
|
15
15
|
import { emitScratchStringSlice, emitStringSliceRead } from "./string-slices.js";
|
|
16
|
-
import { STRING_CHAR_AT_DECL, STRING_CHAR_AT_INT_MARKER, STRING_CHAR_CODE_AT_DECL, STRING_CHAR_CODE_AT_INT_MARKER, STRING_UTF16_LEN_DECL, } from "./string-reads.js";
|
|
16
|
+
import { STRING_CHAR_AT_DECL, STRING_CHAR_AT_INT_MARKER, STRING_CHAR_CODE_AT_DECL, STRING_CHAR_CODE_AT_INT_MARKER, emitAsciiChar, emitAsciiCharCode, STRING_UTF16_LEN_DECL, } from "./string-reads.js";
|
|
17
17
|
import { exactInteger, widenInteger } from "./integer-values.js";
|
|
18
|
-
import { emitDenseArrayNumber, emitDenseArrayPop, emitDenseArrayPush, } from "./dense-array-access.js";
|
|
18
|
+
import { emitDenseArrayNumber, emitDenseArrayPop, emitDenseArrayPush, runtimeAccess, } from "./dense-array-access.js";
|
|
19
|
+
import { INT32_ARRAY_METHODS } from "../../ir/int32-arrays.js";
|
|
19
20
|
import { emitUnionWiden } from "./expr-records.js";
|
|
21
|
+
import { registerReplay } from "./emit-journal.js";
|
|
20
22
|
export function resolveThunkFor(host, inner) {
|
|
21
23
|
const key = typeKey(inner);
|
|
22
24
|
let sym = host.resolveThunks.get(key);
|
|
23
25
|
if (!sym) {
|
|
24
26
|
sym = mangleResolveThunk(host.resolveThunks.size);
|
|
25
27
|
host.resolveThunks.set(key, sym);
|
|
28
|
+
host.journal?.allocated(sym, "resolveThunkFor", [inner]);
|
|
26
29
|
const v = vAdapters(host.shapeHost, inner);
|
|
27
30
|
host.declare(`declare void @scr_resolve_ref_impl(ptr, ptr, ptr, ptr, ptr)`);
|
|
28
31
|
host.resolveThunkDefs.push(`define internal void @${sym}(ptr %self, ptr %v) ${FN_ATTRS} { ; resolve<${key}>`, `entry:`, ` call void @scr_resolve_ref_impl(ptr %self, ptr %v, ptr ${v.retain}, ptr ${v.release}, ptr ${traceArg(host.shapeHost, inner)})`, ` ret void`, `}`, ``);
|
|
32
|
+
host.journal?.built();
|
|
29
33
|
}
|
|
30
34
|
return sym;
|
|
31
35
|
}
|
|
@@ -47,11 +51,14 @@ export function tagInSet(host, uName, unionId, tags) {
|
|
|
47
51
|
}
|
|
48
52
|
return acc;
|
|
49
53
|
}
|
|
50
|
-
|
|
51
|
-
|
|
54
|
+
/** `element`: the array's element type, or null for arrays whose
|
|
55
|
+
* elements are not compact class references (dense-array-access.ts
|
|
56
|
+
* slotKind). */
|
|
57
|
+
export function arrPush(host, arr, acc, value, element) {
|
|
58
|
+
return emitDenseArrayPush(host, arr, acc, element, value);
|
|
52
59
|
}
|
|
53
60
|
/** Move evaluated values through one bounded slot buffer per call site. */
|
|
54
|
-
export function emitArrayValues(host, arr, acc, values, prepend = false, sharedBuffer) {
|
|
61
|
+
export function emitArrayValues(host, arr, acc, element, values, prepend = false, sharedBuffer) {
|
|
55
62
|
const B = host.B;
|
|
56
63
|
if (acc === "ref")
|
|
57
64
|
values.forEach((value) => host.toHeap(value));
|
|
@@ -63,11 +70,12 @@ export function emitArrayValues(host, arr, acc, values, prepend = false, sharedB
|
|
|
63
70
|
}
|
|
64
71
|
if (values.length === 1) {
|
|
65
72
|
if (!prepend)
|
|
66
|
-
return arrPush(host, arr, acc, values[0].name);
|
|
67
|
-
const
|
|
68
|
-
|
|
73
|
+
return arrPush(host, arr, acc, values[0].name, element);
|
|
74
|
+
const flat = runtimeAccess(acc);
|
|
75
|
+
const ty = flat === "f64" ? "double" : flat === "bool" ? "i1" : "ptr";
|
|
76
|
+
host.declare(`declare double @scr_arr_unshift_${flat}(ptr, ${ty}${flat === "bool" ? " zeroext" : ""})`);
|
|
69
77
|
const result = B.tmp();
|
|
70
|
-
B.line(`${result} = call double @scr_arr_unshift_${
|
|
78
|
+
B.line(`${result} = call double @scr_arr_unshift_${flat}(ptr ${arr}, ${ty} ${values[0].name})`);
|
|
71
79
|
return result;
|
|
72
80
|
}
|
|
73
81
|
const capacity = Math.min(values.length, 64);
|
|
@@ -85,7 +93,8 @@ export function emitArrayValues(host, arr, acc, values, prepend = false, sharedB
|
|
|
85
93
|
for (let i = 0; i < count; i++) {
|
|
86
94
|
const slot = B.tmp(), pointer = B.tmp();
|
|
87
95
|
const value = values[start + i].name;
|
|
88
|
-
|
|
96
|
+
// The runtime takes double bits for int32 arrays too, and converts.
|
|
97
|
+
const pack = acc === "f64" || acc === "i32"
|
|
89
98
|
? `bitcast double ${value} to i64`
|
|
90
99
|
: acc === "bool"
|
|
91
100
|
? `zext i1 ${value} to i64`
|
|
@@ -169,6 +178,9 @@ function emitDiscarded(host, e) {
|
|
|
169
178
|
const start = host.emitExpr(e.args[0]);
|
|
170
179
|
const count = e.args[1] ? host.emitExpr(e.args[1]).name : F64_INF;
|
|
171
180
|
const values = items.map((item) => host.emitExpr(item));
|
|
181
|
+
// Before the values move into the buffer: a throw releases them with the
|
|
182
|
+
// frame.
|
|
183
|
+
host.emitPublishedArrayGuard(r.name, e.receiver.type, 10, start.name, count, f64Lit(values.length));
|
|
172
184
|
if (acc === "ref")
|
|
173
185
|
values.forEach((value) => host.toHeap(value));
|
|
174
186
|
let buffer = "null";
|
|
@@ -195,6 +207,29 @@ export function emitArrayCopyLoop(host, dst, src, acc) {
|
|
|
195
207
|
host.declare(`declare double @scr_arr_push_spread(ptr, ptr)`);
|
|
196
208
|
host.B.line(`call double @scr_arr_push_spread(ptr ${dst}, ptr ${src})`);
|
|
197
209
|
}
|
|
210
|
+
/** `s.charCodeAt(i)` in place of `s.charAt(i)`, the same index read as a
|
|
211
|
+
* code unit. The emitter records the charAt it stands for
|
|
212
|
+
* (charAtUnitReads), so a loop version's proof for the charAt covers it. */
|
|
213
|
+
export function charAtUnitRead(host, charAt) {
|
|
214
|
+
const read = {
|
|
215
|
+
kind: "strIntrinsic",
|
|
216
|
+
method: "charCodeAt",
|
|
217
|
+
receiver: charAt.receiver,
|
|
218
|
+
args: charAt.args,
|
|
219
|
+
type: F64,
|
|
220
|
+
loc: charAt.loc,
|
|
221
|
+
};
|
|
222
|
+
host.charAtUnitReads.set(read, charAt);
|
|
223
|
+
return read;
|
|
224
|
+
}
|
|
225
|
+
/** An enclosing loop version proved the string of `e` ASCII and its index
|
|
226
|
+
* below the length (bytes-loop-versions.ts). */
|
|
227
|
+
function provenStringRead(host, e) {
|
|
228
|
+
if (host.bytesBounds.has(e))
|
|
229
|
+
return true;
|
|
230
|
+
const origin = host.charAtUnitReads.get(e);
|
|
231
|
+
return origin !== undefined && host.bytesBounds.has(origin);
|
|
232
|
+
}
|
|
198
233
|
export function emitStrIntrinsic(host, e) {
|
|
199
234
|
// String/array-returning methods hand back a +1 reference, including
|
|
200
235
|
// identity returns. Inputs keep either a proven owner or a frame temp.
|
|
@@ -233,8 +268,10 @@ export function emitStrIntrinsic(host, e) {
|
|
|
233
268
|
const t = B.tmp();
|
|
234
269
|
const index = e.args[0] ? exactInteger(host, args[0], e.args[0]) : null;
|
|
235
270
|
if (index) {
|
|
236
|
-
host.declare(STRING_CHAR_CODE_AT_INT_MARKER);
|
|
237
271
|
const wide = widenInteger(host, index);
|
|
272
|
+
if (provenStringRead(host, e))
|
|
273
|
+
return { name: emitAsciiCharCode(host, r.name, wide), type: e.type };
|
|
274
|
+
host.declare(STRING_CHAR_CODE_AT_INT_MARKER);
|
|
238
275
|
B.line(`${t} = call double @sc_str_char_code_at_int(ptr ${r.name}, i64 ${wide})`);
|
|
239
276
|
return { name: t, type: e.type };
|
|
240
277
|
}
|
|
@@ -247,8 +284,11 @@ export function emitStrIntrinsic(host, e) {
|
|
|
247
284
|
const t = B.tmp();
|
|
248
285
|
const index = e.args[0] ? exactInteger(host, args[0], e.args[0]) : null;
|
|
249
286
|
if (index) {
|
|
250
|
-
host.declare(STRING_CHAR_AT_INT_MARKER);
|
|
251
287
|
const wide = widenInteger(host, index);
|
|
288
|
+
// The table entry is immortal: nothing owns it.
|
|
289
|
+
if (provenStringRead(host, e))
|
|
290
|
+
return host.markImmortal({ name: emitAsciiChar(host, r.name, wide), type: e.type });
|
|
291
|
+
host.declare(STRING_CHAR_AT_INT_MARKER);
|
|
252
292
|
B.line(`${t} = call ptr @sc_str_char_at_int(ptr ${r.name}, i64 ${wide})`);
|
|
253
293
|
}
|
|
254
294
|
else {
|
|
@@ -373,7 +413,15 @@ into) {
|
|
|
373
413
|
if (e.receiver.type.kind !== "array")
|
|
374
414
|
throw new InternalCompilerError("llvm emitter bug: arrIntrinsic on non-array");
|
|
375
415
|
const elem = e.receiver.type.elem;
|
|
376
|
-
|
|
416
|
+
// Int32 arrays (ir/int32-arrays.ts) reach only these methods; the others
|
|
417
|
+
// take the runtime family's flat access. One with checked stores tests
|
|
418
|
+
// its kind at each inline access (emitByElementKind) and otherwise takes
|
|
419
|
+
// the double entry points, which serve both kinds.
|
|
420
|
+
const checked = host.checkedInt32Array(e.receiver);
|
|
421
|
+
const access = checked ? "f64" : host.arrayAccess(e.receiver, elem);
|
|
422
|
+
if ((access === "i32" || checked) && !INT32_ARRAY_METHODS.has(e.method))
|
|
423
|
+
throw new InternalCompilerError(`llvm emitter bug: ${e.method} on an int32 array`);
|
|
424
|
+
const acc = runtimeAccess(access);
|
|
377
425
|
const accTy = acc === "f64" ? "double" : acc === "bool" ? "i1" : "ptr";
|
|
378
426
|
const accArg = acc === "bool" ? "i1 zeroext" : accTy;
|
|
379
427
|
const method = e.method;
|
|
@@ -391,9 +439,14 @@ into) {
|
|
|
391
439
|
const table = e.receiver.kind === "varRef"
|
|
392
440
|
? host.constantNumericTables.get(e.receiver.localId)
|
|
393
441
|
: undefined;
|
|
442
|
+
if (!table && elem.kind === "f64" && checked) {
|
|
443
|
+
const proven = host.provenDenseIndex(e.receiver, e.args[0]);
|
|
444
|
+
const value = host.emitByElementKind(r.name, "double", (kind) => emitDenseArrayNumber(host, r.name, index, e.args[0], proven, kind));
|
|
445
|
+
return { name: value, type: e.type };
|
|
446
|
+
}
|
|
394
447
|
if (!table && elem.kind === "f64")
|
|
395
448
|
return {
|
|
396
|
-
name: emitDenseArrayNumber(host, r.name, index, e.args[0], host.provenDenseIndex(e.receiver, e.args[0])),
|
|
449
|
+
name: emitDenseArrayNumber(host, r.name, index, e.args[0], host.provenDenseIndex(e.receiver, e.args[0]), access === "i32" ? "i32" : "f64"),
|
|
397
450
|
type: e.type,
|
|
398
451
|
};
|
|
399
452
|
host.declare(`declare double @scr_arr_get_number(ptr, double)`);
|
|
@@ -425,7 +478,23 @@ into) {
|
|
|
425
478
|
// no-op zero-argument call.
|
|
426
479
|
const vs = e.args.map((a) => host.emitExpr(a));
|
|
427
480
|
host.emitPublishedArrayGuard(r.name, e.receiver.type, 1, f64Lit(0), f64Lit(vs.length));
|
|
428
|
-
|
|
481
|
+
if (checked && vs.length > 0) {
|
|
482
|
+
// Each value appends in its own kind test: one that is not an int32
|
|
483
|
+
// widens the array before it is pushed.
|
|
484
|
+
let length = "";
|
|
485
|
+
vs.forEach((v, i) => {
|
|
486
|
+
length = host.emitByElementKind(r.name, "double", (kind, widened) => {
|
|
487
|
+
if (kind === "i32")
|
|
488
|
+
host.emitCheckedInt32Store(r.name, v.name, e.args[i], widened);
|
|
489
|
+
return arrPush(host, r.name, kind, v.name, elem);
|
|
490
|
+
});
|
|
491
|
+
});
|
|
492
|
+
return { name: length, type: e.type };
|
|
493
|
+
}
|
|
494
|
+
// In an int32 kind loop's fast copy, every value is checked before
|
|
495
|
+
// the first appends.
|
|
496
|
+
vs.forEach((v, i) => host.emitInt32KindStoreCheck(e.receiver, v, e.args[i]));
|
|
497
|
+
return { name: emitArrayValues(host, r.name, access, elem, vs), type: e.type };
|
|
429
498
|
}
|
|
430
499
|
case "pushSpread": {
|
|
431
500
|
// `a.push(...src)`: append src's elements in order (borrowed src,
|
|
@@ -457,7 +526,7 @@ into) {
|
|
|
457
526
|
// from right to left so the final front order is source order.
|
|
458
527
|
const vs = e.args.map((a) => host.emitExpr(a));
|
|
459
528
|
host.emitPublishedArrayGuard(r.name, e.receiver.type, 4, f64Lit(0), f64Lit(vs.length));
|
|
460
|
-
return { name: emitArrayValues(host, r.name, acc, vs, true), type: e.type };
|
|
529
|
+
return { name: emitArrayValues(host, r.name, acc, elem, vs, true), type: e.type };
|
|
461
530
|
}
|
|
462
531
|
case "unshiftSpread": {
|
|
463
532
|
// The runtime snapshots the borrowed source and handles self-spread.
|
|
@@ -499,7 +568,10 @@ into) {
|
|
|
499
568
|
let slowLabel = "";
|
|
500
569
|
if (method === "pop") {
|
|
501
570
|
slowLabel = B.newLabel("remove.slow");
|
|
502
|
-
|
|
571
|
+
const empty = la, slow = slowLabel;
|
|
572
|
+
denseRaw = checked
|
|
573
|
+
? host.emitByElementKind(r.name, "i64", (kind) => emitDenseArrayPop(host, r.name, kind, elem, empty, slow))
|
|
574
|
+
: emitDenseArrayPop(host, r.name, access, elem, la, slowLabel);
|
|
503
575
|
denseLabel = B.currentLabel();
|
|
504
576
|
B.br(lp);
|
|
505
577
|
B.startBlock(slowLabel);
|
|
@@ -568,7 +640,7 @@ into) {
|
|
|
568
640
|
// by content, everything else by pointer). Strict equality. Arrays of
|
|
569
641
|
// objects and strings scan inline (array-search.ts).
|
|
570
642
|
const v = host.emitExpr(e.args[0]);
|
|
571
|
-
const search = acc === "ref" ? arraySearchKind(elem) : null;
|
|
643
|
+
const search = acc === "ref" ? arraySearchKind(elem, host.compactArrayElem(elem)) : null;
|
|
572
644
|
if (search !== null) {
|
|
573
645
|
host.arraySearchKinds.add(search);
|
|
574
646
|
const t = B.tmp();
|
|
@@ -584,7 +656,7 @@ into) {
|
|
|
584
656
|
// Borrowed needle, SameValueZero (NaN matches NaN). For the inline
|
|
585
657
|
// searches SameValueZero is strict equality.
|
|
586
658
|
const v = host.emitExpr(e.args[0]);
|
|
587
|
-
const search = acc === "ref" ? arraySearchKind(elem) : null;
|
|
659
|
+
const search = acc === "ref" ? arraySearchKind(elem, host.compactArrayElem(elem)) : null;
|
|
588
660
|
if (search !== null) {
|
|
589
661
|
host.arraySearchKinds.add(search);
|
|
590
662
|
const at = B.tmp(), t = B.tmp();
|
|
@@ -608,6 +680,12 @@ into) {
|
|
|
608
680
|
B.line(`${t} = call ptr @${helper}(ptr ${r.name}, ptr ${sep.name})`);
|
|
609
681
|
return host.own({ name: t, type: e.type });
|
|
610
682
|
}
|
|
683
|
+
if (elem.kind === "date") {
|
|
684
|
+
host.declare(`declare ptr @scr_date_arr_join(ptr, ptr)`);
|
|
685
|
+
const t = B.tmp();
|
|
686
|
+
B.line(`${t} = call ptr @scr_date_arr_join(ptr ${r.name}, ptr ${sep.name})`);
|
|
687
|
+
return host.own({ name: t, type: e.type });
|
|
688
|
+
}
|
|
611
689
|
host.declare(`declare ptr @scr_arr_join(ptr, ptr)`);
|
|
612
690
|
const t = B.tmp();
|
|
613
691
|
B.line(`${t} = call ptr @scr_arr_join(ptr ${r.name}, ptr ${sep.name})`);
|
|
@@ -633,6 +711,14 @@ into) {
|
|
|
633
711
|
case "toSortedPrimitive": {
|
|
634
712
|
if (e.method === "sortPrimitive")
|
|
635
713
|
host.emitPublishedArrayGuard(r.name, e.receiver.type, 7);
|
|
714
|
+
if (elem.kind === "date") {
|
|
715
|
+
// Dates order by their toString() text.
|
|
716
|
+
host.declare(`declare ptr @scr_arr_sort_by_text(ptr, i1 zeroext, ptr)`);
|
|
717
|
+
host.declare(`declare ptr @scr_date_object_to_string(ptr)`);
|
|
718
|
+
const sorted = B.tmp();
|
|
719
|
+
B.line(`${sorted} = call ptr @scr_arr_sort_by_text(ptr ${r.name}, i1 ${e.method === "toSortedPrimitive" ? 1 : 0}, ptr @scr_date_object_to_string)`);
|
|
720
|
+
return host.own({ name: sorted, type: e.type });
|
|
721
|
+
}
|
|
636
722
|
host.declare(`declare ptr @scr_arr_sort_primitive(ptr, i1 zeroext)`);
|
|
637
723
|
const result = B.tmp();
|
|
638
724
|
B.line(`${result} = call ptr @scr_arr_sort_primitive(ptr ${r.name}, i1 ${e.method === "toSortedPrimitive" ? 1 : 0})`);
|
|
@@ -677,7 +763,20 @@ into) {
|
|
|
677
763
|
case "fill":
|
|
678
764
|
case "fillUndefined": {
|
|
679
765
|
const args = e.args.map((arg) => host.emitExpr(arg));
|
|
680
|
-
|
|
766
|
+
// fill's range is its last two arguments; copyWithin's target,
|
|
767
|
+
// start and end are its three.
|
|
768
|
+
if (e.method === "copyWithin")
|
|
769
|
+
host.emitPublishedArrayGuard(r.name, e.receiver.type, 9, args[0].name, args[1].name, args[2].name);
|
|
770
|
+
else
|
|
771
|
+
host.emitPublishedArrayGuard(r.name, e.receiver.type, 8, args[args.length - 2].name, args[args.length - 1].name);
|
|
772
|
+
if (host.checkedFills.has(e)) {
|
|
773
|
+
// A new int32 array with checked stores, filled with a value that
|
|
774
|
+
// may not be an int32: widen it first then.
|
|
775
|
+
const filled = B.newLabel("arr.fill.kind");
|
|
776
|
+
host.emitCheckedInt32Store(r.name, args[0].name, e.args[0], filled);
|
|
777
|
+
B.br(filled);
|
|
778
|
+
B.startBlock(filled);
|
|
779
|
+
}
|
|
681
780
|
const helper = e.method === "copyWithin"
|
|
682
781
|
? "scr_arr_copy_within"
|
|
683
782
|
: e.method === "fillUndefined"
|
|
@@ -726,7 +825,7 @@ into) {
|
|
|
726
825
|
// removes to the end (+Infinity, the slice convention).
|
|
727
826
|
const start = host.emitExpr(e.args[0]);
|
|
728
827
|
const cnt = e.args[1] ? host.emitExpr(e.args[1]).name : F64_INF;
|
|
729
|
-
host.emitPublishedArrayGuard(r.name, e.receiver.type,
|
|
828
|
+
host.emitPublishedArrayGuard(r.name, e.receiver.type, 10, start.name, cnt, f64Lit(0));
|
|
730
829
|
host.declare(`declare ptr @scr_arr_splice(ptr, double, double)`);
|
|
731
830
|
const t = B.tmp();
|
|
732
831
|
B.line(`${t} = call ptr @scr_arr_splice(ptr ${r.name}, double ${start.name}, double ${cnt})`);
|
|
@@ -736,7 +835,12 @@ into) {
|
|
|
736
835
|
const start = host.emitExpr(e.args[0]);
|
|
737
836
|
const count = host.emitExpr(e.args[1]);
|
|
738
837
|
const items = emitBorrowedInput(host, e.args[2]);
|
|
739
|
-
host.
|
|
838
|
+
if (host.publishedTypes?.containerGuarded(e.receiver.type) === true) {
|
|
839
|
+
host.declare(`declare double @scr_arr_len(ptr)`);
|
|
840
|
+
const n = B.tmp();
|
|
841
|
+
B.line(`${n} = call double @scr_arr_len(ptr ${items.name})`);
|
|
842
|
+
host.emitPublishedArrayGuard(r.name, e.receiver.type, 10, start.name, count.name, n);
|
|
843
|
+
}
|
|
740
844
|
host.declare(`declare ptr @scr_arr_splice_insert(ptr, double, double, ptr)`);
|
|
741
845
|
const t = B.tmp();
|
|
742
846
|
B.line(`${t} = call ptr @scr_arr_splice_insert(ptr ${r.name}, double ${start.name}, double ${count.name}, ptr ${items.name})`);
|
|
@@ -823,7 +927,9 @@ function newCollection(host, key, value) {
|
|
|
823
927
|
const kind = mapKeyKindNum(key, arms);
|
|
824
928
|
const m = B.tmp();
|
|
825
929
|
host.declare(`declare ptr @scr_map_new(i32, i32, ptr)`);
|
|
826
|
-
|
|
930
|
+
// SCR_MAP_VAL_CREF (3): string keys and compact values (compactMapValues).
|
|
931
|
+
const valKind = compactMapValues(host, key, value) ? 3 : mapValKindNum(value);
|
|
932
|
+
B.line(`${m} = call ptr @scr_map_new(i32 ${kind}, i32 ${valKind}, ptr ${collectionOps(host, key, value)})`);
|
|
827
933
|
return m;
|
|
828
934
|
}
|
|
829
935
|
export function emitMapNew(host, e) {
|
|
@@ -870,6 +976,9 @@ export function emitMapLikeIntrinsic(host, e) {
|
|
|
870
976
|
const key = receiverType.kind === "map" ? receiverType.key : receiverType.elem;
|
|
871
977
|
const kAcc = mapKeyAccess(key);
|
|
872
978
|
const kTy = mapKeyParamType(kAcc);
|
|
979
|
+
// The map keeps compact values in 16-byte entries (SCR_MAP_VAL_CREF).
|
|
980
|
+
const compact = receiverType.kind === "map" && compactMapValues(host, key, receiverType.value);
|
|
981
|
+
const layout = mapEntryLayout(key, compact);
|
|
873
982
|
const method = e.method;
|
|
874
983
|
// A published Map or Set rejects mutation (the guard precedes the
|
|
875
984
|
// operands, which each method evaluates itself).
|
|
@@ -1025,7 +1134,7 @@ export function emitMapLikeIntrinsic(host, e) {
|
|
|
1025
1134
|
raw = emitNumberMapGetRef(host, r.name, numberKey, value);
|
|
1026
1135
|
}
|
|
1027
1136
|
else if (stringKey !== null) {
|
|
1028
|
-
raw = emitStringMapGetRef(host, r.name, stringKey, value);
|
|
1137
|
+
raw = emitStringMapGetRef(host, r.name, stringKey, value, compact);
|
|
1029
1138
|
}
|
|
1030
1139
|
else {
|
|
1031
1140
|
host.declare(`declare ptr @scr_map_get_${kAcc}_ref(ptr, ${kTy})`);
|
|
@@ -1098,7 +1207,7 @@ export function emitMapLikeIntrinsic(host, e) {
|
|
|
1098
1207
|
return host.wrapNullable(raw, raw, value, valueTag, e.type, undefTag);
|
|
1099
1208
|
}
|
|
1100
1209
|
if (stringKey !== null && isRefCounted(value)) {
|
|
1101
|
-
const raw = emitStringMapGetRef(host, r.name, stringKey, value);
|
|
1210
|
+
const raw = emitStringMapGetRef(host, r.name, stringKey, value, compact);
|
|
1102
1211
|
return host.wrapNullable(raw, raw, value, valueTag, e.type, undefTag);
|
|
1103
1212
|
}
|
|
1104
1213
|
host.declare(`declare ptr @scr_map_get_${kAcc}_ref(ptr, ${kTy})`);
|
|
@@ -1147,7 +1256,7 @@ export function emitMapLikeIntrinsic(host, e) {
|
|
|
1147
1256
|
if (kAcc === "f64")
|
|
1148
1257
|
return { name: emitNumberMapHas(host, r.name, k.name), type: e.type };
|
|
1149
1258
|
if (kAcc === "str")
|
|
1150
|
-
return { name: emitStringMapHas(host, r.name, k.name), type: e.type };
|
|
1259
|
+
return { name: emitStringMapHas(host, r.name, k.name, compact), type: e.type };
|
|
1151
1260
|
host.declare(`declare zeroext i1 @scr_map_has_${kAcc}(ptr, ${kTy})`);
|
|
1152
1261
|
const t = B.tmp();
|
|
1153
1262
|
B.line(`${t} = call zeroext i1 @scr_map_has_${kAcc}(ptr ${r.name}, ${kTy} ${k.name})`);
|
|
@@ -1160,12 +1269,8 @@ export function emitMapLikeIntrinsic(host, e) {
|
|
|
1160
1269
|
B.line(`${t} = call zeroext i1 @scr_map_delete_${kAcc}(ptr ${r.name}, ${kTy} ${k.name})`);
|
|
1161
1270
|
return { name: t, type: e.type };
|
|
1162
1271
|
}
|
|
1163
|
-
case "size":
|
|
1164
|
-
host.
|
|
1165
|
-
const t = B.tmp();
|
|
1166
|
-
B.line(`${t} = call double @scr_map_size(ptr ${r.name})`);
|
|
1167
|
-
return { name: t, type: e.type };
|
|
1168
|
-
}
|
|
1272
|
+
case "size":
|
|
1273
|
+
return { name: emitMapSize(host, r.name), type: e.type };
|
|
1169
1274
|
case "clear":
|
|
1170
1275
|
host.declare(`declare void @scr_map_clear(ptr)`);
|
|
1171
1276
|
B.line(`call void @scr_map_clear(ptr ${r.name})`);
|
|
@@ -1176,7 +1281,7 @@ export function emitMapLikeIntrinsic(host, e) {
|
|
|
1176
1281
|
return { name: emitMapIterStart(host, r.name), type: e.type };
|
|
1177
1282
|
case "iterLive": {
|
|
1178
1283
|
const i = host.emitExpr(e.args[0]);
|
|
1179
|
-
const entry = emitMapIterEntry(host, r.name, i.name,
|
|
1284
|
+
const entry = emitMapIterEntry(host, r.name, i.name, layout);
|
|
1180
1285
|
const t = B.tmp();
|
|
1181
1286
|
B.line(`${t} = icmp ne ptr ${entry}, null`);
|
|
1182
1287
|
return { name: t, type: e.type };
|
|
@@ -1187,7 +1292,7 @@ export function emitMapLikeIntrinsic(host, e) {
|
|
|
1187
1292
|
if (kAcc !== "ref") {
|
|
1188
1293
|
const retTy = kAcc === "f64" ? "double" : kAcc === "bool" ? "zeroext i1" : "ptr";
|
|
1189
1294
|
const symbol = `scr_map_iter_key_${kAcc}`;
|
|
1190
|
-
const t = emitMapIterSlot(host, r.name, i.name, 0, kAcc === "str" ? "ref" : kAcc, key, { decl: `declare ${retTy} @${symbol}(ptr, double)`, symbol },
|
|
1295
|
+
const t = emitMapIterSlot(host, r.name, i.name, 0, kAcc === "str" ? "ref" : kAcc, key, { decl: `declare ${retTy} @${symbol}(ptr, double)`, symbol }, layout);
|
|
1191
1296
|
return host.own({ name: t, type: e.type });
|
|
1192
1297
|
}
|
|
1193
1298
|
const retTy = "ptr";
|
|
@@ -1206,7 +1311,7 @@ export function emitMapLikeIntrinsic(host, e) {
|
|
|
1206
1311
|
const t = emitMapIterSlot(host, r.name, i.name, 1, vAcc, receiverType.value, {
|
|
1207
1312
|
decl: `declare ${vAcc === "bool" ? "zeroext i1" : retTy} @${symbol}(ptr, double)`,
|
|
1208
1313
|
symbol,
|
|
1209
|
-
},
|
|
1314
|
+
}, layout);
|
|
1210
1315
|
return host.own({ name: t, type: e.type });
|
|
1211
1316
|
}
|
|
1212
1317
|
case "iterEnter":
|
|
@@ -1255,4 +1360,5 @@ export function emitSetNew(host, e) {
|
|
|
1255
1360
|
}
|
|
1256
1361
|
return out;
|
|
1257
1362
|
}
|
|
1363
|
+
registerReplay("resolveThunkFor", (host, args) => resolveThunkFor(host, args[0]));
|
|
1258
1364
|
//# sourceMappingURL=expr-containers.js.map
|