@scriptc/compiler 0.2.5 → 0.2.7
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 +62 -48
- package/dist/backend/cycle-analysis.d.ts +21 -9
- package/dist/backend/cycle-analysis.js +139 -67
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-analysis.test.js +283 -3
- package/dist/backend/cycle-analysis.test.js.map +1 -1
- package/dist/backend/cycle-mutability.d.ts +39 -0
- package/dist/backend/cycle-mutability.js +205 -0
- package/dist/backend/cycle-mutability.js.map +1 -0
- package/dist/backend/executable-features.js +1 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/link-plan-core.d.ts +4 -1
- package/dist/backend/link-plan-core.js +16 -3
- package/dist/backend/link-plan-core.js.map +1 -1
- package/dist/backend/link-plan.d.ts +3 -1
- package/dist/backend/link-plan.js +3 -0
- package/dist/backend/link-plan.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +40 -0
- package/dist/backend/llvm/alloc.js +205 -0
- package/dist/backend/llvm/alloc.js.map +1 -0
- package/dist/backend/llvm/alloc.test.d.ts +1 -0
- package/dist/backend/llvm/alloc.test.js +102 -0
- package/dist/backend/llvm/alloc.test.js.map +1 -0
- package/dist/backend/llvm/byte-numbers.js +32 -4
- package/dist/backend/llvm/byte-numbers.js.map +1 -1
- package/dist/backend/llvm/byte-windows.d.ts +31 -0
- package/dist/backend/llvm/byte-windows.js +334 -0
- package/dist/backend/llvm/byte-windows.js.map +1 -0
- package/dist/backend/llvm/byte-windows.test.d.ts +1 -0
- package/dist/backend/llvm/byte-windows.test.js +244 -0
- package/dist/backend/llvm/byte-windows.test.js.map +1 -0
- package/dist/backend/llvm/call-lifetimes.d.ts +17 -5
- package/dist/backend/llvm/call-lifetimes.js +58 -24
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +170 -0
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +18 -2
- package/dist/backend/llvm/classes.js +115 -41
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.d.ts +1 -0
- package/dist/backend/llvm/classes.test.js +132 -0
- package/dist/backend/llvm/classes.test.js.map +1 -0
- package/dist/backend/llvm/common.d.ts +13 -0
- package/dist/backend/llvm/common.js +30 -0
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +27 -0
- package/dist/backend/llvm/constant-callbacks.js +450 -0
- package/dist/backend/llvm/constant-callbacks.js.map +1 -0
- package/dist/backend/llvm/constant-callbacks.test.d.ts +1 -0
- package/dist/backend/llvm/constant-callbacks.test.js +261 -0
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -0
- package/dist/backend/llvm/dense-array-access.d.ts +29 -0
- package/dist/backend/llvm/dense-array-access.js +335 -0
- package/dist/backend/llvm/dense-array-access.js.map +1 -0
- package/dist/backend/llvm/dense-array-access.test.d.ts +1 -0
- package/dist/backend/llvm/dense-array-access.test.js +149 -0
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +35 -1
- package/dist/backend/llvm/dyn.js +196 -35
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +143 -4
- package/dist/backend/llvm/emitter.js +882 -136
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +82 -14
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +58 -4
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-async.test.d.ts +1 -0
- package/dist/backend/llvm/expr-async.test.js +62 -0
- package/dist/backend/llvm/expr-async.test.js.map +1 -0
- package/dist/backend/llvm/expr-bytes.js +11 -0
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +151 -25
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +37 -14
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-control.js +92 -2
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dispatch.js +2 -0
- package/dist/backend/llvm/expr-dispatch.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +210 -28
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.d.ts +1 -1
- package/dist/backend/llvm/expr-primitives.js +58 -23
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +1 -1
- package/dist/backend/llvm/expr-records.js +3 -3
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +59 -2
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
- package/dist/backend/llvm/integer-remainder.d.ts +18 -0
- package/dist/backend/llvm/integer-remainder.js +117 -0
- package/dist/backend/llvm/integer-remainder.js.map +1 -0
- package/dist/backend/llvm/layouts.d.ts +2 -1
- package/dist/backend/llvm/layouts.js +4 -3
- package/dist/backend/llvm/layouts.js.map +1 -1
- package/dist/backend/llvm/lazy-captures.d.ts +16 -0
- package/dist/backend/llvm/lazy-captures.js +96 -0
- package/dist/backend/llvm/lazy-captures.js.map +1 -0
- package/dist/backend/llvm/lazy-captures.test.d.ts +1 -0
- package/dist/backend/llvm/lazy-captures.test.js +78 -0
- package/dist/backend/llvm/lazy-captures.test.js.map +1 -0
- package/dist/backend/llvm/lib-abi.js +7 -0
- package/dist/backend/llvm/lib-abi.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +7 -22
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +3 -4
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +15 -0
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.d.ts +13 -3
- package/dist/backend/llvm/local-array-reads.js +159 -77
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +105 -4
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.d.ts +5 -1
- package/dist/backend/llvm/local-union-storage.js +48 -6
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +91 -4
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/loop-array-borrows.d.ts +11 -0
- package/dist/backend/llvm/loop-array-borrows.js +70 -0
- package/dist/backend/llvm/loop-array-borrows.js.map +1 -0
- package/dist/backend/llvm/loop-array-borrows.test.d.ts +1 -0
- package/dist/backend/llvm/loop-array-borrows.test.js +145 -0
- package/dist/backend/llvm/loop-array-borrows.test.js.map +1 -0
- package/dist/backend/llvm/map-read-lifetimes.d.ts +5 -0
- package/dist/backend/llvm/map-read-lifetimes.js +20 -5
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +1 -1
- package/dist/backend/llvm/nullable-fields.d.ts +28 -0
- package/dist/backend/llvm/nullable-fields.js +45 -0
- package/dist/backend/llvm/nullable-fields.js.map +1 -0
- package/dist/backend/llvm/nullable-fields.test.d.ts +1 -0
- package/dist/backend/llvm/nullable-fields.test.js +48 -0
- package/dist/backend/llvm/nullable-fields.test.js.map +1 -0
- package/dist/backend/llvm/reference-effects.d.ts +2 -1
- package/dist/backend/llvm/reference-effects.js +7 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/serialized-ir-emission.test.d.ts +1 -0
- package/dist/backend/llvm/serialized-ir-emission.test.js +52 -0
- package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +73 -3
- package/dist/backend/llvm/shapes.js +281 -34
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +114 -5
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/split-loops.d.ts +48 -0
- package/dist/backend/llvm/split-loops.js +183 -0
- package/dist/backend/llvm/split-loops.js.map +1 -0
- package/dist/backend/llvm/split.js +0 -7
- package/dist/backend/llvm/split.js.map +1 -1
- package/dist/backend/llvm/split.test.js +66 -2
- package/dist/backend/llvm/split.test.js.map +1 -1
- package/dist/backend/llvm/stack-callbacks.d.ts +14 -0
- package/dist/backend/llvm/stack-callbacks.js +72 -0
- package/dist/backend/llvm/stack-callbacks.js.map +1 -0
- package/dist/backend/llvm/stack-captures.d.ts +27 -0
- package/dist/backend/llvm/stack-captures.js +152 -0
- package/dist/backend/llvm/stack-captures.js.map +1 -0
- package/dist/backend/llvm/stack-unions.test.js +38 -1
- package/dist/backend/llvm/stack-unions.test.js.map +1 -1
- package/dist/backend/llvm/string-construction.test.js +1 -1
- package/dist/backend/llvm/string-key-hash.d.ts +8 -0
- package/dist/backend/llvm/string-key-hash.js +59 -0
- package/dist/backend/llvm/string-key-hash.js.map +1 -0
- package/dist/backend/llvm/string-key-hash.test.d.ts +1 -0
- package/dist/backend/llvm/string-key-hash.test.js +34 -0
- package/dist/backend/llvm/string-key-hash.test.js.map +1 -0
- package/dist/backend/llvm/string-lifetimes.test.js +48 -7
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-slices.d.ts +20 -0
- package/dist/backend/llvm/string-slices.js +87 -0
- package/dist/backend/llvm/string-slices.js.map +1 -0
- package/dist/backend/llvm/string-slices.test.d.ts +1 -0
- package/dist/backend/llvm/string-slices.test.js +98 -0
- package/dist/backend/llvm/string-slices.test.js.map +1 -0
- package/dist/backend/llvm/switch-dispatch.js +1 -1
- package/dist/backend/llvm/switch-dispatch.js.map +1 -1
- package/dist/backend/llvm/switch-dispatch.test.js +2 -2
- package/dist/backend/llvm/switch-dispatch.test.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +4 -14
- package/dist/backend/llvm/walkers.js +53 -311
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/may-throw.js +4 -1
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +1 -1
- package/dist/backend/native/cache-warm.d.ts +2 -1
- package/dist/backend/native/cache-warm.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +5 -2
- package/dist/backend/native/contracts.js.map +1 -1
- package/dist/backend/native/executable.js +12 -4
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +3 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +7 -0
- package/dist/backend/native-codegen-core.js +21 -0
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +9 -0
- package/dist/backend/native-codegen.js +38 -18
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +70 -2
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +4 -2
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-link-info.d.ts +2 -1
- package/dist/backend/native-link-info.js.map +1 -1
- package/dist/backend/native-link-info.test.js +2 -2
- package/dist/backend/native-link-info.test.js.map +1 -1
- package/dist/backend/native-tools.d.ts +6 -2
- package/dist/backend/native-tools.js +6 -5
- package/dist/backend/native-tools.js.map +1 -1
- package/dist/backend/optimization.d.ts +25 -0
- package/dist/backend/optimization.js +21 -0
- package/dist/backend/optimization.js.map +1 -0
- package/dist/backend/optimization.test.d.ts +1 -0
- package/dist/backend/optimization.test.js +24 -0
- package/dist/backend/optimization.test.js.map +1 -0
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-core.d.ts +16 -4
- package/dist/backend/runtime-pack-core.js +31 -13
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.d.ts +7 -3
- package/dist/backend/runtime-pack-native.js +0 -3
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +41 -4
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.d.ts +20 -2
- package/dist/backend/runtime-pack.js +23 -0
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +125 -2
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +1 -1
- package/dist/backend/targets.d.ts +2 -1
- package/dist/backend/targets.js +1 -1
- package/dist/backend/targets.js.map +1 -1
- package/dist/cli/command.js +5 -4
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/host.d.ts +2 -1
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +5 -2
- package/dist/cli/usage.js.map +1 -1
- package/dist/compile-types.d.ts +5 -2
- package/dist/diagnostics/diagnostic.js +10 -8
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +3 -2
- package/dist/executable/executable-cache.js +8 -4
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +35 -0
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/frontend/fork-target.d.ts +5 -0
- package/dist/frontend/fork-target.js +40 -8
- package/dist/frontend/fork-target.js.map +1 -1
- package/dist/frontend/fork-target.test.d.ts +1 -0
- package/dist/frontend/fork-target.test.js +59 -0
- package/dist/frontend/fork-target.test.js.map +1 -0
- package/dist/frontend/lowering/abstract-equality.js +5 -49
- package/dist/frontend/lowering/abstract-equality.js.map +1 -1
- package/dist/frontend/lowering/array-values.d.ts +23 -0
- package/dist/frontend/lowering/array-values.js +129 -0
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/binding-analysis.js +2 -2
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.d.ts +2 -11
- package/dist/frontend/lowering/builtins/atomics.js +64 -28
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.js +17 -2
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +3 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +51 -4
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +6 -1
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +6 -17
- package/dist/frontend/lowering/builtins/process.js +56 -29
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/workers.d.ts +5 -0
- package/dist/frontend/lowering/builtins/workers.js +65 -0
- package/dist/frontend/lowering/builtins/workers.js.map +1 -0
- package/dist/frontend/lowering/caught-value-dispatch.d.ts +11 -0
- package/dist/frontend/lowering/caught-value-dispatch.js +87 -0
- package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -0
- package/dist/frontend/lowering/class-assertions.d.ts +11 -0
- package/dist/frontend/lowering/class-assertions.js +104 -0
- package/dist/frontend/lowering/class-assertions.js.map +1 -0
- package/dist/frontend/lowering/class-callbacks.d.ts +3 -3
- package/dist/frontend/lowering/class-callbacks.js +18 -5
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +4 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.d.ts +5 -0
- package/dist/frontend/lowering/class-method-mutations.js +472 -0
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -0
- package/dist/frontend/lowering/class-method-values.js +25 -5
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +17 -0
- package/dist/frontend/lowering/class-protocols.js +126 -0
- package/dist/frontend/lowering/class-protocols.js.map +1 -0
- package/dist/frontend/lowering/class-prototypes.js +8 -2
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-unions.d.ts +16 -0
- package/dist/frontend/lowering/class-unions.js +127 -0
- package/dist/frontend/lowering/class-unions.js.map +1 -0
- package/dist/frontend/lowering/coercions/builders.js +8 -1
- package/dist/frontend/lowering/coercions/builders.js.map +1 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +2 -0
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/identity.d.ts +7 -0
- package/dist/frontend/lowering/coercions/identity.js +26 -0
- package/dist/frontend/lowering/coercions/identity.js.map +1 -0
- package/dist/frontend/lowering/coercions/structural.js +9 -6
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/collection-narrowing.d.ts +6 -0
- package/dist/frontend/lowering/collection-narrowing.js +31 -0
- package/dist/frontend/lowering/collection-narrowing.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callback-call.d.ts +7 -0
- package/dist/frontend/lowering/containers/array-callback-call.js +52 -0
- package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +8 -12
- package/dist/frontend/lowering/containers/array-callbacks.js +415 -136
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.d.ts +7 -0
- package/dist/frontend/lowering/containers/array-concat.js +130 -0
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -0
- package/dist/frontend/lowering/containers/array-construction.d.ts +2 -0
- package/dist/frontend/lowering/containers/array-construction.js +95 -3
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.d.ts +1 -11
- package/dist/frontend/lowering/containers/array-methods.js +43 -132
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.js +12 -34
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +10 -1
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +56 -70
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +22 -3
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.d.ts +41 -0
- package/dist/frontend/lowering/cycle-initialization.js +277 -0
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -0
- package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -0
- package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +140 -38
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-field-write.d.ts +4 -4
- package/dist/frontend/lowering/expressions/union-field-write.js +54 -44
- package/dist/frontend/lowering/expressions/union-field-write.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +2 -5
- package/dist/frontend/lowering/generic-functions.js +13 -10
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/instantiation-path.d.ts +8 -0
- package/dist/frontend/lowering/instantiation-path.js +10 -0
- package/dist/frontend/lowering/instantiation-path.js.map +1 -0
- package/dist/frontend/lowering/instantiation-path.test.d.ts +1 -0
- package/dist/frontend/lowering/instantiation-path.test.js +23 -0
- package/dist/frontend/lowering/instantiation-path.test.js.map +1 -0
- package/dist/frontend/lowering/iterator-adapters.d.ts +20 -0
- package/dist/frontend/lowering/iterator-adapters.js +605 -0
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -0
- package/dist/frontend/lowering/lower-array-sort.d.ts +1 -1
- package/dist/frontend/lowering/lower-array-sort.js +44 -5
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.test.d.ts +1 -0
- package/dist/frontend/lowering/lower-array-sort.test.js +31 -0
- package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -0
- package/dist/frontend/lowering/lower-assert.js +7 -0
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.js +12 -7
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +3 -3
- package/dist/frontend/lowering/lower-calls.js +198 -124
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +7 -0
- package/dist/frontend/lowering/lower-classes.js +166 -96
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.js +1 -1
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +9 -2
- package/dist/frontend/lowering/lower-exprs.js +421 -167
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.d.ts +1 -1
- package/dist/frontend/lowering/lower-functions.js +33 -20
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +26 -2
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-island.js +1 -1
- package/dist/frontend/lowering/lower-island.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.d.ts +1 -0
- package/dist/frontend/lowering/lower-modules.js +54 -11
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +59 -69
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +1 -1
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +50 -1
- package/dist/frontend/lowering/lowerer.js +333 -26
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.js +3 -1
- package/dist/frontend/lowering/native-ffi.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-provenance.d.ts +15 -0
- package/dist/frontend/lowering/runtime-optional-provenance.js +40 -0
- package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -0
- package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
- package/dist/frontend/lowering/split-consumers.d.ts +7 -0
- package/dist/frontend/lowering/split-consumers.js +64 -0
- package/dist/frontend/lowering/split-consumers.js.map +1 -0
- package/dist/frontend/lowering/strict-equality.d.ts +9 -0
- package/dist/frontend/lowering/strict-equality.js +116 -0
- package/dist/frontend/lowering/strict-equality.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +3 -4
- package/dist/frontend/lowering/surfaces.js +38 -7
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/union-comparison.d.ts +5 -0
- package/dist/frontend/lowering/union-comparison.js +47 -0
- package/dist/frontend/lowering/union-comparison.js.map +1 -0
- package/dist/frontend/module-source-candidates.d.ts +10 -0
- package/dist/frontend/module-source-candidates.js +40 -0
- package/dist/frontend/module-source-candidates.js.map +1 -0
- package/dist/frontend/module-source-candidates.test.d.ts +1 -0
- package/dist/frontend/module-source-candidates.test.js +53 -0
- package/dist/frontend/module-source-candidates.test.js.map +1 -0
- package/dist/frontend/pipeline.js +2 -2
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program-analysis.d.ts +2 -0
- package/dist/frontend/program-analysis.js +2 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +38 -2
- package/dist/frontend/program.js +457 -88
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +59 -6
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/ts7/ast-node.js +6 -8
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +42 -1
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.d.ts +4 -0
- package/dist/frontend/ts7/ast-wire.js +28 -0
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/ast.d.ts +2 -1
- package/dist/frontend/ts7/ast.js +8 -4
- package/dist/frontend/ts7/ast.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +8 -2
- package/dist/frontend/ts7/checker.js +41 -5
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +42 -0
- package/dist/frontend/ts7/checker.test.js.map +1 -1
- package/dist/frontend/ts7/program-host.d.ts +7 -0
- package/dist/frontend/ts7/program-host.js +26 -2
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/program-host.test.js +29 -0
- package/dist/frontend/ts7/program-host.test.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +4 -1
- package/dist/frontend/type-mapper.js +133 -16
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.js +15 -3
- package/dist/frontend/type-mapper.test.js.map +1 -1
- package/dist/frontend/worker-target.d.ts +6 -0
- package/dist/frontend/worker-target.js +108 -0
- package/dist/frontend/worker-target.js.map +1 -0
- package/dist/frontend/worker-target.test.d.ts +1 -0
- package/dist/frontend/worker-target.test.js +71 -0
- package/dist/frontend/worker-target.test.js.map +1 -0
- package/dist/index.js +47 -14
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.d.ts +3 -1
- package/dist/ir/analysis.js +4 -0
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/builtin-effects.js +12 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +15 -15
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/constant-tables.test.js +1 -1
- package/dist/ir/initializer-bindings.test.js +1 -1
- package/dist/ir/ir.d.ts +85 -23
- package/dist/ir/ir.js +20 -6
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/numeric-call-specialization.d.ts +8 -0
- package/dist/ir/numeric-call-specialization.js +198 -0
- package/dist/ir/numeric-call-specialization.js.map +1 -0
- package/dist/ir/runtime-features.js +4 -3
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/scalar-records.test.js +1 -1
- package/dist/ir/serialize.d.ts +1 -1
- package/dist/ir/serialize.js +3 -3
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/traverse.js +8 -0
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +207 -43
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +356 -8
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/fence-eval.test.js +1 -1
- package/dist/library/int-infer.test.js +4 -4
- package/dist/library/ir-policy.js +2 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.test.js +5 -5
- package/dist/library/library-profile.d.ts +2 -1
- package/dist/library/library-profile.js +4 -3
- package/dist/library/library-profile.js.map +1 -1
- package/dist/native/compiler.js +24 -11
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +7 -3
- package/dist/native/compiler.test.js.map +1 -1
- package/dist/native/library.d.ts +2 -1
- package/dist/native/library.js.map +1 -1
- package/dist/native/prepare.js +29 -3
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.d.ts +3 -2
- package/dist/native/sanitizer.js +3 -13
- package/dist/native/sanitizer.js.map +1 -1
- package/dist/native/sanitizer.test.js +1 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +37 -3
|
@@ -250,24 +250,8 @@ declare var process: {
|
|
|
250
250
|
* preserved. The boolean is Node's backpressure signal — these synchronous
|
|
251
251
|
* writes always return true. Static BufferEncoding arguments and the
|
|
252
252
|
* completion callback overloads match Node's WritableStream surface. */
|
|
253
|
-
stdout:
|
|
254
|
-
|
|
255
|
-
write(
|
|
256
|
-
data: string | Uint8Array,
|
|
257
|
-
encoding: BufferEncoding,
|
|
258
|
-
callback?: (error?: Error | null) => void,
|
|
259
|
-
): boolean;
|
|
260
|
-
readonly isTTY: boolean;
|
|
261
|
-
};
|
|
262
|
-
stderr: {
|
|
263
|
-
write(data: string | Uint8Array, callback?: (error?: Error | null) => void): boolean;
|
|
264
|
-
write(
|
|
265
|
-
data: string | Uint8Array,
|
|
266
|
-
encoding: BufferEncoding,
|
|
267
|
-
callback?: (error?: Error | null) => void,
|
|
268
|
-
): boolean;
|
|
269
|
-
readonly isTTY: boolean;
|
|
270
|
-
};
|
|
253
|
+
stdout: import("tty").WriteStream;
|
|
254
|
+
stderr: import("tty").WriteStream;
|
|
271
255
|
/* The stdin stream, the piped-input slice: the TTY probe, the
|
|
272
256
|
* data/end/error events (on and once — a 'data' listener keeps the
|
|
273
257
|
* event loop alive until EOF, like Node's flowing stdin), destroy()
|
|
@@ -601,7 +585,7 @@ interface BufferConstructor {
|
|
|
601
585
|
from(data: string, encoding?: BufferEncoding): Buffer;
|
|
602
586
|
/* The ArrayBuffer form is the VIEW construction: x.buffer with an
|
|
603
587
|
* optional byte offset/length shares x's storage (the subarray rule). */
|
|
604
|
-
from(data: ArrayBuffer, byteOffset?: number, length?: number): Buffer;
|
|
588
|
+
from(data: ArrayBuffer | SharedArrayBuffer, byteOffset?: number, length?: number): Buffer;
|
|
605
589
|
from(data: Uint8Array | readonly number[]): Buffer;
|
|
606
590
|
alloc(size: number, fill?: string | number | Uint8Array, encoding?: BufferEncoding): Buffer;
|
|
607
591
|
compare(buf1: Uint8Array, buf2: Uint8Array): number;
|
|
@@ -1118,24 +1102,13 @@ interface ImportMeta {
|
|
|
1118
1102
|
* directory, open 'x'"). `rmSync` removes FILES only (like Node without
|
|
1119
1103
|
* `recursive`); empty directories go through `rmdirSync`. */
|
|
1120
1104
|
declare module "node:fs" {
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
export function readFileSync<T extends string>(
|
|
1129
|
-
path: string,
|
|
1130
|
-
encoding: T,
|
|
1131
|
-
): T extends "utf8" ? string : T extends "utf-8" ? string : any;
|
|
1132
|
-
export function readFileSync(path: string): Buffer;
|
|
1133
|
-
/* The file-descriptor forms — a read(2) loop to EOF from the current
|
|
1134
|
-
* position; the stdin pattern is readFileSync(0, "utf8"). */
|
|
1135
|
-
export function readFileSync(fd: number, encoding: "utf8" | "utf-8"): string;
|
|
1136
|
-
export function readFileSync(fd: number): Buffer;
|
|
1137
|
-
/* The options-object spelling of the utf8 form. */
|
|
1138
|
-
export function readFileSync(path: string, options: { encoding: "utf8" | "utf-8" }): string;
|
|
1105
|
+
export function readFileSync(path: string | number, encoding: BufferEncoding): string;
|
|
1106
|
+
export function readFileSync(
|
|
1107
|
+
path: string | number,
|
|
1108
|
+
options: { encoding: BufferEncoding },
|
|
1109
|
+
): string;
|
|
1110
|
+
export function readFileSync(path: string | number): Buffer;
|
|
1111
|
+
export function readFileSync(path: string, options: unknown): string | Buffer;
|
|
1139
1112
|
/* Error-first callbacks select string or Buffer data from their encoding.
|
|
1140
1113
|
* Unknown options retain that union until the caller validates the value. */
|
|
1141
1114
|
export function readFile(
|
|
@@ -4107,23 +4080,61 @@ declare module "node:dns" {
|
|
|
4107
4080
|
export * from "dns";
|
|
4108
4081
|
}
|
|
4109
4082
|
|
|
4110
|
-
/* node:worker_threads —
|
|
4111
|
-
*
|
|
4112
|
-
* isMainThread lowers to `true` and threadId to 0 — Node's main-thread
|
|
4113
|
-
* answers exactly. Worker itself is declared surface without a lowering:
|
|
4114
|
-
* constructing one fences at the site; the CLASS as a value participates
|
|
4115
|
-
* in identity-only flows. */
|
|
4083
|
+
/* node:worker_threads — native workers use statically compiled entry points.
|
|
4084
|
+
* Lowering and runtime diagnostics define the supported options and methods. */
|
|
4116
4085
|
declare module "worker_threads" {
|
|
4117
4086
|
export const isMainThread: boolean;
|
|
4087
|
+
export const isInternalThread: boolean;
|
|
4118
4088
|
export const threadId: number;
|
|
4089
|
+
export interface WorkerOptions {
|
|
4090
|
+
workerData?: unknown;
|
|
4091
|
+
transferList?: readonly unknown[];
|
|
4092
|
+
argv?: readonly unknown[];
|
|
4093
|
+
name?: string;
|
|
4094
|
+
[option: string]: unknown;
|
|
4095
|
+
}
|
|
4119
4096
|
export class Worker {
|
|
4120
|
-
constructor(filename: string | URL, options?:
|
|
4121
|
-
|
|
4122
|
-
|
|
4097
|
+
constructor(filename: string | URL, options?: WorkerOptions);
|
|
4098
|
+
readonly threadId: number;
|
|
4099
|
+
on(event: "online", listener: () => void): this;
|
|
4100
|
+
on(event: "message", listener: (value: any) => void): this;
|
|
4101
|
+
on(event: "error", listener: (error: Error) => void): this;
|
|
4102
|
+
on(event: "exit", listener: (code: number) => void): this;
|
|
4103
|
+
on(event: string, listener: (...args: any[]) => void): this;
|
|
4104
|
+
once(event: string, listener: (...args: any[]) => void): this;
|
|
4105
|
+
off(event: string, listener: (...args: any[]) => void): this;
|
|
4106
|
+
addListener(event: string, listener: (...args: any[]) => void): this;
|
|
4107
|
+
removeListener(event: string, listener: (...args: any[]) => void): this;
|
|
4108
|
+
prependListener(event: string, listener: (...args: any[]) => void): this;
|
|
4109
|
+
prependOnceListener(event: string, listener: (...args: any[]) => void): this;
|
|
4110
|
+
postMessage(value: unknown, transferList?: readonly unknown[]): void;
|
|
4111
|
+
ref(): void;
|
|
4112
|
+
unref(): void;
|
|
4123
4113
|
terminate(): Promise<number>;
|
|
4114
|
+
removeAllListeners(event?: string): this;
|
|
4115
|
+
listenerCount(event: string, listener?: (...args: any[]) => void): number;
|
|
4116
|
+
}
|
|
4117
|
+
export class MessagePort {
|
|
4118
|
+
on(event: "message", listener: (value: any) => void): this;
|
|
4119
|
+
on(event: "close", listener: () => void): this;
|
|
4120
|
+
on(event: string, listener: (...args: any[]) => void): this;
|
|
4121
|
+
once(event: string, listener: (...args: any[]) => void): this;
|
|
4122
|
+
off(event: string, listener: (...args: any[]) => void): this;
|
|
4123
|
+
addListener(event: string, listener: (...args: any[]) => void): this;
|
|
4124
|
+
removeListener(event: string, listener: (...args: any[]) => void): this;
|
|
4125
|
+
prependListener(event: string, listener: (...args: any[]) => void): this;
|
|
4126
|
+
prependOnceListener(event: string, listener: (...args: any[]) => void): this;
|
|
4127
|
+
postMessage(value: unknown, transferList?: readonly unknown[]): void;
|
|
4128
|
+
start(): void;
|
|
4129
|
+
close(callback?: () => void): void;
|
|
4130
|
+
ref(): void;
|
|
4131
|
+
unref(): void;
|
|
4132
|
+
hasRef(): boolean;
|
|
4133
|
+
removeAllListeners(event?: string): this;
|
|
4134
|
+
listenerCount(event: string, listener?: (...args: any[]) => void): number;
|
|
4124
4135
|
}
|
|
4125
|
-
export const parentPort:
|
|
4126
|
-
export const workerData:
|
|
4136
|
+
export const parentPort: MessagePort | null;
|
|
4137
|
+
export const workerData: any;
|
|
4127
4138
|
}
|
|
4128
4139
|
declare module "node:worker_threads" {
|
|
4129
4140
|
export * from "worker_threads";
|
|
@@ -4176,6 +4187,9 @@ declare module "tty" {
|
|
|
4176
4187
|
callback?: (error?: Error | null) => void,
|
|
4177
4188
|
): boolean;
|
|
4178
4189
|
readonly isTTY: boolean;
|
|
4190
|
+
readonly columns: number;
|
|
4191
|
+
readonly rows: number;
|
|
4192
|
+
getWindowSize(): [number, number];
|
|
4179
4193
|
}
|
|
4180
4194
|
export function isatty(fd: number): boolean;
|
|
4181
4195
|
}
|
|
@@ -1,14 +1,26 @@
|
|
|
1
1
|
import type { IrModule } from "../ir/ir.js";
|
|
2
2
|
/** Cycle capability for native code generation.
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* are
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
3
|
+
* Nodes are shape units and unions; edges are the references their fields
|
|
4
|
+
* and arms can hold (collections flattened into their element, key and
|
|
5
|
+
* value types). Closures, checked values, class values, caught values and
|
|
6
|
+
* promises are INTRINSIC: they can reach anything, so a unit holding one is
|
|
7
|
+
* on a potential cycle. Strings never are.
|
|
8
|
+
*
|
|
9
|
+
* An edge is IMMUTABLE when it can only be stored while its owner is still
|
|
10
|
+
* under construction (cycle-mutability.ts derives this from the IR): such an
|
|
11
|
+
* object can only point to objects that existed before it, so a heap cycle
|
|
12
|
+
* made only of immutable edges is impossible. Union arms are immutable (the
|
|
13
|
+
* boxes are), and any edge through an array, Map, or Set is mutable because
|
|
14
|
+
* the container's contents are. A strongly connected component is
|
|
15
|
+
* cycle-capable iff it contains an intrinsic unit or a mutable internal
|
|
16
|
+
* edge; a unit or union is traced iff it can reach a cycle-capable
|
|
17
|
+
* component. With every edge mutable this is exactly the earlier greatest
|
|
18
|
+
* fixpoint: traced iff the unit reaches a cycle or an intrinsic reference.
|
|
19
|
+
*
|
|
20
|
+
* A HIERARCHY is one unit of capability (a base-typed slot can hold any
|
|
21
|
+
* subclass and retain touches the cycle header, so header presence must be
|
|
22
|
+
* uniform across an extends tree): a unit is cycle-capable iff ANY member
|
|
23
|
+
* is — every backend uses the same grouping. */
|
|
12
24
|
export declare function computeTraced(mod: IrModule): {
|
|
13
25
|
shapes: Set<string>;
|
|
14
26
|
unions: Set<string>;
|
|
@@ -1,36 +1,29 @@
|
|
|
1
1
|
import { funcOf, mapOf, RUNTIME_EMITTER_CLASS, STRING, VOID } from "../ir/ir.js";
|
|
2
|
+
import { computeCycleMutability, fieldKey } from "./cycle-mutability.js";
|
|
2
3
|
/** Cycle capability for native code generation.
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* are
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
4
|
+
* Nodes are shape units and unions; edges are the references their fields
|
|
5
|
+
* and arms can hold (collections flattened into their element, key and
|
|
6
|
+
* value types). Closures, checked values, class values, caught values and
|
|
7
|
+
* promises are INTRINSIC: they can reach anything, so a unit holding one is
|
|
8
|
+
* on a potential cycle. Strings never are.
|
|
9
|
+
*
|
|
10
|
+
* An edge is IMMUTABLE when it can only be stored while its owner is still
|
|
11
|
+
* under construction (cycle-mutability.ts derives this from the IR): such an
|
|
12
|
+
* object can only point to objects that existed before it, so a heap cycle
|
|
13
|
+
* made only of immutable edges is impossible. Union arms are immutable (the
|
|
14
|
+
* boxes are), and any edge through an array, Map, or Set is mutable because
|
|
15
|
+
* the container's contents are. A strongly connected component is
|
|
16
|
+
* cycle-capable iff it contains an intrinsic unit or a mutable internal
|
|
17
|
+
* edge; a unit or union is traced iff it can reach a cycle-capable
|
|
18
|
+
* component. With every edge mutable this is exactly the earlier greatest
|
|
19
|
+
* fixpoint: traced iff the unit reaches a cycle or an intrinsic reference.
|
|
20
|
+
*
|
|
21
|
+
* A HIERARCHY is one unit of capability (a base-typed slot can hold any
|
|
22
|
+
* subclass and retain touches the cycle header, so header presence must be
|
|
23
|
+
* uniform across an extends tree): a unit is cycle-capable iff ANY member
|
|
24
|
+
* is — every backend uses the same grouping. */
|
|
12
25
|
export function computeTraced(mod) {
|
|
13
26
|
const classes = mod.classes ?? [];
|
|
14
|
-
const shapeDefs = [
|
|
15
|
-
...classes.map((c) => ({
|
|
16
|
-
key: `object:${c.name}`,
|
|
17
|
-
fields: [
|
|
18
|
-
...c.fields,
|
|
19
|
-
...(c.name === RUNTIME_EMITTER_CLASS
|
|
20
|
-
? [{ name: "<listeners>", type: funcOf([], VOID) }]
|
|
21
|
-
: []),
|
|
22
|
-
...(c.localCaptures !== undefined
|
|
23
|
-
? [{ name: "<class>", type: { kind: "classval", className: c.name } }]
|
|
24
|
-
: []),
|
|
25
|
-
],
|
|
26
|
-
})),
|
|
27
|
-
...(mod.records ?? []).map((r) => ({
|
|
28
|
-
key: `record:${r.id}`,
|
|
29
|
-
fields: r.indexValue
|
|
30
|
-
? [...r.fields, { name: "<overflow>", type: mapOf(STRING, r.indexValue) }]
|
|
31
|
-
: r.fields,
|
|
32
|
-
})),
|
|
33
|
-
];
|
|
34
27
|
// Hierarchy units: root lookup over the base links (classes with a base
|
|
35
28
|
// or a subclass — and the runtime emitter class — form units under their
|
|
36
29
|
// root; standalone classes and records stay singleton units).
|
|
@@ -51,28 +44,52 @@ export function computeTraced(mod) {
|
|
|
51
44
|
roots.set(member, cur);
|
|
52
45
|
return cur;
|
|
53
46
|
};
|
|
54
|
-
const
|
|
47
|
+
const unitOfClass = (name) => `object:${rootOf(name)}`;
|
|
48
|
+
const mutability = computeCycleMutability(mod, unitOfClass);
|
|
49
|
+
const shapeDefs = [
|
|
50
|
+
...classes.map((c) => ({
|
|
51
|
+
key: `object:${c.name}`,
|
|
52
|
+
unit: unitOfClass(c.name),
|
|
53
|
+
fields: [
|
|
54
|
+
...c.fields,
|
|
55
|
+
...(c.name === RUNTIME_EMITTER_CLASS
|
|
56
|
+
? [{ name: "<listeners>", type: funcOf([], VOID) }]
|
|
57
|
+
: []),
|
|
58
|
+
...(c.localCaptures !== undefined
|
|
59
|
+
? [{ name: "<class>", type: { kind: "classval", className: c.name } }]
|
|
60
|
+
: []),
|
|
61
|
+
],
|
|
62
|
+
})),
|
|
63
|
+
...(mod.records ?? []).map((r) => ({
|
|
64
|
+
key: `record:${r.id}`,
|
|
65
|
+
unit: `record:${r.id}`,
|
|
66
|
+
fields: r.indexValue
|
|
67
|
+
? [...r.fields, { name: "<overflow>", type: mapOf(STRING, r.indexValue) }]
|
|
68
|
+
: r.fields,
|
|
69
|
+
})),
|
|
70
|
+
];
|
|
71
|
+
const node = () => ({
|
|
55
72
|
intrinsic: false,
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
73
|
+
edges: new Map(),
|
|
74
|
+
index: -1,
|
|
75
|
+
low: 0,
|
|
76
|
+
onStack: false,
|
|
77
|
+
component: -1,
|
|
78
|
+
reverse: [],
|
|
79
|
+
traced: false,
|
|
59
80
|
});
|
|
60
81
|
const units = new Map();
|
|
61
82
|
const shapes = new Map();
|
|
62
|
-
const unions = new Map((mod.unions ?? []).map((u) => [u.id,
|
|
83
|
+
const unions = new Map((mod.unions ?? []).map((u) => [u.id, node()]));
|
|
63
84
|
for (const s of shapeDefs) {
|
|
64
|
-
|
|
65
|
-
? `object:${rootOf(s.key.slice("object:".length))}`
|
|
66
|
-
: s.key;
|
|
67
|
-
let unit = units.get(key);
|
|
85
|
+
let unit = units.get(s.unit);
|
|
68
86
|
if (!unit)
|
|
69
|
-
units.set(
|
|
87
|
+
units.set(s.unit, (unit = node()));
|
|
70
88
|
shapes.set(s.key, unit);
|
|
71
89
|
}
|
|
72
|
-
// Each field/arm is an OR of intrinsic capability and referenced
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
if (unit.intrinsic)
|
|
90
|
+
// Each field/arm is an OR of intrinsic capability and referenced nodes.
|
|
91
|
+
const addType = (from, t, mutable) => {
|
|
92
|
+
if (from.intrinsic)
|
|
76
93
|
return;
|
|
77
94
|
switch (t.kind) {
|
|
78
95
|
case "func":
|
|
@@ -80,8 +97,8 @@ export function computeTraced(mod) {
|
|
|
80
97
|
case "classval":
|
|
81
98
|
case "promise":
|
|
82
99
|
case "caught":
|
|
83
|
-
|
|
84
|
-
|
|
100
|
+
from.intrinsic = true;
|
|
101
|
+
from.edges.clear();
|
|
85
102
|
break;
|
|
86
103
|
case "object":
|
|
87
104
|
case "record":
|
|
@@ -90,44 +107,99 @@ export function computeTraced(mod) {
|
|
|
90
107
|
? unions.get(t.unionId)
|
|
91
108
|
: shapes.get(t.kind === "object" ? `object:${t.className}` : `record:${t.shapeId}`);
|
|
92
109
|
if (dependency)
|
|
93
|
-
|
|
110
|
+
from.edges.set(dependency, (from.edges.get(dependency) ?? false) || mutable);
|
|
94
111
|
break;
|
|
95
112
|
}
|
|
96
113
|
case "map":
|
|
97
|
-
addType(
|
|
98
|
-
addType(
|
|
114
|
+
addType(from, t.key, true);
|
|
115
|
+
addType(from, t.value, true);
|
|
99
116
|
break;
|
|
100
117
|
case "set":
|
|
101
118
|
case "array":
|
|
102
|
-
addType(
|
|
119
|
+
addType(from, t.elem, true);
|
|
103
120
|
break;
|
|
104
121
|
}
|
|
105
122
|
};
|
|
106
|
-
for (const s of shapeDefs)
|
|
123
|
+
for (const s of shapeDefs) {
|
|
124
|
+
const unitMutable = mutability.all || mutability.units.has(s.unit);
|
|
107
125
|
for (const field of s.fields)
|
|
108
|
-
addType(shapes.get(s.key), field.type);
|
|
126
|
+
addType(shapes.get(s.key), field.type, unitMutable || mutability.fields.has(fieldKey(s.unit, field.name)));
|
|
127
|
+
}
|
|
109
128
|
for (const u of mod.unions ?? [])
|
|
110
129
|
for (const arm of u.arms)
|
|
111
|
-
addType(unions.get(u.id), arm);
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
130
|
+
addType(unions.get(u.id), arm, mutability.all);
|
|
131
|
+
// Tarjan's strongly connected components, iteratively (shape chains can
|
|
132
|
+
// be thousands deep).
|
|
133
|
+
const all = [...units.values(), ...unions.values()];
|
|
134
|
+
const stack = [];
|
|
135
|
+
const componentCapable = [];
|
|
136
|
+
let nextIndex = 0;
|
|
137
|
+
for (const start of all) {
|
|
138
|
+
if (start.index >= 0)
|
|
139
|
+
continue;
|
|
140
|
+
const work = [];
|
|
141
|
+
const enter = (n) => {
|
|
142
|
+
n.index = n.low = nextIndex++;
|
|
143
|
+
n.onStack = true;
|
|
144
|
+
stack.push(n);
|
|
145
|
+
work.push({ n, next: [...n.edges.keys()], i: 0 });
|
|
146
|
+
};
|
|
147
|
+
enter(start);
|
|
148
|
+
while (work.length > 0) {
|
|
149
|
+
const frame = work[work.length - 1];
|
|
150
|
+
if (frame.i < frame.next.length) {
|
|
151
|
+
const m = frame.next[frame.i++];
|
|
152
|
+
if (m.index < 0)
|
|
153
|
+
enter(m);
|
|
154
|
+
else if (m.onStack)
|
|
155
|
+
frame.n.low = Math.min(frame.n.low, m.index);
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
work.pop();
|
|
159
|
+
const n = frame.n;
|
|
160
|
+
if (work.length > 0) {
|
|
161
|
+
const parent = work[work.length - 1].n;
|
|
162
|
+
parent.low = Math.min(parent.low, n.low);
|
|
163
|
+
}
|
|
164
|
+
if (n.low !== n.index)
|
|
165
|
+
continue;
|
|
166
|
+
const id = componentCapable.length;
|
|
167
|
+
const members = [];
|
|
168
|
+
let member;
|
|
169
|
+
do {
|
|
170
|
+
member = stack.pop();
|
|
171
|
+
member.onStack = false;
|
|
172
|
+
member.component = id;
|
|
173
|
+
members.push(member);
|
|
174
|
+
} while (member !== n);
|
|
175
|
+
let capable = false;
|
|
176
|
+
for (const m of members) {
|
|
177
|
+
if (m.intrinsic)
|
|
178
|
+
capable = true;
|
|
179
|
+
for (const [dependency, mutable] of m.edges)
|
|
180
|
+
if (mutable && dependency.component === id)
|
|
181
|
+
capable = true;
|
|
182
|
+
}
|
|
183
|
+
componentCapable.push(capable);
|
|
184
|
+
}
|
|
119
185
|
}
|
|
120
|
-
//
|
|
121
|
-
|
|
186
|
+
// Traced: reaches a cycle-capable component (reverse reachability).
|
|
187
|
+
for (const n of all)
|
|
188
|
+
for (const dependency of n.edges.keys())
|
|
189
|
+
dependency.reverse.push(n);
|
|
190
|
+
const pending = all.filter((n) => componentCapable[n.component]);
|
|
191
|
+
for (const n of pending)
|
|
192
|
+
n.traced = true;
|
|
122
193
|
for (let i = 0; i < pending.length; i++) {
|
|
123
|
-
for (const dependent of pending[i].
|
|
124
|
-
if (
|
|
125
|
-
|
|
194
|
+
for (const dependent of pending[i].reverse) {
|
|
195
|
+
if (dependent.traced)
|
|
196
|
+
continue;
|
|
197
|
+
dependent.traced = true;
|
|
198
|
+
pending.push(dependent);
|
|
126
199
|
}
|
|
127
200
|
}
|
|
128
|
-
const
|
|
129
|
-
const
|
|
130
|
-
const tracedUnions = new Set([...unions].filter(([, unit]) => retained(unit)).map(([id]) => id));
|
|
201
|
+
const tracedShapes = new Set([...shapes].filter(([, unit]) => unit.traced).map(([key]) => key));
|
|
202
|
+
const tracedUnions = new Set([...unions].filter(([, n]) => n.traced).map(([id]) => id));
|
|
131
203
|
return { shapes: tracedShapes, unions: tracedUnions };
|
|
132
204
|
}
|
|
133
205
|
//# sourceMappingURL=cycle-analysis.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cycle-analysis.js","sourceRoot":"","sources":["../../src/backend/cycle-analysis.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cycle-analysis.js","sourceRoot":"","sources":["../../src/backend/cycle-analysis.ts"],"names":[],"mappings":"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"}
|