@scriptc/compiler 0.3.1 → 0.3.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 +832 -55
- package/dist/backend/cycle-analysis.js +6 -1
- package/dist/backend/cycle-analysis.js.map +1 -1
- 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 +63 -25
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/alloc.test.js +62 -2
- 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/array-search.d.ts +8 -0
- package/dist/backend/llvm/array-search.js +52 -0
- package/dist/backend/llvm/array-search.js.map +1 -0
- package/dist/backend/llvm/array-search.test.d.ts +1 -0
- package/dist/backend/llvm/array-search.test.js +72 -0
- package/dist/backend/llvm/array-search.test.js.map +1 -0
- package/dist/backend/llvm/call-lifetimes.d.ts +11 -1
- package/dist/backend/llvm/call-lifetimes.js +74 -4
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +54 -0
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/classes.js +97 -38
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +2 -2
- package/dist/backend/llvm/common.d.ts +1 -1
- package/dist/backend/llvm/common.js +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +5 -0
- package/dist/backend/llvm/dense-array-access.js +18 -13
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +15 -2
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +6 -0
- package/dist/backend/llvm/dyn.js +84 -11
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +108 -16
- package/dist/backend/llvm/emitter.js +598 -108
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +26 -3
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +174 -7
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +11 -0
- 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 +96 -2
- 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 +133 -54
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +7 -0
- package/dist/backend/llvm/expr-containers.js +80 -22
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +2 -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-dynamic.js +21 -10
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.d.ts +7 -0
- package/dist/backend/llvm/expr-primitives.js +53 -51
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +19 -5
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.d.ts +8 -0
- package/dist/backend/llvm/expr-stream-bridges.js +111 -39
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +49 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +13 -2
- package/dist/backend/llvm/expr-stream-callbacks.js +80 -5
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/inline-unions.d.ts +48 -0
- package/dist/backend/llvm/inline-unions.js +134 -0
- package/dist/backend/llvm/inline-unions.js.map +1 -0
- package/dist/backend/llvm/inline-unions.test.d.ts +1 -0
- package/dist/backend/llvm/inline-unions.test.js +124 -0
- package/dist/backend/llvm/inline-unions.test.js.map +1 -0
- package/dist/backend/llvm/int32-abi.d.ts +18 -2
- package/dist/backend/llvm/int32-abi.js +23 -2
- package/dist/backend/llvm/int32-abi.js.map +1 -1
- package/dist/backend/llvm/int32-abi.test.js +75 -1
- package/dist/backend/llvm/int32-abi.test.js.map +1 -1
- package/dist/backend/llvm/integer-remainder.d.ts +28 -5
- package/dist/backend/llvm/integer-remainder.js +80 -9
- package/dist/backend/llvm/integer-remainder.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +170 -28
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +181 -5
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +9 -6
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +2 -2
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +208 -9
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +97 -0
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +12 -6
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +6 -3
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.d.ts +26 -2
- package/dist/backend/llvm/local-union-storage.js +132 -12
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +107 -1
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/loop-array-borrows.d.ts +8 -2
- package/dist/backend/llvm/loop-array-borrows.js +93 -13
- package/dist/backend/llvm/loop-array-borrows.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.d.ts +20 -0
- package/dist/backend/llvm/map-number-lookup.js +66 -0
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.d.ts +1 -0
- package/dist/backend/llvm/map-number-lookup.test.js +102 -0
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -0
- package/dist/backend/llvm/map-read-lifetimes.js +1 -0
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +4 -0
- package/dist/backend/llvm/publish.js +3 -1
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/record-results.d.ts +29 -0
- package/dist/backend/llvm/record-results.js +260 -0
- package/dist/backend/llvm/record-results.js.map +1 -0
- package/dist/backend/llvm/reference-effects.js +15 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +29 -9
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/regions.d.ts +68 -0
- package/dist/backend/llvm/regions.js +314 -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/serialized-ir-emission.test.js +2 -0
- package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +86 -13
- package/dist/backend/llvm/shapes.js +208 -54
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +68 -9
- 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 +142 -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 +255 -0
- package/dist/backend/llvm/stack-objects.test.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 +5 -4
- package/dist/backend/llvm/switch-dispatch.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +13 -0
- package/dist/backend/llvm/walkers.js +108 -10
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/may-throw.js +10 -4
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +7 -2
- package/dist/backend/native/executable.js +28 -2
- 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 +3 -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/native-toolchain.test.js +1 -1
- package/dist/backend/native-toolchain.test.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 +17 -0
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +16 -0
- package/dist/backend/target-diagnostics.test.js.map +1 -1
- package/dist/compat/fetch-profile.js +4 -4
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/contracts/check.js +2 -0
- package/dist/contracts/check.js.map +1 -1
- package/dist/coverage/report.js +1 -1
- package/dist/coverage/report.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +6 -5
- package/dist/diagnostics/diagnostic.js +7 -6
- package/dist/diagnostics/diagnostic.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/builtin-modules.d.ts +1 -1
- package/dist/frontend/builtin-modules.js +1 -0
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/comptime-node.js +2 -2
- package/dist/frontend/comptime-node.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/binding-analysis.d.ts +1 -1
- package/dist/frontend/lowering/binding-analysis.js +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/arguments.d.ts +4 -0
- package/dist/frontend/lowering/builtins/arguments.js +8 -4
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/blob.d.ts +20 -0
- package/dist/frontend/lowering/builtins/blob.js +167 -0
- package/dist/frontend/lowering/builtins/blob.js.map +1 -0
- package/dist/frontend/lowering/builtins/child-process-async.d.ts +2 -2
- package/dist/frontend/lowering/builtins/child-process-async.js +2 -2
- package/dist/frontend/lowering/builtins/child-process-methods.js +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/compression.js +3 -2
- package/dist/frontend/lowering/builtins/compression.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/crypto.js +415 -120
- package/dist/frontend/lowering/builtins/crypto.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/filesystem-calls.d.ts +10 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +89 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.d.ts +16 -7
- package/dist/frontend/lowering/builtins/filesystem.js +97 -15
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-glob.d.ts +23 -0
- package/dist/frontend/lowering/builtins/fs-glob.js +224 -0
- package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -0
- 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/key-object.d.ts +13 -0
- package/dist/frontend/lowering/builtins/key-object.js +56 -0
- package/dist/frontend/lowering/builtins/key-object.js.map +1 -0
- package/dist/frontend/lowering/builtins/module-calls.js +60 -12
- 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/performance.d.ts +25 -3
- package/dist/frontend/lowering/builtins/performance.js +340 -5
- package/dist/frontend/lowering/builtins/performance.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +2 -2
- package/dist/frontend/lowering/builtins/process.js +122 -17
- 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/properties.d.ts +0 -7
- package/dist/frontend/lowering/builtins/properties.js +39 -11
- package/dist/frontend/lowering/builtins/properties.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +23 -8
- package/dist/frontend/lowering/builtins/readline.js +266 -90
- package/dist/frontend/lowering/builtins/readline.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/builtins/url.d.ts +8 -0
- package/dist/frontend/lowering/builtins/url.js +36 -0
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.js +1 -1
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +20 -2
- package/dist/frontend/lowering/call-signatures.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 +8 -3
- package/dist/frontend/lowering/class-dynamic-dispatch.js +159 -32
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-protocol-dispatch.d.ts +45 -0
- package/dist/frontend/lowering/class-protocol-dispatch.js +516 -0
- package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -0
- package/dist/frontend/lowering/coercions/structural-plans.js +2 -1
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +3 -3
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/collation-repertoire.js +6 -5
- package/dist/frontend/lowering/collation-repertoire.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +33 -6
- 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-methods.d.ts +0 -7
- package/dist/frontend/lowering/containers/array-methods.js +43 -2
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.js +38 -26
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/for-of.d.ts +1 -1
- package/dist/frontend/lowering/containers/for-of.js +5 -1
- package/dist/frontend/lowering/containers/for-of.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +91 -0
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
- package/dist/frontend/lowering/crypto-tables.js +77 -12
- package/dist/frontend/lowering/crypto-tables.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/expressions/nullish-assignment.js +10 -0
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +21 -68
- 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/generic-functions.d.ts +2 -2
- package/dist/frontend/lowering/generic-functions.js +2 -2
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/http2-constants.js +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 +40 -3
- package/dist/frontend/lowering/lower-array-sort.js +661 -194
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.test.js +103 -4
- package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +2 -2
- package/dist/frontend/lowering/lower-async-iteration.d.ts +6 -3
- package/dist/frontend/lowering/lower-async-iteration.js +248 -2
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +173 -111
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +12 -5
- package/dist/frontend/lowering/lower-classes.js +156 -11
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-comptime.d.ts +1 -1
- package/dist/frontend/lowering/lower-comptime.js +4 -4
- package/dist/frontend/lowering/lower-comptime.js.map +1 -1
- package/dist/frontend/lowering/lower-console.d.ts +13 -0
- package/dist/frontend/lowering/lower-console.js +460 -4
- package/dist/frontend/lowering/lower-console.js.map +1 -1
- 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-event-target.d.ts +63 -0
- package/dist/frontend/lowering/lower-event-target.js +362 -0
- package/dist/frontend/lowering/lower-event-target.js.map +1 -0
- package/dist/frontend/lowering/lower-expando.js +2 -2
- package/dist/frontend/lowering/lower-exprs.js +247 -42
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.d.ts +15 -7
- package/dist/frontend/lowering/lower-generators.js +183 -99
- 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 +247 -28
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.js +1 -1
- package/dist/frontend/lowering/lower-modules.d.ts +1 -1
- package/dist/frontend/lowering/lower-modules.js +27 -17
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +2 -2
- package/dist/frontend/lowering/lower-namespaces.js +2 -2
- package/dist/frontend/lowering/lower-server.js +39 -14
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +11 -1
- package/dist/frontend/lowering/lower-stdlib.js +45 -4
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +2 -2
- package/dist/frontend/lowering/lower-stmts.js +112 -23
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +234 -22
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +45 -6
- package/dist/frontend/lowering/lowerer.js +360 -48
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.js +2 -2
- package/dist/frontend/lowering/native-ffi.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-records.d.ts +115 -0
- package/dist/frontend/lowering/runtime-optional-records.js +715 -0
- package/dist/frontend/lowering/runtime-optional-records.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-records.test.d.ts +1 -0
- package/dist/frontend/lowering/runtime-optional-records.test.js +175 -0
- package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +7 -3
- package/dist/frontend/lowering/surfaces.js +385 -32
- package/dist/frontend/lowering/surfaces.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/module-syntax.d.ts +1 -1
- package/dist/frontend/module-syntax.js +1 -1
- package/dist/frontend/npm-static-prune.js +1 -1
- package/dist/frontend/npm-static-prune.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-syntax.js +4 -3
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
- package/dist/frontend/pipeline.js +6 -4
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program.d.ts +6 -5
- package/dist/frontend/program.js +42 -22
- 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/resolve.js +1 -1
- package/dist/frontend/ts7/adapter.js +1 -1
- package/dist/frontend/ts7/ast-bytes.d.ts +1 -1
- package/dist/frontend/ts7/ast-bytes.js +1 -1
- package/dist/frontend/ts7/semantic-json.d.ts +1 -1
- package/dist/frontend/ts7/semantic-json.js +1 -1
- package/dist/frontend/ts7/semantic-json.js.map +1 -1
- package/dist/frontend/ts7/world-check.js +1 -1
- package/dist/frontend/tsc-codes.js +2 -2
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +28 -1
- package/dist/frontend/type-mapper.js +288 -30
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.d.ts +12 -6
- package/dist/ir/analysis.js +26 -10
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/analysis.test.js +15 -3
- package/dist/ir/analysis.test.js.map +1 -1
- package/dist/ir/builtin-effects.js +108 -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 +436 -53
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/function-references.test.js +1 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/int32-slots.js +2 -0
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/intrinsic-signatures.js +2 -0
- package/dist/ir/intrinsic-signatures.js.map +1 -1
- package/dist/ir/ir.d.ts +129 -36
- package/dist/ir/ir.js +42 -1
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +1 -0
- package/dist/ir/runtime-features.js +116 -5
- 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/serialize.js +1 -1
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/traverse.js +1 -0
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +250 -34
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +125 -0
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/fence-eval.d.ts +1 -1
- package/dist/library/fence-eval.js +5 -4
- package/dist/library/fence-eval.js.map +1 -1
- package/dist/library/ir-policy.js +11 -4
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-profile.js +13 -13
- package/dist/library/library-profile.js.map +1 -1
- package/dist/library/prepare.js +1 -1
- package/dist/library/prepare.js.map +1 -1
- package/dist/library/sidecar.js +3 -3
- package/dist/library/sidecar.js.map +1 -1
- package/dist/native/prepare.js +3 -2
- package/dist/native/prepare.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 +537 -142
|
@@ -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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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { inlineRcOption } from "./shapes.js";
|
|
1
2
|
import { mkdtempSync, readFileSync, rmSync } from "node:fs";
|
|
2
3
|
import { tmpdir } from "node:os";
|
|
3
4
|
import { join } from "node:path";
|
|
@@ -39,6 +40,7 @@ test("sort-heavy programs emit equal LLVM from memory and from serialized IR", a
|
|
|
39
40
|
wasi: false,
|
|
40
41
|
runtimeAbiMarker: false,
|
|
41
42
|
objectAudit: sanitize,
|
|
43
|
+
...inlineRcOption(options.optimization, sanitize),
|
|
42
44
|
});
|
|
43
45
|
const text = typeof emitted === "string" ? emitted : emitted.join("");
|
|
44
46
|
expect(text === readFileSync(llvmPath, "utf8"), label).toBe(true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialized-ir-emission.test.js","sourceRoot":"","sources":["../../../src/backend/llvm/serialized-ir-emission.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;AAEzD,6EAA6E;AAC7E,2EAA2E;AAC3E,8EAA8E;AAC9E,4EAA4E;AAC5E,+DAA+D;AAC/D,IAAI,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;IACxF,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAClE,IAAI,CAAC;QACH,KAAK,MAAM,QAAQ,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;YACrC,KAAK,MAAM,IAAI,IAAI;gBACjB,oBAAoB;gBACpB,4BAA4B;gBAC5B,2BAA2B;aAC5B,EAAE,CAAC;gBACF,MAAM,KAAK,GAAG,GAAG,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACxD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;gBAC/C,MAAM,OAAO,GAAG;oBACd,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,MAAe;oBACxB,YAAY,EAAE,SAAkB;oBAChC,QAAQ;iBACT,CAAC;gBACF,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;gBAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,UAAU,CAAC,CAAC;gBAClD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;gBACzF,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClC,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnF,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChC,MAAM,OAAO,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE;oBACpF,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE;oBACjD,WAAW,EAAE,EAAE;oBACf,IAAI,EAAE,KAAK;oBACX,gBAAgB,EAAE,KAAK;oBACvB,WAAW,EAAE,QAAQ;
|
|
1
|
+
{"version":3,"file":"serialized-ir-emission.test.js","sourceRoot":"","sources":["../../../src/backend/llvm/serialized-ir-emission.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,25 +2,43 @@
|
|
|
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
|
+
import type { BlockBuilder } from "./blocks.js";
|
|
6
7
|
import type { NullableUnions } from "./nullable-unions.js";
|
|
8
|
+
import { INLINE_UNION_FIELD, type InlineUnionFields } from "./inline-unions.js";
|
|
7
9
|
/** What the tables need from the emitter: the extern-declaration ledger
|
|
8
10
|
* and the module-wide cycle/shape indexes. */
|
|
9
11
|
export interface ShapeHost {
|
|
10
12
|
declare(decl: string): void;
|
|
13
|
+
/** The hierarchy root of a class (a program class or a runtime base),
|
|
14
|
+
* or undefined for classes outside the class graph. */
|
|
15
|
+
classRootOf?(className: string): string | undefined;
|
|
11
16
|
/** Request the shared OOM abort helper (@sc_oom) — emitted once. */
|
|
12
17
|
needOom(): void;
|
|
13
18
|
/** The target C ABI's `size_t` / refcount integer type. */
|
|
14
19
|
readonly sizeType: "i32" | "i64";
|
|
15
|
-
/** Byte offset from an object pointer back to ScrCycHdr.
|
|
16
|
-
readonly
|
|
20
|
+
/** Byte offset from an object pointer back to ScrCycHdr.buf. */
|
|
21
|
+
readonly cycleBufOffset: number;
|
|
17
22
|
readonly tracedShapes: Set<string>;
|
|
18
23
|
readonly tracedUnions: Set<string>;
|
|
19
24
|
/** Unions represented as a nullable arm pointer (nullable-unions.ts):
|
|
20
25
|
* their RC and trace entry points are the arm's NULL-tolerant ones. */
|
|
21
26
|
readonly nullableUnions: NullableUnions;
|
|
27
|
+
/** Record and class fields that store a scalar union's tag and bits
|
|
28
|
+
* inline (inline-unions.ts): they own nothing. */
|
|
29
|
+
readonly inlineUnions: InlineUnionFields;
|
|
30
|
+
/** The zeroed `%ScrUnion` an inline store reads for a NULL dummy. */
|
|
31
|
+
unionNoneRef(): string;
|
|
22
32
|
readonly recordsById: Map<string, IrRecordShape>;
|
|
23
33
|
readonly recordCloneShapes: ReadonlySet<string>;
|
|
34
|
+
/** The program constructs lifetime regions: the ProgramLifetime classes
|
|
35
|
+
* allocate in regions and count references in their region chunk instead
|
|
36
|
+
* of being empty (llvm/regions.ts). */
|
|
37
|
+
regions?: RegionHooks | null;
|
|
38
|
+
/** The alias tag of a runtime word that lifetime-region code reads and
|
|
39
|
+
* writes outside every field: the chunk count, the chunk owner, the class
|
|
40
|
+
* cursors and scr_region_counting (", !tbaa !N", or "" in debug builds). */
|
|
41
|
+
regionAliasTag?(word: "count" | "owner" | "cursor" | "counting"): string;
|
|
24
42
|
/** Emit the live-object audit notes (`scr_obj_alloc_note` /
|
|
25
43
|
* `scr_obj_free_note`) in emitted new/free helpers. Only runtimes built
|
|
26
44
|
* with SCR_RC_AUDIT (the sanitized lane) count them; release and dev
|
|
@@ -33,15 +51,26 @@ export interface ShapeHost {
|
|
|
33
51
|
readonly threadLocalAlloc?: boolean;
|
|
34
52
|
/** Inline RC fast-path helpers requested so far ("<family>:<op>"); the
|
|
35
53
|
* emitter defines each once through {@link emitInlineRcHelpers}. Null
|
|
36
|
-
* keeps every retain/release a runtime call
|
|
37
|
-
* size-for-speed optimization of the `speed` posture only. */
|
|
54
|
+
* keeps every retain/release a runtime call. */
|
|
38
55
|
readonly rcHelpers: Set<string> | null;
|
|
56
|
+
/** Which fast paths are inlined (see {@link InlineRcMode}). */
|
|
57
|
+
readonly rcMode?: InlineRcMode;
|
|
58
|
+
/** Define the fast-path helpers `noinline` (see {@link inlineRcOption}). */
|
|
59
|
+
readonly rcHelpersNoinline?: boolean;
|
|
39
60
|
/** The next collector statistics index for an emitted ScrCycType
|
|
40
61
|
* descriptor (cycTypeDescriptor), counting from FIRST_EMITTED_CYC_KIND
|
|
41
62
|
* in emission order.
|
|
42
63
|
* Absent: every descriptor gets 0, which keeps no statistics. */
|
|
43
64
|
nextCycKind?(): number;
|
|
44
65
|
}
|
|
66
|
+
/** What class emission asks of lifetime regions (LifetimeRegions in
|
|
67
|
+
* llvm/regions.ts): the retain and release bodies, the allocation lines of
|
|
68
|
+
* `new` (the instance in `%o`), and a class's region definitions. */
|
|
69
|
+
export interface RegionHooks {
|
|
70
|
+
rcBody(fnName: string, ret: "ptr" | "void", comment: string): string[];
|
|
71
|
+
newAlloc(className: string, sizeOf: string): string[];
|
|
72
|
+
classDefinitions(cls: IrClassDef, sizeOf: string): string[];
|
|
73
|
+
}
|
|
45
74
|
/** Every emitted function/helper carries #0 = { sanitize_address } — see
|
|
46
75
|
* the emitter header. */
|
|
47
76
|
export declare const FN_ATTRS = "#0";
|
|
@@ -90,8 +119,11 @@ interface InlineRcFamily {
|
|
|
90
119
|
* collector's on_dead bookkeeping) stays in the runtime release, which
|
|
91
120
|
* repeats its own checks, so the fast path never duplicates it.
|
|
92
121
|
*
|
|
122
|
+
* The dyn release buffers a surviving value by kind (scr_dyn_release):
|
|
123
|
+
* the fast path decides the always and never cases and calls
|
|
124
|
+
* scr_dyn_release_survivor for kinds whose candidacy is per value.
|
|
125
|
+
*
|
|
93
126
|
* Releases stay plain calls for:
|
|
94
|
-
* - dyn: scr_dyn_release buffers a surviving object only for some kinds.
|
|
95
127
|
* - arr: array releases are the most numerous release sites and the
|
|
96
128
|
* least hot (at most 1% self time across the benchmark suite), and
|
|
97
129
|
* inlining them roughly doubled the code growth for no measured speedup.
|
|
@@ -100,10 +132,34 @@ export declare const INLINE_RC_FAMILIES: Readonly<Record<string, InlineRcFamily>
|
|
|
100
132
|
type RcOp = "retain" | "release";
|
|
101
133
|
/** The mirrored family for an RC operation on a runtime stem (`scr_str`),
|
|
102
134
|
* or null when it stays a call. */
|
|
103
|
-
export declare function inlineRcFamily(stem: string, op: RcOp): InlineRcFamily | null;
|
|
135
|
+
export declare function inlineRcFamily(host: ShapeHost, stem: string, op: RcOp): InlineRcFamily | null;
|
|
136
|
+
/** Which RC fast paths an emission inlines. `speed` mirrors every family
|
|
137
|
+
* with a fast path. `release` mirrors only the string retain and the dyn
|
|
138
|
+
* retain and release: the operations that dominate dynamic-value and string
|
|
139
|
+
* code, at almost no size cost. String releases stay calls in `release`
|
|
140
|
+
* because string-heavy programs have many release sites. */
|
|
141
|
+
export type InlineRcMode = "release" | "speed";
|
|
142
|
+
/** The emitter's inline RC option for a native optimization posture: none
|
|
143
|
+
* at `dev`, the `release` subset by default. Sanitized builds compile the
|
|
144
|
+
* whole program in one AddressSanitizer pass, whose time grows with every
|
|
145
|
+
* inlined fast path, so they call the same helpers out of line. */
|
|
146
|
+
export declare function inlineRcOption(optimization: string | undefined, sanitize?: boolean): {
|
|
147
|
+
inlineRc?: InlineRcMode;
|
|
148
|
+
rcHelpersNoinline?: true;
|
|
149
|
+
};
|
|
104
150
|
/** The release call target for a capture box: scr_box_release's fast path,
|
|
105
151
|
* or scr_box_release itself without inline RC. */
|
|
106
152
|
export declare function boxReleaseSym(host: ShapeHost): string;
|
|
153
|
+
/** Inlined dyn releases one function body keeps. LLVM's optimization time
|
|
154
|
+
* grows faster than the number of inlined releases in one function, and
|
|
155
|
+
* generated dispatch tables and module initializers of large packages have
|
|
156
|
+
* thousands of release sites; a body with more calls scr_dyn_release, which
|
|
157
|
+
* the inline helper mirrors, at every site. */
|
|
158
|
+
export declare const INLINE_DYN_RELEASES_PER_FUNCTION = 256;
|
|
159
|
+
/** Apply {@link INLINE_DYN_RELEASES_PER_FUNCTION} to each function of an
|
|
160
|
+
* emitted module, given as parts joined by newlines. A function can span
|
|
161
|
+
* parts (main's lines) and a part can hold several functions. */
|
|
162
|
+
export declare function limitInlineDynReleases(parts: readonly string[]): string[];
|
|
107
163
|
export declare function inlineRcDecls(host: ShapeHost): string[];
|
|
108
164
|
/** Definitions for every requested inline RC helper, in a stable order.
|
|
109
165
|
*
|
|
@@ -133,7 +189,10 @@ export declare function elemAccess(elem: IrType): "f64" | "bool" | "ref";
|
|
|
133
189
|
* SCR_ELEM_ARR spelling would hide them from the outer array's trace)
|
|
134
190
|
* construct through scr_arr_new_ops with the element type's `_v` RC entry
|
|
135
191
|
* points; every other element kind keeps the plain scr_arr_new call. */
|
|
136
|
-
export declare function arrNewCall(host: ShapeHost, elem: IrType, capText: string
|
|
192
|
+
export declare function arrNewCall(host: ShapeHost, elem: IrType, capText: string,
|
|
193
|
+
/** An empty array expected to receive a few elements (its first slots
|
|
194
|
+
* live in its own block): capText must be "0". */
|
|
195
|
+
small?: boolean): string;
|
|
137
196
|
/** The constant %ScrArrOps descriptor (retain, release, trace) of a REF
|
|
138
197
|
* element type, defined once per module and shared by all its arrays. */
|
|
139
198
|
export declare function arrOps(host: ShapeHost, elem: IrType): string;
|
|
@@ -145,8 +204,13 @@ export declare function boxNewCall(host: ShapeHost, t: IrType): string;
|
|
|
145
204
|
/** Box accessor suffix (boxAccess): scalars unboxed, ref kinds pointers. */
|
|
146
205
|
export declare function boxAccess(t: IrType): "f64" | "bool" | "ref";
|
|
147
206
|
/** A record field's in-struct LLVM type. bool fields store as i8 (the C
|
|
148
|
-
* _Bool layout); loads/stores convert at the access site.
|
|
149
|
-
|
|
207
|
+
* _Bool layout); loads/stores convert at the access site. An `inline`
|
|
208
|
+
* scalar-union field stores its tag and bits (inline-unions.ts). */
|
|
209
|
+
export declare function llFieldType(t: IrType, inline: boolean): "double" | "i8" | "ptr" | typeof INLINE_UNION_FIELD;
|
|
210
|
+
/** Loads a struct field slot for helper code: i8 bools truncate to i1, and
|
|
211
|
+
* an inline union field lends a private stack box with the slot's own
|
|
212
|
+
* bits (ABSENT included). */
|
|
213
|
+
export declare function loadStructField(B: BlockBuilder, sizeType: "i32" | "i64", ptr: string, t: IrType, inline: boolean): string;
|
|
150
214
|
export type MapKeyAccess = "f64" | "bool" | "str" | "ref";
|
|
151
215
|
/** The key's calling convention is independent of equality: bigint and
|
|
152
216
|
* union payloads travel by reference but compare by JavaScript value. */
|
|
@@ -156,6 +220,15 @@ export declare function mapKeyParamType(access: MapKeyAccess): string;
|
|
|
156
220
|
/** The ScrMapKeyKind / ScrMapValKind constants for scr_map_new. */
|
|
157
221
|
export declare function mapKeyKindNum(key: IrType, unionArms?: IrType[]): number;
|
|
158
222
|
export declare function mapValKindNum(value: IrType): number;
|
|
223
|
+
/** The RC-relevant members of a shape: every field except inline scalar
|
|
224
|
+
* unions, plus the overflow map on index-signature shapes (one more
|
|
225
|
+
* map-typed member). `index` is the member's field position in the
|
|
226
|
+
* emitted struct type (rc header at 0). */
|
|
227
|
+
export declare function rcMembers(shape: IrRecordShape, inline: InlineUnionFields): {
|
|
228
|
+
index: number;
|
|
229
|
+
type: IrType;
|
|
230
|
+
name: string;
|
|
231
|
+
}[];
|
|
159
232
|
/** The NULL- and immortal-skipping retain body shared by every shape. A
|
|
160
233
|
* retain never touches the cycle header: a buffered candidate that is
|
|
161
234
|
* retained again stays a candidate (scr_cycle.c, markRoots). */
|
|
@@ -215,9 +288,9 @@ export declare function releaseBody(host: ShapeHost, fnName: string, traced: boo
|
|
|
215
288
|
* (and their destroy calls) into every caller. */
|
|
216
289
|
export declare function releaseFastPath(host: ShapeHost, fnName: string, slow: string, traced: boolean, comment?: string, immortal?: boolean): string[];
|
|
217
290
|
/** The possible-cycle-root step of a release that left a headered object
|
|
218
|
-
* alive: scr_cyc_on_release with its early return inlined.
|
|
219
|
-
* (the
|
|
220
|
-
*
|
|
291
|
+
* alive: scr_cyc_on_release with its early return inlined. Test the sign
|
|
292
|
+
* of `buf` (the i32 at obj-4; negative for a queued candidate or a tenured
|
|
293
|
+
* object) and call the runtime only to enqueue a new candidate.
|
|
221
294
|
* Every emitted release of a headered object shares this sequence
|
|
222
295
|
* (scr_runtime.h asserts the offset); it ends by branching to `done`. */
|
|
223
296
|
/** One traced field of an emitted trace function: load the slot and visit
|