@scriptc/compiler 0.4.4 → 0.4.5
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 +198 -44
- package/ambient/scriptc-overrides.d.ts +21 -0
- package/dist/backend/executable-features.js +3 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/library-pack.js +2 -1
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/linker.js +11 -1
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/lld.d.ts +9 -0
- package/dist/backend/lld.js +48 -0
- package/dist/backend/lld.js.map +1 -0
- package/dist/backend/lld.test.d.ts +1 -0
- package/dist/backend/lld.test.js +53 -0
- package/dist/backend/lld.test.js.map +1 -0
- package/dist/backend/llvm/appended-array-literals.d.ts +11 -1
- package/dist/backend/llvm/appended-array-literals.js +29 -0
- package/dist/backend/llvm/appended-array-literals.js.map +1 -1
- package/dist/backend/llvm/blocks.js +10 -1
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.d.ts +13 -4
- package/dist/backend/llvm/bytes-alias.js +16 -5
- package/dist/backend/llvm/bytes-alias.js.map +1 -1
- package/dist/backend/llvm/bytes-bounds.d.ts +5 -1
- package/dist/backend/llvm/bytes-bounds.js +199 -2
- package/dist/backend/llvm/bytes-bounds.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.d.ts +45 -3
- package/dist/backend/llvm/bytes-loop-versions.js +238 -20
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +11 -4
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.d.ts +8 -2
- package/dist/backend/llvm/call-lifetimes.js +87 -18
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +132 -0
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +3 -2
- package/dist/backend/llvm/classes.js +4 -4
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +14 -2
- package/dist/backend/llvm/counted-loops.js +54 -5
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- package/dist/backend/llvm/debug-info.d.ts +42 -1
- package/dist/backend/llvm/debug-info.js +70 -1
- package/dist/backend/llvm/debug-info.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.js +2 -2
- package/dist/backend/llvm/dense-array-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.test.js +1 -0
- package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +65 -8
- package/dist/backend/llvm/dyn.js +375 -40
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +28 -8
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-journal.d.ts +8 -4
- package/dist/backend/llvm/emit-journal.js +75 -5
- package/dist/backend/llvm/emit-journal.js.map +1 -1
- package/dist/backend/llvm/emit-module.d.ts +4 -0
- package/dist/backend/llvm/emit-module.js +58 -23
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-statements.js +297 -28
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +134 -13
- package/dist/backend/llvm/emitter.js +514 -87
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +6 -4
- package/dist/backend/llvm/expr-bytes.js +31 -8
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +13 -11
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +11 -0
- package/dist/backend/llvm/expr-containers.js +87 -9
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +3 -0
- package/dist/backend/llvm/expr-control.js +83 -0
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.d.ts +1 -1
- package/dist/backend/llvm/expr-dynamic.js +22 -4
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +107 -9
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +95 -22
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/forked-analysis.d.ts +8 -0
- package/dist/backend/llvm/forked-analysis.js +43 -0
- package/dist/backend/llvm/forked-analysis.js.map +1 -0
- package/dist/backend/llvm/integer-values.d.ts +7 -0
- package/dist/backend/llvm/integer-values.js +42 -2
- package/dist/backend/llvm/integer-values.js.map +1 -1
- package/dist/backend/llvm/integer-views.d.ts +2 -1
- package/dist/backend/llvm/integer-views.js +12 -1
- package/dist/backend/llvm/integer-views.js.map +1 -1
- package/dist/backend/llvm/js-ic.d.ts +4 -0
- package/dist/backend/llvm/js-ic.js +133 -15
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/layouts.d.ts +1 -0
- package/dist/backend/llvm/layouts.js.map +1 -1
- package/dist/backend/llvm/lazy-captures.d.ts +6 -1
- package/dist/backend/llvm/lazy-captures.js +10 -5
- package/dist/backend/llvm/lazy-captures.js.map +1 -1
- package/dist/backend/llvm/lib-abi.d.ts +5 -0
- package/dist/backend/llvm/lib-abi.js +19 -0
- package/dist/backend/llvm/lib-abi.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +128 -42
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.d.ts +10 -0
- package/dist/backend/llvm/lib-filesystem.js +32 -0
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.js +2 -2
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +2 -0
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +11 -0
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +43 -0
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-tls.js +28 -3
- package/dist/backend/llvm/lib-tls.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +2 -1
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/loop-array-borrows.d.ts +4 -1
- package/dist/backend/llvm/loop-array-borrows.js +11 -5
- package/dist/backend/llvm/loop-array-borrows.js.map +1 -1
- package/dist/backend/llvm/map-entry-fusion.d.ts +5 -3
- package/dist/backend/llvm/map-entry-fusion.js +20 -11
- package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
- package/dist/backend/llvm/map-entry-fusion.test.js +14 -6
- package/dist/backend/llvm/map-entry-fusion.test.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.d.ts +16 -6
- package/dist/backend/llvm/map-number-lookup.js +41 -9
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +70 -2
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.d.ts +25 -2
- package/dist/backend/llvm/map-read-lifetimes.js +136 -6
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +8 -3
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.d.ts +5 -0
- package/dist/backend/llvm/nullable-unions.js +29 -2
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.test.js +25 -1
- package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
- package/dist/backend/llvm/record-union-keys.test.d.ts +1 -0
- package/dist/backend/llvm/record-union-keys.test.js +161 -0
- package/dist/backend/llvm/record-union-keys.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 +4 -5
- package/dist/backend/llvm/shapes.js +104 -51
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +14 -2
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.d.ts +50 -3
- package/dist/backend/llvm/speculative-integers.js +411 -24
- package/dist/backend/llvm/speculative-integers.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.test.js +103 -1
- package/dist/backend/llvm/speculative-integers.test.js.map +1 -1
- package/dist/backend/llvm/split.d.ts +10 -1
- package/dist/backend/llvm/split.js +243 -59
- package/dist/backend/llvm/split.js.map +1 -1
- package/dist/backend/llvm/split.test.js +92 -13
- package/dist/backend/llvm/split.test.js.map +1 -1
- package/dist/backend/llvm/stack-objects.test.js +3 -2
- package/dist/backend/llvm/stack-objects.test.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-reads.d.ts +13 -0
- package/dist/backend/llvm/string-reads.js +22 -0
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/string-slices.d.ts +36 -2
- package/dist/backend/llvm/string-slices.js +308 -12
- package/dist/backend/llvm/string-slices.js.map +1 -1
- package/dist/backend/llvm/string-slices.test.js +182 -3
- package/dist/backend/llvm/string-slices.test.js.map +1 -1
- package/dist/backend/llvm/string-unit-versions.d.ts +11 -0
- package/dist/backend/llvm/string-unit-versions.js +191 -0
- package/dist/backend/llvm/string-unit-versions.js.map +1 -0
- package/dist/backend/llvm/string-unit-versions.test.d.ts +1 -0
- package/dist/backend/llvm/string-unit-versions.test.js +117 -0
- package/dist/backend/llvm/string-unit-versions.test.js.map +1 -0
- package/dist/backend/llvm/test-boxed-unions.d.ts +5 -2
- package/dist/backend/llvm/test-boxed-unions.js +24 -8
- package/dist/backend/llvm/test-boxed-unions.js.map +1 -1
- package/dist/backend/llvm/unwind-abi.d.ts +52 -0
- package/dist/backend/llvm/unwind-abi.js +498 -0
- package/dist/backend/llvm/unwind-abi.js.map +1 -0
- package/dist/backend/llvm/unwind-abi.test.d.ts +1 -0
- package/dist/backend/llvm/unwind-abi.test.js +255 -0
- package/dist/backend/llvm/unwind-abi.test.js.map +1 -0
- package/dist/backend/llvm/wrapping-sums.d.ts +14 -10
- package/dist/backend/llvm/wrapping-sums.js +31 -14
- package/dist/backend/llvm/wrapping-sums.js.map +1 -1
- package/dist/backend/loop-polls.d.ts +6 -0
- package/dist/backend/loop-polls.js +24 -0
- package/dist/backend/loop-polls.js.map +1 -1
- package/dist/backend/may-throw.js +8 -8
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +12 -2
- package/dist/backend/native/executable.js +48 -6
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +4 -3
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/program-shards.d.ts +2 -2
- package/dist/backend/native/program-shards.js +2 -2
- package/dist/backend/native/program-shards.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +4 -1
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native/vendor.d.ts +1 -1
- package/dist/backend/native/vendor.js +1 -1
- package/dist/backend/native/vendor.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +3 -1
- package/dist/backend/native-codegen.js +4 -3
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +8 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-profile.d.ts +14 -0
- package/dist/backend/native-profile.js +28 -0
- package/dist/backend/native-profile.js.map +1 -1
- package/dist/backend/native-profile.test.js +8 -1
- package/dist/backend/native-profile.test.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +11 -11
- 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 +3 -1
- package/dist/backend/runtime-pack-core.js +2 -0
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.d.ts +17 -5
- package/dist/backend/runtime-pack-native.js +186 -14
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-native.test.js +160 -3
- package/dist/backend/runtime-pack-native.test.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +2 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +2 -1
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/vendor-archives.d.ts +4 -1
- package/dist/backend/vendor-archives.js +78 -4
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/backend/vendor-inputs.d.ts +3 -1
- package/dist/backend/vendor-inputs.js +3 -1
- package/dist/backend/vendor-inputs.js.map +1 -1
- package/dist/backend/warm-cache.js +1 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/cli/command.js +78 -11
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +22 -1
- package/dist/cli/usage.js +33 -3
- package/dist/cli/usage.js.map +1 -1
- package/dist/compat/fetch-profile.d.ts +15 -6
- package/dist/compat/fetch-profile.js +519 -498
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +7 -0
- package/dist/contracts/int32-elements.js +2 -1
- package/dist/contracts/int32-elements.js.map +1 -1
- package/dist/coverage/report.d.ts +14 -3
- package/dist/coverage/report.js +216 -0
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +25 -25
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/coverage/verdict-cache.d.ts +2 -0
- package/dist/coverage/verdict-cache.js +10 -1
- package/dist/coverage/verdict-cache.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +19 -0
- package/dist/diagnostics/diagnostic.js +52 -1
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +54 -0
- package/dist/diagnostics/envelope.js +7 -1
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/diagnostics/render.d.ts +7 -0
- package/dist/diagnostics/render.js +15 -4
- package/dist/diagnostics/render.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +3 -0
- package/dist/executable/executable-cache.js +1 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +1 -0
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +5 -1
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +26 -2
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/fork-target.js +67 -1
- package/dist/frontend/fork-target.js.map +1 -1
- package/dist/frontend/fork-target.test.js +43 -0
- package/dist/frontend/fork-target.test.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +4 -1
- package/dist/frontend/input-tracker.js +42 -4
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +45 -0
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/lowering/abstract-equality.js +38 -1
- package/dist/frontend/lowering/abstract-equality.js.map +1 -1
- package/dist/frontend/lowering/argument-counts.d.ts +36 -0
- package/dist/frontend/lowering/argument-counts.js +201 -0
- package/dist/frontend/lowering/argument-counts.js.map +1 -0
- package/dist/frontend/lowering/array-values.d.ts +27 -0
- package/dist/frontend/lowering/array-values.js +112 -0
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/binding-analysis.d.ts +3 -0
- package/dist/frontend/lowering/binding-analysis.js +9 -3
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/builtin-namespaces.d.ts +13 -0
- package/dist/frontend/lowering/builtin-namespaces.js +238 -0
- package/dist/frontend/lowering/builtin-namespaces.js.map +1 -0
- package/dist/frontend/lowering/builtins/compression.d.ts +4 -3
- package/dist/frontend/lowering/builtins/compression.js +86 -5
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/date-classes.js +17 -1
- package/dist/frontend/lowering/builtins/date-classes.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.d.ts +19 -5
- package/dist/frontend/lowering/builtins/dates.js +159 -8
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +26 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-streams.d.ts +4 -0
- package/dist/frontend/lowering/builtins/fs-streams.js +24 -1
- package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.d.ts +4 -1
- package/dist/frontend/lowering/builtins/json.js +9 -3
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-bindings.d.ts +6 -0
- package/dist/frontend/lowering/builtins/module-bindings.js +23 -1
- package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +5 -0
- package/dist/frontend/lowering/builtins/module-resolution.js +95 -4
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +144 -1
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +5 -1
- package/dist/frontend/lowering/builtins/readline.js +22 -11
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/reflection.d.ts +4 -1
- package/dist/frontend/lowering/builtins/reflection.js +41 -1
- package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.js +31 -2
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/webassembly.js +4 -1
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
- package/dist/frontend/lowering/builtins/x509.d.ts +33 -0
- package/dist/frontend/lowering/builtins/x509.js +431 -0
- package/dist/frontend/lowering/builtins/x509.js.map +1 -0
- package/dist/frontend/lowering/call-arguments.js +44 -0
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +1 -1
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/cjs-inline-require.js +1 -1
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
- package/dist/frontend/lowering/class-attributes.d.ts +7 -0
- package/dist/frontend/lowering/class-attributes.js +52 -10
- package/dist/frontend/lowering/class-attributes.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +13 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +174 -9
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.js +43 -8
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-method-values.js +71 -1
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.d.ts +8 -0
- package/dist/frontend/lowering/class-prototypes.js +83 -2
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-to-primitive.d.ts +5 -0
- package/dist/frontend/lowering/class-to-primitive.js +79 -7
- package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
- package/dist/frontend/lowering/coercions/state.d.ts +1 -0
- package/dist/frontend/lowering/coercions/state.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +89 -10
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.d.ts +4 -2
- package/dist/frontend/lowering/coercions/unions.js +13 -6
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +51 -15
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.d.ts +4 -1
- package/dist/frontend/lowering/containers/array-construction.js +102 -9
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +85 -5
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +346 -77
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +11 -1
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +12 -0
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +73 -25
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +4 -4
- package/dist/frontend/lowering/containers/iterator-helpers.js +8 -2
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/replacer-params.d.ts +37 -0
- package/dist/frontend/lowering/containers/replacer-params.js +294 -0
- package/dist/frontend/lowering/containers/replacer-params.js.map +1 -0
- package/dist/frontend/lowering/containers/replacer-params.test.d.ts +1 -0
- package/dist/frontend/lowering/containers/replacer-params.test.js +61 -0
- package/dist/frontend/lowering/containers/replacer-params.test.js.map +1 -0
- package/dist/frontend/lowering/containers/string-and-regexp.js +2 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +7 -3
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.d.ts +4 -2
- package/dist/frontend/lowering/cycle-initialization.js +4 -1
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
- package/dist/frontend/lowering/date-values.d.ts +9 -6
- package/dist/frontend/lowering/date-values.js +63 -16
- package/dist/frontend/lowering/date-values.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.js +16 -8
- package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.test.js +22 -6
- package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
- package/dist/frontend/lowering/dispatch-sites.js +1 -0
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
- package/dist/frontend/lowering/expressions/array-literals.d.ts +0 -8
- package/dist/frontend/lowering/expressions/array-literals.js +119 -26
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +38 -0
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +50 -6
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +35 -3
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.d.ts +2 -1
- package/dist/frontend/lowering/expressions/narrowing.js +8 -1
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +8 -2
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.js +65 -34
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +76 -11
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +6 -1
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +20 -11
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/f64-handles.d.ts +8 -0
- package/dist/frontend/lowering/f64-handles.js +16 -0
- package/dist/frontend/lowering/f64-handles.js.map +1 -0
- package/dist/frontend/lowering/frozen-records.d.ts +5 -0
- package/dist/frontend/lowering/frozen-records.js +12 -4
- package/dist/frontend/lowering/frozen-records.js.map +1 -1
- package/dist/frontend/lowering/function-context.d.ts +3 -0
- package/dist/frontend/lowering/function-context.js.map +1 -1
- package/dist/frontend/lowering/function-returns.js +15 -0
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.js +17 -6
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/instantiation-path.d.ts +3 -2
- package/dist/frontend/lowering/instantiation-path.js.map +1 -1
- package/dist/frontend/lowering/instantiation-path.test.js +6 -4
- package/dist/frontend/lowering/instantiation-path.test.js.map +1 -1
- package/dist/frontend/lowering/iterator-adapters.d.ts +4 -2
- package/dist/frontend/lowering/iterator-adapters.js +26 -33
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/js-collection-types.d.ts +11 -0
- package/dist/frontend/lowering/js-collection-types.js +490 -0
- package/dist/frontend/lowering/js-collection-types.js.map +1 -0
- package/dist/frontend/lowering/lib-boundary.js +2 -2
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.d.ts +14 -0
- package/dist/frontend/lowering/lower-assert.js +283 -26
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.js +3 -3
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +97 -7
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +59 -7
- package/dist/frontend/lowering/lower-classes.js +647 -176
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-console.js +2 -1
- package/dist/frontend/lowering/lower-console.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +5 -0
- package/dist/frontend/lowering/lower-exprs.js +52 -5
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +7 -0
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +4 -3
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +264 -46
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +28 -17
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +3 -0
- package/dist/frontend/lowering/lower-namespaces.js +44 -1
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-module.js +1 -1
- package/dist/frontend/lowering/lower-node-module.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +126 -32
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +4 -1
- package/dist/frontend/lowering/lower-stdlib.js +51 -37
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +294 -46
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +515 -121
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +52 -10
- package/dist/frontend/lowering/lowerer.js +249 -37
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +1 -1
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/module-namespace-elements.d.ts +13 -0
- package/dist/frontend/lowering/module-namespace-elements.js +118 -1
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/private-brands.d.ts +5 -0
- package/dist/frontend/lowering/private-brands.js +39 -0
- package/dist/frontend/lowering/private-brands.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-elements.d.ts +6 -0
- package/dist/frontend/lowering/runtime-optional-elements.js +14 -3
- package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
- package/dist/frontend/lowering/sanitize-class-types.js +2 -0
- package/dist/frontend/lowering/sanitize-class-types.js.map +1 -1
- package/dist/frontend/lowering/site-dependencies.d.ts +7 -2
- package/dist/frontend/lowering/site-dependencies.js +0 -15
- package/dist/frontend/lowering/site-dependencies.js.map +1 -1
- package/dist/frontend/lowering/site-dependencies.test.js +7 -5
- package/dist/frontend/lowering/site-dependencies.test.js.map +1 -1
- package/dist/frontend/lowering/string-index-bounds.d.ts +7 -4
- package/dist/frontend/lowering/string-index-bounds.js +21 -7
- package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +12 -3
- package/dist/frontend/lowering/surfaces.js +1576 -1539
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
- package/dist/frontend/lowering/symbol-fields.js +45 -2
- package/dist/frontend/lowering/symbol-fields.js.map +1 -1
- package/dist/frontend/lowering/union-narrow.d.ts +5 -2
- package/dist/frontend/lowering/union-narrow.js +6 -3
- package/dist/frontend/lowering/union-narrow.js.map +1 -1
- package/dist/frontend/lowering/union-narrow.test.js +10 -0
- package/dist/frontend/lowering/union-narrow.test.js.map +1 -1
- package/dist/frontend/npm-static-namespace-defaults.d.ts +6 -0
- package/dist/frontend/npm-static-namespace-defaults.js +163 -0
- package/dist/frontend/npm-static-namespace-defaults.js.map +1 -0
- package/dist/frontend/npm-static-namespace-defaults.test.d.ts +1 -0
- package/dist/frontend/npm-static-namespace-defaults.test.js +72 -0
- package/dist/frontend/npm-static-namespace-defaults.test.js.map +1 -0
- package/dist/frontend/npm-static-prune.js +152 -111
- package/dist/frontend/npm-static-prune.js.map +1 -1
- package/dist/frontend/npm-static.js +35 -32
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/package-shims.d.ts +7 -4
- package/dist/frontend/package-shims.js +39 -40
- package/dist/frontend/package-shims.js.map +1 -1
- package/dist/frontend/pipeline-native.d.ts +2 -2
- package/dist/frontend/pipeline-native.js +2 -2
- package/dist/frontend/pipeline-native.js.map +1 -1
- package/dist/frontend/pipeline.d.ts +19 -2
- package/dist/frontend/pipeline.js +102 -11
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program-analysis.d.ts +2 -0
- package/dist/frontend/program-analysis.js +3 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +15 -0
- package/dist/frontend/program.js +227 -64
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/resolve.d.ts +2 -0
- package/dist/frontend/resolve.js +5 -0
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/services.d.ts +3 -0
- package/dist/frontend/services.js +31 -4
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/shape-inference/analyze.d.ts +93 -0
- package/dist/frontend/shape-inference/analyze.js +3138 -0
- package/dist/frontend/shape-inference/analyze.js.map +1 -0
- package/dist/frontend/shape-inference/constant-graphs.d.ts +54 -0
- package/dist/frontend/shape-inference/constant-graphs.js +357 -0
- package/dist/frontend/shape-inference/constant-graphs.js.map +1 -0
- package/dist/frontend/shape-inference/domain.d.ts +32 -0
- package/dist/frontend/shape-inference/domain.js +104 -0
- package/dist/frontend/shape-inference/domain.js.map +1 -0
- package/dist/frontend/shape-inference/index.d.ts +7 -0
- package/dist/frontend/shape-inference/index.js +19 -0
- package/dist/frontend/shape-inference/index.js.map +1 -0
- package/dist/frontend/shape-inference/report.d.ts +21 -0
- package/dist/frontend/shape-inference/report.js +348 -0
- package/dist/frontend/shape-inference/report.js.map +1 -0
- package/dist/frontend/token-equivalence.d.ts +6 -0
- package/dist/frontend/token-equivalence.js +66 -9
- package/dist/frontend/token-equivalence.js.map +1 -1
- package/dist/frontend/token-equivalence.test.js +33 -1
- package/dist/frontend/token-equivalence.test.js.map +1 -1
- package/dist/frontend/ts7/checker-features.d.ts +15 -0
- package/dist/frontend/ts7/checker-features.js +45 -0
- package/dist/frontend/ts7/checker-features.js.map +1 -0
- package/dist/frontend/ts7/checker-features.test.d.ts +1 -0
- package/dist/frontend/ts7/checker-features.test.js +40 -0
- package/dist/frontend/ts7/checker-features.test.js.map +1 -0
- package/dist/frontend/ts7/checker-server.d.ts +19 -0
- package/dist/frontend/ts7/checker-server.js +46 -0
- package/dist/frontend/ts7/checker-server.js.map +1 -0
- package/dist/frontend/ts7/checker-server.test.d.ts +1 -0
- package/dist/frontend/ts7/checker-server.test.js +38 -0
- package/dist/frontend/ts7/checker-server.test.js.map +1 -0
- package/dist/frontend/ts7/lib-diagnostics.js +39 -13
- package/dist/frontend/ts7/lib-diagnostics.js.map +1 -1
- package/dist/frontend/ts7/lib-diagnostics.test.js +40 -0
- package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -1
- package/dist/frontend/ts7/native-api.d.ts +1 -0
- package/dist/frontend/ts7/native-api.js +25 -2
- package/dist/frontend/ts7/native-api.js.map +1 -1
- package/dist/frontend/ts7/native-process.d.ts +9 -2
- package/dist/frontend/ts7/native-process.js +22 -4
- package/dist/frontend/ts7/native-process.js.map +1 -1
- package/dist/frontend/ts7/program-host.d.ts +11 -0
- package/dist/frontend/ts7/program-host.js +36 -22
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.d.ts +9 -0
- package/dist/frontend/ts7/semantic-json.js +25 -5
- package/dist/frontend/ts7/semantic-json.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.js +3 -1
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/source-parser.js +3 -1
- package/dist/frontend/ts7/source-parser.js.map +1 -1
- package/dist/frontend/tsc-codes.js +10 -0
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +18 -6
- package/dist/frontend/type-mapper.js +160 -28
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +44 -3
- package/dist/index.js +27 -8
- package/dist/index.js.map +1 -1
- package/dist/ir/builtin-effects.js +29 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +7 -2
- package/dist/ir/builtin-signatures.js +5104 -4950
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +4 -2
- package/dist/ir/callback-specialization.js +24 -9
- package/dist/ir/callback-specialization.js.map +1 -1
- package/dist/ir/capture-values.js +4 -2
- package/dist/ir/capture-values.js.map +1 -1
- package/dist/ir/char-unit-locals.d.ts +12 -2
- package/dist/ir/char-unit-locals.js +400 -58
- package/dist/ir/char-unit-locals.js.map +1 -1
- package/dist/ir/char-unit-locals.test.js +111 -0
- package/dist/ir/char-unit-locals.test.js.map +1 -1
- package/dist/ir/constant-globals.js +18 -4
- package/dist/ir/constant-globals.js.map +1 -1
- package/dist/ir/expression-inlining.d.ts +15 -0
- package/dist/ir/expression-inlining.js +166 -0
- package/dist/ir/expression-inlining.js.map +1 -0
- package/dist/ir/expression-inlining.test.d.ts +1 -0
- package/dist/ir/expression-inlining.test.js +123 -0
- package/dist/ir/expression-inlining.test.js.map +1 -0
- package/dist/ir/function-references.js +2 -0
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +6 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/int32-arrays.d.ts +27 -6
- package/dist/ir/int32-arrays.js +106 -18
- package/dist/ir/int32-arrays.js.map +1 -1
- package/dist/ir/int32-slots.d.ts +26 -1
- package/dist/ir/int32-slots.js +284 -5
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +5 -0
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loop-facts.d.ts +5 -0
- package/dist/ir/integer-loop-facts.js +90 -1
- package/dist/ir/integer-loop-facts.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +14 -1
- package/dist/ir/integer-loops.js +93 -7
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +70 -0
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.js +18 -2
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +64 -4
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +50 -8
- package/dist/ir/ir.js +38 -12
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/js-ic.d.ts +25 -5
- package/dist/ir/js-ic.js +93 -13
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +153 -0
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/node-index.d.ts +7 -0
- package/dist/ir/node-index.js +32 -0
- package/dist/ir/node-index.js.map +1 -1
- package/dist/ir/receiver-readers.d.ts +6 -1
- package/dist/ir/receiver-readers.js +53 -28
- package/dist/ir/receiver-readers.js.map +1 -1
- package/dist/ir/row-pairs.d.ts +15 -0
- package/dist/ir/row-pairs.js +373 -0
- package/dist/ir/row-pairs.js.map +1 -0
- package/dist/ir/row-pairs.test.d.ts +1 -0
- package/dist/ir/row-pairs.test.js +129 -0
- package/dist/ir/row-pairs.test.js.map +1 -0
- package/dist/ir/runtime-features.d.ts +17 -4
- package/dist/ir/runtime-features.js +69 -12
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/scalar-records.d.ts +15 -0
- package/dist/ir/scalar-records.js +301 -1
- package/dist/ir/scalar-records.js.map +1 -1
- package/dist/ir/scalar-records.test.js +181 -1
- package/dist/ir/scalar-records.test.js.map +1 -1
- package/dist/ir/self-captures.js +8 -0
- package/dist/ir/self-captures.js.map +1 -1
- package/dist/ir/validate.js +37 -28
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/fence-eval.js +4 -4
- package/dist/library/fence-eval.js.map +1 -1
- package/dist/library/ir-policy.js +4 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.d.ts +1 -0
- package/dist/library/library-cache.js +1 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +13 -0
- package/dist/library/library-cache.test.js.map +1 -1
- package/dist/native/cache.d.ts +5 -1
- package/dist/native/cache.js +15 -3
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cli.js +6 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.d.ts +3 -0
- package/dist/native/compiler.js +72 -26
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +87 -2
- package/dist/native/compiler.test.js.map +1 -1
- package/dist/native/executable-cache-open.test.d.ts +1 -0
- package/dist/native/executable-cache-open.test.js +80 -0
- package/dist/native/executable-cache-open.test.js.map +1 -0
- package/dist/native/executable-cache.d.ts +43 -3
- package/dist/native/executable-cache.js +177 -36
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/executable-cache.test.js +103 -0
- package/dist/native/executable-cache.test.js.map +1 -1
- package/dist/native/prepare.js +38 -16
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +51 -1
- package/dist/native/prepare.test.js.map +1 -1
- package/dist/native/sanitizer.d.ts +1 -1
- package/dist/native/sanitizer.js +17 -3
- package/dist/native/sanitizer.js.map +1 -1
- package/dist/native/sanitizer.test.js +4 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/node-islands/classify.d.ts +14 -0
- package/dist/node-islands/classify.js +114 -0
- package/dist/node-islands/classify.js.map +1 -0
- package/dist/node-islands/detect.d.ts +13 -0
- package/dist/node-islands/detect.js +805 -0
- package/dist/node-islands/detect.js.map +1 -0
- package/dist/node-islands/detect.test.d.ts +1 -0
- package/dist/node-islands/detect.test.js +136 -0
- package/dist/node-islands/detect.test.js.map +1 -0
- package/dist/node-islands/origin.d.ts +21 -0
- package/dist/node-islands/origin.js +60 -0
- package/dist/node-islands/origin.js.map +1 -0
- package/dist/node-islands/policy.d.ts +49 -0
- package/dist/node-islands/policy.js +130 -0
- package/dist/node-islands/policy.js.map +1 -0
- package/dist/node-islands/report.d.ts +22 -0
- package/dist/node-islands/report.js +326 -0
- package/dist/node-islands/report.js.map +1 -0
- package/dist/node-islands/report.test.d.ts +1 -0
- package/dist/node-islands/report.test.js +228 -0
- package/dist/node-islands/report.test.js.map +1 -0
- package/dist/node-islands/rules.d.ts +20 -0
- package/dist/node-islands/rules.js +91 -0
- package/dist/node-islands/rules.js.map +1 -0
- package/dist/node-islands/scan.d.ts +53 -0
- package/dist/node-islands/scan.js +104 -0
- package/dist/node-islands/scan.js.map +1 -0
- package/dist/node-islands/summary.d.ts +78 -0
- package/dist/node-islands/summary.js +26 -0
- package/dist/node-islands/summary.js.map +1 -0
- package/dist/project-config.d.ts +50 -0
- package/dist/project-config.js +372 -0
- package/dist/project-config.js.map +1 -0
- package/dist/project-config.test.d.ts +1 -0
- package/dist/project-config.test.js +154 -0
- package/dist/project-config.test.js.map +1 -0
- package/dist/wasm/discover.js +6 -31
- package/dist/wasm/discover.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +20 -35
package/dist/backend/llvm/dyn.js
CHANGED
|
@@ -5,7 +5,7 @@ import { BYTES_ELEM_NUM, SCR_ARR_FIELD, SCR_ARR_STATES, f64Lit, sizeToDouble } f
|
|
|
5
5
|
import { emitUnionPeek, emitUnionTag } from "./union-repr.js";
|
|
6
6
|
import { INLINE_UNION_FIELD, loadInlineUnion, stackUnionBox, storeInlineUnion, unionBoxBits, } from "./inline-unions.js";
|
|
7
7
|
import { InternalCompilerError } from "../../errors.js";
|
|
8
|
-
import { accessorSlotProp, DYN_HANDLE_KINDS, isDirentShape, KEY_ORDER_FIELD, shapeKeyOrders, isDynTypedRefType, isRefCounted, isUnitType,
|
|
8
|
+
import { accessorSlotProp, DYN_HANDLE_KINDS, isDirentShape, KEY_ORDER_FIELD, shapeKeyOrders, isDynTypedRefType, isRefCounted, isUnitType, recordHandleCodecClass, textCodecRecordClass, typeKey, } from "../../ir/ir.js";
|
|
9
9
|
import { dynDesc, streamTypedRefEligible } from "../../ir/analysis.js";
|
|
10
10
|
import { mangleRecordNew, mangleRecordStruct } from "../mangle.js";
|
|
11
11
|
import { BlockBuilder } from "./blocks.js";
|
|
@@ -13,6 +13,24 @@ import { llvmCommentText } from "./common.js";
|
|
|
13
13
|
import { arrNewCall, elemAccess, llFieldType, mapFlagsOffset, releaseSym, traceAdapter, traceArg, vAdapters, } from "./shapes.js";
|
|
14
14
|
import { LlvmUnsupportedError } from "./unsupported.js";
|
|
15
15
|
import { recordMayKeepSource, recordSourceFieldOrder } from "./record-sources.js";
|
|
16
|
+
/** typeKey with `?` after every `(T | undefined)[]` (optionalElements),
|
|
17
|
+
* at any depth of arrays, Maps, Sets and promises: checked conversions to
|
|
18
|
+
* `number[][]` and `(number | undefined)[][]` need separate helpers, though
|
|
19
|
+
* the two types share a typeKey. */
|
|
20
|
+
function checkedConversionKey(t) {
|
|
21
|
+
switch (t.kind) {
|
|
22
|
+
case "array":
|
|
23
|
+
return `array<${checkedConversionKey(t.elem)}>${t.optionalElements ? "?" : ""}`;
|
|
24
|
+
case "map":
|
|
25
|
+
return `map<${checkedConversionKey(t.key)},${checkedConversionKey(t.value)}>`;
|
|
26
|
+
case "set":
|
|
27
|
+
return `set<${checkedConversionKey(t.elem)}>`;
|
|
28
|
+
case "promise":
|
|
29
|
+
return `promise<${checkedConversionKey(t.inner)}>`;
|
|
30
|
+
default:
|
|
31
|
+
return typeKey(t);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
16
34
|
/** Whether to-dyn of a record shape keeps the record itself: an empty shape
|
|
17
35
|
* and an event-listener record (a `handleEvent` function field) box their
|
|
18
36
|
* identity. Every other shape, tuples included, copies its fields into a
|
|
@@ -45,10 +63,12 @@ export const DYN_HANDLE_TAG_NUM = {
|
|
|
45
63
|
export const TEXT_CODEC_TAG_NUM = {
|
|
46
64
|
TextDecoder: 76,
|
|
47
65
|
TextEncoder: 77,
|
|
66
|
+
StringDecoder: 78,
|
|
48
67
|
};
|
|
49
68
|
/** The decoder record fields scr_text_decoder_to_dyn reads, in its
|
|
50
69
|
* parameter order. */
|
|
51
70
|
const TEXT_DECODER_FIELDS = ["%TextDecoder", "%fatal", "%ignoreBOM", "%state"];
|
|
71
|
+
const STRING_DECODER_FIELDS = ["%enc", "%pending"];
|
|
52
72
|
/** Handle kinds whose runtime unit boxes them through its own function,
|
|
53
73
|
* which installs the tag's ops on first use (scr_crypto.h). Programs that
|
|
54
74
|
* never box one of these values do not link its dynamic members. */
|
|
@@ -89,6 +109,17 @@ export const DYN_KIND = {
|
|
|
89
109
|
BIGINT: 14,
|
|
90
110
|
SYMBOL: 15,
|
|
91
111
|
};
|
|
112
|
+
/** Union arm kinds whose matchers reject every plain dyn object
|
|
113
|
+
* (trustedArmByLiteral). */
|
|
114
|
+
const NON_OBJECT_ARM_KINDS = new Set([
|
|
115
|
+
"f64",
|
|
116
|
+
"string",
|
|
117
|
+
"bool",
|
|
118
|
+
"nullT",
|
|
119
|
+
"undefinedT",
|
|
120
|
+
"bigint",
|
|
121
|
+
"symbol",
|
|
122
|
+
]);
|
|
92
123
|
const FN_ATTRS = "#0";
|
|
93
124
|
/** scr_dyn_builtin_stream_check's kind for a runtime stream class (the
|
|
94
125
|
* numbering of scr_dyn_builtin_class.c), or null. */
|
|
@@ -102,6 +133,10 @@ function builtinStreamKind(className) {
|
|
|
102
133
|
};
|
|
103
134
|
return kinds[className] ?? null;
|
|
104
135
|
}
|
|
136
|
+
/** Unions whose discriminant has fewer string literals keep one literal test
|
|
137
|
+
* per arm (dispatchValues): one runtime lookup costs about what a few
|
|
138
|
+
* literal tests do. */
|
|
139
|
+
const DISCRIMINANT_DISPATCH_VALUES = 4;
|
|
105
140
|
export class LlDyn {
|
|
106
141
|
host;
|
|
107
142
|
dynMatchers = new Map();
|
|
@@ -276,6 +311,48 @@ export class LlDyn {
|
|
|
276
311
|
this.host.declare(`declare void @scr_dyn_build_add(ptr, ptr, ptr)`);
|
|
277
312
|
B.line(`call void @scr_dyn_build_add(ptr %d, ptr @${name}, ptr ${value})`);
|
|
278
313
|
}
|
|
314
|
+
/** Whether a builder of `def` may pick a plain object's arm by its literal
|
|
315
|
+
* discriminator alone inside a trusted build (scr_dyn_trust_enter): the
|
|
316
|
+
* arms' literals are disjoint, and every arm without a literal has a kind
|
|
317
|
+
* no plain object matches. The value then matched exactly one arm with a
|
|
318
|
+
* literal, the arm whose literal it carries. */
|
|
319
|
+
trustedArmByLiteral(def) {
|
|
320
|
+
const discriminant = def.discriminant;
|
|
321
|
+
if (!discriminant)
|
|
322
|
+
return false;
|
|
323
|
+
const seen = new Set();
|
|
324
|
+
for (const { values } of discriminant.cases) {
|
|
325
|
+
for (const value of values) {
|
|
326
|
+
const key = `${typeof value}:${String(value)}`;
|
|
327
|
+
if (seen.has(key))
|
|
328
|
+
return false;
|
|
329
|
+
seen.add(key);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return def.arms.every((arm, tag) => discriminant.cases.some((candidate) => candidate.tag === tag) ||
|
|
333
|
+
NON_OBJECT_ARM_KINDS.has(arm.kind));
|
|
334
|
+
}
|
|
335
|
+
/** Per arm of `def`, the dyn kind of the values a builder may convert into
|
|
336
|
+
* that arm without matching its structure inside a trusted build, or null.
|
|
337
|
+
* A value there already matched one of the union's arms, so the arm is
|
|
338
|
+
* known when it is the only arm that takes values of its kind: the arm
|
|
339
|
+
* whose literal a plain object carries (trustedArmByLiteral), or the one
|
|
340
|
+
* arm a plain object or an array can match at all. */
|
|
341
|
+
trustedArmKinds(def) {
|
|
342
|
+
const byLiteral = this.trustedArmByLiteral(def);
|
|
343
|
+
const objectArms = def.arms.flatMap((arm, tag) => NON_OBJECT_ARM_KINDS.has(arm.kind) ? [] : [tag]);
|
|
344
|
+
return def.arms.map((arm, tag) => {
|
|
345
|
+
if (def.discriminant?.cases.some((candidate) => candidate.tag === tag))
|
|
346
|
+
return byLiteral ? DYN_KIND.OBJ : null;
|
|
347
|
+
if (objectArms.length !== 1 || objectArms[0] !== tag)
|
|
348
|
+
return null;
|
|
349
|
+
if (arm.kind === "array")
|
|
350
|
+
return DYN_KIND.ARR;
|
|
351
|
+
if (arm.kind === "record" && this.host.recordsById.get(arm.shapeId)?.tuple !== true)
|
|
352
|
+
return DYN_KIND.OBJ;
|
|
353
|
+
return null;
|
|
354
|
+
});
|
|
355
|
+
}
|
|
279
356
|
/** The order a dyn value tries a union's arms in: the canonical order,
|
|
280
357
|
* except that among the record arms, those with more required fields go
|
|
281
358
|
* first, then those with more fields. Records are width-tolerant, so an
|
|
@@ -304,9 +381,99 @@ export class LlDyn {
|
|
|
304
381
|
records.forEach((slot, k) => (order[slot] = widest[k]));
|
|
305
382
|
return order;
|
|
306
383
|
}
|
|
384
|
+
/** The string literals of `def`'s discriminant when its arms are chosen
|
|
385
|
+
* by reading the discriminant once (unionArmsByDiscriminant), or null
|
|
386
|
+
* when the union keeps one literal test per arm: some literal is not a
|
|
387
|
+
* string, or there are fewer than DISCRIMINANT_DISPATCH_VALUES. */
|
|
388
|
+
dispatchValues(def) {
|
|
389
|
+
const values = [];
|
|
390
|
+
for (const guard of def.discriminant?.cases ?? []) {
|
|
391
|
+
if (guard.values.length === 0)
|
|
392
|
+
return null;
|
|
393
|
+
for (const value of guard.values) {
|
|
394
|
+
if (typeof value !== "string")
|
|
395
|
+
return null;
|
|
396
|
+
if (!values.includes(value))
|
|
397
|
+
values.push(value);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
return values.length < DISCRIMINANT_DISPATCH_VALUES ? null : values;
|
|
401
|
+
}
|
|
402
|
+
/** Branches to `hits[tag]` for the first arm in `order` that `%d` matches
|
|
403
|
+
* (unionArmMatch), or to `none` when no arm does, for
|
|
404
|
+
* a union whose discriminant literals are `values` (dispatchValues). The
|
|
405
|
+
* discriminant is read once (scr_dyn_discriminant_case, against the
|
|
406
|
+
* constant `table`), and only the arms whose literal it holds and the arms
|
|
407
|
+
* without a literal are tested, in `order`: every other arm's literal test
|
|
408
|
+
* fails. An arm's failed check can run a getter that changes the
|
|
409
|
+
* discriminant, so it is read again after each one; when its case
|
|
410
|
+
* changed, the tests continue arm by arm after the failed arm, as they
|
|
411
|
+
* would have run from the first arm. A value the runtime cannot classify
|
|
412
|
+
* that way (a typed capsule, an accessor, an inherited discriminant) takes
|
|
413
|
+
* the tests arm by arm. */
|
|
414
|
+
unionArmsByDiscriminant(B, def, values, order, hits, none, preserveRefs, table, trustedKinds = def.arms.map(() => null)) {
|
|
415
|
+
const discriminant = def.discriminant;
|
|
416
|
+
const literalsOf = (tag) => discriminant.cases.find((candidate) => candidate.tag === tag)?.values ?? null;
|
|
417
|
+
const host = this.host;
|
|
418
|
+
this.defs.push(`${table} = private unnamed_addr constant [${values.length} x ptr] [${values.map((value) => `ptr ${host.internLiteral(value)}`).join(", ")}]`, ``);
|
|
419
|
+
host.declare(`declare i32 @scr_dyn_discriminant_case(ptr, ptr, ptr, ${host.sizeType})`);
|
|
420
|
+
const classify = () => {
|
|
421
|
+
const index = B.tmp();
|
|
422
|
+
B.line(`${index} = call i32 @scr_dyn_discriminant_case(ptr %d, ptr ${host.internLiteral(discriminant.field)}, ptr ${table}, ${host.sizeType} ${values.length})`);
|
|
423
|
+
return index;
|
|
424
|
+
};
|
|
425
|
+
// The arm-by-arm tests, entered at any arm (`from[i]` tests order[i]
|
|
426
|
+
// and the arms after it).
|
|
427
|
+
const tests = B.newLabel("du.tests");
|
|
428
|
+
const from = order.map((_, i) => (i === 0 ? tests : B.newLabel("du.t")));
|
|
429
|
+
const after = (position) => position + 1 < order.length ? from[position + 1] : none;
|
|
430
|
+
// Tests the arms a value in case `k` (-1: no literal) can match.
|
|
431
|
+
const tryCase = (k) => {
|
|
432
|
+
const value = k < 0 ? null : values[k];
|
|
433
|
+
const positions = order
|
|
434
|
+
.map((_, position) => position)
|
|
435
|
+
.filter((position) => {
|
|
436
|
+
const literals = literalsOf(order[position]);
|
|
437
|
+
return literals === null || (value !== null && literals.includes(value));
|
|
438
|
+
});
|
|
439
|
+
if (positions.length === 0) {
|
|
440
|
+
B.br(none);
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
443
|
+
positions.forEach((position, index) => {
|
|
444
|
+
const tag = order[position];
|
|
445
|
+
const failed = B.newLabel("du.c.f");
|
|
446
|
+
this.unionArmStructure(B, def, tag, hits[tag], failed, preserveRefs, trustedKinds[tag]);
|
|
447
|
+
B.startBlock(failed);
|
|
448
|
+
const next = index === positions.length - 1 ? none : B.newLabel("du.c.n");
|
|
449
|
+
const same = B.tmp();
|
|
450
|
+
B.line(`${same} = icmp eq i32 ${classify()}, ${k}`);
|
|
451
|
+
B.condBr(same, next, after(position));
|
|
452
|
+
if (next !== none)
|
|
453
|
+
B.startBlock(next);
|
|
454
|
+
});
|
|
455
|
+
};
|
|
456
|
+
const index = classify();
|
|
457
|
+
const unmatched = B.newLabel("du.none");
|
|
458
|
+
const cases = values.map(() => B.newLabel("du.case"));
|
|
459
|
+
B.terminate(`switch i32 ${index}, label %${tests} [ i32 -1, label %${unmatched} ${cases.map((label, k) => `i32 ${k}, label %${label}`).join(" ")} ]`);
|
|
460
|
+
values.forEach((_, k) => {
|
|
461
|
+
B.startBlock(cases[k]);
|
|
462
|
+
tryCase(k);
|
|
463
|
+
});
|
|
464
|
+
B.startBlock(unmatched);
|
|
465
|
+
tryCase(-1);
|
|
466
|
+
order.forEach((tag, position) => {
|
|
467
|
+
B.startBlock(from[position]);
|
|
468
|
+
this.unionArmMatch(B, def, tag, hits[tag], after(position), preserveRefs, trustedKinds[tag]);
|
|
469
|
+
});
|
|
470
|
+
}
|
|
307
471
|
/** Branch to a variant only after its literal discriminator and complete
|
|
308
|
-
* structure match. Use the same path for predicates and builders.
|
|
309
|
-
|
|
472
|
+
* structure match. Use the same path for predicates and builders. With a
|
|
473
|
+
* `trustedKind` (builders, trustedArmKinds), a value of that dyn kind
|
|
474
|
+
* inside a trusted build skips the structure match once its literal
|
|
475
|
+
* matched. */
|
|
476
|
+
unionArmMatch(B, def, tag, yes, no, preserveRefs = false, trustedKind = null) {
|
|
310
477
|
const guard = def.discriminant?.cases.find((candidate) => candidate.tag === tag);
|
|
311
478
|
if (guard && def.discriminant) {
|
|
312
479
|
const structure = B.newLabel("du.shape");
|
|
@@ -329,6 +496,25 @@ export class LlDyn {
|
|
|
329
496
|
});
|
|
330
497
|
B.startBlock(structure);
|
|
331
498
|
}
|
|
499
|
+
this.unionArmStructure(B, def, tag, yes, no, preserveRefs, trustedKind);
|
|
500
|
+
}
|
|
501
|
+
/** The part of unionArmMatch past the arm's literal test. With a
|
|
502
|
+
* `trustedKind`, a value of that dyn kind inside a trusted build skips the
|
|
503
|
+
* structure match. */
|
|
504
|
+
unionArmStructure(B, def, tag, yes, no, preserveRefs, trustedKind = null) {
|
|
505
|
+
if (trustedKind !== null) {
|
|
506
|
+
this.host.declare(`declare zeroext i1 @scr_dyn_trusted_build()`);
|
|
507
|
+
const kind = this.kindOf(B, "%d");
|
|
508
|
+
const sameKind = B.tmp();
|
|
509
|
+
const trusted = B.tmp();
|
|
510
|
+
const skip = B.tmp();
|
|
511
|
+
B.line(`${sameKind} = icmp eq i32 ${kind}, ${trustedKind}`);
|
|
512
|
+
B.line(`${trusted} = call zeroext i1 @scr_dyn_trusted_build()`);
|
|
513
|
+
B.line(`${skip} = and i1 ${sameKind}, ${trusted}`);
|
|
514
|
+
const full = B.newLabel("du.full");
|
|
515
|
+
B.condBr(skip, yes, full);
|
|
516
|
+
B.startBlock(full);
|
|
517
|
+
}
|
|
332
518
|
const matches = B.tmp();
|
|
333
519
|
B.line(`${matches} = call zeroext i1 @${this.dynMatchHelper(def.arms[tag], preserveRefs)}(ptr %d)`);
|
|
334
520
|
B.condBr(matches, yes, no);
|
|
@@ -403,6 +589,12 @@ export class LlDyn {
|
|
|
403
589
|
}
|
|
404
590
|
/* ── dyn node plumbing ─────────────────────────────────────────────── */
|
|
405
591
|
/** Loads a dyn node's kind tag (after the size_t rc word). */
|
|
592
|
+
/** i1: the checked-dynamic value `d` is undefined. */
|
|
593
|
+
isUndefined(B, d) {
|
|
594
|
+
const is = B.tmp();
|
|
595
|
+
B.line(`${is} = icmp eq i32 ${this.kindOf(B, d)}, ${DYN_KIND.UNDEF}`);
|
|
596
|
+
return is;
|
|
597
|
+
}
|
|
406
598
|
kindOf(B, d) {
|
|
407
599
|
const p = B.tmp();
|
|
408
600
|
const k = B.tmp();
|
|
@@ -732,7 +924,7 @@ export class LlDyn {
|
|
|
732
924
|
}
|
|
733
925
|
/** `sc_dm_<n>(ptr d) -> i1` — does this dyn fit T? Never throws. */
|
|
734
926
|
dynMatchHelper(t, preserveRefs = false) {
|
|
735
|
-
const key =
|
|
927
|
+
const key = checkedConversionKey(t);
|
|
736
928
|
const matcherKey = preserveRefs ? `identity:${key}` : key;
|
|
737
929
|
const existing = this.dynMatchers.get(matcherKey);
|
|
738
930
|
if (existing)
|
|
@@ -1025,7 +1217,7 @@ export class LlDyn {
|
|
|
1025
1217
|
B.startBlock(l0);
|
|
1026
1218
|
const n = this.lenOf(B, "%d");
|
|
1027
1219
|
const items = this.itemsOf(B, "%d");
|
|
1028
|
-
this.i64Loop(B, "dm.el", n, (i, brNext) => {
|
|
1220
|
+
this.i64Loop(B, "dm.el", n, (i, brNext, next) => {
|
|
1029
1221
|
this.host.declare(`declare zeroext i1 @scr_dyn_arr_has_index(ptr, ${this.S})`);
|
|
1030
1222
|
const present = B.tmp();
|
|
1031
1223
|
B.line(`${present} = call zeroext i1 @scr_dyn_arr_has_index(ptr %d, ${this.S} ${i})`);
|
|
@@ -1036,6 +1228,15 @@ export class LlDyn {
|
|
|
1036
1228
|
brNext();
|
|
1037
1229
|
B.startBlock(valueLabel);
|
|
1038
1230
|
const e = this.itemAt(B, items, i);
|
|
1231
|
+
if (t.optionalElements) {
|
|
1232
|
+
// A `(T | undefined)[]` stored as T elements takes undefined
|
|
1233
|
+
// elements as well.
|
|
1234
|
+
const undef = B.tmp();
|
|
1235
|
+
const checkLabel = B.newLabel("dm.check");
|
|
1236
|
+
B.line(`${undef} = icmp eq i32 ${this.kindOf(B, e)}, ${DYN_KIND.UNDEF}`);
|
|
1237
|
+
B.condBr(undef, next, checkLabel);
|
|
1238
|
+
B.startBlock(checkLabel);
|
|
1239
|
+
}
|
|
1039
1240
|
const ok = B.tmp();
|
|
1040
1241
|
B.line(`${ok} = call zeroext i1 @${m}(ptr ${e})`);
|
|
1041
1242
|
const lOk = B.newLabel("dm.eo");
|
|
@@ -1053,11 +1254,18 @@ export class LlDyn {
|
|
|
1053
1254
|
throw new InternalCompilerError(`llvm emitter bug: dynCheck of unknown union ${t.unionId}`);
|
|
1054
1255
|
// Arms in canonical order; any full match answers true.
|
|
1055
1256
|
const yes = B.newLabel("dm.y");
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
B.
|
|
1257
|
+
const values = this.dispatchValues(def);
|
|
1258
|
+
if (values !== null) {
|
|
1259
|
+
const no = B.newLabel("dm.n");
|
|
1260
|
+
this.unionArmsByDiscriminant(B, def, values, def.arms.map((_, tag) => tag), def.arms.map(() => yes), no, preserveRefs, `@${name}.cases`);
|
|
1261
|
+
B.startBlock(no);
|
|
1060
1262
|
}
|
|
1263
|
+
else
|
|
1264
|
+
for (let tag = 0; tag < def.arms.length; tag++) {
|
|
1265
|
+
const ln = B.newLabel("dm.n");
|
|
1266
|
+
this.unionArmMatch(B, def, tag, yes, ln, preserveRefs);
|
|
1267
|
+
B.startBlock(ln);
|
|
1268
|
+
}
|
|
1061
1269
|
B.terminate(`ret i1 false`);
|
|
1062
1270
|
B.startBlock(yes);
|
|
1063
1271
|
B.terminate(`ret i1 true`);
|
|
@@ -1106,8 +1314,9 @@ export class LlDyn {
|
|
|
1106
1314
|
* fields, and at least one unless an index signature collects the
|
|
1107
1315
|
* members), record members typed as unions of those leaves, records and
|
|
1108
1316
|
* arrays, null and undefined (optional and nullable members; see
|
|
1109
|
-
* jsonUnionSupported),
|
|
1110
|
-
*
|
|
1317
|
+
* jsonUnionSupported), discriminated unions of records anywhere (see
|
|
1318
|
+
* jsonDiscriminatedSupported), and index signatures whose value type is
|
|
1319
|
+
* not a union. Everything else keeps the checked-dynamic route alone. */
|
|
1111
1320
|
jsonSchemaSupported(t, visiting, member = false) {
|
|
1112
1321
|
switch (t.kind) {
|
|
1113
1322
|
case "f64":
|
|
@@ -1132,12 +1341,45 @@ export class LlDyn {
|
|
|
1132
1341
|
this.jsonSchemaSupported(f.type, visiting, true))) &&
|
|
1133
1342
|
(!index || this.jsonSchemaSupported(index, visiting)));
|
|
1134
1343
|
}
|
|
1135
|
-
case "union":
|
|
1344
|
+
case "union": {
|
|
1345
|
+
const def = this.host.unionsById.get(t.unionId);
|
|
1346
|
+
if (def?.discriminant)
|
|
1347
|
+
return this.jsonDiscriminatedSupported(def, visiting);
|
|
1136
1348
|
return member && this.jsonUnionSupported(t, visiting);
|
|
1349
|
+
}
|
|
1137
1350
|
default:
|
|
1138
1351
|
return false;
|
|
1139
1352
|
}
|
|
1140
1353
|
}
|
|
1354
|
+
/** A discriminated union the one-pass parser writes directly, as a record
|
|
1355
|
+
* member, an array element or the whole document: record arms that each
|
|
1356
|
+
* name the string literals their discriminant member holds, every
|
|
1357
|
+
* literal naming one arm, plus null and undefined arms. An object then
|
|
1358
|
+
* selects the one arm whose literal its discriminant member holds, the
|
|
1359
|
+
* only arm the checked route's literal tests leave to match
|
|
1360
|
+
* (unionArmsByDiscriminant); an object holding no such literal declines. */
|
|
1361
|
+
jsonDiscriminatedSupported(def, visiting) {
|
|
1362
|
+
const discriminant = def.discriminant;
|
|
1363
|
+
const literals = new Set();
|
|
1364
|
+
let records = 0;
|
|
1365
|
+
const supported = def.arms.every((arm, tag) => {
|
|
1366
|
+
if (arm.kind === "nullT" || arm.kind === "undefinedT")
|
|
1367
|
+
return true;
|
|
1368
|
+
if (arm.kind !== "record")
|
|
1369
|
+
return false;
|
|
1370
|
+
records++;
|
|
1371
|
+
const guard = discriminant.cases.find((candidate) => candidate.tag === tag);
|
|
1372
|
+
if (!guard || guard.values.length === 0)
|
|
1373
|
+
return false;
|
|
1374
|
+
for (const value of guard.values) {
|
|
1375
|
+
if (typeof value !== "string" || literals.has(value))
|
|
1376
|
+
return false;
|
|
1377
|
+
literals.add(value);
|
|
1378
|
+
}
|
|
1379
|
+
return this.jsonSchemaSupported(arm, visiting);
|
|
1380
|
+
});
|
|
1381
|
+
return supported && records >= 2;
|
|
1382
|
+
}
|
|
1141
1383
|
/** A union record member the one-pass parser writes directly: every arm
|
|
1142
1384
|
* a number, boolean, string, null, undefined, or a supported record or
|
|
1143
1385
|
* array, with at most one record and one array arm and no discriminant.
|
|
@@ -1231,9 +1473,15 @@ export class LlDyn {
|
|
|
1231
1473
|
body = `${S} 3, ${S} ${entries.length}, ptr ${fields}, ptr ${overflow.elem}, ptr @${mangleRecordNew(t.shapeId)}, ptr null, ptr ${vAdapters(host, t).release}, ptr null, ${S} ${overflow.offset}`;
|
|
1232
1474
|
break;
|
|
1233
1475
|
}
|
|
1234
|
-
case "union":
|
|
1235
|
-
|
|
1476
|
+
case "union": {
|
|
1477
|
+
// A discriminated union can be a whole document, whose value the
|
|
1478
|
+
// parser releases when text follows it.
|
|
1479
|
+
const release = host.unionsById.get(t.unionId)?.discriminant
|
|
1480
|
+
? vAdapters(host, t).release
|
|
1481
|
+
: "null";
|
|
1482
|
+
body = `${S} 5, ${S} 0, ptr null, ptr null, ptr null, ptr null, ptr ${release}, ptr @${this.jsonUnionSchema(t, name)}, ${S} 0`;
|
|
1236
1483
|
break;
|
|
1484
|
+
}
|
|
1237
1485
|
default:
|
|
1238
1486
|
throw new InternalCompilerError(`llvm emitter bug: JSON schema of ${t.kind}`);
|
|
1239
1487
|
}
|
|
@@ -1244,7 +1492,11 @@ export class LlDyn {
|
|
|
1244
1492
|
/** The ScrJsonUnion descriptor of a union member (scr_json.h layout):
|
|
1245
1493
|
* its slot representation, the arm each JSON value kind selects, and the
|
|
1246
1494
|
* values the runtime stores for null and for a missing member. Boxed
|
|
1247
|
-
* unions build their boxes through `<name>_box`.
|
|
1495
|
+
* unions build their boxes through `<name>_box`. A discriminated union
|
|
1496
|
+
* also lists its object arms by discriminant literal (`<name>_cases`),
|
|
1497
|
+
* and, because it can be an array element or a whole document, whose
|
|
1498
|
+
* values are boxes unless the union is a pointer union, it keeps its null
|
|
1499
|
+
* value and box whatever its field representation. */
|
|
1248
1500
|
jsonUnionSchema(t, name) {
|
|
1249
1501
|
const host = this.host;
|
|
1250
1502
|
const S = host.sizeType;
|
|
@@ -1262,10 +1514,11 @@ export class LlDyn {
|
|
|
1262
1514
|
: "ptr null");
|
|
1263
1515
|
const nullTag = tags[0];
|
|
1264
1516
|
const absentTag = tags[6];
|
|
1265
|
-
const
|
|
1266
|
-
const
|
|
1517
|
+
const values = !inline || def.discriminant !== undefined;
|
|
1518
|
+
const nullValue = values && nullTag >= 0 ? host.unitInstanceRef(t.unionId, nullTag) : "null";
|
|
1519
|
+
const absentValue = values && absentTag >= 0 ? host.absentInstanceRef(t.unionId) : "null";
|
|
1267
1520
|
let box = "null";
|
|
1268
|
-
if (repr === 2) {
|
|
1521
|
+
if (repr === 2 || (def.discriminant && !nullable)) {
|
|
1269
1522
|
box = `@${name}_box`;
|
|
1270
1523
|
const lines = [`define internal ptr ${box}(i32 %tag, i64 %bits) ${FN_ATTRS} {`, `entry:`];
|
|
1271
1524
|
const cases = [];
|
|
@@ -1292,8 +1545,17 @@ export class LlDyn {
|
|
|
1292
1545
|
});
|
|
1293
1546
|
this.defs.push(...lines, ` switch i32 %tag, label %none [ ${cases.join(" ")} ]`, `none:`, ` unreachable`, ...blocks, `}`, ``);
|
|
1294
1547
|
}
|
|
1548
|
+
let cases = "null";
|
|
1549
|
+
if (def.discriminant) {
|
|
1550
|
+
const discriminant = def.discriminant;
|
|
1551
|
+
const caseTy = `{ ptr, ${S}, ${S}, ptr }`;
|
|
1552
|
+
const entries = discriminant.cases.flatMap((guard) => guard.values.map((value) => `${caseTy} { ptr ${host.cstr(String(value))}, ${S} ${Buffer.byteLength(String(value), "utf8")}, ${S} ${guard.tag}, ptr @${this.jsonSchema(def.arms[guard.tag])} }`));
|
|
1553
|
+
const table = `@${name}_case_table`;
|
|
1554
|
+
cases = `@${name}_cases`;
|
|
1555
|
+
this.defs.push(`${table} = internal constant [${entries.length} x ${caseTy}] [${entries.join(", ")}]`, `${cases} = internal constant { ptr, ${S}, ${S}, ptr } { ptr ${host.cstr(discriminant.field)}, ${S} ${Buffer.byteLength(discriminant.field, "utf8")}, ${S} ${entries.length}, ptr ${table} }`, ``);
|
|
1556
|
+
}
|
|
1295
1557
|
const descriptor = `${name}_union`;
|
|
1296
|
-
this.defs.push(`@${descriptor} = internal constant { ${S}, [7 x ${S}], [7 x ptr], ptr, ptr, ptr } { ${S} ${repr}, [7 x ${S}] [${tags.map((tag) => `${S} ${tag}`).join(", ")}], [7 x ptr] [${arms.join(", ")}], ptr ${nullValue}, ptr ${absentValue}, ptr ${box} }`, ``);
|
|
1558
|
+
this.defs.push(`@${descriptor} = internal constant { ${S}, [7 x ${S}], [7 x ptr], ptr, ptr, ptr, ptr } { ${S} ${repr}, [7 x ${S}] [${tags.map((tag) => `${S} ${tag}`).join(", ")}], [7 x ptr] [${arms.join(", ")}], ptr ${nullValue}, ptr ${absentValue}, ptr ${box}, ptr ${cases} }`, ``);
|
|
1297
1559
|
return descriptor;
|
|
1298
1560
|
}
|
|
1299
1561
|
/** `record.sourceSpread(built, value)`: the built record keeps value's
|
|
@@ -1333,7 +1595,9 @@ export class LlDyn {
|
|
|
1333
1595
|
* dynCheck builder — which reports the exact error. Returns +1, or null
|
|
1334
1596
|
* with the pending flag set. */
|
|
1335
1597
|
jsonParseHelper(t) {
|
|
1336
|
-
if (t.kind !== "record" &&
|
|
1598
|
+
if (t.kind !== "record" &&
|
|
1599
|
+
t.kind !== "array" &&
|
|
1600
|
+
!(t.kind === "union" && this.host.unionsById.get(t.unionId)?.discriminant))
|
|
1337
1601
|
return null;
|
|
1338
1602
|
const key = typeKey(t);
|
|
1339
1603
|
const existing = this.jsonParsers.get(key);
|
|
@@ -1359,7 +1623,8 @@ export class LlDyn {
|
|
|
1359
1623
|
* BUILD the typed value (+1), or throw the catchable path-annotated
|
|
1360
1624
|
* TypeError and return a dummy with the pending flag set. */
|
|
1361
1625
|
dynCheckHelper(t, preserveRefs = false) {
|
|
1362
|
-
|
|
1626
|
+
// A `(T | undefined)[]` stored as T elements also takes undefined ones.
|
|
1627
|
+
const key = checkedConversionKey(t);
|
|
1363
1628
|
const builderKey = preserveRefs ? `identity:${key}` : key;
|
|
1364
1629
|
const existing = this.dynBuilders.get(builderKey);
|
|
1365
1630
|
if (existing)
|
|
@@ -1377,6 +1642,26 @@ export class LlDyn {
|
|
|
1377
1642
|
const B = new BlockBuilder();
|
|
1378
1643
|
if (t.kind === "classval") {
|
|
1379
1644
|
host.declare(`declare ptr @scr_dyn_class_check(ptr, ptr, ptr)`);
|
|
1645
|
+
// A subclass's class value checks into the base class's slot when
|
|
1646
|
+
// construction through the slot can call its thunk with the base
|
|
1647
|
+
// constructor's arguments; any other subclass fails the check.
|
|
1648
|
+
const subclasses = host.classValueSubtypes(t.className);
|
|
1649
|
+
if (subclasses.length > 0) {
|
|
1650
|
+
host.declare(`declare zeroext i1 @scr_dyn_class_is(ptr, ptr)`);
|
|
1651
|
+
for (const className of subclasses) {
|
|
1652
|
+
const subKey = host.cstr(typeKey({ kind: "classval", className }));
|
|
1653
|
+
const matched = B.tmp();
|
|
1654
|
+
B.line(`${matched} = call zeroext i1 @scr_dyn_class_is(ptr %d, ptr ${subKey})`);
|
|
1655
|
+
const yes = B.newLabel("sub.yes");
|
|
1656
|
+
const no = B.newLabel("sub.no");
|
|
1657
|
+
B.condBr(matched, yes, no);
|
|
1658
|
+
B.startBlock(yes);
|
|
1659
|
+
const sub = B.tmp();
|
|
1660
|
+
B.line(`${sub} = call ptr @scr_dyn_class_check(ptr %d, ptr ${subKey}, ptr %path)`);
|
|
1661
|
+
B.terminate(`ret ptr ${sub}`);
|
|
1662
|
+
B.startBlock(no);
|
|
1663
|
+
}
|
|
1664
|
+
}
|
|
1380
1665
|
const checked = B.tmp();
|
|
1381
1666
|
B.line(`${checked} = call ptr @scr_dyn_class_check(ptr %d, ptr ${host.cstr(key)}, ptr %path)`);
|
|
1382
1667
|
B.terminate(`ret ptr ${checked}`);
|
|
@@ -1387,9 +1672,15 @@ export class LlDyn {
|
|
|
1387
1672
|
const codec = textCodecRecordClass(t, (id) => host.recordsById.get(id));
|
|
1388
1673
|
if (codec !== null) {
|
|
1389
1674
|
// The record the codec's handle box holds (+1), or the path TypeError.
|
|
1390
|
-
host.declare(`declare ptr @scr_text_codec_from_dyn(ptr, i1 zeroext, ptr, ptr)`);
|
|
1391
1675
|
const checked = B.tmp();
|
|
1392
|
-
|
|
1676
|
+
if (codec === "StringDecoder") {
|
|
1677
|
+
host.declare(`declare ptr @scr_string_decoder_from_dyn(ptr, ptr, ptr)`);
|
|
1678
|
+
B.line(`${checked} = call ptr @scr_string_decoder_from_dyn(ptr %d, ptr %path, ptr ${want})`);
|
|
1679
|
+
}
|
|
1680
|
+
else {
|
|
1681
|
+
host.declare(`declare ptr @scr_text_codec_from_dyn(ptr, i1 zeroext, ptr, ptr)`);
|
|
1682
|
+
B.line(`${checked} = call ptr @scr_text_codec_from_dyn(ptr %d, i1 ${codec === "TextDecoder"}, ptr %path, ptr ${want})`);
|
|
1683
|
+
}
|
|
1393
1684
|
B.terminate(`ret ptr ${checked}`);
|
|
1394
1685
|
this.defs.push(`define internal ptr @${name}(ptr %d, ptr %path) ${FN_ATTRS} {`, B.render(), `}`, ``);
|
|
1395
1686
|
this.host.journalBuilt?.();
|
|
@@ -2056,6 +2347,21 @@ export class LlDyn {
|
|
|
2056
2347
|
B.line(`${ip} = getelementptr inbounds %ScrDynPath, ptr ${pathSlot}, i64 0, i32 2`);
|
|
2057
2348
|
B.line(`store ${host.sizeType} ${i}, ptr ${ip}`);
|
|
2058
2349
|
const e = this.itemAt(B, items, i);
|
|
2350
|
+
if (t.optionalElements) {
|
|
2351
|
+
// An undefined element is a present undefined element.
|
|
2352
|
+
const undef = B.tmp();
|
|
2353
|
+
const storeUndefined = B.newLabel("dca.undef");
|
|
2354
|
+
const checkLabel = B.newLabel("dca.check");
|
|
2355
|
+
B.line(`${undef} = icmp eq i32 ${this.kindOf(B, e)}, ${DYN_KIND.UNDEF}`);
|
|
2356
|
+
B.condBr(undef, storeUndefined, checkLabel);
|
|
2357
|
+
B.startBlock(storeUndefined);
|
|
2358
|
+
host.declare(`declare void @scr_arr_set_undefined(ptr, double)`);
|
|
2359
|
+
const at = B.tmp();
|
|
2360
|
+
B.line(`${at} = ${sizeToDouble(this.S)} ${this.S} ${i} to double`);
|
|
2361
|
+
B.line(`call void @scr_arr_set_undefined(ptr ${a}, double ${at})`);
|
|
2362
|
+
B.br(doneLabel);
|
|
2363
|
+
B.startBlock(checkLabel);
|
|
2364
|
+
}
|
|
2059
2365
|
const v = B.tmp();
|
|
2060
2366
|
B.line(`${v} = call ${this.valTy(elem)} @${c}(ptr ${e}, ptr ${pathSlot})`);
|
|
2061
2367
|
this.pendingBail(B, "dca", () => {
|
|
@@ -2075,13 +2381,20 @@ export class LlDyn {
|
|
|
2075
2381
|
if (!def)
|
|
2076
2382
|
throw new InternalCompilerError(`llvm emitter bug: dynCheck of unknown union ${t.unionId}`);
|
|
2077
2383
|
// Arms in unionArmOrder, first FULL match wins. The matched arm's
|
|
2078
|
-
// builder can no longer fail
|
|
2079
|
-
|
|
2384
|
+
// builder can no longer fail, and it runs as a trusted build: a
|
|
2385
|
+
// nested union inside it picks the arm trustedArmKinds names without
|
|
2386
|
+
// matching the structure that this match already checked.
|
|
2387
|
+
const trustedKinds = preserveRefs ? def.arms.map(() => null) : this.trustedArmKinds(def);
|
|
2388
|
+
const trustedCall = (call) => {
|
|
2389
|
+
host.declare(`declare zeroext i1 @scr_dyn_trust_enter()`);
|
|
2390
|
+
host.declare(`declare void @scr_dyn_trust_exit(i1 zeroext)`);
|
|
2391
|
+
const previous = B.tmp();
|
|
2392
|
+
B.line(`${previous} = call zeroext i1 @scr_dyn_trust_enter()`);
|
|
2393
|
+
call();
|
|
2394
|
+
B.line(`call void @scr_dyn_trust_exit(i1 zeroext ${previous})`);
|
|
2395
|
+
};
|
|
2396
|
+
const build = (i) => {
|
|
2080
2397
|
const arm = def.arms[i];
|
|
2081
|
-
const lHit = B.newLabel("dcu.h");
|
|
2082
|
-
const lNext = B.newLabel("dcu.n");
|
|
2083
|
-
this.unionArmMatch(B, def, i, lHit, lNext, preserveRefs);
|
|
2084
|
-
B.startBlock(lHit);
|
|
2085
2398
|
if (arm.kind === "undefinedT" || arm.kind === "nullT") {
|
|
2086
2399
|
// A matched unit arm builds nothing: THE interned immortal
|
|
2087
2400
|
// instance (rc == SIZE_MAX — no retain owed).
|
|
@@ -2106,7 +2419,7 @@ export class LlDyn {
|
|
|
2106
2419
|
else if (host.nullableUnions.has(t.unionId)) {
|
|
2107
2420
|
// A nullable union is its (+1) reference payload.
|
|
2108
2421
|
const x = B.tmp();
|
|
2109
|
-
B.line(`${x} = call ptr @${this.dynCheckHelper(arm, preserveRefs)}(ptr %d, ptr %path)`);
|
|
2422
|
+
trustedCall(() => B.line(`${x} = call ptr @${this.dynCheckHelper(arm, preserveRefs)}(ptr %d, ptr %path)`));
|
|
2110
2423
|
B.terminate(`ret ptr ${x}`);
|
|
2111
2424
|
}
|
|
2112
2425
|
else {
|
|
@@ -2114,12 +2427,32 @@ export class LlDyn {
|
|
|
2114
2427
|
host.declare(`declare ptr @scr_union_new_ref(i32, ptr, ptr, ptr, ptr)`);
|
|
2115
2428
|
const x = B.tmp();
|
|
2116
2429
|
const u = B.tmp();
|
|
2117
|
-
B.line(`${x} = call ptr @${this.dynCheckHelper(arm, preserveRefs)}(ptr %d, ptr %path)`);
|
|
2430
|
+
trustedCall(() => B.line(`${x} = call ptr @${this.dynCheckHelper(arm, preserveRefs)}(ptr %d, ptr %path)`));
|
|
2118
2431
|
B.line(`${u} = call ptr @scr_union_new_ref(i32 ${i}, ptr ${x}, ptr ${rc.retain}, ptr ${rc.release}, ptr ${traceArg(host, arm)})`);
|
|
2119
2432
|
B.terminate(`ret ptr ${u}`);
|
|
2120
2433
|
}
|
|
2121
|
-
|
|
2434
|
+
};
|
|
2435
|
+
const order = this.unionArmOrder(def);
|
|
2436
|
+
const values = this.dispatchValues(def);
|
|
2437
|
+
if (values !== null) {
|
|
2438
|
+
const hits = def.arms.map(() => B.newLabel("dcu.h"));
|
|
2439
|
+
const unmatched = B.newLabel("dcu.n");
|
|
2440
|
+
this.unionArmsByDiscriminant(B, def, values, order, hits, unmatched, preserveRefs, `@${name}.cases`, trustedKinds);
|
|
2441
|
+
for (const i of order) {
|
|
2442
|
+
B.startBlock(hits[i]);
|
|
2443
|
+
build(i);
|
|
2444
|
+
}
|
|
2445
|
+
B.startBlock(unmatched);
|
|
2122
2446
|
}
|
|
2447
|
+
else
|
|
2448
|
+
for (const i of order) {
|
|
2449
|
+
const lHit = B.newLabel("dcu.h");
|
|
2450
|
+
const lNext = B.newLabel("dcu.n");
|
|
2451
|
+
this.unionArmMatch(B, def, i, lHit, lNext, preserveRefs, trustedKinds[i]);
|
|
2452
|
+
B.startBlock(lHit);
|
|
2453
|
+
build(i);
|
|
2454
|
+
B.startBlock(lNext);
|
|
2455
|
+
}
|
|
2123
2456
|
if (preserveRefs) {
|
|
2124
2457
|
B.line(`call void @scr_dyn_check_fail(ptr %path, ptr ${host.cstr("reference with its original layout")}, ptr %d)`);
|
|
2125
2458
|
B.terminate(`ret ptr null`);
|
|
@@ -2343,9 +2676,9 @@ export class LlDyn {
|
|
|
2343
2676
|
B.line(`${matched} = phi i1 [ false, %${entry} ], [ ${same}, %${lHandle} ]`);
|
|
2344
2677
|
return matched;
|
|
2345
2678
|
}
|
|
2346
|
-
/** A TextEncoder or
|
|
2347
|
-
* holds the record by reference.
|
|
2348
|
-
* fields
|
|
2679
|
+
/** A TextEncoder, TextDecoder or StringDecoder record boxes as its
|
|
2680
|
+
* handle (+1), which holds the record by reference. The decoders pass
|
|
2681
|
+
* the byte offsets of the fields their boxed methods read. */
|
|
2349
2682
|
textCodecToDyn(B, t, shape, codec) {
|
|
2350
2683
|
const host = this.host;
|
|
2351
2684
|
const rc = vAdapters(host, t);
|
|
@@ -2359,10 +2692,11 @@ export class LlDyn {
|
|
|
2359
2692
|
const base = host.nullableUnions.fieldBase(t.shapeId);
|
|
2360
2693
|
const start = B.tmp();
|
|
2361
2694
|
B.line(`${start} = ptrtoint ptr %v to ${this.S}`);
|
|
2362
|
-
const
|
|
2695
|
+
const fields = codec === "StringDecoder" ? STRING_DECODER_FIELDS : TEXT_DECODER_FIELDS;
|
|
2696
|
+
const offsets = fields.map((field) => {
|
|
2363
2697
|
const index = shape.fields.findIndex((f) => f.name === field);
|
|
2364
2698
|
if (index < 0)
|
|
2365
|
-
throw new InternalCompilerError(`llvm emitter bug:
|
|
2699
|
+
throw new InternalCompilerError(`llvm emitter bug: ${codec} record lacks ${field}`);
|
|
2366
2700
|
const p = B.tmp();
|
|
2367
2701
|
const at = B.tmp();
|
|
2368
2702
|
const offset = B.tmp();
|
|
@@ -2371,8 +2705,9 @@ export class LlDyn {
|
|
|
2371
2705
|
B.line(`${offset} = sub ${this.S} ${at}, ${start}`);
|
|
2372
2706
|
return `${this.S} ${offset}`;
|
|
2373
2707
|
});
|
|
2374
|
-
|
|
2375
|
-
|
|
2708
|
+
const fn = codec === "StringDecoder" ? "scr_string_decoder_to_dyn" : "scr_text_decoder_to_dyn";
|
|
2709
|
+
host.declare(`declare ptr @${fn}(ptr, ptr, ptr, ${fields.map(() => this.S).join(", ")})`);
|
|
2710
|
+
B.line(`${r} = call ptr @${fn}(ptr %v, ptr ${rc.retain}, ptr ${rc.release}, ${offsets.join(", ")})`);
|
|
2376
2711
|
}
|
|
2377
2712
|
B.terminate(`ret ptr ${r}`);
|
|
2378
2713
|
}
|
|
@@ -2536,7 +2871,7 @@ export class LlDyn {
|
|
|
2536
2871
|
const shape = host.recordsById.get(t.shapeId);
|
|
2537
2872
|
if (!shape)
|
|
2538
2873
|
throw new InternalCompilerError(`llvm emitter bug: to-dyn of unknown shape ${t.shapeId}`);
|
|
2539
|
-
const codec =
|
|
2874
|
+
const codec = recordHandleCodecClass(shape);
|
|
2540
2875
|
if (codec !== null) {
|
|
2541
2876
|
this.textCodecToDyn(B, t, shape, codec);
|
|
2542
2877
|
break;
|