@scriptc/compiler 0.3.0 → 0.3.2
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 +346 -17
- package/dist/backend/executable-features.js +1 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/literals.d.ts +7 -0
- package/dist/backend/literals.js +32 -0
- package/dist/backend/literals.js.map +1 -1
- package/dist/backend/literals.test.js +17 -1
- package/dist/backend/literals.test.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +15 -4
- package/dist/backend/llvm/alloc.js +39 -15
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/alloc.test.js +15 -1
- package/dist/backend/llvm/alloc.test.js.map +1 -1
- package/dist/backend/llvm/appended-array-literals.d.ts +2 -0
- package/dist/backend/llvm/appended-array-literals.js +109 -0
- package/dist/backend/llvm/appended-array-literals.js.map +1 -0
- package/dist/backend/llvm/appended-array-literals.test.d.ts +1 -0
- package/dist/backend/llvm/appended-array-literals.test.js +90 -0
- package/dist/backend/llvm/appended-array-literals.test.js.map +1 -0
- package/dist/backend/llvm/bigint-wrap.d.ts +4 -0
- package/dist/backend/llvm/bigint-wrap.js +590 -0
- package/dist/backend/llvm/bigint-wrap.js.map +1 -0
- package/dist/backend/llvm/blocks.d.ts +2 -0
- package/dist/backend/llvm/blocks.js +4 -0
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.d.ts +4 -1
- package/dist/backend/llvm/call-lifetimes.js +66 -7
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +14 -3
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/checked-narrows.test.js +1 -1
- package/dist/backend/llvm/checked-narrows.test.js.map +1 -1
- package/dist/backend/llvm/classes.js +67 -14
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +6 -6
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +7 -5
- package/dist/backend/llvm/common.js +7 -5
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.js +10 -28
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.js +146 -53
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +68 -3
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +4 -0
- package/dist/backend/llvm/dyn.js +15 -2
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +163 -8
- package/dist/backend/llvm/emitter.js +973 -100
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +14 -7
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +242 -49
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-async.test.js +1 -1
- package/dist/backend/llvm/expr-async.test.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +51 -36
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.d.ts +8 -0
- package/dist/backend/llvm/expr-callbacks.js +153 -4
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +12 -1
- package/dist/backend/llvm/expr-calls.js +279 -78
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-calls.test.d.ts +1 -0
- package/dist/backend/llvm/expr-calls.test.js +132 -0
- package/dist/backend/llvm/expr-calls.test.js.map +1 -0
- package/dist/backend/llvm/expr-containers.d.ts +7 -0
- package/dist/backend/llvm/expr-containers.js +49 -5
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +4 -0
- package/dist/backend/llvm/expr-control.d.ts +8 -0
- package/dist/backend/llvm/expr-control.js +103 -69
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dispatch.js +3 -0
- package/dist/backend/llvm/expr-dispatch.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +28 -6
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.d.ts +14 -0
- package/dist/backend/llvm/expr-primitives.js +110 -48
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +95 -5
- package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
- package/dist/backend/llvm/expr-records.d.ts +9 -0
- package/dist/backend/llvm/expr-records.js +144 -16
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.d.ts +9 -1
- package/dist/backend/llvm/expr-stream-bridges.js +152 -4
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +98 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
- package/dist/backend/llvm/int32-abi.d.ts +47 -0
- package/dist/backend/llvm/int32-abi.js +83 -0
- package/dist/backend/llvm/int32-abi.js.map +1 -0
- package/dist/backend/llvm/int32-abi.test.d.ts +1 -0
- package/dist/backend/llvm/int32-abi.test.js +181 -0
- package/dist/backend/llvm/int32-abi.test.js.map +1 -0
- package/dist/backend/llvm/int32-locals.d.ts +30 -0
- package/dist/backend/llvm/int32-locals.js +95 -0
- package/dist/backend/llvm/int32-locals.js.map +1 -0
- package/dist/backend/llvm/integer-values.d.ts +4 -0
- package/dist/backend/llvm/integer-values.js +30 -1
- package/dist/backend/llvm/integer-values.js.map +1 -1
- package/dist/backend/llvm/integer-views.d.ts +8 -1
- package/dist/backend/llvm/integer-views.js +47 -2
- package/dist/backend/llvm/integer-views.js.map +1 -1
- package/dist/backend/llvm/lazy-captures.d.ts +16 -0
- package/dist/backend/llvm/lazy-captures.js +88 -2
- package/dist/backend/llvm/lazy-captures.js.map +1 -1
- package/dist/backend/llvm/lazy-captures.test.js +48 -0
- package/dist/backend/llvm/lazy-captures.test.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +21 -0
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +61 -0
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +83 -9
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +26 -5
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +3 -2
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.d.ts +24 -2
- package/dist/backend/llvm/local-union-storage.js +127 -12
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +108 -3
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/record-results.d.ts +26 -0
- package/dist/backend/llvm/record-results.js +252 -0
- package/dist/backend/llvm/record-results.js.map +1 -0
- package/dist/backend/llvm/reference-effects.js +4 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.d.ts +3 -0
- package/dist/backend/llvm/reference-writes.js +25 -11
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.d.ts +39 -0
- package/dist/backend/llvm/regex-matchers.js +1649 -0
- package/dist/backend/llvm/regex-matchers.js.map +1 -0
- package/dist/backend/llvm/regex-matchers.test.d.ts +1 -0
- package/dist/backend/llvm/regex-matchers.test.js +96 -0
- package/dist/backend/llvm/regex-matchers.test.js.map +1 -0
- package/dist/backend/llvm/regions.d.ts +67 -0
- package/dist/backend/llvm/regions.js +309 -0
- package/dist/backend/llvm/regions.js.map +1 -0
- package/dist/backend/llvm/regions.test.d.ts +1 -0
- package/dist/backend/llvm/regions.test.js +173 -0
- package/dist/backend/llvm/regions.test.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +70 -8
- package/dist/backend/llvm/shapes.js +157 -29
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +7 -6
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/split-loops.js +1 -1
- package/dist/backend/llvm/split-loops.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +29 -0
- package/dist/backend/llvm/stack-objects.js +130 -0
- package/dist/backend/llvm/stack-objects.js.map +1 -0
- package/dist/backend/llvm/stack-objects.test.d.ts +1 -0
- package/dist/backend/llvm/stack-objects.test.js +252 -0
- package/dist/backend/llvm/stack-objects.test.js.map +1 -0
- package/dist/backend/llvm/stack-unions.test.js +1 -1
- package/dist/backend/llvm/stack-unions.test.js.map +1 -1
- package/dist/backend/llvm/string-construction.test.js +2 -2
- package/dist/backend/llvm/string-construction.test.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +5 -5
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-literal-equality.d.ts +22 -0
- package/dist/backend/llvm/string-literal-equality.js +78 -0
- package/dist/backend/llvm/string-literal-equality.js.map +1 -0
- package/dist/backend/llvm/string-reads.d.ts +4 -1
- package/dist/backend/llvm/string-reads.js +89 -9
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/switch-dispatch.js +60 -13
- package/dist/backend/llvm/switch-dispatch.js.map +1 -1
- package/dist/backend/llvm/switch-dispatch.test.js +71 -6
- package/dist/backend/llvm/switch-dispatch.test.js.map +1 -1
- package/dist/backend/llvm/union-retype.test.d.ts +1 -0
- package/dist/backend/llvm/union-retype.test.js +229 -0
- package/dist/backend/llvm/union-retype.test.js.map +1 -0
- package/dist/backend/llvm/walkers.d.ts +2 -0
- package/dist/backend/llvm/walkers.js +4 -2
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/llvm/wrapping-sums.d.ts +17 -0
- package/dist/backend/llvm/wrapping-sums.js +113 -0
- package/dist/backend/llvm/wrapping-sums.js.map +1 -0
- package/dist/backend/loop-polls.js +1 -0
- package/dist/backend/loop-polls.js.map +1 -1
- package/dist/backend/mangle.d.ts +9 -0
- package/dist/backend/mangle.js +15 -0
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/may-throw.js +7 -3
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +5 -0
- package/dist/backend/native/executable.js +16 -1
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +1 -1
- 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 +2 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +1 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- 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 +1 -1
- package/dist/backend/runtime-pack.test.js +1 -1
- package/dist/backend/target-diagnostics.js +14 -0
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +13 -0
- package/dist/backend/target-diagnostics.test.js.map +1 -1
- package/dist/contracts/check.js +4 -0
- package/dist/contracts/check.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +1 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/frontend/experimental-import.d.ts +12 -0
- package/dist/frontend/experimental-import.js +63 -0
- package/dist/frontend/experimental-import.js.map +1 -0
- package/dist/frontend/lowering/array-values.d.ts +14 -0
- package/dist/frontend/lowering/array-values.js +29 -0
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/builtin-calls.d.ts +6 -1
- package/dist/frontend/lowering/builtin-calls.js +36 -0
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/console.d.ts +16 -6
- package/dist/frontend/lowering/builtins/console.js +33 -9
- package/dist/frontend/lowering/builtins/console.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.js +20 -0
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.d.ts +2 -2
- package/dist/frontend/lowering/builtins/json.js +13 -4
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +16 -1
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.d.ts +1 -0
- package/dist/frontend/lowering/builtins/numbers.js +17 -0
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.d.ts +18 -0
- package/dist/frontend/lowering/builtins/operating-system.js +361 -1
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.js +15 -3
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +109 -2
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.d.ts +3 -4
- package/dist/frontend/lowering/builtins/text-codecs.js +3 -4
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/checked-promise-all.d.ts +10 -3
- package/dist/frontend/lowering/checked-promise-all.js +52 -6
- package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +6 -3
- package/dist/frontend/lowering/class-dynamic-dispatch.js +54 -31
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +74 -4
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +8 -4
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.d.ts +54 -0
- package/dist/frontend/lowering/containers/array-pipelines.js +1827 -0
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -0
- package/dist/frontend/lowering/containers/exec-result-uses.d.ts +10 -0
- package/dist/frontend/lowering/containers/exec-result-uses.js +88 -0
- package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -0
- package/dist/frontend/lowering/containers/string-and-regexp.js +106 -7
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.d.ts +2 -1
- package/dist/frontend/lowering/containers/string-replacement.js +32 -136
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.d.ts +18 -2
- package/dist/frontend/lowering/cycle-initialization.js +166 -12
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.js +7 -2
- 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/devirtualize.d.ts +33 -0
- package/dist/frontend/lowering/devirtualize.js +199 -0
- package/dist/frontend/lowering/devirtualize.js.map +1 -0
- package/dist/frontend/lowering/expressions/nullish-assignment.js +55 -7
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +5 -56
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/generator-delegation.d.ts +8 -0
- package/dist/frontend/lowering/generator-delegation.js +231 -10
- package/dist/frontend/lowering/generator-delegation.js.map +1 -1
- package/dist/frontend/lowering/identifier-uses.d.ts +7 -0
- package/dist/frontend/lowering/identifier-uses.js +23 -0
- package/dist/frontend/lowering/identifier-uses.js.map +1 -0
- package/dist/frontend/lowering/iterator-adapters.js +51 -3
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/lifetime-regions.d.ts +11 -0
- package/dist/frontend/lowering/lifetime-regions.js +216 -0
- package/dist/frontend/lowering/lifetime-regions.js.map +1 -0
- package/dist/frontend/lowering/lower-array-sort.d.ts +28 -2
- package/dist/frontend/lowering/lower-array-sort.js +112 -2
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.test.js +99 -2
- package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +135 -131
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +4 -3
- package/dist/frontend/lowering/lower-classes.js +117 -13
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-console.d.ts +27 -0
- package/dist/frontend/lowering/lower-console.js +651 -0
- package/dist/frontend/lowering/lower-console.js.map +1 -0
- package/dist/frontend/lowering/lower-event-emitter.d.ts +6 -0
- package/dist/frontend/lowering/lower-event-emitter.js +124 -38
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +272 -25
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +7 -3
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.d.ts +25 -7
- package/dist/frontend/lowering/lower-generators.js +264 -113
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +8 -1
- package/dist/frontend/lowering/lower-inspect.js +119 -18
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +24 -14
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
- package/dist/frontend/lowering/lower-stdlib.js +35 -1
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +66 -11
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +13 -10
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +47 -5
- package/dist/frontend/lowering/lowerer.js +235 -54
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/nan-coded-reads.d.ts +16 -0
- package/dist/frontend/lowering/nan-coded-reads.js +108 -1
- package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
- package/dist/frontend/lowering/regex-span-reads.d.ts +12 -0
- package/dist/frontend/lowering/regex-span-reads.js +164 -0
- package/dist/frontend/lowering/regex-span-reads.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-bounds.d.ts +4 -0
- package/dist/frontend/lowering/runtime-optional-bounds.js +2 -0
- package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-bounds.test.js +27 -0
- package/dist/frontend/lowering/runtime-optional-bounds.test.js.map +1 -1
- package/dist/frontend/lowering/split-consumers.js +2 -18
- package/dist/frontend/lowering/split-consumers.js.map +1 -1
- package/dist/frontend/lowering/surfaces.js +115 -18
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/union-retag.d.ts +6 -1
- package/dist/frontend/lowering/union-retag.js +64 -1
- package/dist/frontend/lowering/union-retag.js.map +1 -1
- package/dist/frontend/lowering/union-retag.test.js +46 -0
- package/dist/frontend/lowering/union-retag.test.js.map +1 -1
- package/dist/frontend/lowering/var-hoisting.d.ts +3 -0
- package/dist/frontend/lowering/var-hoisting.js +261 -0
- package/dist/frontend/lowering/var-hoisting.js.map +1 -0
- package/dist/frontend/pipeline.js +5 -3
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program.d.ts +3 -2
- package/dist/frontend/program.js +23 -5
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +13 -0
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +13 -1
- package/dist/frontend/type-mapper.js +160 -14
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/ir/builtin-effects.js +31 -2
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +157 -16
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/function-references.d.ts +12 -0
- package/dist/ir/function-references.js +29 -0
- package/dist/ir/function-references.js.map +1 -0
- package/dist/ir/function-references.test.d.ts +1 -0
- package/dist/ir/function-references.test.js +277 -0
- package/dist/ir/function-references.test.js.map +1 -0
- package/dist/ir/int32-slots.d.ts +7 -4
- package/dist/ir/int32-slots.js +215 -49
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +38 -1
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-ranges.d.ts +4 -4
- package/dist/ir/integer-ranges.js +89 -64
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +71 -9
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/intrinsic-signatures.js +3 -0
- package/dist/ir/intrinsic-signatures.js.map +1 -1
- package/dist/ir/ir.d.ts +111 -20
- package/dist/ir/ir.js +6 -0
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +1 -0
- package/dist/ir/runtime-features.js +38 -3
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/scalar-records.js +1 -2
- package/dist/ir/scalar-records.js.map +1 -1
- package/dist/ir/traverse.js +4 -0
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +201 -25
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +90 -7
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/ir-policy.js +1 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/native/sanitizer.test.js +1 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +159 -17
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regions.js","sourceRoot":"","sources":["../../../src/backend/llvm/regions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { expect, test } from "vitest";
|
|
2
|
+
import { F64, STRING, VOID } from "../../ir/ir.js";
|
|
3
|
+
import { validateModule } from "../../ir/validate.js";
|
|
4
|
+
import { emitLlvmModule } from "./emitter.js";
|
|
5
|
+
import { mangleClassNew, mangleClassRelease, mangleClassRetain, mangleClassStruct, mangleRecordRelease, mangleRecordStruct, } from "../mangle.js";
|
|
6
|
+
const loc = { file: "regions.ts", start: 0, end: 1 };
|
|
7
|
+
const node = { kind: "object", className: "Node" };
|
|
8
|
+
const leaf = { kind: "object", className: "Leaf" };
|
|
9
|
+
const owner = { kind: "object", className: "Owner" };
|
|
10
|
+
const tagged = { kind: "object", className: "Tagged" };
|
|
11
|
+
const span = { kind: "record", shapeId: "span" };
|
|
12
|
+
/** A ProgramLifetime hierarchy (Node, Leaf), an ordinary hierarchy that
|
|
13
|
+
* holds instances of it (Owner, Tagged), a record that holds one, and a
|
|
14
|
+
* class that cannot reach any (Label). */
|
|
15
|
+
function module(body = [], lifetimeRegions = true) {
|
|
16
|
+
return {
|
|
17
|
+
irVersion: 16,
|
|
18
|
+
sourceFile: loc.file,
|
|
19
|
+
entry: "main",
|
|
20
|
+
...(lifetimeRegions ? { lifetimeRegions: true } : {}),
|
|
21
|
+
functions: [
|
|
22
|
+
{
|
|
23
|
+
name: "main",
|
|
24
|
+
params: [],
|
|
25
|
+
returnType: VOID,
|
|
26
|
+
locals: [],
|
|
27
|
+
body: body.map((expr) => ({ kind: "exprStmt", expr, loc })),
|
|
28
|
+
loc,
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
classes: [
|
|
32
|
+
{
|
|
33
|
+
name: "Node",
|
|
34
|
+
fields: [
|
|
35
|
+
{ name: "parent", type: node },
|
|
36
|
+
{ name: "kids", type: { kind: "array", elem: node } },
|
|
37
|
+
{ name: "name", type: STRING },
|
|
38
|
+
{ name: "span", type: span },
|
|
39
|
+
],
|
|
40
|
+
methods: [],
|
|
41
|
+
loc,
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: "Leaf",
|
|
45
|
+
base: "Node",
|
|
46
|
+
fields: [
|
|
47
|
+
{ name: "parent", type: node },
|
|
48
|
+
{ name: "kids", type: { kind: "array", elem: node } },
|
|
49
|
+
{ name: "name", type: STRING },
|
|
50
|
+
{ name: "span", type: span },
|
|
51
|
+
{ name: "value", type: F64 },
|
|
52
|
+
],
|
|
53
|
+
methods: [],
|
|
54
|
+
loc,
|
|
55
|
+
},
|
|
56
|
+
{ name: "Owner", fields: [{ name: "label", type: STRING }], methods: [], loc },
|
|
57
|
+
{
|
|
58
|
+
name: "Tagged",
|
|
59
|
+
base: "Owner",
|
|
60
|
+
fields: [
|
|
61
|
+
{ name: "label", type: STRING },
|
|
62
|
+
{ name: "target", type: leaf },
|
|
63
|
+
],
|
|
64
|
+
methods: [],
|
|
65
|
+
loc,
|
|
66
|
+
},
|
|
67
|
+
{ name: "Label", fields: [{ name: "text", type: STRING }], methods: [], loc },
|
|
68
|
+
{ name: "Holder", fields: [{ name: "owner", type: owner }], methods: [], loc },
|
|
69
|
+
],
|
|
70
|
+
records: [
|
|
71
|
+
{
|
|
72
|
+
id: "span",
|
|
73
|
+
fields: [
|
|
74
|
+
{ name: "end", type: F64 },
|
|
75
|
+
{ name: "owner", type: tagged },
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
contracts: { programLifetime: ["Node"] },
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function body(llvm, name) {
|
|
83
|
+
return (new RegExp(`^define internal [a-z]+ @${name.replace(/[.$]/g, "\\$&")}\\([^]*?^}`, "m").exec(llvm)?.[0] ?? "");
|
|
84
|
+
}
|
|
85
|
+
test("programs without regions keep ProgramLifetime's empty counts and emit no region code", () => {
|
|
86
|
+
const llvm = emitLlvmModule(module([], false), { pointerBits: 64 });
|
|
87
|
+
expect(llvm).not.toMatch(/scr_region|sc_rgn_types|\.rcur|\.rcls|\.rvisit|\.rwalk|\.rown/);
|
|
88
|
+
expect(body(llvm, mangleClassRetain("Node"))).toMatch(/entry:\n {2}ret ptr %o\n}/);
|
|
89
|
+
expect(body(llvm, mangleClassRelease("Leaf"))).toMatch(/entry:\n {2}ret void\n}/);
|
|
90
|
+
});
|
|
91
|
+
test("ProgramLifetime instances live in the current region and count in their chunk", () => {
|
|
92
|
+
const llvm = emitLlvmModule(module(), { pointerBits: 64 });
|
|
93
|
+
for (const cls of ["Node", "Leaf"]) {
|
|
94
|
+
const struct = mangleClassStruct(cls);
|
|
95
|
+
// new: the cursor fast path, the runtime's slow path, and the
|
|
96
|
+
// program-lifetime count publication still reads.
|
|
97
|
+
const nw = body(llvm, mangleClassNew(cls));
|
|
98
|
+
expect(nw, cls).toContain(`load ptr, ptr @${struct}.rcur`);
|
|
99
|
+
expect(nw, cls).toContain(`call ptr @scr_region_alloc(ptr @${struct}.rcur, ptr @${struct}.rcls)`);
|
|
100
|
+
// The first reference is implied: allocation leaves the chunk count alone.
|
|
101
|
+
expect(nw, cls).not.toContain("2097151");
|
|
102
|
+
expect(nw, cls).toContain("store i64 -9223372036854775808, ptr %o");
|
|
103
|
+
expect(nw, cls).not.toContain("scr_rt_calloc");
|
|
104
|
+
// retain/release: the chunk count, NULL-tolerant, once a region
|
|
105
|
+
// exists, and only in chunks that have an owner (freeable regions).
|
|
106
|
+
expect(body(llvm, mangleClassRetain(cls)), cls).toMatch(/%on = load i8, ptr @scr_region_counting, !tbaa !\d+\n {2}%idle = icmp eq i8 %on, 0/);
|
|
107
|
+
expect(body(llvm, mangleClassRetain(cls)), cls).toContain("%mine = icmp ne ptr %owner, null");
|
|
108
|
+
expect(body(llvm, mangleClassRetain(cls)), cls).toMatch(/add i64 %n, 1/);
|
|
109
|
+
expect(body(llvm, mangleClassRelease(cls)), cls).toMatch(/sub i64 %n, 1/);
|
|
110
|
+
expect(body(llvm, mangleClassRelease(cls)), cls).toContain("icmp eq ptr %o, null");
|
|
111
|
+
expect(llvm, cls).toMatch(new RegExp(`@${struct}\\.rcur = internal global \\{ ptr, ptr \\} zeroinitializer`));
|
|
112
|
+
}
|
|
113
|
+
// The visit reports region references by address, ordinary references
|
|
114
|
+
// with the release entry point the runtime knows them by; strings cannot
|
|
115
|
+
// reach the region and are not reported.
|
|
116
|
+
const visit = body(llvm, `${mangleClassStruct("Leaf")}.rvisit`);
|
|
117
|
+
expect(visit).toContain("call void @scr_region_ref(ptr %w, ptr %v0) ; parent");
|
|
118
|
+
expect(visit).toContain("call void @scr_region_slot(ptr %w, ptr %v1, ptr @scr_arr_release_v) ; kids");
|
|
119
|
+
expect(visit).toContain(`call void @scr_region_slot(ptr %w, ptr %v3, ptr @${mangleRecordRelease("span")}) ; span`);
|
|
120
|
+
expect(visit).not.toContain("; name");
|
|
121
|
+
// The fields-release releases every reference field, strings included.
|
|
122
|
+
const release = body(llvm, `${mangleClassStruct("Leaf")}.rrelease`);
|
|
123
|
+
for (const field of ["parent", "kids", "name", "span"])
|
|
124
|
+
expect(release).toContain(`; ${field}`);
|
|
125
|
+
});
|
|
126
|
+
test("walkers cover the ordinary classes and records that can reach a region", () => {
|
|
127
|
+
const llvm = emitLlvmModule(module(), { pointerBits: 64 });
|
|
128
|
+
// Owner itself holds nothing, but a field typed Owner may hold a Tagged:
|
|
129
|
+
// its walker dispatches on the dynamic class.
|
|
130
|
+
const owner = body(llvm, `${mangleClassStruct("Owner")}.rwalk`);
|
|
131
|
+
expect(owner).toMatch(/switch i64 %pre, label %done \[ i64 \d+, label %c\d+ \]/);
|
|
132
|
+
expect(owner).toContain(`call void @${mangleClassStruct("Tagged")}.rown(ptr %o, ptr %w)`);
|
|
133
|
+
expect(llvm).not.toContain(`@${mangleClassStruct("Owner")}.rown(`);
|
|
134
|
+
expect(body(llvm, `${mangleClassStruct("Tagged")}.rown`)).toContain("call void @scr_region_ref(ptr %w, ptr %v1) ; target");
|
|
135
|
+
expect(body(llvm, `${mangleRecordStruct("span")}.rwalk`)).toContain(`call void @scr_region_slot(ptr %w, ptr %v1, ptr @${mangleClassRelease("Tagged")}) ; owner`);
|
|
136
|
+
// Classes that cannot reach the region are not walked.
|
|
137
|
+
expect(llvm).not.toContain(`${mangleClassStruct("Label")}.rwalk`);
|
|
138
|
+
// The table: region classes by release, then walkers.
|
|
139
|
+
const table = /^@sc_rgn_types = internal constant .*$/m.exec(llvm)?.[0] ?? "";
|
|
140
|
+
expect(table).toContain(`{ ptr @${mangleClassRelease("Node")}, ptr null }`);
|
|
141
|
+
expect(table).toContain(`{ ptr @${mangleClassRelease("Leaf")}, ptr null }`);
|
|
142
|
+
expect(table).toContain(`{ ptr @${mangleClassRelease("Owner")}, ptr @${mangleClassStruct("Owner")}.rwalk }`);
|
|
143
|
+
expect(table).toContain(`{ ptr @${mangleClassRelease("Holder")}, ptr @${mangleClassStruct("Holder")}.rown }`);
|
|
144
|
+
expect(table).toContain(`{ ptr @${mangleRecordRelease("span")}, ptr @${mangleRecordStruct("span")}.rwalk }`);
|
|
145
|
+
expect(table).not.toContain(mangleClassRelease("Label"));
|
|
146
|
+
expect(table).toMatch(/\{ ptr, ptr \} zeroinitializer \] ; region type table$/);
|
|
147
|
+
});
|
|
148
|
+
test("worker executables count only their own chunks", () => {
|
|
149
|
+
const llvm = emitLlvmModule({ ...module(), workers: true }, { pointerBits: 64 });
|
|
150
|
+
const retain = body(llvm, mangleClassRetain("Node"));
|
|
151
|
+
expect(retain).toContain("load atomic i8, ptr @scr_region_counting unordered, align 1");
|
|
152
|
+
expect(retain).toContain("call ptr @llvm.threadlocal.address.p0(ptr @scr_thread_hot)");
|
|
153
|
+
expect(retain).toMatch(/icmp eq ptr %owner, %self\n {2}br i1 %mine, label %count, label %done/);
|
|
154
|
+
expect(llvm).toMatch(/@sc_o_Node\.rcur = internal thread_local(\(localexec\))? global/);
|
|
155
|
+
});
|
|
156
|
+
test("LifetimeRegion's intrinsics call the runtime", () => {
|
|
157
|
+
const id = { kind: "intrinsic", name: "region.create", args: [], type: F64, loc };
|
|
158
|
+
const calls = [
|
|
159
|
+
{ kind: "intrinsic", name: "region.enter", args: [id], type: VOID, loc },
|
|
160
|
+
{ kind: "intrinsic", name: "region.leave", args: [], type: VOID, loc },
|
|
161
|
+
{ kind: "intrinsic", name: "region.release", args: [id], type: VOID, loc },
|
|
162
|
+
];
|
|
163
|
+
expect(validateModule(module(calls))).toEqual([]);
|
|
164
|
+
const llvm = emitLlvmModule(module(calls), { pointerBits: 64 });
|
|
165
|
+
const main = body(llvm, "main") || llvm;
|
|
166
|
+
expect(main).toMatch(/call double @scr_region_create\(ptr @sc_rgn_types\)/);
|
|
167
|
+
expect(main).toMatch(/call void @scr_region_enter\(double %\S+\)/);
|
|
168
|
+
expect(main).toContain("call void @scr_region_leave()");
|
|
169
|
+
expect(main).toMatch(/call void @scr_region_release\(double %\S+\)/);
|
|
170
|
+
// Region intrinsics need a module that uses regions.
|
|
171
|
+
expect(validateModule(module(calls, false)).map((e) => e.message)).toContain("in main: region.enter outside a lifetimeRegions module");
|
|
172
|
+
});
|
|
173
|
+
//# sourceMappingURL=regions.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regions.test.js","sourceRoot":"","sources":["../../../src/backend/llvm/regions.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Containers store erased adapters; shape helpers retain, release and trace
|
|
3
3
|
* their fields. Every allocation has a size_t reference count at offset zero
|
|
4
4
|
* and participates in the runtime allocation audit. */
|
|
5
|
-
import type { IrModule, IrRecordShape, IrType } from "../../ir/ir.js";
|
|
5
|
+
import type { IrClassDef, IrModule, IrRecordShape, IrType } from "../../ir/ir.js";
|
|
6
6
|
import type { NullableUnions } from "./nullable-unions.js";
|
|
7
7
|
/** What the tables need from the emitter: the extern-declaration ledger
|
|
8
8
|
* and the module-wide cycle/shape indexes. */
|
|
@@ -12,8 +12,8 @@ export interface ShapeHost {
|
|
|
12
12
|
needOom(): void;
|
|
13
13
|
/** The target C ABI's `size_t` / refcount integer type. */
|
|
14
14
|
readonly sizeType: "i32" | "i64";
|
|
15
|
-
/** Byte offset from an object pointer back to ScrCycHdr.
|
|
16
|
-
readonly
|
|
15
|
+
/** Byte offset from an object pointer back to ScrCycHdr.buf. */
|
|
16
|
+
readonly cycleBufOffset: number;
|
|
17
17
|
readonly tracedShapes: Set<string>;
|
|
18
18
|
readonly tracedUnions: Set<string>;
|
|
19
19
|
/** Unions represented as a nullable arm pointer (nullable-unions.ts):
|
|
@@ -21,6 +21,14 @@ export interface ShapeHost {
|
|
|
21
21
|
readonly nullableUnions: NullableUnions;
|
|
22
22
|
readonly recordsById: Map<string, IrRecordShape>;
|
|
23
23
|
readonly recordCloneShapes: ReadonlySet<string>;
|
|
24
|
+
/** The program constructs lifetime regions: the ProgramLifetime classes
|
|
25
|
+
* allocate in regions and count references in their region chunk instead
|
|
26
|
+
* of being empty (llvm/regions.ts). */
|
|
27
|
+
regions?: RegionHooks | null;
|
|
28
|
+
/** The alias tag of a runtime word that lifetime-region code reads and
|
|
29
|
+
* writes outside every field: the chunk count, the chunk owner, the class
|
|
30
|
+
* cursors and scr_region_counting (", !tbaa !N", or "" in debug builds). */
|
|
31
|
+
regionAliasTag?(word: "count" | "owner" | "cursor" | "counting"): string;
|
|
24
32
|
/** Emit the live-object audit notes (`scr_obj_alloc_note` /
|
|
25
33
|
* `scr_obj_free_note`) in emitted new/free helpers. Only runtimes built
|
|
26
34
|
* with SCR_RC_AUDIT (the sanitized lane) count them; release and dev
|
|
@@ -42,6 +50,14 @@ export interface ShapeHost {
|
|
|
42
50
|
* Absent: every descriptor gets 0, which keeps no statistics. */
|
|
43
51
|
nextCycKind?(): number;
|
|
44
52
|
}
|
|
53
|
+
/** What class emission asks of lifetime regions (LifetimeRegions in
|
|
54
|
+
* llvm/regions.ts): the retain and release bodies, the allocation lines of
|
|
55
|
+
* `new` (the instance in `%o`), and a class's region definitions. */
|
|
56
|
+
export interface RegionHooks {
|
|
57
|
+
rcBody(fnName: string, ret: "ptr" | "void", comment: string): string[];
|
|
58
|
+
newAlloc(className: string, sizeOf: string): string[];
|
|
59
|
+
classDefinitions(cls: IrClassDef, sizeOf: string): string[];
|
|
60
|
+
}
|
|
45
61
|
/** Every emitted function/helper carries #0 = { sanitize_address } — see
|
|
46
62
|
* the emitter header. */
|
|
47
63
|
export declare const FN_ATTRS = "#0";
|
|
@@ -133,7 +149,10 @@ export declare function elemAccess(elem: IrType): "f64" | "bool" | "ref";
|
|
|
133
149
|
* SCR_ELEM_ARR spelling would hide them from the outer array's trace)
|
|
134
150
|
* construct through scr_arr_new_ops with the element type's `_v` RC entry
|
|
135
151
|
* points; every other element kind keeps the plain scr_arr_new call. */
|
|
136
|
-
export declare function arrNewCall(host: ShapeHost, elem: IrType, capText: string
|
|
152
|
+
export declare function arrNewCall(host: ShapeHost, elem: IrType, capText: string,
|
|
153
|
+
/** An empty array expected to receive a few elements (its first slots
|
|
154
|
+
* live in its own block): capText must be "0". */
|
|
155
|
+
small?: boolean): string;
|
|
137
156
|
/** The constant %ScrArrOps descriptor (retain, release, trace) of a REF
|
|
138
157
|
* element type, defined once per module and shared by all its arrays. */
|
|
139
158
|
export declare function arrOps(host: ShapeHost, elem: IrType): string;
|
|
@@ -156,6 +175,14 @@ export declare function mapKeyParamType(access: MapKeyAccess): string;
|
|
|
156
175
|
/** The ScrMapKeyKind / ScrMapValKind constants for scr_map_new. */
|
|
157
176
|
export declare function mapKeyKindNum(key: IrType, unionArms?: IrType[]): number;
|
|
158
177
|
export declare function mapValKindNum(value: IrType): number;
|
|
178
|
+
/** The RC-relevant members of a shape: every field, plus the overflow map
|
|
179
|
+
* on index-signature shapes (one more map-typed member). `index` is the
|
|
180
|
+
* member's field position in the emitted struct type (rc header at 0). */
|
|
181
|
+
export declare function rcMembers(shape: IrRecordShape): {
|
|
182
|
+
index: number;
|
|
183
|
+
type: IrType;
|
|
184
|
+
name: string;
|
|
185
|
+
}[];
|
|
159
186
|
/** The NULL- and immortal-skipping retain body shared by every shape. A
|
|
160
187
|
* retain never touches the cycle header: a buffered candidate that is
|
|
161
188
|
* retained again stays a candidate (scr_cycle.c, markRoots). */
|
|
@@ -163,6 +190,41 @@ export declare function retainBody(host: ShapeHost, fnName: string, comment?: st
|
|
|
163
190
|
/** Scalar fields and native strings cannot form recursive ownership chains.
|
|
164
191
|
* Other reference kinds conservatively share the runtime destruction budget. */
|
|
165
192
|
export declare function needsBoundedRelease(type: IrType): boolean;
|
|
193
|
+
/** Typed teardown. A teardown that drops the last reference to a child of a
|
|
194
|
+
* statically known emitted type calls that type's teardown directly instead
|
|
195
|
+
* of going through its out-of-line release and the runtime's generic
|
|
196
|
+
* scr_rc_destroy, so tearing down a tree of one type is one direct call per
|
|
197
|
+
* node. Such teardowns take the length of the direct chain they are in
|
|
198
|
+
* (`_destroy_d(ptr, i32)`; `_destroy(ptr)` starts one at 0 for the runtime),
|
|
199
|
+
* and a chain DIRECT_DESTROY_CHAIN deep hands the next child to
|
|
200
|
+
* scr_rc_destroy, whose depth budget then bounds the stack exactly as
|
|
201
|
+
* before: each of its levels holds at most one direct chain. */
|
|
202
|
+
export declare const DIRECT_DESTROY_CHAIN = 16;
|
|
203
|
+
/** A child type whose teardown a parent teardown can call directly. */
|
|
204
|
+
export interface DirectDestroy {
|
|
205
|
+
/** The child's inlinable release (every reference but the last). */
|
|
206
|
+
readonly release: string;
|
|
207
|
+
/** The child's teardown symbol; `${destroy}_d` takes the chain length. */
|
|
208
|
+
readonly destroy: string;
|
|
209
|
+
/** The child carries a collector header. */
|
|
210
|
+
readonly traced: boolean;
|
|
211
|
+
}
|
|
212
|
+
/** The release of child `value` (a loaded field, possibly NULL) inside a
|
|
213
|
+
* teardown whose chain length is `%d`: the child's own release for a shared
|
|
214
|
+
* or immortal reference, its teardown for the last one. Labels use `tag`;
|
|
215
|
+
* the lines end in the open block `${tag}.next`. */
|
|
216
|
+
export declare function directChildReleaseLines(host: ShapeHost, tag: string, value: string, target: DirectDestroy, comment: string): string[];
|
|
217
|
+
/** The direct-teardown target of a reference of `type`, if `targets` (keyed
|
|
218
|
+
* `record:<id>` / `object:<class>`) has one. Nullable unions hold the arm's
|
|
219
|
+
* pointer, NULL or an immortal sentinel, which the child release handles. */
|
|
220
|
+
export declare function directDestroyTarget(host: ShapeHost, type: IrType, targets: ReadonlyMap<string, DirectDestroy>): DirectDestroy | null;
|
|
221
|
+
/** The direct targets among `candidates` that a field of one of `fieldTypes`
|
|
222
|
+
* refers to: a teardown no parent calls directly keeps its plain form. */
|
|
223
|
+
export declare function usedDirectTargets(host: ShapeHost, candidates: readonly (readonly [string, DirectDestroy])[], fieldTypes: readonly IrType[]): Map<string, DirectDestroy>;
|
|
224
|
+
/** The teardown definitions for `destroy`: with `chained`, the body takes
|
|
225
|
+
* the chain length `%d` (directChildReleaseLines) and the runtime's
|
|
226
|
+
* one-argument entry starts a chain. */
|
|
227
|
+
export declare function destroyDefinitions(destroy: string, body: readonly string[], chained: boolean): string[];
|
|
166
228
|
/** Common NULL/immortal/decrement skeleton for ordinary object releases.
|
|
167
229
|
* `freeBody` owns the zero-ref teardown and must leave the current block at
|
|
168
230
|
* its end; traced objects also get the possible-cycle-root branch.
|
|
@@ -170,7 +232,7 @@ export declare function needsBoundedRelease(type: IrType): boolean;
|
|
|
170
232
|
* `fnName` is only the inlinable fast path (releaseFastPath); the complete
|
|
171
233
|
* release is `${fnName}_slow`, kept out of line so callers that inline the
|
|
172
234
|
* release do not also inline its teardown. */
|
|
173
|
-
export declare function releaseBody(host: ShapeHost, fnName: string, traced: boolean, freeBody: string[], comment?: string, bounded?: boolean, immortal?: boolean): string[];
|
|
235
|
+
export declare function releaseBody(host: ShapeHost, fnName: string, traced: boolean, freeBody: string[], comment?: string, bounded?: boolean, immortal?: boolean, chained?: boolean): string[];
|
|
174
236
|
/** The inlinable half of an object release. A reference that is neither the
|
|
175
237
|
* last one nor immortal (rc - 2 < SIZE_MAX - 2 rules out 0, 1 and SIZE_MAX
|
|
176
238
|
* in one compare) only decrements and, for headered objects, takes the
|
|
@@ -180,9 +242,9 @@ export declare function releaseBody(host: ShapeHost, fnName: string, traced: boo
|
|
|
180
242
|
* (and their destroy calls) into every caller. */
|
|
181
243
|
export declare function releaseFastPath(host: ShapeHost, fnName: string, slow: string, traced: boolean, comment?: string, immortal?: boolean): string[];
|
|
182
244
|
/** The possible-cycle-root step of a release that left a headered object
|
|
183
|
-
* alive: scr_cyc_on_release with its early return inlined.
|
|
184
|
-
* (the
|
|
185
|
-
*
|
|
245
|
+
* alive: scr_cyc_on_release with its early return inlined. Test the sign
|
|
246
|
+
* of `buf` (the i32 at obj-4; negative for a queued candidate or a tenured
|
|
247
|
+
* object) and call the runtime only to enqueue a new candidate.
|
|
186
248
|
* Every emitted release of a headered object shares this sequence
|
|
187
249
|
* (scr_runtime.h asserts the offset); it ends by branching to `done`. */
|
|
188
250
|
/** One traced field of an emitted trace function: load the slot and visit
|