@scriptc/compiler 0.4.1 → 0.4.3
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 +977 -113
- package/dist/backend/cycle-analysis.d.ts +5 -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 +9 -1
- package/dist/backend/cycle-mutability.js +21 -3
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.js +6 -1
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.d.ts +7 -3
- package/dist/backend/immutability.js +33 -29
- package/dist/backend/immutability.js.map +1 -1
- package/dist/backend/library-pack.js +5 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +23 -4
- package/dist/backend/llvm/alloc.js +61 -8
- 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 +23 -10
- 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 +70 -7
- package/dist/backend/llvm/bytes-loop-versions.js +567 -30
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +389 -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 +74 -1
- package/dist/backend/llvm/classes.js +364 -54
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +384 -17
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +10 -6
- package/dist/backend/llvm/common.js +10 -6
- 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 +91 -56
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +4 -4
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +11 -1
- package/dist/backend/llvm/counted-loops.js +80 -23
- package/dist/backend/llvm/counted-loops.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 +35 -16
- package/dist/backend/llvm/dense-array-loops.js +237 -12
- package/dist/backend/llvm/dense-array-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.test.js +140 -15
- 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 +51 -1
- package/dist/backend/llvm/dyn.js +683 -69
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +33 -26
- 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 +208 -34
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-statements.d.ts +0 -27
- package/dist/backend/llvm/emit-statements.js +577 -93
- 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 +314 -49
- package/dist/backend/llvm/emitter.js +1241 -129
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +54 -5
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +19 -0
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +5 -2
- package/dist/backend/llvm/expr-bytes.js +144 -52
- 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.d.ts +1 -1
- package/dist/backend/llvm/expr-calls.js +62 -36
- 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 +148 -40
- 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-control.js +2 -3
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +71 -16
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +126 -36
- 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 +225 -64
- 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 +200 -50
- 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 +20 -1
- package/dist/backend/llvm/integer-values.js +71 -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 +90 -2
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +65 -4
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.d.ts +4 -0
- package/dist/backend/llvm/lib-http2.js +24 -17
- 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 +65 -14
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +126 -3
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +97 -30
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/lib-tls.js +23 -0
- package/dist/backend/llvm/lib-tls.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +181 -64
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +28 -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 +18 -1
- package/dist/backend/llvm/publish.js +76 -25
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/publish.test.js +3 -0
- package/dist/backend/llvm/publish.test.js.map +1 -1
- package/dist/backend/llvm/receivers.js +7 -2
- 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-writes.d.ts +7 -2
- package/dist/backend/llvm/reference-writes.js +91 -72
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.js +161 -14
- package/dist/backend/llvm/regex-matchers.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.test.js +18 -0
- package/dist/backend/llvm/regex-matchers.test.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 +79 -21
- package/dist/backend/llvm/shapes.js +233 -42
- 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-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-lifetimes.test.js +2 -1
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-reads.d.ts +15 -0
- package/dist/backend/llvm/string-reads.js +128 -0
- package/dist/backend/llvm/string-reads.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 +88 -65
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/llvm/wasm-modules.d.ts +6 -5
- package/dist/backend/llvm/wasm-modules.js +32 -9
- package/dist/backend/llvm/wasm-modules.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/mangle.d.ts +3 -0
- package/dist/backend/mangle.js +5 -0
- package/dist/backend/mangle.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 +27 -4
- package/dist/backend/native/executable.js +31 -8
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +1 -0
- package/dist/backend/native/library.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.d.ts +11 -6
- package/dist/backend/native-codegen.js +36 -9
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +0 -23
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +18 -4
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/optimization.d.ts +2 -2
- 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 +2 -1
- package/dist/backend/runtime-pack-core.js +2 -1
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +5 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.d.ts +0 -21
- package/dist/backend/runtime-pack.js +0 -29
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +10 -69
- 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-diagnostics.js +33 -1
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/warm-cache.js +4 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/cli/command.js +26 -6
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +5 -1
- package/dist/cli/usage.js +10 -5
- 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/contracts/check.js +5 -4
- 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.d.ts +7 -2
- package/dist/coverage/report.js +30 -3
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/verdict-cache.d.ts +1 -0
- package/dist/coverage/verdict-cache.js +4 -0
- package/dist/coverage/verdict-cache.js.map +1 -1
- package/dist/coverage/verdict-semantic.js +4 -0
- package/dist/coverage/verdict-semantic.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +4 -0
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/dynamic-tier.d.ts +40 -0
- package/dist/diagnostics/dynamic-tier.js +57 -0
- package/dist/diagnostics/dynamic-tier.js.map +1 -0
- package/dist/diagnostics/envelope.d.ts +5 -1
- package/dist/diagnostics/envelope.js +6 -2
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +25 -1
- package/dist/executable/executable-cache.js +60 -7
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +46 -3
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +3 -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/decl-projection.d.ts +41 -0
- package/dist/frontend/decl-projection.js +854 -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/dispose-hook.d.ts +2 -0
- package/dist/frontend/dispose-hook.js +14 -0
- package/dist/frontend/dispose-hook.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/jsx-entities.d.ts +4 -0
- package/dist/frontend/jsx-entities.js +259 -0
- package/dist/frontend/jsx-entities.js.map +1 -0
- package/dist/frontend/jsx-source.d.ts +71 -0
- package/dist/frontend/jsx-source.js +781 -0
- package/dist/frontend/jsx-source.js.map +1 -0
- package/dist/frontend/jsx-source.test.d.ts +1 -0
- package/dist/frontend/jsx-source.test.js +200 -0
- package/dist/frontend/jsx-source.test.js.map +1 -0
- package/dist/frontend/literal-values.test.js +8 -9
- package/dist/frontend/literal-values.test.js.map +1 -1
- package/dist/frontend/lowering/array-indexed-mutation.js +2 -1
- package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
- package/dist/frontend/lowering/array-values.js +103 -4
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
- package/dist/frontend/lowering/binding-analysis.js +2 -2
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/builtins/arguments.d.ts +3 -0
- package/dist/frontend/lowering/builtins/arguments.js +30 -15
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.js +10 -6
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-async.js +2 -1
- package/dist/frontend/lowering/builtins/child-process-async.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-sync.js +2 -1
- package/dist/frontend/lowering/builtins/child-process-sync.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.d.ts +4 -2
- package/dist/frontend/lowering/builtins/crypto.js +136 -5
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/date-classes.d.ts +46 -0
- package/dist/frontend/lowering/builtins/date-classes.js +477 -0
- package/dist/frontend/lowering/builtins/date-classes.js.map +1 -0
- package/dist/frontend/lowering/builtins/dates.d.ts +11 -1
- package/dist/frontend/lowering/builtins/dates.js +55 -26
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/dh.d.ts +15 -0
- package/dist/frontend/lowering/builtins/dh.js +151 -0
- package/dist/frontend/lowering/builtins/dh.js.map +1 -0
- package/dist/frontend/lowering/builtins/disposable-stack.js +2 -1
- package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -1
- package/dist/frontend/lowering/builtins/ecdh.d.ts +12 -1
- package/dist/frontend/lowering/builtins/ecdh.js +7 -7
- package/dist/frontend/lowering/builtins/ecdh.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.d.ts +15 -0
- package/dist/frontend/lowering/builtins/errors.js +110 -0
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +23 -17
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.js +6 -4
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-paths.d.ts +15 -0
- package/dist/frontend/lowering/builtins/fs-paths.js +209 -0
- package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -0
- 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/hash-stream.d.ts +16 -4
- package/dist/frontend/lowering/builtins/hash-stream.js +86 -23
- package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +2 -1
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/key-object.d.ts +2 -1
- package/dist/frontend/lowering/builtins/key-object.js +20 -7
- package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +11 -4
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.js +18 -6
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.js +4 -3
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/performance.js +3 -2
- package/dist/frontend/lowering/builtins/performance.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.js +3 -2
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.d.ts +6 -0
- package/dist/frontend/lowering/builtins/promises.js +91 -4
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/promisify-callback.js +2 -1
- package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +7 -2
- package/dist/frontend/lowering/builtins/readline.js +58 -9
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/strings.js +13 -5
- package/dist/frontend/lowering/builtins/strings.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.js +2 -1
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/timers.js +1 -1
- package/dist/frontend/lowering/builtins/timers.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +28 -4
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/v8.js +2 -1
- package/dist/frontend/lowering/builtins/v8.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/builtins/webcrypto.js +39 -20
- package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.js +2 -1
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +13 -6
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/caught-value-dispatch.d.ts +18 -1
- package/dist/frontend/lowering/caught-value-dispatch.js +201 -32
- package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-assertions.js +3 -2
- package/dist/frontend/lowering/class-assertions.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 +6 -2
- package/dist/frontend/lowering/class-construction.js +25 -16
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-descriptors.js +1 -1
- package/dist/frontend/lowering/class-descriptors.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +73 -2
- package/dist/frontend/lowering/class-dynamic-dispatch.js +1334 -259
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +124 -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 +35 -9
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-method-values.js +1 -1
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +7 -0
- package/dist/frontend/lowering/class-protocols.js +64 -4
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.d.ts +5 -0
- package/dist/frontend/lowering/class-prototypes.js +67 -5
- 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/class-to-primitive.js +25 -5
- package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
- package/dist/frontend/lowering/class-unions.js +2 -1
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +6 -5
- package/dist/frontend/lowering/coercions/function-adapters.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 +99 -8
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.js +8 -7
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/collection-ingestion.js +2 -1
- package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
- 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 +7 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +352 -31
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.js +12 -1
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +25 -4
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +21 -5
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +21 -9
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +1 -1
- package/dist/frontend/lowering/containers/bytes.js +131 -29
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +55 -2
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-grouping.js +3 -2
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +15 -9
- 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 +54 -14
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +32 -1
- package/dist/frontend/lowering/containers/iterator-helpers.js +6 -5
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +87 -14
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +45 -20
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.js +25 -4
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.d.ts +18 -1
- package/dist/frontend/lowering/deferred-module-initializers.js +226 -115
- package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.test.js +28 -0
- package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
- package/dist/frontend/lowering/dispatch-sites.d.ts +59 -0
- package/dist/frontend/lowering/dispatch-sites.js +218 -0
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -0
- package/dist/frontend/lowering/dispatch-sites.test.d.ts +1 -0
- package/dist/frontend/lowering/dispatch-sites.test.js +59 -0
- package/dist/frontend/lowering/dispatch-sites.test.js.map +1 -0
- package/dist/frontend/lowering/divergences.js +9 -1
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/dyn-streams.d.ts +3 -0
- package/dist/frontend/lowering/dyn-streams.js +1 -1
- package/dist/frontend/lowering/dyn-streams.js.map +1 -1
- package/dist/frontend/lowering/dynamic-tier.d.ts +25 -0
- package/dist/frontend/lowering/dynamic-tier.js +327 -0
- package/dist/frontend/lowering/dynamic-tier.js.map +1 -0
- package/dist/frontend/lowering/error-methods.js +51 -2
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/expressions/array-literals.js +62 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +81 -5
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +107 -14
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +79 -11
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.js +130 -6
- 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 -3
- package/dist/frontend/lowering/expressions/object-literals.js +164 -56
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +17 -5
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +0 -4
- package/dist/frontend/lowering/expressions/property-access.js +211 -17
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +267 -30
- package/dist/frontend/lowering/expressions/relational.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 +85 -12
- 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 +49 -0
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +6 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.js +20 -30
- package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +42 -1
- package/dist/frontend/lowering/generic-functions.js +455 -20
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/intern-tables.js +2 -1
- package/dist/frontend/lowering/intern-tables.js.map +1 -1
- 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 +195 -9
- 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/js-dynamic-objects.js +3 -2
- package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -1
- package/dist/frontend/lowering/json-require.js +2 -1
- package/dist/frontend/lowering/json-require.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.d.ts +24 -4
- package/dist/frontend/lowering/key-order-witness.js +790 -25
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +466 -10
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lifetime-regions.js +2 -1
- package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +6 -5
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.js +7 -2
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +11 -0
- package/dist/frontend/lowering/lower-calls.js +776 -126
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +29 -2
- package/dist/frontend/lowering/lower-classes.js +581 -46
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +6 -3
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +14 -0
- package/dist/frontend/lowering/lower-event-emitter.js +267 -20
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +19 -2
- package/dist/frontend/lowering/lower-exprs.js +126 -13
- 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 +387 -72
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +41 -31
- 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.js +28 -12
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.js +2 -1
- package/dist/frontend/lowering/lower-mixins.js.map +1 -1
- package/dist/frontend/lowering/lower-mock.js +2 -1
- package/dist/frontend/lowering/lower-mock.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +47 -5
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.test.js +2 -2
- package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +2 -1
- package/dist/frontend/lowering/lower-namespaces.js +9 -4
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +10 -0
- package/dist/frontend/lowering/lower-server.js +239 -61
- 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 +42 -10
- 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 +622 -68
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.test.js +1 -1
- package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +20 -2
- package/dist/frontend/lowering/lower-stream.js +2055 -318
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +4 -3
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +197 -29
- package/dist/frontend/lowering/lowerer.js +862 -84
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +21 -9
- package/dist/frontend/lowering/lowerer.test.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/narrowing-stability.js +5 -0
- package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.js +1 -1
- package/dist/frontend/lowering/native-ffi.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-enumeration-receiver.js +2 -1
- package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
- package/dist/frontend/lowering/pairs-snapshot.js +2 -1
- package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
- package/dist/frontend/lowering/private-brands.d.ts +9 -0
- package/dist/frontend/lowering/private-brands.js +66 -15
- package/dist/frontend/lowering/private-brands.js.map +1 -1
- package/dist/frontend/lowering/promise-executor-adapter.js +2 -1
- package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -1
- package/dist/frontend/lowering/require-initialization.js +2 -1
- package/dist/frontend/lowering/require-initialization.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-elements.d.ts +5 -0
- package/dist/frontend/lowering/runtime-optional-elements.js +17 -1
- package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-records.d.ts +2 -0
- package/dist/frontend/lowering/runtime-optional-records.js +18 -5
- package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
- package/dist/frontend/lowering/site-dependencies.d.ts +35 -0
- package/dist/frontend/lowering/site-dependencies.js +84 -0
- package/dist/frontend/lowering/site-dependencies.js.map +1 -0
- package/dist/frontend/lowering/site-dependencies.test.d.ts +1 -0
- package/dist/frontend/lowering/site-dependencies.test.js +53 -0
- package/dist/frontend/lowering/site-dependencies.test.js.map +1 -0
- package/dist/frontend/lowering/stable-names.d.ts +11 -0
- package/dist/frontend/lowering/stable-names.js +35 -0
- package/dist/frontend/lowering/stable-names.js.map +1 -0
- package/dist/frontend/lowering/static-typeof.d.ts +2 -2
- package/dist/frontend/lowering/static-typeof.js +42 -3
- package/dist/frontend/lowering/static-typeof.js.map +1 -1
- package/dist/frontend/lowering/strict-equality.js +2 -1
- package/dist/frontend/lowering/strict-equality.js.map +1 -1
- package/dist/frontend/lowering/structural-positions.d.ts +32 -0
- package/dist/frontend/lowering/structural-positions.js +108 -0
- package/dist/frontend/lowering/structural-positions.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +3 -0
- package/dist/frontend/lowering/surfaces.js +60 -32
- 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 +66 -16
- 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-tsc-helpers.d.ts +5 -0
- package/dist/frontend/npm-static-tsc-helpers.js +106 -0
- package/dist/frontend/npm-static-tsc-helpers.js.map +1 -0
- package/dist/frontend/npm-static-tsc-helpers.test.d.ts +1 -0
- package/dist/frontend/npm-static-tsc-helpers.test.js +58 -0
- package/dist/frontend/npm-static-tsc-helpers.test.js.map +1 -0
- package/dist/frontend/npm-static-type-exports-host.d.ts +8 -0
- package/dist/frontend/npm-static-type-exports-host.js +214 -0
- package/dist/frontend/npm-static-type-exports-host.js.map +1 -0
- package/dist/frontend/npm-static-type-exports-host.test.d.ts +1 -0
- package/dist/frontend/npm-static-type-exports-host.test.js +53 -0
- package/dist/frontend/npm-static-type-exports-host.test.js.map +1 -0
- package/dist/frontend/npm-static-type-exports.d.ts +52 -0
- package/dist/frontend/npm-static-type-exports.js +261 -0
- package/dist/frontend/npm-static-type-exports.js.map +1 -0
- package/dist/frontend/npm-static-type-exports.test.d.ts +1 -0
- package/dist/frontend/npm-static-type-exports.test.js +103 -0
- package/dist/frontend/npm-static-type-exports.test.js.map +1 -0
- package/dist/frontend/npm-static-umd.d.ts +6 -0
- package/dist/frontend/npm-static-umd.js +203 -0
- package/dist/frontend/npm-static-umd.js.map +1 -0
- package/dist/frontend/npm-static-umd.test.d.ts +1 -0
- package/dist/frontend/npm-static-umd.test.js +105 -0
- package/dist/frontend/npm-static-umd.test.js.map +1 -0
- package/dist/frontend/npm-static.d.ts +8 -0
- package/dist/frontend/npm-static.js +51 -22
- 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 +18 -10
- 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.d.ts +21 -1
- package/dist/frontend/program.js +586 -74
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +44 -4
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/services.d.ts +6 -0
- package/dist/frontend/services.js +18 -0
- package/dist/frontend/services.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 +43 -7
- package/dist/frontend/ts7/ast-node.js +1176 -129
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +84 -0
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.d.ts +29 -3
- package/dist/frontend/ts7/ast-wire.js +144 -31
- 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/ast.d.ts +23 -2
- package/dist/frontend/ts7/ast.js +143 -2
- package/dist/frontend/ts7/ast.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 +17 -1
- package/dist/frontend/ts7/checker.js +82 -1
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +9 -6
- package/dist/frontend/ts7/checker.test.js.map +1 -1
- package/dist/frontend/ts7/enums.d.ts +3 -3
- package/dist/frontend/ts7/enums.generated.d.ts +10 -0
- package/dist/frontend/ts7/enums.generated.js +21 -0
- package/dist/frontend/ts7/enums.generated.js.map +1 -1
- package/dist/frontend/ts7/enums.js +19 -0
- package/dist/frontend/ts7/enums.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 +30 -4
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.d.ts +10 -0
- package/dist/frontend/ts7/semantic-checker.js +25 -20
- package/dist/frontend/ts7/semantic-checker.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.d.ts +13 -0
- package/dist/frontend/ts7/semantic-json.js +146 -0
- package/dist/frontend/ts7/semantic-json.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.test.js +57 -1
- package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.d.ts +15 -0
- package/dist/frontend/ts7/semantic-model.js +67 -19
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +3 -2
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/session.d.ts +14 -1
- package/dist/frontend/ts7/session.js +23 -1
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/tsc-codes.d.ts +1 -1
- package/dist/frontend/tsc-codes.js +7 -0
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +51 -7
- package/dist/frontend/type-mapper.js +456 -43
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.js +1 -1
- package/dist/frontend/type-mapper.test.js.map +1 -1
- package/dist/frontend-process-args.d.ts +4 -0
- package/dist/frontend-process-args.js +52 -0
- package/dist/frontend-process-args.js.map +1 -0
- package/dist/frontend-process-args.test.d.ts +1 -0
- package/dist/frontend-process-args.test.js +47 -0
- package/dist/frontend-process-args.test.js.map +1 -0
- package/dist/frontend-process.d.ts +1 -0
- package/dist/frontend-process.js +23 -0
- package/dist/frontend-process.js.map +1 -0
- package/dist/heap-collection.d.ts +16 -0
- package/dist/heap-collection.js +42 -0
- package/dist/heap-collection.js.map +1 -0
- package/dist/heap-collection.test.d.ts +1 -0
- package/dist/heap-collection.test.js +59 -0
- package/dist/heap-collection.test.js.map +1 -0
- package/dist/heap-pressure.d.ts +2 -0
- package/dist/heap-pressure.js +12 -0
- package/dist/heap-pressure.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +435 -89
- 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 +26 -6
- package/dist/ir/array-length-stability.js.map +1 -1
- package/dist/ir/array-length-stability.test.js +49 -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 +80 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +7 -1
- package/dist/ir/builtin-signatures.js +303 -21
- 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 +3 -1
- package/dist/ir/final-fields.js +15 -17
- 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 +5 -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 +36 -6
- package/dist/ir/int32-slots.js +370 -171
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +3 -1
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loop-facts.d.ts +9 -4
- package/dist/ir/integer-loop-facts.js +93 -18
- package/dist/ir/integer-loop-facts.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +49 -0
- package/dist/ir/integer-loops.js +202 -40
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +211 -1
- 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 +94 -0
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +87 -9
- package/dist/ir/ir.js +61 -2
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +21 -1
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/js-ic.d.ts +19 -2
- package/dist/ir/js-ic.js +95 -11
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +188 -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 +60 -15
- package/dist/ir/runtime-features.js +276 -35
- 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/tiers.js +1 -0
- package/dist/ir/tiers.js.map +1 -1
- package/dist/ir/traverse.d.ts +2 -0
- package/dist/ir/traverse.js +29 -5
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +171 -45
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/ir-policy.js +12 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.d.ts +2 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/prepare.js +2 -0
- package/dist/library/prepare.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 +26 -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 +3 -1
- package/dist/native/prepare.js +123 -31
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +78 -18
- package/dist/native/prepare.test.js.map +1 -1
- package/dist/native/sanitizer.test.js +6 -1
- 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/dist/startup-cache.d.ts +1 -0
- package/dist/startup-cache.js +1 -0
- package/dist/startup-cache.js.map +1 -1
- package/dist/text-parts.d.ts +7 -0
- package/dist/text-parts.js +44 -0
- package/dist/text-parts.js.map +1 -1
- package/dist/text-parts.test.d.ts +1 -0
- package/dist/text-parts.test.js +46 -0
- package/dist/text-parts.test.js.map +1 -0
- package/dist/timing.d.ts +9 -2
- package/dist/timing.js +7 -4
- package/dist/timing.js.map +1 -1
- package/dist/wasm/translate.d.ts +4 -0
- package/dist/wasm/translate.js +2 -2
- package/dist/wasm/translate.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/shims/undici/core/client.ts +4 -4
- package/surface-manifest.json +44 -52
|
@@ -4,8 +4,9 @@ import { streamRooted, undefinedArmTag } from "../../ir/analysis.js";
|
|
|
4
4
|
import { mangleClassGcFree, mangleClassNew, mangleClassObj, mangleClassRelease, mangleClassReleaseDirect, mangleClassRetain, mangleClassStruct, mangleClassTrace, mangleCtorThunk, mangleFunction, mangleGlobal, mangleVtArray, mangleVtInstance, mangleVtStruct, } from "../mangle.js";
|
|
5
5
|
import { cycTypeDescriptor, emitObjectAlloc, emitObjectFree } from "./alloc.js";
|
|
6
6
|
import { llvmCommentText } from "./common.js";
|
|
7
|
+
import { INLINE_UNION_FIELD } from "./inline-unions.js";
|
|
7
8
|
import { NullableRefFields } from "./nullable-fields.js";
|
|
8
|
-
import { cycleRootLines, traceFieldVisitLines, FN_ATTRS, cycleDeadLines, destroyDefinitions, directChildReleaseLines, directDestroyTarget, usedDirectTargets, llFieldType, releaseBody, releaseFastPath, needsBoundedRelease, releaseSym, retainBody, traceAdapter, youngEntryLines, } from "./shapes.js";
|
|
9
|
+
import { cycleRootLines, traceFieldVisitLines, FN_ATTRS, cycleDeadLines, destroyDefinitions, directChildReleaseLines, directDestroyTarget, segmentPrologueLines, segmentTeardownLines, segmentedTeardown, usedDirectTargets, llFieldType, releaseBody, releaseFastPath, needsBoundedRelease, releaseSym, retainBody, traceAdapter, youngEntryLines, } from "./shapes.js";
|
|
9
10
|
/** Per-class node of the class graph. */
|
|
10
11
|
export class LlClassMeta {
|
|
11
12
|
def;
|
|
@@ -30,6 +31,19 @@ export class LlClassMeta {
|
|
|
30
31
|
* bits, and the hierarchy's vtables are one array indexed by the id
|
|
31
32
|
* (mangleVtArray). */
|
|
32
33
|
idInRc = false;
|
|
34
|
+
/** A ProgramLifetime class with the 32-bit header (assignCompactLayouts):
|
|
35
|
+
* the i32 at offset 0 is compactHeaderWord, with the class id in place of
|
|
36
|
+
* the rc word's high half, and the fields are packed after it. */
|
|
37
|
+
compact = false;
|
|
38
|
+
/** Compact classes: the struct's elements by offset (the header, field
|
|
39
|
+
* -1, then the fields by their index in def.fields). */
|
|
40
|
+
compactElems = [];
|
|
41
|
+
/** Compact classes: each field's GEP index, by its index in def.fields. */
|
|
42
|
+
compactSlots = [];
|
|
43
|
+
/** Compact classes: whether each field (by its index in def.fields) holds
|
|
44
|
+
* a compact class instance as a 32-bit index (COMPACT_REF) rather than a
|
|
45
|
+
* pointer: compactRefLoadLines decodes it, compactRefStoreLines encodes it. */
|
|
46
|
+
compressed = [];
|
|
33
47
|
constructor(def) {
|
|
34
48
|
this.def = def;
|
|
35
49
|
this.root = this;
|
|
@@ -276,6 +290,8 @@ export function classSlotWordIndex(meta) {
|
|
|
276
290
|
/** The GEP index where a class's own fields start: after the header words
|
|
277
291
|
* and the slot word. */
|
|
278
292
|
export function classFieldBase(meta) {
|
|
293
|
+
if (meta.compact)
|
|
294
|
+
throw new InternalCompilerError(`llvm emitter bug: compact class ${meta.def.name} packs its fields`);
|
|
279
295
|
return headerEnd(meta) + (meta.threadSlot ? 1 : 0);
|
|
280
296
|
}
|
|
281
297
|
/** Append the lexical environment after inherited fields to preserve base layouts. */
|
|
@@ -284,11 +300,20 @@ export function classEnvironmentIndex(meta) {
|
|
|
284
300
|
}
|
|
285
301
|
/** A field's GEP index inside its class struct: rc at 0, the vtable word
|
|
286
302
|
* at 1 on hierarchy members, then the flattened field list. */
|
|
287
|
-
export function classFieldIndex(meta, field) {
|
|
303
|
+
export function classFieldIndex(meta, field, refs = "pointer") {
|
|
288
304
|
const idx = meta.def.fields.findIndex((f) => f.name === field);
|
|
289
305
|
if (idx < 0)
|
|
290
306
|
throw new InternalCompilerError(`llvm emitter bug: unknown field ${field} on class ${meta.def.name}`);
|
|
291
|
-
|
|
307
|
+
const compressed = meta.compressed[idx] === true;
|
|
308
|
+
// Callers that read or write a field's storage as a pointer must not see
|
|
309
|
+
// a compressed one; callers that decode and encode pass "compressed".
|
|
310
|
+
if (compressed && refs === "pointer")
|
|
311
|
+
throw new InternalCompilerError(`llvm emitter bug: field ${field} of ${meta.def.name} holds a 32-bit reference`);
|
|
312
|
+
return { index: classFieldSlot(meta, idx), type: meta.def.fields[idx].type, compressed };
|
|
313
|
+
}
|
|
314
|
+
/** The GEP index of the field at `idx` in `meta.def.fields`. */
|
|
315
|
+
export function classFieldSlot(meta, idx) {
|
|
316
|
+
return meta.compact ? meta.compactSlots[idx] : classFieldBase(meta) + idx;
|
|
292
317
|
}
|
|
293
318
|
/** Lines that release the ThreadSlots values of the object `%o` before it
|
|
294
319
|
* is freed: its slot word is 0 unless a value was ever set for it. */
|
|
@@ -341,8 +366,7 @@ export function programLifetimeRc(sizeType) {
|
|
|
341
366
|
export function classPreLines(meta, struct, obj, pre, sizeType) {
|
|
342
367
|
if (meta.idInRc)
|
|
343
368
|
return [
|
|
344
|
-
|
|
345
|
-
` ${pre}.id = load i32, ptr ${pre}.idp`,
|
|
369
|
+
...classIdLoadLines(meta, obj, `${pre}.id`, ""),
|
|
346
370
|
` ${pre}.n = add i32 ${pre}.id, -1 ; the class id is the preorder number + 1`,
|
|
347
371
|
` ${pre} = zext i32 ${pre}.n to ${sizeType}`,
|
|
348
372
|
];
|
|
@@ -362,13 +386,32 @@ export function classIdVtLines(meta, obj, vt, group) {
|
|
|
362
386
|
const vtt = `%${mangleVtStruct(root.def.name)}`;
|
|
363
387
|
const n = root.post - root.pre + 1;
|
|
364
388
|
return [
|
|
365
|
-
|
|
366
|
-
` ${t}id = load i32, ptr ${t}idp${group}`,
|
|
389
|
+
...classIdLoadLines(meta, `${obj}`, `${t}id`, group),
|
|
367
390
|
` ${t}ix = sub i32 ${t}id, ${root.pre + 1}`,
|
|
368
391
|
` ${t}ix64 = zext i32 ${t}ix to i64`,
|
|
369
392
|
` ${vt} = getelementptr inbounds [${n} x ${vtt}], ptr @${mangleVtArray(root.def.name)}, i64 0, i64 ${t}ix64`,
|
|
370
393
|
];
|
|
371
394
|
}
|
|
395
|
+
/** Lines that load the class id of the LlClassMeta.idInRc instance `obj`
|
|
396
|
+
* into the i32 `id`: the high half of the rc word, or the low 28 bits of a
|
|
397
|
+
* compact instance's header word (compactHeaderWord). `group` is the
|
|
398
|
+
* metadata of the load (`, !invariant.group !{}` for a load LLVM may treat
|
|
399
|
+
* as invariant), and it only goes on bytes that never change: publication
|
|
400
|
+
* sets the top bit of a compact header word, so a compact instance's id is
|
|
401
|
+
* then read as the word's low 16 bits, which hold the whole id when the
|
|
402
|
+
* hierarchy's ids are below 2^16, and otherwise as the masked word without
|
|
403
|
+
* the metadata. */
|
|
404
|
+
export function classIdLoadLines(meta, obj, id, group) {
|
|
405
|
+
if (meta.compact) {
|
|
406
|
+
if (group !== "" && meta.root.post + 1 <= 0xffff)
|
|
407
|
+
return [` ${id}.h = load i16, ptr ${obj}${group}`, ` ${id} = zext i16 ${id}.h to i32`];
|
|
408
|
+
return [` ${id}.w = load i32, ptr ${obj}`, ` ${id} = and i32 ${id}.w, ${COMPACT_ID_MASK}`];
|
|
409
|
+
}
|
|
410
|
+
return [
|
|
411
|
+
` ${id}p = getelementptr inbounds i8, ptr ${obj}, i64 ${CLASS_ID_OFFSET}`,
|
|
412
|
+
` ${id} = load i32, ptr ${id}p${group}`,
|
|
413
|
+
];
|
|
414
|
+
}
|
|
372
415
|
/** The byte offset of the class id in the rc word of an instance that
|
|
373
416
|
* keeps it there (LlClassMeta.idInRc): the high half of the little-endian
|
|
374
417
|
* 64-bit word. The count is the i32 at offset 0. */
|
|
@@ -382,6 +425,205 @@ export const CLASS_ID_OFFSET = 4;
|
|
|
382
425
|
export function classIdRcWord(meta, lifetime) {
|
|
383
426
|
return (BigInt(meta.pre + 1) * 2n ** 32n + (lifetime ? 2n ** 31n : 1n)).toString();
|
|
384
427
|
}
|
|
428
|
+
/** The 32-bit header of a compact class instance (LlClassMeta.compact):
|
|
429
|
+
* COMPACT_HEADER_TAG, the class id (classIdRcWord's preorder number + 1, 0
|
|
430
|
+
* outside a hierarchy) in the low 28 bits, and COMPACT_PUBLISHED once
|
|
431
|
+
* publication marks the object. No other object's count reaches
|
|
432
|
+
* 0x70000000, so the runtime reads a word of 0xf0000000 and up as published
|
|
433
|
+
* for every object (scr_rc.h SCR_RC_PUBLISHED). */
|
|
434
|
+
export const COMPACT_HEADER_TAG = 0x70000000;
|
|
435
|
+
export const COMPACT_PUBLISHED = 0x80000000;
|
|
436
|
+
export const COMPACT_ID_MASK = 0x0fffffff;
|
|
437
|
+
/** The leading bytes of a new instance that its allocation function stores
|
|
438
|
+
* right after allocating it (emitObjectAlloc's `stored`), which a recycled
|
|
439
|
+
* block therefore need not clear: a compact instance's 4-byte header word
|
|
440
|
+
* (its fields start at offset 4), the 8-byte rc word, or the rc word and
|
|
441
|
+
* the vtable word of a hierarchy member that keeps its class in a vtable. */
|
|
442
|
+
export function storedHeaderBytes(meta) {
|
|
443
|
+
if (meta.compact)
|
|
444
|
+
return 4;
|
|
445
|
+
return meta.hierarchy && !meta.idInRc ? 16 : 8;
|
|
446
|
+
}
|
|
447
|
+
/** The header word a compact instance is created with. */
|
|
448
|
+
export function compactHeaderWord(meta) {
|
|
449
|
+
return COMPACT_HEADER_TAG | (meta.hierarchy ? meta.pre + 1 : 0);
|
|
450
|
+
}
|
|
451
|
+
/** Lines that decode the 32-bit reference `idx` (an i32) of a compressed
|
|
452
|
+
* field into the pointer `out`. The program-lifetime region lies below
|
|
453
|
+
* 32 GiB (LlvmTargetOptions.lowRegion), so a reference is the instance's
|
|
454
|
+
* address over 8 and 0 is NULL: one shift, which x86-64 folds into the
|
|
455
|
+
* address of the next load. `t` names the temporaries. */
|
|
456
|
+
export function compactRefLoadLines(idx, out, t) {
|
|
457
|
+
return [
|
|
458
|
+
` ${t}.z = zext i32 ${idx} to i64`,
|
|
459
|
+
` ${t}.o = shl nuw nsw i64 ${t}.z, 3`,
|
|
460
|
+
` ${out} = inttoptr i64 ${t}.o to ptr`,
|
|
461
|
+
];
|
|
462
|
+
}
|
|
463
|
+
/** Lines that encode the pointer `ptr` (NULL or a compact class instance)
|
|
464
|
+
* as the 32-bit reference `out` (an i32) a compressed field stores. */
|
|
465
|
+
export function compactRefStoreLines(ptr, out, t) {
|
|
466
|
+
return [
|
|
467
|
+
` ${t}.pi = ptrtoint ptr ${ptr} to i64`,
|
|
468
|
+
` ${t}.s = lshr i64 ${t}.pi, 3`,
|
|
469
|
+
` ${out} = trunc i64 ${t}.s to i32`,
|
|
470
|
+
];
|
|
471
|
+
}
|
|
472
|
+
/** The storage type of a compressed field (LlClassMeta.compressed): a
|
|
473
|
+
* 32-bit index into the program-lifetime region. */
|
|
474
|
+
export const COMPACT_REF = "i32";
|
|
475
|
+
/** Lines that allocate `%o`, `size` zeroed bytes in the program-lifetime
|
|
476
|
+
* region: a bump of the calling thread's chunk (scr_rc.h ScrPlrChunk,
|
|
477
|
+
* thread-local in worker programs), and scr_plr_alloc when the chunk is
|
|
478
|
+
* exhausted or the target has no inline allocation. The lines end in an
|
|
479
|
+
* open block. */
|
|
480
|
+
function plrAllocLines(host, size) {
|
|
481
|
+
const S = host.sizeType;
|
|
482
|
+
host.declare(`declare ptr @scr_plr_alloc(${S})`);
|
|
483
|
+
host.declare(`declare i1 @llvm.expect.i1(i1, i1)`);
|
|
484
|
+
if (host.inlineAlloc !== true)
|
|
485
|
+
return [` %o = call ptr @scr_plr_alloc(${S} ${size})`];
|
|
486
|
+
const chunk = [];
|
|
487
|
+
if (host.threadLocalAlloc === true) {
|
|
488
|
+
host.declare(`@scr_plr_chunk = external thread_local global { ptr, ptr }`);
|
|
489
|
+
host.declare(`declare nonnull ptr @llvm.threadlocal.address.p0(ptr nonnull)`);
|
|
490
|
+
chunk.push(` %plr.c = call ptr @llvm.threadlocal.address.p0(ptr @scr_plr_chunk)`);
|
|
491
|
+
}
|
|
492
|
+
else {
|
|
493
|
+
host.declare(`@scr_plr_chunk = external dso_local global { ptr, ptr }`);
|
|
494
|
+
chunk.push(` %plr.c = getelementptr inbounds i8, ptr @scr_plr_chunk, i64 0`);
|
|
495
|
+
}
|
|
496
|
+
// A thread without a chunk has NULL for both, so nothing fits.
|
|
497
|
+
return [
|
|
498
|
+
...chunk,
|
|
499
|
+
` %plr.lp = getelementptr inbounds i8, ptr %plr.c, i64 8`,
|
|
500
|
+
` %plr.next = load ptr, ptr %plr.c`,
|
|
501
|
+
` %plr.lim = load ptr, ptr %plr.lp`,
|
|
502
|
+
` %plr.n7 = add ${S} ${size}, 7`,
|
|
503
|
+
` %plr.n = and ${S} %plr.n7, -8`,
|
|
504
|
+
` %plr.end = getelementptr i8, ptr %plr.next, ${S} %plr.n`,
|
|
505
|
+
` %plr.fits = icmp ule ptr %plr.end, %plr.lim`,
|
|
506
|
+
` %plr.fitsx = call i1 @llvm.expect.i1(i1 %plr.fits, i1 true)`,
|
|
507
|
+
` br i1 %plr.fitsx, label %plr.bump, label %plr.slow`,
|
|
508
|
+
`plr.bump:`,
|
|
509
|
+
` store ptr %plr.end, ptr %plr.c`,
|
|
510
|
+
` br label %plr.done`,
|
|
511
|
+
`plr.slow:`,
|
|
512
|
+
` %plr.o = call ptr @scr_plr_alloc(${S} ${size})`,
|
|
513
|
+
` br label %plr.done`,
|
|
514
|
+
`plr.done:`,
|
|
515
|
+
` %o = phi ptr [ %plr.next, %plr.bump ], [ %plr.o, %plr.slow ]`,
|
|
516
|
+
];
|
|
517
|
+
}
|
|
518
|
+
/** Byte size and alignment of a class field's LLVM storage type. */
|
|
519
|
+
function fieldStorage(type) {
|
|
520
|
+
switch (type) {
|
|
521
|
+
case "i8":
|
|
522
|
+
return { size: 1, align: 1 };
|
|
523
|
+
case "i32":
|
|
524
|
+
return { size: 4, align: 4 };
|
|
525
|
+
case "ptr":
|
|
526
|
+
case "double":
|
|
527
|
+
return { size: 8, align: 8 };
|
|
528
|
+
case INLINE_UNION_FIELD:
|
|
529
|
+
return { size: 16, align: 8 };
|
|
530
|
+
default:
|
|
531
|
+
throw new InternalCompilerError(`llvm emitter bug: class field storage ${type}`);
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
/** The LLVM storage type of each of a class's flattened fields. */
|
|
535
|
+
export function classFieldTypes(host, cls, int32) {
|
|
536
|
+
// Whole-program int32 fields (int32-slots.ts) store the exact i32.
|
|
537
|
+
return cls.fields.map((f) => int32?.isField(cls.name, f.name)
|
|
538
|
+
? "i32"
|
|
539
|
+
: llFieldType(f.type, host.inlineUnions.classField(cls.name, f.name)));
|
|
540
|
+
}
|
|
541
|
+
/** Gives the classes `compact` admits (whole hierarchies: the test is the
|
|
542
|
+
* root's) the 32-bit header and packed fields. A class keeps its base's
|
|
543
|
+
* field offsets, and places each of its own fields at the first offset
|
|
544
|
+
* after the header that fits it: in a hole another field's alignment left,
|
|
545
|
+
* in the base's tail padding, or at the end. Scalars narrower than 8 bytes
|
|
546
|
+
* (flags, ids, counts) go first, widest first, so they share the header's
|
|
547
|
+
* cache line; then the other fields, widest first. So 32-bit and smaller
|
|
548
|
+
* fields share 8-byte words. The struct lists the header and the fields by
|
|
549
|
+
* offset, which LLVM's layout of the type reproduces (checked). */
|
|
550
|
+
export function assignCompactLayouts(metaMap, compact, fieldTypes, compressedRef) {
|
|
551
|
+
const isCompact = (className) => {
|
|
552
|
+
const target = metaMap.get(className);
|
|
553
|
+
return target !== undefined && target.def.runtime !== true && compact(target.root);
|
|
554
|
+
};
|
|
555
|
+
const byPre = [...metaMap.values()].sort((a, b) => a.pre - b.pre);
|
|
556
|
+
for (const meta of byPre) {
|
|
557
|
+
if (meta.def.runtime === true || !compact(meta.root))
|
|
558
|
+
continue;
|
|
559
|
+
const base = meta.base;
|
|
560
|
+
const inherited = base?.compactElems ?? [
|
|
561
|
+
{ offset: 0, size: 4, align: 4, type: "i32", field: -1 },
|
|
562
|
+
];
|
|
563
|
+
const baseCount = base?.def.fields.length ?? 0;
|
|
564
|
+
if (base !== null && (!base.compact || !sameFieldPrefix(base.def, meta.def)))
|
|
565
|
+
throw new InternalCompilerError(`llvm emitter bug: compact class ${meta.def.name} does not extend its base's layout`);
|
|
566
|
+
const elems = inherited.map((e) => ({ ...e }));
|
|
567
|
+
// A reference to a compact class instance is a 32-bit index into the
|
|
568
|
+
// program-lifetime region (compactRefLoadLines); inherited fields keep the
|
|
569
|
+
// base's choice.
|
|
570
|
+
const compressed = meta.def.fields.map((_, i) => i < baseCount
|
|
571
|
+
? base.compressed[i]
|
|
572
|
+
: compressedRef !== undefined && compressedRef(meta.def, i, isCompact));
|
|
573
|
+
const types = fieldTypes(meta.def).map((t, i) => {
|
|
574
|
+
if (!compressed[i])
|
|
575
|
+
return t;
|
|
576
|
+
if (t !== "ptr")
|
|
577
|
+
throw new InternalCompilerError(`llvm emitter bug: compressed field ${meta.def.fields[i].name} of ${meta.def.name} is stored as ${t}`);
|
|
578
|
+
return COMPACT_REF;
|
|
579
|
+
});
|
|
580
|
+
const smallScalar = (f) => f.size < 8 && f.type !== "ptr" && !compressed[f.field] ? 0 : 1;
|
|
581
|
+
const own = types
|
|
582
|
+
.map((type, field) => ({ type, field, ...fieldStorage(type) }))
|
|
583
|
+
.slice(baseCount)
|
|
584
|
+
.sort((a, b) => smallScalar(a) - smallScalar(b) || b.size - a.size || a.field - b.field);
|
|
585
|
+
for (const f of own) {
|
|
586
|
+
const sorted = [...elems].sort((a, b) => a.offset - b.offset);
|
|
587
|
+
let at = -1;
|
|
588
|
+
let cursor = 0;
|
|
589
|
+
for (const e of sorted) {
|
|
590
|
+
const start = alignTo(cursor, f.align);
|
|
591
|
+
if (start + f.size <= e.offset) {
|
|
592
|
+
at = start;
|
|
593
|
+
break;
|
|
594
|
+
}
|
|
595
|
+
cursor = Math.max(cursor, e.offset + e.size);
|
|
596
|
+
}
|
|
597
|
+
if (at < 0)
|
|
598
|
+
at = alignTo(cursor, f.align);
|
|
599
|
+
elems.push({ offset: at, size: f.size, align: f.align, type: f.type, field: f.field });
|
|
600
|
+
}
|
|
601
|
+
elems.sort((a, b) => a.offset - b.offset);
|
|
602
|
+
// LLVM places each element at the next offset its alignment allows.
|
|
603
|
+
let end = 0;
|
|
604
|
+
for (const e of elems) {
|
|
605
|
+
if (alignTo(end, e.align) !== e.offset)
|
|
606
|
+
throw new InternalCompilerError(`llvm emitter bug: compact layout of ${meta.def.name} is not LLVM's`);
|
|
607
|
+
end = e.offset + e.size;
|
|
608
|
+
}
|
|
609
|
+
const slots = new Array(types.length).fill(-1);
|
|
610
|
+
elems.forEach((e, index) => {
|
|
611
|
+
if (e.field >= 0)
|
|
612
|
+
slots[e.field] = index;
|
|
613
|
+
});
|
|
614
|
+
meta.compact = true;
|
|
615
|
+
meta.compactElems = elems;
|
|
616
|
+
meta.compactSlots = slots;
|
|
617
|
+
meta.compressed = compressed;
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
function alignTo(n, align) {
|
|
621
|
+
return Math.ceil(n / align) * align;
|
|
622
|
+
}
|
|
623
|
+
function sameFieldPrefix(base, cls) {
|
|
624
|
+
return (base.fields.length <= cls.fields.length &&
|
|
625
|
+
base.fields.every((f, i) => cls.fields[i].name === f.name));
|
|
626
|
+
}
|
|
385
627
|
function undefFieldInits(host, meta, nullable) {
|
|
386
628
|
const out = [];
|
|
387
629
|
meta.def.fields.forEach((f, i) => {
|
|
@@ -392,7 +634,11 @@ function undefFieldInits(host, meta, nullable) {
|
|
|
392
634
|
// A nullable-pointer field's zeroed slot already is its unit arm.
|
|
393
635
|
if (nullable?.get(meta.def.name, f.name))
|
|
394
636
|
return;
|
|
395
|
-
|
|
637
|
+
// Only union and dyn fields get a store here; a compressed field is a
|
|
638
|
+
// class reference, which starts NULL.
|
|
639
|
+
const { index, compressed } = classFieldIndex(meta, f.name, "compressed");
|
|
640
|
+
if (compressed)
|
|
641
|
+
return;
|
|
396
642
|
if (f.type.kind === "union" && host.inlineUnions.classField(meta.def.name, f.name)) {
|
|
397
643
|
// An inline field starts at the undefined arm's tag with zero bits.
|
|
398
644
|
const tag = undefinedArmTag(f.type, host.unionsById);
|
|
@@ -421,6 +667,9 @@ function undefFieldInits(host, meta, nullable) {
|
|
|
421
667
|
* +trace/gcFree for cycle-capable shapes) definitions (`defs`). Mirrors
|
|
422
668
|
* emitStructDefs + emitHierarchyClassHelpers. */
|
|
423
669
|
export function emitClassShapes(host, mod, metaMap, nullable, int32) {
|
|
670
|
+
// Whether compact instances live in the program-lifetime region, where
|
|
671
|
+
// fields and arrays can refer to them in 32 bits (LlEmitter.compactRegion).
|
|
672
|
+
const regionRefs = host.compactRegion?.() === true;
|
|
424
673
|
const typeDefs = [];
|
|
425
674
|
const defs = [];
|
|
426
675
|
const emitted = (mod.classes ?? []).filter((c) => !c.runtime);
|
|
@@ -433,10 +682,15 @@ export function emitClassShapes(host, mod, metaMap, nullable, int32) {
|
|
|
433
682
|
}
|
|
434
683
|
for (const cls of emitted) {
|
|
435
684
|
const meta = metaMap.get(cls.name);
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
685
|
+
if (meta.compact) {
|
|
686
|
+
typeDefs.push(`%${mangleClassStruct(cls.name)} = type { ${meta.compactElems.map((e) => e.type).join(", ")} } ` +
|
|
687
|
+
`; class ${cls.name} (32-bit header) { ${meta.compactElems
|
|
688
|
+
.slice(1)
|
|
689
|
+
.map((e) => llvmCommentText(cls.fields[e.field].name))
|
|
690
|
+
.join("; ")} }`);
|
|
691
|
+
continue;
|
|
692
|
+
}
|
|
693
|
+
const fieldTys = classFieldTypes(host, cls, int32);
|
|
440
694
|
// Subclasses of a runtime base embed its remaining prefix (the state
|
|
441
695
|
// and display-name slots) between the vtable word and the field list;
|
|
442
696
|
// stream subclasses add the stream-state pointer — upcasts to
|
|
@@ -542,18 +796,30 @@ export function emitClassShapes(host, mod, metaMap, nullable, int32) {
|
|
|
542
796
|
const traced = host.tracedShapes.has(`object:${cls.name}`);
|
|
543
797
|
const runtimePrefix = runtimePrefixOf(meta);
|
|
544
798
|
const isStreamRooted = streamRooted(meta);
|
|
545
|
-
const fieldIndex = (i) =>
|
|
799
|
+
const fieldIndex = (i) => classFieldSlot(meta, i);
|
|
546
800
|
// Teardown, trace and gcFree see each slot's storage type: a nullable
|
|
547
801
|
// class field holds the instance pointer (NULL for the unit arm), and
|
|
548
|
-
// every class retain/release/visit entry point is NULL-tolerant.
|
|
802
|
+
// every class retain/release/visit entry point is NULL-tolerant. A
|
|
803
|
+
// compressed field refers to a compact instance, which nothing releases
|
|
804
|
+
// or traces, so they skip it.
|
|
549
805
|
const indexedFields = [
|
|
550
|
-
...ownedFields(cls)
|
|
806
|
+
...ownedFields(cls)
|
|
807
|
+
.filter(({ i }) => meta.compressed[i] !== true)
|
|
808
|
+
.map(({ field, i }) => ({
|
|
551
809
|
name: field.name,
|
|
552
810
|
type: storedFieldType(cls, field),
|
|
553
811
|
index: fieldIndex(i),
|
|
554
812
|
})),
|
|
555
813
|
];
|
|
556
814
|
const refFields = indexedFields.filter((f) => isRefCounted(f.type));
|
|
815
|
+
const tracedFields = traced
|
|
816
|
+
? indexedFields.filter((f) => traceAdapter(host, f.type) !== null)
|
|
817
|
+
: [];
|
|
818
|
+
// A traced class whose trace visits nothing carries the collector header
|
|
819
|
+
// only because its hierarchy is traced: it is never on a cycle. Its
|
|
820
|
+
// descriptor names scr_cyc_no_children and its objects start out
|
|
821
|
+
// SCR_CYC_ACYCLIC, so releases never buffer them.
|
|
822
|
+
const acyclic = traced && runtimePrefix === null && !isStreamRooted && tracedFields.length === 0;
|
|
557
823
|
const bounded = runtimePrefix !== null ||
|
|
558
824
|
isStreamRooted ||
|
|
559
825
|
refFields.some((field) => needsBoundedRelease(field.type));
|
|
@@ -583,18 +849,40 @@ export function emitClassShapes(host, mod, metaMap, nullable, int32) {
|
|
|
583
849
|
const chained = bounded &&
|
|
584
850
|
(directTargets.has(`object:${cls.name}`) ||
|
|
585
851
|
refFields.some((f) => directDestroyTarget(host, f.type, directTargets) !== null));
|
|
852
|
+
// The teardown's own symbol, and whether it keeps a segment (shapes.ts
|
|
853
|
+
// segmentedTeardown).
|
|
854
|
+
const destroy = `${meta.hierarchy ? mangleClassReleaseDirect(cls.name) : mangleClassRelease(cls.name)}_destroy`;
|
|
855
|
+
const segmented = chained &&
|
|
856
|
+
!meta.compact &&
|
|
857
|
+
runtimePrefix === null &&
|
|
858
|
+
!isStreamRooted &&
|
|
859
|
+
!meta.threadSlot &&
|
|
860
|
+
segmentedTeardown(host, destroy, refFields.map((f) => f.type), directTargets);
|
|
586
861
|
// The field-releasing teardown body shared by both release shapes
|
|
587
862
|
// (the public one on standalone classes, the DIRECT one on hierarchy
|
|
588
863
|
// members). Runs at rc == 0.
|
|
589
864
|
const teardown = (lines) => {
|
|
590
|
-
|
|
591
|
-
lines.push(` %f${t} = getelementptr inbounds %${struct}, ptr %o, i64 0, i32 ${f.index}`, ` %v${t} = load ptr, ptr %f${t}`);
|
|
865
|
+
const release = (prefix, f, t) => {
|
|
592
866
|
const direct = bounded ? directDestroyTarget(host, f.type, directTargets) : null;
|
|
593
|
-
if (direct)
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
867
|
+
if (direct === null)
|
|
868
|
+
return [
|
|
869
|
+
` call void ${releaseSym(host, f.type)}(ptr %v${t}) ; ${llvmCommentText(f.name)}`,
|
|
870
|
+
];
|
|
871
|
+
const own = segmented && direct.destroy === destroy;
|
|
872
|
+
return directChildReleaseLines(host, `${prefix}${t}`, `%v${t}`, direct, llvmCommentText(f.name), own);
|
|
873
|
+
};
|
|
874
|
+
const loads = refFields.map((f, t) => [
|
|
875
|
+
` %f${t} = getelementptr inbounds %${struct}, ptr %o, i64 0, i32 ${f.index}`,
|
|
876
|
+
` %v${t} = load ptr, ptr %f${t}`,
|
|
877
|
+
]);
|
|
878
|
+
if (segmented) {
|
|
879
|
+
// A segmented teardown loads its fields, releases its own block, and
|
|
880
|
+
// then releases the fields (shapes.ts segmentTeardownLines).
|
|
881
|
+
const ownType = refFields.flatMap((f, t) => directDestroyTarget(host, f.type, directTargets)?.destroy === destroy ? [`%v${t}`] : []);
|
|
882
|
+
lines.push(...segmentPrologueLines(), ...loads.flat(), ...emitObjectFree(host, traced, "weak", "%sg.own"), ...segmentTeardownLines(ownType, (prefix) => refFields.flatMap((f, t) => release(prefix, f, t))));
|
|
883
|
+
return;
|
|
884
|
+
}
|
|
885
|
+
refFields.forEach((f, t) => lines.push(...loads[t], ...release("td", f, t)));
|
|
598
886
|
if (runtimePrefix)
|
|
599
887
|
lines.push(...regCall("td", runtimePrefix.drop, ""));
|
|
600
888
|
if (isStreamRooted)
|
|
@@ -625,39 +913,44 @@ export function emitClassShapes(host, mod, metaMap, nullable, int32) {
|
|
|
625
913
|
` %vt = load ptr, ptr %vtp`,
|
|
626
914
|
]), ` %relp = getelementptr inbounds %ScrVt, ptr %vt, i64 0, i32 2`, ` %rel = load ptr, ptr %relp`, ` call void %rel(ptr %o) ; the DYNAMIC class's teardown`, ` br label %done`, `done:`, ` ret void`, `}`, ``);
|
|
627
915
|
// Direct release (the vtable entry): the class's own teardown. The
|
|
628
|
-
// caller already handled NULL/immortal.
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
`entry:`,
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
916
|
+
// caller already handled NULL/immortal. A compact instance has no
|
|
917
|
+
// count: nothing releases it.
|
|
918
|
+
if (meta.compact) {
|
|
919
|
+
defs.push(`define internal void @${mangleClassReleaseDirect(cls.name)}(ptr %o) ${FN_ATTRS} { ; direct release ${cls.name} (immortal)`, `entry:`, ` ret void`, `}`, ``);
|
|
920
|
+
}
|
|
921
|
+
else {
|
|
922
|
+
const reld = [
|
|
923
|
+
`define internal void @${mangleClassReleaseDirect(cls.name)}(ptr %o) ${FN_ATTRS} { ; direct release ${cls.name}`,
|
|
924
|
+
`entry:`,
|
|
925
|
+
` %rc = load ${count}, ptr %o`,
|
|
926
|
+
` %n = sub ${count} %rc, 1`,
|
|
927
|
+
` store ${count} %n, ptr %o`,
|
|
928
|
+
` %dead = icmp eq ${count} %n, 0`,
|
|
929
|
+
` br i1 %dead, label %free, label %${traced ? "root" : "done"}`,
|
|
930
|
+
`free:`,
|
|
931
|
+
];
|
|
932
|
+
if (traced)
|
|
933
|
+
reld.push(...cycleDeadLines(host, "teardown"));
|
|
934
|
+
if (bounded) {
|
|
935
|
+
const destroyBody = [];
|
|
936
|
+
teardown(destroyBody);
|
|
937
|
+
defs.push(...destroyDefinitions(destroy, destroyBody, chained, segmented ? host : null), ``);
|
|
938
|
+
host.declare(`declare void @scr_rc_destroy(ptr, ptr)`);
|
|
939
|
+
reld.push(` call void @scr_rc_destroy(ptr %o, ptr @${destroy})`);
|
|
940
|
+
}
|
|
941
|
+
else
|
|
942
|
+
teardown(reld);
|
|
943
|
+
reld.push(` br label %done`);
|
|
944
|
+
if (traced)
|
|
945
|
+
reld.push(`root:`, ...cycleRootLines(host, "done"));
|
|
946
|
+
reld.push(`done:`, ` ret void`, `}`, ``);
|
|
947
|
+
defs.push(...reld);
|
|
648
948
|
}
|
|
649
|
-
else
|
|
650
|
-
teardown(reld);
|
|
651
|
-
reld.push(` br label %done`);
|
|
652
|
-
if (traced)
|
|
653
|
-
reld.push(`root:`, ...cycleRootLines(host, "done"));
|
|
654
|
-
reld.push(`done:`, ` ret void`, `}`, ``);
|
|
655
|
-
defs.push(...reld);
|
|
656
949
|
}
|
|
657
950
|
else {
|
|
658
951
|
const freeBody = [];
|
|
659
952
|
teardown(freeBody);
|
|
660
|
-
defs.push(...releaseBody(host, mangleClassRelease(cls.name), traced, freeBody, `release ${cls.name}`, bounded, lifetime, chained), ``);
|
|
953
|
+
defs.push(...releaseBody(host, mangleClassRelease(cls.name), traced, freeBody, `release ${cls.name}`, bounded, lifetime, chained, segmented), ``);
|
|
661
954
|
}
|
|
662
955
|
// new: zeroed allocation, rc = 1, the vtable word on hierarchy
|
|
663
956
|
// members, undefined-admitting union fields at the interned unit
|
|
@@ -668,8 +961,10 @@ export function emitClassShapes(host, mod, metaMap, nullable, int32) {
|
|
|
668
961
|
`entry:`,
|
|
669
962
|
];
|
|
670
963
|
const cycType = `@${mangleClassTrace(cls.name)}.cyctype`;
|
|
964
|
+
if (acyclic)
|
|
965
|
+
host.declare(`declare void @scr_cyc_no_children(ptr, ptr, ptr)`);
|
|
671
966
|
if (traced)
|
|
672
|
-
defs.push(cycTypeDescriptor(cycType, `@${mangleClassTrace(cls.name)}`, `@${mangleClassGcFree(cls.name)}`, host.nextCycKind?.() ?? 0), ``);
|
|
967
|
+
defs.push(cycTypeDescriptor(cycType, acyclic ? "@scr_cyc_no_children" : `@${mangleClassTrace(cls.name)}`, `@${mangleClassGcFree(cls.name)}`, host.nextCycKind?.() ?? 0), ``);
|
|
673
968
|
// A program-lifetime instance is never freed: no collector header
|
|
674
969
|
// (nothing walks or frees it) and the program-lifetime count, which
|
|
675
970
|
// publication turns into SIZE_MAX (programLifetimeRc). Programs with
|
|
@@ -680,9 +975,25 @@ export function emitClassShapes(host, mod, metaMap, nullable, int32) {
|
|
|
680
975
|
nw.push(...regions.newAlloc(cls.name, sizeOf));
|
|
681
976
|
defs.push(...regions.classDefinitions(cls, sizeOf));
|
|
682
977
|
}
|
|
978
|
+
else if (meta.compact && regionRefs) {
|
|
979
|
+
// Compressed fields refer to compact instances by their index in the
|
|
980
|
+
// program-lifetime region, so every compact instance lives there:
|
|
981
|
+
// zeroed, 8-byte aligned and never freed.
|
|
982
|
+
nw.push(...plrAllocLines(host, sizeOf));
|
|
983
|
+
}
|
|
683
984
|
else
|
|
684
|
-
nw.push(...emitObjectAlloc(host, sizeOf, traced && !lifetime ? { type: cycType } : null, meta
|
|
685
|
-
if (meta.
|
|
985
|
+
nw.push(...emitObjectAlloc(host, sizeOf, traced && !lifetime ? { type: cycType, acyclic } : null, storedHeaderBytes(meta)));
|
|
986
|
+
if (meta.compact && !meta.hierarchy)
|
|
987
|
+
nw.push(` store i32 ${compactHeaderWord(meta)}, ptr %o ; no count (compactHeaderWord)`);
|
|
988
|
+
else if (meta.compact) {
|
|
989
|
+
// The header word: the class id and no count (compactHeaderWord).
|
|
990
|
+
// Only publication writes it again, setting COMPACT_PUBLISHED in the
|
|
991
|
+
// top byte, so the class id reads that carry !invariant.group read
|
|
992
|
+
// the low 16 bits only (classIdLoadLines).
|
|
993
|
+
host.declare(`declare ptr @llvm.launder.invariant.group.p0(ptr)`);
|
|
994
|
+
nw.push(` %o.vt = call ptr @llvm.launder.invariant.group.p0(ptr %o)`, ` store i32 ${compactHeaderWord(meta)}, ptr %o.vt ; class ${llvmCommentText(cls.name)} is ${meta.pre}`);
|
|
995
|
+
}
|
|
996
|
+
else if (meta.idInRc) {
|
|
686
997
|
// The class id in the high half of the rc word, the count in the low
|
|
687
998
|
// half (classIdRcWord). It never changes while the object lives:
|
|
688
999
|
// retains, releases and the runtime write only the low half.
|
|
@@ -729,7 +1040,6 @@ export function emitClassShapes(host, mod, metaMap, nullable, int32) {
|
|
|
729
1040
|
// exactly the complement, then free (the trace/teardown complement
|
|
730
1041
|
// contract in scr_runtime.h).
|
|
731
1042
|
const indexed = indexedFields;
|
|
732
|
-
const tracedFields = indexed.filter((f) => traceAdapter(host, f.type) !== null);
|
|
733
1043
|
const untracedRefFields = indexed.filter((f) => isRefCounted(f.type) && traceAdapter(host, f.type) === null);
|
|
734
1044
|
const tr = [
|
|
735
1045
|
`define internal void @${mangleClassTrace(cls.name)}(ptr %o, ptr %visit, ptr %ctx) ${FN_ATTRS} { ; trace ${cls.name}`,
|