@scriptc/compiler 0.3.6 → 0.4.0
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 +682 -50
- package/ambient/scriptc.d.ts +134 -0
- package/dist/backend/cycle-analysis.d.ts +1 -1
- package/dist/backend/cycle-analysis.js +1 -0
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-analysis.test.js +13 -1
- package/dist/backend/cycle-analysis.test.js.map +1 -1
- package/dist/backend/cycle-mutability.js +16 -5
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.js +13 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.test.js +1 -1
- package/dist/backend/library-pack.js +6 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +41 -4
- package/dist/backend/llvm/alloc.js +138 -7
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/alloc.test.js +30 -1
- package/dist/backend/llvm/alloc.test.js.map +1 -1
- package/dist/backend/llvm/appended-array-literals.test.js +1 -1
- package/dist/backend/llvm/array-search.test.js +1 -1
- package/dist/backend/llvm/blocks.d.ts +8 -0
- package/dist/backend/llvm/blocks.js +43 -1
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/blocks.test.js +22 -1
- package/dist/backend/llvm/blocks.test.js.map +1 -1
- package/dist/backend/llvm/byte-numbers.js +15 -5
- package/dist/backend/llvm/byte-numbers.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.d.ts +14 -0
- package/dist/backend/llvm/bytes-alias.js +20 -0
- package/dist/backend/llvm/bytes-alias.js.map +1 -0
- package/dist/backend/llvm/bytes-loop-versions.d.ts +86 -0
- package/dist/backend/llvm/bytes-loop-versions.js +506 -0
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -0
- package/dist/backend/llvm/bytes-loop-versions.test.d.ts +1 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js +244 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -0
- package/dist/backend/llvm/call-lifetimes.js +50 -1
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +34 -0
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/checked-narrows.test.js +1 -1
- package/dist/backend/llvm/checked-value-lifetimes.js +4 -1
- package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +11 -0
- package/dist/backend/llvm/classes.js +71 -14
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +58 -8
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.js +1 -0
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +5 -1
- package/dist/backend/llvm/constant-callbacks.js +55 -12
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +88 -1
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +4 -0
- package/dist/backend/llvm/counted-loops.js +37 -0
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +12 -3
- package/dist/backend/llvm/dense-array-access.js +72 -14
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +59 -3
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.d.ts +51 -0
- package/dist/backend/llvm/dense-array-loops.js +162 -0
- package/dist/backend/llvm/dense-array-loops.js.map +1 -0
- package/dist/backend/llvm/dense-array-loops.test.d.ts +1 -0
- package/dist/backend/llvm/dense-array-loops.test.js +128 -0
- package/dist/backend/llvm/dense-array-loops.test.js.map +1 -0
- package/dist/backend/llvm/dyn-handle-tags.test.d.ts +1 -0
- package/dist/backend/llvm/dyn-handle-tags.test.js +38 -0
- package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +28 -4
- package/dist/backend/llvm/dyn.js +293 -178
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.d.ts +64 -0
- package/dist/backend/llvm/emit-function.js +1190 -0
- package/dist/backend/llvm/emit-function.js.map +1 -0
- package/dist/backend/llvm/emit-module.d.ts +24 -0
- package/dist/backend/llvm/emit-module.js +1535 -0
- package/dist/backend/llvm/emit-module.js.map +1 -0
- package/dist/backend/llvm/emit-statements.d.ts +58 -0
- package/dist/backend/llvm/emit-statements.js +1964 -0
- package/dist/backend/llvm/emit-statements.js.map +1 -0
- package/dist/backend/llvm/emitter.d.ts +547 -283
- package/dist/backend/llvm/emitter.js +689 -4643
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +57 -3
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +73 -46
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-async.test.js +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +2 -0
- package/dist/backend/llvm/expr-bytes.js +76 -29
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.d.ts +6 -2
- package/dist/backend/llvm/expr-callbacks.js +48 -11
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +1 -1
- package/dist/backend/llvm/expr-calls.js +71 -53
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-calls.test.js +1 -1
- package/dist/backend/llvm/expr-containers.js +39 -15
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-control.js +16 -16
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.d.ts +3 -0
- package/dist/backend/llvm/expr-dynamic.js +67 -62
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +121 -25
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +2 -2
- package/dist/backend/llvm/expr-records.d.ts +1 -1
- package/dist/backend/llvm/expr-records.js +32 -11
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +54 -12
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +2 -2
- package/dist/backend/llvm/expr-stream-callbacks.js +22 -1
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/int32-abi.test.js +2 -2
- package/dist/backend/llvm/integer-clones.test.js +3 -3
- package/dist/backend/llvm/integer-remainder.d.ts +34 -13
- package/dist/backend/llvm/integer-remainder.js +156 -22
- package/dist/backend/llvm/integer-remainder.js.map +1 -1
- package/dist/backend/llvm/intern-tables.test.js +1 -1
- package/dist/backend/llvm/jsval-encoding.d.ts +21 -0
- package/dist/backend/llvm/jsval-encoding.js +20 -0
- package/dist/backend/llvm/jsval-encoding.js.map +1 -0
- package/dist/backend/llvm/jsval.d.ts +12 -0
- package/dist/backend/llvm/jsval.js +488 -0
- package/dist/backend/llvm/jsval.js.map +1 -0
- package/dist/backend/llvm/lazy-captures.d.ts +12 -2
- package/dist/backend/llvm/lazy-captures.js +39 -17
- package/dist/backend/llvm/lazy-captures.js.map +1 -1
- package/dist/backend/llvm/lib-abi.js +1 -1
- package/dist/backend/llvm/lib-abi.js.map +1 -1
- package/dist/backend/llvm/lib-connect.js +1 -1
- package/dist/backend/llvm/lib-connect.js.map +1 -1
- package/dist/backend/llvm/lib-datagram.js +14 -8
- package/dist/backend/llvm/lib-datagram.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +189 -23
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +42 -13
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.js +3 -3
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-lookup.js +2 -2
- package/dist/backend/llvm/lib-lookup.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +56 -22
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +90 -50
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.d.ts +12 -0
- package/dist/backend/llvm/lib-shared.js +187 -6
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +46 -16
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/lib-test.js +43 -7
- package/dist/backend/llvm/lib-test.js.map +1 -1
- package/dist/backend/llvm/lib-tls.js +4 -9
- package/dist/backend/llvm/lib-tls.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +2 -2
- package/dist/backend/llvm/local-array-reads.test.js +1 -1
- package/dist/backend/llvm/local-extents.d.ts +19 -0
- package/dist/backend/llvm/local-extents.js +169 -0
- package/dist/backend/llvm/local-extents.js.map +1 -0
- package/dist/backend/llvm/local-extents.test.d.ts +1 -0
- package/dist/backend/llvm/local-extents.test.js +92 -0
- package/dist/backend/llvm/local-extents.test.js.map +1 -0
- package/dist/backend/llvm/local-union-storage.js +7 -7
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +2 -2
- package/dist/backend/llvm/map-entry-fusion.test.js +1 -1
- package/dist/backend/llvm/map-number-lookup.js +2 -2
- package/dist/backend/llvm/map-number-lookup.test.js +2 -2
- package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
- package/dist/backend/llvm/narrow-guards.d.ts +38 -0
- package/dist/backend/llvm/narrow-guards.js +151 -0
- package/dist/backend/llvm/narrow-guards.js.map +1 -0
- package/dist/backend/llvm/nullable-unions.d.ts +64 -6
- package/dist/backend/llvm/nullable-unions.js +103 -6
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.test.d.ts +1 -0
- package/dist/backend/llvm/nullable-unions.test.js +65 -0
- package/dist/backend/llvm/nullable-unions.test.js.map +1 -0
- package/dist/backend/llvm/publish.d.ts +4 -0
- package/dist/backend/llvm/publish.js +14 -2
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/publish.test.js +1 -1
- package/dist/backend/llvm/receivers.d.ts +31 -0
- package/dist/backend/llvm/receivers.js +395 -0
- package/dist/backend/llvm/receivers.js.map +1 -0
- package/dist/backend/llvm/record-results.d.ts +12 -1
- package/dist/backend/llvm/record-results.js +64 -4
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +9 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.d.ts +4 -0
- package/dist/backend/llvm/reference-writes.js +142 -6
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/reference-writes.test.d.ts +1 -0
- package/dist/backend/llvm/reference-writes.test.js +88 -0
- package/dist/backend/llvm/reference-writes.test.js.map +1 -0
- package/dist/backend/llvm/regex-matchers.d.ts +8 -0
- package/dist/backend/llvm/regex-matchers.js +33 -0
- package/dist/backend/llvm/regex-matchers.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.test.js +23 -1
- package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
- package/dist/backend/llvm/regions.d.ts +1 -1
- package/dist/backend/llvm/regions.js +9 -6
- package/dist/backend/llvm/regions.js.map +1 -1
- package/dist/backend/llvm/regions.test.js +1 -1
- package/dist/backend/llvm/shapes.d.ts +66 -43
- package/dist/backend/llvm/shapes.js +280 -21
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +37 -3
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/split-loops.js +2 -2
- package/dist/backend/llvm/split-loops.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +26 -6
- package/dist/backend/llvm/stack-objects.js +133 -10
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/stack-objects.test.js +55 -1
- package/dist/backend/llvm/stack-objects.test.js.map +1 -1
- package/dist/backend/llvm/stack-unions.test.js +1 -1
- package/dist/backend/llvm/string-construction.test.js +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +15 -14
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-slices.d.ts +25 -0
- package/dist/backend/llvm/string-slices.js +207 -1
- package/dist/backend/llvm/string-slices.js.map +1 -1
- package/dist/backend/llvm/string-slices.test.js +139 -2
- package/dist/backend/llvm/string-slices.test.js.map +1 -1
- package/dist/backend/llvm/switch-dispatch.test.js +2 -2
- package/dist/backend/llvm/thread-slots.d.ts +5 -0
- package/dist/backend/llvm/thread-slots.js +142 -0
- package/dist/backend/llvm/thread-slots.js.map +1 -0
- package/dist/backend/llvm/thread-slots.test.d.ts +1 -0
- package/dist/backend/llvm/thread-slots.test.js +110 -0
- package/dist/backend/llvm/thread-slots.test.js.map +1 -0
- package/dist/backend/llvm/union-repr.d.ts +7 -7
- package/dist/backend/llvm/union-repr.js +18 -2
- package/dist/backend/llvm/union-repr.js.map +1 -1
- package/dist/backend/llvm/union-retype.test.js +17 -3
- package/dist/backend/llvm/union-retype.test.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +2 -2
- package/dist/backend/llvm/walkers.js +51 -26
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/llvm/wasm-modules.d.ts +16 -0
- package/dist/backend/llvm/wasm-modules.js +66 -0
- package/dist/backend/llvm/wasm-modules.js.map +1 -0
- package/dist/backend/llvm/wrapping-sums.d.ts +7 -0
- package/dist/backend/llvm/wrapping-sums.js +11 -3
- package/dist/backend/llvm/wrapping-sums.js.map +1 -1
- package/dist/backend/mangle.d.ts +7 -0
- package/dist/backend/mangle.js +11 -0
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/may-throw.d.ts +3 -0
- package/dist/backend/may-throw.js +4 -2
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +1 -1
- package/dist/backend/native/contracts.d.ts +37 -0
- package/dist/backend/native/executable.js +192 -137
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +1 -0
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +1 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +30 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/publication.test.js +1 -1
- package/dist/backend/runtime-pack-core.d.ts +9 -1
- package/dist/backend/runtime-pack-core.js +10 -1
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.js +1 -1
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-native.test.d.ts +1 -0
- package/dist/backend/runtime-pack-native.test.js +31 -0
- package/dist/backend/runtime-pack-native.test.js.map +1 -0
- package/dist/backend/runtime-pack-targets.test.js +5 -0
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +5 -0
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/stack-observations.d.ts +22 -0
- package/dist/backend/stack-observations.js +382 -0
- package/dist/backend/stack-observations.js.map +1 -0
- package/dist/backend/stack-observations.test.d.ts +1 -0
- package/dist/backend/stack-observations.test.js +233 -0
- package/dist/backend/stack-observations.test.js.map +1 -0
- package/dist/backend/target-diagnostics.js +8 -0
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +1 -1
- package/dist/backend/warm-cache.js +5 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/backend/young-nursery.d.ts +7 -0
- package/dist/backend/young-nursery.js +10 -0
- package/dist/backend/young-nursery.js.map +1 -0
- package/dist/cli/command.js +44 -4
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +11 -1
- package/dist/cli/usage.js +20 -1
- package/dist/cli/usage.js.map +1 -1
- package/dist/compat/fetch-profile.js +10 -1
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +13 -0
- package/dist/contracts/check.js +24 -6
- package/dist/contracts/check.js.map +1 -1
- package/dist/contracts/int32-elements.d.ts +115 -0
- package/dist/contracts/int32-elements.js +1179 -0
- package/dist/contracts/int32-elements.js.map +1 -0
- package/dist/coverage/report.d.ts +16 -0
- package/dist/coverage/report.js +182 -1
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +16 -3
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/coverage/verdict-cache.d.ts +2 -0
- package/dist/coverage/verdict-cache.js +12 -0
- package/dist/coverage/verdict-cache.js.map +1 -1
- package/dist/coverage/verdict-cache.test.js +2 -1
- package/dist/coverage/verdict-cache.test.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +10 -6
- package/dist/diagnostics/diagnostic.js +29 -21
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +39 -2
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/diagnostics/render.d.ts +7 -0
- package/dist/diagnostics/render.js +50 -13
- package/dist/diagnostics/render.js.map +1 -1
- package/dist/diagnostics/render.test.d.ts +1 -0
- package/dist/diagnostics/render.test.js +49 -0
- package/dist/diagnostics/render.test.js.map +1 -0
- package/dist/executable/executable-cache.d.ts +17 -0
- package/dist/executable/executable-cache.js +13 -1
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +7 -1
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +2 -1
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +6 -1
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/builtin-modules.d.ts +16 -2
- package/dist/frontend/builtin-modules.js +40 -7
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/cjs-syntax.js +52 -51
- package/dist/frontend/cjs-syntax.js.map +1 -1
- package/dist/frontend/contract-types.d.ts +3 -0
- package/dist/frontend/contract-types.js +36 -7
- package/dist/frontend/contract-types.js.map +1 -1
- package/dist/frontend/experimental-import.d.ts +5 -1
- package/dist/frontend/experimental-import.js +26 -7
- package/dist/frontend/experimental-import.js.map +1 -1
- package/dist/frontend/fork-target.js +20 -22
- package/dist/frontend/fork-target.js.map +1 -1
- package/dist/frontend/fork-target.test.js +2 -1
- package/dist/frontend/fork-target.test.js.map +1 -1
- package/dist/frontend/function-completion.js +6 -6
- package/dist/frontend/function-completion.js.map +1 -1
- package/dist/frontend/helper-tokens.js +15 -3
- package/dist/frontend/helper-tokens.js.map +1 -1
- package/dist/frontend/helper-tokens.test.js +7 -1
- package/dist/frontend/helper-tokens.test.js.map +1 -1
- package/dist/frontend/inferred-js-diagnostics.js +14 -17
- package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +3 -0
- package/dist/frontend/input-tracker.js +32 -3
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/lib-contract.js +36 -32
- package/dist/frontend/lib-contract.js.map +1 -1
- package/dist/frontend/lib-exports.js +3 -3
- package/dist/frontend/lib-exports.js.map +1 -1
- package/dist/frontend/lowering/array-values.d.ts +8 -3
- package/dist/frontend/lowering/array-values.js +60 -11
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/assert-instances.js +4 -4
- package/dist/frontend/lowering/assert-instances.js.map +1 -1
- package/dist/frontend/lowering/assertion-identity.d.ts +12 -0
- package/dist/frontend/lowering/assertion-identity.js +70 -0
- package/dist/frontend/lowering/assertion-identity.js.map +1 -0
- package/dist/frontend/lowering/assertion-members.d.ts +28 -0
- package/dist/frontend/lowering/assertion-members.js +185 -0
- package/dist/frontend/lowering/assertion-members.js.map +1 -0
- package/dist/frontend/lowering/binding-analysis.js +27 -20
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/builtin-calls.js +63 -5
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtin-function-fences.d.ts +14 -0
- package/dist/frontend/lowering/builtin-function-fences.js +42 -0
- package/dist/frontend/lowering/builtin-function-fences.js.map +1 -0
- package/dist/frontend/lowering/builtins/arguments.js +1 -1
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/async-context.js +53 -52
- package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.js +6 -6
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
- package/dist/frontend/lowering/builtins/blob.js +8 -6
- package/dist/frontend/lowering/builtins/blob.js.map +1 -1
- package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +23 -0
- package/dist/frontend/lowering/builtins/builtin-class-dyn.js +156 -0
- package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
- package/dist/frontend/lowering/builtins/callable-aliases.js +16 -5
- package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-async.js +7 -7
- package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.d.ts +6 -4
- package/dist/frontend/lowering/builtins/child-process-methods.js +310 -57
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js +16 -10
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.d.ts +6 -4
- package/dist/frontend/lowering/builtins/child-process.js +85 -61
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/class-values.d.ts +60 -0
- package/dist/frontend/lowering/builtins/class-values.js +226 -0
- package/dist/frontend/lowering/builtins/class-values.js.map +1 -0
- package/dist/frontend/lowering/builtins/compression.d.ts +9 -0
- package/dist/frontend/lowering/builtins/compression.js +107 -44
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/constants.d.ts +9 -1
- package/dist/frontend/lowering/builtins/constants.js +28 -7
- package/dist/frontend/lowering/builtins/constants.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.d.ts +19 -0
- package/dist/frontend/lowering/builtins/crypto.js +211 -37
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.d.ts +7 -1
- package/dist/frontend/lowering/builtins/dates.js +92 -16
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/disposable-stack.d.ts +18 -0
- package/dist/frontend/lowering/builtins/disposable-stack.js +137 -0
- package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -0
- package/dist/frontend/lowering/builtins/environment.js +3 -3
- package/dist/frontend/lowering/builtins/environment.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.d.ts +14 -10
- package/dist/frontend/lowering/builtins/errors.js +169 -3
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +128 -116
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.js +77 -77
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-glob.js +3 -3
- package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-streams.js +10 -11
- package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
- package/dist/frontend/lowering/builtins/ipc.js +45 -8
- package/dist/frontend/lowering/builtins/ipc.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +232 -24
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/key-object.js +4 -4
- package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-bindings.d.ts +8 -0
- package/dist/frontend/lowering/builtins/module-bindings.js +71 -22
- package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +55 -44
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +4 -3
- package/dist/frontend/lowering/builtins/module-resolution.js +24 -23
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
- package/dist/frontend/lowering/builtins/navigator.d.ts +13 -0
- package/dist/frontend/lowering/builtins/navigator.js +40 -0
- package/dist/frontend/lowering/builtins/navigator.js.map +1 -0
- package/dist/frontend/lowering/builtins/net-address.d.ts +19 -0
- package/dist/frontend/lowering/builtins/net-address.js +156 -0
- package/dist/frontend/lowering/builtins/net-address.js.map +1 -0
- package/dist/frontend/lowering/builtins/numbers.js +25 -9
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.d.ts +4 -0
- package/dist/frontend/lowering/builtins/operating-system.js +25 -12
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/performance.d.ts +12 -0
- package/dist/frontend/lowering/builtins/performance.js +259 -8
- package/dist/frontend/lowering/builtins/performance.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +32 -1
- package/dist/frontend/lowering/builtins/process.js +461 -99
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.d.ts +5 -1
- package/dist/frontend/lowering/builtins/promises.js +326 -43
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/promisify-callback.d.ts +37 -0
- package/dist/frontend/lowering/builtins/promisify-callback.js +320 -0
- package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -0
- package/dist/frontend/lowering/builtins/properties.js +37 -1
- package/dist/frontend/lowering/builtins/properties.js.map +1 -1
- package/dist/frontend/lowering/builtins/querystring.js +14 -14
- package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +12 -2
- package/dist/frontend/lowering/builtins/readline.js +136 -39
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/receiver-types.js +3 -5
- package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -1
- package/dist/frontend/lowering/builtins/reflection.js +16 -14
- package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
- package/dist/frontend/lowering/builtins/runtime-constructor.d.ts +26 -0
- package/dist/frontend/lowering/builtins/runtime-constructor.js +165 -0
- package/dist/frontend/lowering/builtins/runtime-constructor.js.map +1 -0
- package/dist/frontend/lowering/builtins/strings.js +101 -12
- package/dist/frontend/lowering/builtins/strings.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.js +41 -38
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/timers.js +75 -30
- package/dist/frontend/lowering/builtins/timers.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.d.ts +3 -0
- package/dist/frontend/lowering/builtins/url.js +120 -17
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/util-types.js +20 -4
- package/dist/frontend/lowering/builtins/util-types.js.map +1 -1
- package/dist/frontend/lowering/builtins/v8.d.ts +11 -0
- package/dist/frontend/lowering/builtins/v8.js +105 -0
- package/dist/frontend/lowering/builtins/v8.js.map +1 -0
- package/dist/frontend/lowering/builtins/webassembly.d.ts +33 -0
- package/dist/frontend/lowering/builtins/webassembly.js +388 -0
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -0
- package/dist/frontend/lowering/builtins/webcrypto.d.ts +20 -0
- package/dist/frontend/lowering/builtins/webcrypto.js +112 -0
- package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -0
- package/dist/frontend/lowering/builtins/workers.d.ts +12 -0
- package/dist/frontend/lowering/builtins/workers.js +193 -8
- package/dist/frontend/lowering/builtins/workers.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.js +69 -14
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.d.ts +19 -1
- package/dist/frontend/lowering/call-signatures.js +254 -47
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/checked-promise-all.d.ts +3 -0
- package/dist/frontend/lowering/checked-promise-all.js +1 -1
- package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
- package/dist/frontend/lowering/cjs-exports-object.d.ts +53 -0
- package/dist/frontend/lowering/cjs-exports-object.js +528 -0
- package/dist/frontend/lowering/cjs-exports-object.js.map +1 -0
- package/dist/frontend/lowering/cjs-inline-require.d.ts +86 -0
- package/dist/frontend/lowering/cjs-inline-require.js +314 -0
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -0
- package/dist/frontend/lowering/cjs-tsc-interop.d.ts +28 -0
- package/dist/frontend/lowering/cjs-tsc-interop.js +208 -0
- package/dist/frontend/lowering/cjs-tsc-interop.js.map +1 -0
- package/dist/frontend/lowering/class-attributes.d.ts +19 -0
- package/dist/frontend/lowering/class-attributes.js +378 -0
- package/dist/frontend/lowering/class-attributes.js.map +1 -0
- package/dist/frontend/lowering/class-callbacks.d.ts +3 -1
- package/dist/frontend/lowering/class-callbacks.js +21 -10
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-construction.js +49 -4
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-descriptors.d.ts +2 -0
- package/dist/frontend/lowering/class-descriptors.js +8 -8
- package/dist/frontend/lowering/class-descriptors.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +64 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +1115 -89
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-instance-constructor.js +1 -1
- package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
- package/dist/frontend/lowering/class-iterables.d.ts +11 -0
- package/dist/frontend/lowering/class-iterables.js +31 -0
- package/dist/frontend/lowering/class-iterables.js.map +1 -0
- package/dist/frontend/lowering/class-method-mutations.js +73 -35
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-method-values.js +56 -10
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-protocol-dispatch.js +24 -22
- package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.js +25 -44
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.d.ts +6 -0
- package/dist/frontend/lowering/class-prototypes.js +80 -18
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.js +1 -1
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/class-static-data.js +2 -2
- package/dist/frontend/lowering/class-static-data.js.map +1 -1
- package/dist/frontend/lowering/class-to-primitive.d.ts +25 -0
- package/dist/frontend/lowering/class-to-primitive.js +261 -0
- package/dist/frontend/lowering/class-to-primitive.js.map +1 -0
- package/dist/frontend/lowering/class-unions.d.ts +25 -0
- package/dist/frontend/lowering/class-unions.js +102 -1
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/code-generation.d.ts +14 -0
- package/dist/frontend/lowering/code-generation.js +127 -0
- package/dist/frontend/lowering/code-generation.js.map +1 -0
- package/dist/frontend/lowering/coercions/function-adapters.d.ts +16 -2
- package/dist/frontend/lowering/coercions/function-adapters.js +145 -3
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +25 -3
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +35 -3
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.d.ts +15 -0
- package/dist/frontend/lowering/coercions/unions.js +57 -1
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/collection-ingestion.js +2 -2
- package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
- package/dist/frontend/lowering/collection-narrowing.js +2 -4
- package/dist/frontend/lowering/collection-narrowing.js.map +1 -1
- package/dist/frontend/lowering/construction-escapes.js +8 -8
- package/dist/frontend/lowering/construction-escapes.js.map +1 -1
- package/dist/frontend/lowering/construction-escapes.test.js +4 -4
- package/dist/frontend/lowering/construction-escapes.test.js.map +1 -1
- package/dist/frontend/lowering/constructor-returns.d.ts +61 -0
- package/dist/frontend/lowering/constructor-returns.js +477 -0
- package/dist/frontend/lowering/constructor-returns.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callback-call.js +1 -1
- package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +9 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +266 -100
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.js +1 -1
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.d.ts +0 -1
- package/dist/frontend/lowering/containers/array-construction.js +51 -13
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-from-async.d.ts +6 -5
- package/dist/frontend/lowering/containers/array-from-async.js +159 -14
- package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +89 -77
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +1 -0
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.js +161 -101
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.d.ts +9 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +55 -5
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-grouping.d.ts +7 -8
- package/dist/frontend/lowering/containers/collection-grouping.js +217 -26
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +54 -25
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/dynamic-receivers.js +1 -1
- package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -1
- package/dist/frontend/lowering/containers/exec-result-uses.js +2 -2
- package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -1
- package/dist/frontend/lowering/containers/for-of.d.ts +6 -0
- package/dist/frontend/lowering/containers/for-of.js +19 -19
- package/dist/frontend/lowering/containers/for-of.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +142 -57
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +53 -4
- package/dist/frontend/lowering/containers/iterator-helpers.js +1581 -462
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/match-row-uses.d.ts +17 -0
- package/dist/frontend/lowering/containers/match-row-uses.js +264 -0
- package/dist/frontend/lowering/containers/match-row-uses.js.map +1 -0
- package/dist/frontend/lowering/containers/string-and-regexp.d.ts +14 -0
- package/dist/frontend/lowering/containers/string-and-regexp.js +419 -30
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.d.ts +4 -0
- package/dist/frontend/lowering/cycle-initialization.js +39 -0
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.js +47 -43
- package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
- package/dist/frontend/lowering/devirtualize.d.ts +1 -1
- package/dist/frontend/lowering/devirtualize.js +27 -7
- package/dist/frontend/lowering/devirtualize.js.map +1 -1
- package/dist/frontend/lowering/divergences.d.ts +0 -5
- package/dist/frontend/lowering/divergences.js +62 -125
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/dyn-streams.d.ts +25 -0
- package/dist/frontend/lowering/dyn-streams.js +257 -0
- package/dist/frontend/lowering/dyn-streams.js.map +1 -0
- package/dist/frontend/lowering/error-methods.js +4 -1
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/error-name-order.d.ts +19 -0
- package/dist/frontend/lowering/error-name-order.js +93 -0
- package/dist/frontend/lowering/error-name-order.js.map +1 -0
- package/dist/frontend/lowering/expressions/array-literals.d.ts +21 -0
- package/dist/frontend/lowering/expressions/array-literals.js +703 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -0
- package/dist/frontend/lowering/expressions/binary.d.ts +35 -0
- package/dist/frontend/lowering/expressions/binary.js +2483 -0
- package/dist/frontend/lowering/expressions/binary.js.map +1 -0
- package/dist/frontend/lowering/expressions/element-access.d.ts +31 -0
- package/dist/frontend/lowering/expressions/element-access.js +1797 -0
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -0
- package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -3
- package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +38 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.js +160 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -0
- package/dist/frontend/lowering/expressions/identifiers.d.ts +4 -0
- package/dist/frontend/lowering/expressions/identifiers.js +830 -0
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -0
- package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +40 -0
- package/dist/frontend/lowering/expressions/keyed-field-targets.js +226 -0
- package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -0
- package/dist/frontend/lowering/expressions/narrowing.d.ts +37 -0
- package/dist/frontend/lowering/expressions/narrowing.js +1322 -0
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -0
- package/dist/frontend/lowering/expressions/native-proxy.js +4 -4
- package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js +45 -0
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
- package/dist/frontend/lowering/expressions/object-literals.js +253 -85
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.d.ts +2 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +91 -14
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +110 -0
- package/dist/frontend/lowering/expressions/property-access.js +3544 -0
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -0
- package/dist/frontend/lowering/expressions/relational.d.ts +28 -0
- package/dist/frontend/lowering/expressions/relational.js +1679 -0
- package/dist/frontend/lowering/expressions/relational.js.map +1 -0
- package/dist/frontend/lowering/expressions/typeof.d.ts +22 -0
- package/dist/frontend/lowering/expressions/typeof.js +538 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -0
- package/dist/frontend/lowering/expressions/union-fields.js +1 -1
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.d.ts +21 -0
- package/dist/frontend/lowering/expressions/updates.js +780 -0
- package/dist/frontend/lowering/expressions/updates.js.map +1 -0
- package/dist/frontend/lowering/function-context.d.ts +10 -0
- package/dist/frontend/lowering/function-context.js +11 -1
- package/dist/frontend/lowering/function-context.js.map +1 -1
- package/dist/frontend/lowering/function-returns.js +52 -28
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/general-streams.d.ts +25 -0
- package/dist/frontend/lowering/general-streams.js +108 -0
- package/dist/frontend/lowering/general-streams.js.map +1 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +7 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.js +172 -69
- package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +39 -0
- package/dist/frontend/lowering/generic-functions.js +393 -75
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/import-meta.js +2 -2
- package/dist/frontend/lowering/import-meta.js.map +1 -1
- package/dist/frontend/lowering/intern-tables.js +10 -9
- package/dist/frontend/lowering/intern-tables.js.map +1 -1
- package/dist/frontend/lowering/iterator-adapters.d.ts +19 -0
- package/dist/frontend/lowering/iterator-adapters.js +331 -3
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/js-class-fields.d.ts +28 -0
- package/dist/frontend/lowering/js-class-fields.js +170 -0
- package/dist/frontend/lowering/js-class-fields.js.map +1 -0
- package/dist/frontend/lowering/js-dynamic-objects.d.ts +15 -0
- package/dist/frontend/lowering/js-dynamic-objects.js +299 -0
- package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -0
- package/dist/frontend/lowering/js-dynamic-objects.test.d.ts +1 -0
- package/dist/frontend/lowering/js-dynamic-objects.test.js +35 -0
- package/dist/frontend/lowering/js-dynamic-objects.test.js.map +1 -0
- package/dist/frontend/lowering/json-require.d.ts +22 -0
- package/dist/frontend/lowering/json-require.js +131 -0
- package/dist/frontend/lowering/json-require.js.map +1 -0
- package/dist/frontend/lowering/key-order-witness.d.ts +44 -0
- package/dist/frontend/lowering/key-order-witness.js +641 -0
- package/dist/frontend/lowering/key-order-witness.js.map +1 -0
- package/dist/frontend/lowering/key-order-witness.test.d.ts +1 -0
- package/dist/frontend/lowering/key-order-witness.test.js +239 -0
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -0
- package/dist/frontend/lowering/lifetime-regions.js +7 -7
- package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +61 -60
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.d.ts +10 -1
- package/dist/frontend/lowering/lower-async-iteration.js +34 -6
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +5 -0
- package/dist/frontend/lowering/lower-builtin-values.js +32 -3
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +1239 -442
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +50 -3
- package/dist/frontend/lowering/lower-classes.js +1473 -468
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-comptime.d.ts +4 -2
- package/dist/frontend/lowering/lower-comptime.js +111 -13
- package/dist/frontend/lowering/lower-comptime.js.map +1 -1
- package/dist/frontend/lowering/lower-console.js +13 -11
- package/dist/frontend/lowering/lower-console.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.d.ts +10 -0
- package/dist/frontend/lowering/lower-dgram.js +179 -8
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-enums.js +113 -14
- package/dist/frontend/lowering/lower-enums.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +16 -7
- package/dist/frontend/lowering/lower-event-emitter.js +258 -70
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-event-target.js +2 -2
- package/dist/frontend/lowering/lower-event-target.js.map +1 -1
- package/dist/frontend/lowering/lower-expando.js +17 -13
- package/dist/frontend/lowering/lower-expando.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +188 -186
- package/dist/frontend/lowering/lower-exprs.js +1481 -12489
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +68 -22
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.d.ts +6 -0
- package/dist/frontend/lowering/lower-generators.js +29 -16
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.js +5 -1
- package/dist/frontend/lowering/lower-global-value.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +331 -96
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.js +23 -20
- package/dist/frontend/lowering/lower-mixins.js.map +1 -1
- package/dist/frontend/lowering/lower-mock.d.ts +8 -1
- package/dist/frontend/lowering/lower-mock.js +185 -18
- package/dist/frontend/lowering/lower-mock.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +267 -61
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +6 -0
- package/dist/frontend/lowering/lower-namespaces.js +45 -33
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-module.d.ts +16 -0
- package/dist/frontend/lowering/lower-node-module.js +147 -14
- package/dist/frontend/lowering/lower-node-module.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +6 -6
- package/dist/frontend/lowering/lower-server.js +488 -100
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
- package/dist/frontend/lowering/lower-stdlib.js +151 -109
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +28 -2
- package/dist/frontend/lowering/lower-stmts.js +1541 -391
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +3 -0
- package/dist/frontend/lowering/lower-stream.js +398 -56
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-test.d.ts +3 -0
- package/dist/frontend/lowering/lower-test.js +437 -62
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +80 -32
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lower-url.js +1 -1
- package/dist/frontend/lowering/lower-url.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +399 -26
- package/dist/frontend/lowering/lowerer.js +1910 -305
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +10 -4
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/maybe-promise.d.ts +46 -0
- package/dist/frontend/lowering/maybe-promise.js +249 -0
- package/dist/frontend/lowering/maybe-promise.js.map +1 -0
- package/dist/frontend/lowering/module-member-this.d.ts +3 -0
- package/dist/frontend/lowering/module-member-this.js +262 -0
- package/dist/frontend/lowering/module-member-this.js.map +1 -0
- package/dist/frontend/lowering/module-namespace-elements.js +1 -1
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/nan-coded-reads.d.ts +3 -0
- package/dist/frontend/lowering/nan-coded-reads.js +45 -32
- package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
- package/dist/frontend/lowering/narrowing-stability.d.ts +18 -3
- package/dist/frontend/lowering/narrowing-stability.js +104 -32
- package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.js +11 -11
- package/dist/frontend/lowering/native-ffi.js.map +1 -1
- package/dist/frontend/lowering/object-factory-new.js +6 -8
- package/dist/frontend/lowering/object-factory-new.js.map +1 -1
- package/dist/frontend/lowering/private-brands.d.ts +46 -0
- package/dist/frontend/lowering/private-brands.js +265 -0
- package/dist/frontend/lowering/private-brands.js.map +1 -0
- package/dist/frontend/lowering/promise-executor-adapter.d.ts +11 -0
- package/dist/frontend/lowering/promise-executor-adapter.js +87 -0
- package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -0
- package/dist/frontend/lowering/require-initialization.d.ts +32 -0
- package/dist/frontend/lowering/require-initialization.js +246 -0
- package/dist/frontend/lowering/require-initialization.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-bounds.js +7 -7
- package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-elements.js +12 -12
- package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-guards.js +10 -10
- package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-guards.test.js +1 -1
- package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-ownership.js +10 -9
- package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-provenance.js +2 -2
- package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-records.d.ts +35 -0
- package/dist/frontend/lowering/runtime-optional-records.js +205 -32
- package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-records.test.js +19 -1
- package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -1
- package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
- package/dist/frontend/lowering/split-consumers.js +4 -4
- package/dist/frontend/lowering/split-consumers.js.map +1 -1
- package/dist/frontend/lowering/static-function-names.d.ts +28 -0
- package/dist/frontend/lowering/static-function-names.js +212 -0
- package/dist/frontend/lowering/static-function-names.js.map +1 -0
- package/dist/frontend/lowering/static-this.js +6 -6
- package/dist/frontend/lowering/static-this.js.map +1 -1
- package/dist/frontend/lowering/strict-mode.d.ts +5 -0
- package/dist/frontend/lowering/strict-mode.js +31 -0
- package/dist/frontend/lowering/strict-mode.js.map +1 -0
- package/dist/frontend/lowering/string-index-bounds.js +10 -10
- package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
- package/dist/frontend/lowering/string-index.d.ts +12 -0
- package/dist/frontend/lowering/string-index.js +72 -1
- package/dist/frontend/lowering/string-index.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +12 -3
- package/dist/frontend/lowering/surfaces.js +252 -41
- 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 +204 -36
- package/dist/frontend/lowering/symbol-fields.js.map +1 -1
- package/dist/frontend/lowering/symbol-methods.d.ts +2 -1
- package/dist/frontend/lowering/symbol-methods.js +24 -6
- package/dist/frontend/lowering/symbol-methods.js.map +1 -1
- package/dist/frontend/lowering/thread-slots.d.ts +13 -0
- package/dist/frontend/lowering/thread-slots.js +208 -0
- package/dist/frontend/lowering/thread-slots.js.map +1 -0
- package/dist/frontend/lowering/typed-arguments.d.ts +74 -0
- package/dist/frontend/lowering/typed-arguments.js +472 -0
- package/dist/frontend/lowering/typed-arguments.js.map +1 -0
- package/dist/frontend/lowering/union-retag.d.ts +8 -0
- package/dist/frontend/lowering/union-retag.js +27 -0
- package/dist/frontend/lowering/union-retag.js.map +1 -1
- package/dist/frontend/lowering/union-retag.test.js +24 -1
- package/dist/frontend/lowering/union-retag.test.js.map +1 -1
- package/dist/frontend/lowering/var-hoisting.js +6 -6
- package/dist/frontend/lowering/var-hoisting.js.map +1 -1
- package/dist/frontend/lowering/width-lift.d.ts +4 -0
- package/dist/frontend/mock-shapes.js +13 -6
- package/dist/frontend/mock-shapes.js.map +1 -1
- package/dist/frontend/module-source-candidates.js +1 -1
- package/dist/frontend/module-source-candidates.js.map +1 -1
- package/dist/frontend/module-source-candidates.test.js +2 -1
- package/dist/frontend/module-source-candidates.test.js.map +1 -1
- package/dist/frontend/module-syntax.js +8 -8
- package/dist/frontend/module-syntax.js.map +1 -1
- package/dist/frontend/npm-static-bundled-chunks.d.ts +51 -0
- package/dist/frontend/npm-static-bundled-chunks.js +810 -0
- package/dist/frontend/npm-static-bundled-chunks.js.map +1 -0
- package/dist/frontend/npm-static-bundled-chunks.test.d.ts +1 -0
- package/dist/frontend/npm-static-bundled-chunks.test.js +287 -0
- package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -0
- package/dist/frontend/npm-static-bundled-cjs.js +24 -23
- package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
- package/dist/frontend/npm-static-bundled-esm.d.ts +9 -0
- package/dist/frontend/npm-static-bundled-esm.js +768 -0
- package/dist/frontend/npm-static-bundled-esm.js.map +1 -0
- package/dist/frontend/npm-static-bundled-esm.test.d.ts +1 -0
- package/dist/frontend/npm-static-bundled-esm.test.js +207 -0
- package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -0
- package/dist/frontend/npm-static-cjs-exports-alias.d.ts +2 -0
- package/dist/frontend/npm-static-cjs-exports-alias.js +186 -0
- package/dist/frontend/npm-static-cjs-exports-alias.js.map +1 -0
- package/dist/frontend/npm-static-cjs-exports-alias.test.d.ts +1 -0
- package/dist/frontend/npm-static-cjs-exports-alias.test.js +73 -0
- package/dist/frontend/npm-static-cjs-exports-alias.test.js.map +1 -0
- package/dist/frontend/npm-static-cjs-exports-var.d.ts +2 -0
- package/dist/frontend/npm-static-cjs-exports-var.js +236 -0
- package/dist/frontend/npm-static-cjs-exports-var.js.map +1 -0
- package/dist/frontend/npm-static-declaration-syntax.js +102 -101
- package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
- package/dist/frontend/npm-static-prune.js +36 -24
- package/dist/frontend/npm-static-prune.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-host.d.ts +4 -1
- package/dist/frontend/npm-static-rewrite-host.js +14 -3
- package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-syntax.d.ts +19 -0
- package/dist/frontend/npm-static-rewrite-syntax.js +274 -101
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
- package/dist/frontend/npm-static-subtyping.js +7 -9
- package/dist/frontend/npm-static-subtyping.js.map +1 -1
- package/dist/frontend/npm-static.d.ts +17 -1
- package/dist/frontend/npm-static.js +167 -16
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm-static.test.js +22 -1
- package/dist/frontend/npm-static.test.js.map +1 -1
- package/dist/frontend/pipeline.js +164 -26
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/pipeline.test.js +22 -1
- package/dist/frontend/pipeline.test.js.map +1 -1
- package/dist/frontend/program-analysis.d.ts +6 -1
- package/dist/frontend/program-analysis.js +7 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +92 -2
- package/dist/frontend/program.js +1557 -255
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +76 -6
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/resolve.js +36 -2
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/resolve.test.js +49 -0
- package/dist/frontend/resolve.test.js.map +1 -1
- package/dist/frontend/services.d.ts +20 -1
- package/dist/frontend/services.js +40 -3
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/services.test.js +2 -1
- package/dist/frontend/services.test.js.map +1 -1
- package/dist/frontend/threads-import.js +1 -1
- package/dist/frontend/threads-import.js.map +1 -1
- package/dist/frontend/tier-analysis.d.ts +71 -0
- package/dist/frontend/tier-analysis.js +522 -0
- package/dist/frontend/tier-analysis.js.map +1 -0
- package/dist/frontend/ts7/api-conformance.d.ts +234 -0
- package/dist/frontend/ts7/api-conformance.js +7 -0
- package/dist/frontend/ts7/api-conformance.js.map +1 -0
- package/dist/frontend/ts7/ast-guards.generated.js +2 -1
- package/dist/frontend/ts7/ast-guards.generated.js.map +1 -1
- package/dist/frontend/ts7/ast-node.d.ts +47 -25
- package/dist/frontend/ts7/ast-node.js +64 -18
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +36 -12
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-types.d.ts +10 -3
- package/dist/frontend/ts7/ast-types.generated.d.ts +39 -39
- package/dist/frontend/ts7/ast.d.ts +1 -0
- package/dist/frontend/ts7/ast.js +3 -2
- package/dist/frontend/ts7/ast.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.d.ts +23 -0
- package/dist/frontend/ts7/checker-backend.js +88 -0
- package/dist/frontend/ts7/checker-backend.js.map +1 -0
- package/dist/frontend/ts7/checker-backend.test.d.ts +1 -0
- package/dist/frontend/ts7/checker-backend.test.js +63 -0
- package/dist/frontend/ts7/checker-backend.test.js.map +1 -0
- package/dist/frontend/ts7/checker-cache.d.ts +0 -3
- package/dist/frontend/ts7/checker-cache.js +0 -6
- package/dist/frontend/ts7/checker-cache.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +18 -11
- package/dist/frontend/ts7/checker.js +42 -55
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +10 -7
- package/dist/frontend/ts7/checker.test.js.map +1 -1
- package/dist/frontend/ts7/diagnostic.d.ts +19 -0
- package/dist/frontend/ts7/diagnostic.js +22 -0
- package/dist/frontend/ts7/diagnostic.js.map +1 -0
- package/dist/frontend/ts7/node-functions.d.ts +8 -0
- package/dist/frontend/ts7/node-functions.js +18 -0
- package/dist/frontend/ts7/node-functions.js.map +1 -0
- package/dist/frontend/ts7/program-host.d.ts +5 -1
- package/dist/frontend/ts7/program-host.js +12 -0
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/rpc-api.d.ts +5 -1
- package/dist/frontend/ts7/rpc-api.js +8 -1
- package/dist/frontend/ts7/rpc-api.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.d.ts +13 -6
- package/dist/frontend/ts7/semantic-checker.js +26 -8
- package/dist/frontend/ts7/semantic-checker.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.test.js +12 -9
- package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.d.ts +54 -24
- package/dist/frontend/ts7/semantic-model.js +88 -16
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +4 -4
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-types.d.ts +7 -3
- package/dist/frontend/ts7/semantic-types.js +1 -1
- package/dist/frontend/ts7/semantic-types.js.map +1 -1
- package/dist/frontend/ts7/session.d.ts +11 -11
- package/dist/frontend/ts7/session.js +8 -5
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/ts7/session.test.js +9 -5
- package/dist/frontend/ts7/session.test.js.map +1 -1
- package/dist/frontend/ts7/source-parser.d.ts +6 -2
- package/dist/frontend/ts7/source-parser.js +24 -3
- package/dist/frontend/ts7/source-parser.js.map +1 -1
- package/dist/frontend/ts7/source-parser.test.js +38 -17
- package/dist/frontend/ts7/source-parser.test.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +122 -2
- package/dist/frontend/type-mapper.js +2545 -719
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-only-imports.d.ts +28 -0
- package/dist/frontend/type-only-imports.js +122 -0
- package/dist/frontend/type-only-imports.js.map +1 -0
- package/dist/frontend/worker-target.js +8 -8
- package/dist/frontend/worker-target.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +29 -2
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js +4 -2
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/api.d.ts +1 -1
- package/dist/ir/api.js +1 -1
- package/dist/ir/api.js.map +1 -1
- package/dist/ir/array-length-stability.d.ts +30 -0
- package/dist/ir/array-length-stability.js +236 -0
- package/dist/ir/array-length-stability.js.map +1 -0
- package/dist/ir/array-length-stability.test.d.ts +1 -0
- package/dist/ir/array-length-stability.test.js +113 -0
- package/dist/ir/array-length-stability.test.js.map +1 -0
- package/dist/ir/build.d.ts +2 -2
- package/dist/ir/build.js +1 -1
- package/dist/ir/build.js.map +1 -1
- package/dist/ir/builtin-effects.js +103 -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 +494 -25
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/byte-numbers.js +3 -0
- package/dist/ir/byte-numbers.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +37 -0
- package/dist/ir/callback-specialization.js +459 -0
- package/dist/ir/callback-specialization.js.map +1 -0
- package/dist/ir/callback-specialization.test.d.ts +1 -0
- package/dist/ir/callback-specialization.test.js +208 -0
- package/dist/ir/callback-specialization.test.js.map +1 -0
- package/dist/ir/capture-values.d.ts +0 -1
- package/dist/ir/capture-values.js +51 -40
- package/dist/ir/capture-values.js.map +1 -1
- package/dist/ir/constant-globals.test.js +1 -1
- package/dist/ir/constant-tables.test.js +1 -1
- package/dist/ir/field-values.test.js +1 -1
- package/dist/ir/final-fields.test.js +1 -1
- package/dist/ir/function-references.test.js +9 -1
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/init-only-globals.test.js +1 -1
- package/dist/ir/initializer-bindings.test.js +1 -1
- package/dist/ir/int32-slots.d.ts +14 -0
- package/dist/ir/int32-slots.js +97 -14
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +1 -1
- package/dist/ir/integer-loop-facts.d.ts +2 -0
- package/dist/ir/integer-loop-facts.js +24 -3
- package/dist/ir/integer-loop-facts.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +1 -1
- package/dist/ir/integer-loops.js +39 -9
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +104 -0
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.d.ts +3 -0
- package/dist/ir/integer-ranges.js +3 -1
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +82 -1
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/intrinsic-signatures.js +6 -0
- package/dist/ir/intrinsic-signatures.js.map +1 -1
- package/dist/ir/ir.d.ts +221 -58
- package/dist/ir/ir.js +119 -12
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +10 -0
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/jsval.d.ts +8 -0
- package/dist/ir/jsval.js +365 -0
- package/dist/ir/jsval.js.map +1 -0
- package/dist/ir/jsval.test.d.ts +1 -0
- package/dist/ir/jsval.test.js +239 -0
- package/dist/ir/jsval.test.js.map +1 -0
- package/dist/ir/runtime-features.d.ts +148 -33
- package/dist/ir/runtime-features.js +629 -386
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/scalar-records.test.js +1 -1
- package/dist/ir/self-captures.d.ts +33 -0
- package/dist/ir/self-captures.js +245 -0
- package/dist/ir/self-captures.js.map +1 -0
- package/dist/ir/self-captures.test.d.ts +1 -0
- package/dist/ir/self-captures.test.js +135 -0
- package/dist/ir/self-captures.test.js.map +1 -0
- package/dist/ir/serialize.d.ts +1 -1
- package/dist/ir/serialize.js +7 -4
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/tiers.d.ts +26 -0
- package/dist/ir/tiers.js +101 -0
- package/dist/ir/tiers.js.map +1 -0
- package/dist/ir/tiers.test.d.ts +1 -0
- package/dist/ir/tiers.test.js +140 -0
- package/dist/ir/tiers.test.js.map +1 -0
- package/dist/ir/traverse.js +103 -94
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/traverse.test.js +33 -30
- package/dist/ir/traverse.test.js.map +1 -1
- package/dist/ir/unshare.js +65 -3
- package/dist/ir/unshare.js.map +1 -1
- package/dist/ir/unshare.test.js +1 -1
- package/dist/ir/validate.js +175 -68
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +26 -9
- 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 +13 -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.map +1 -1
- package/dist/library/library-cache.test.js +5 -5
- package/dist/library/library-profile.d.ts +4 -4
- package/dist/library/library-profile.js +35 -7
- package/dist/library/library-profile.js.map +1 -1
- package/dist/library/prepare.js +13 -1
- package/dist/library/prepare.js.map +1 -1
- package/dist/native/cli.js +5 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +2 -2
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +2 -2
- package/dist/native/prepare.js +7 -0
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.test.js +12 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/toolchain.d.ts +2 -0
- package/dist/native/toolchain.js +10 -1
- package/dist/native/toolchain.js.map +1 -1
- package/dist/native/toolchain.test.js +39 -1
- package/dist/native/toolchain.test.js.map +1 -1
- package/dist/startup-cache.d.ts +1 -0
- package/dist/startup-cache.js +1 -0
- package/dist/startup-cache.js.map +1 -1
- package/dist/wasm/base64.d.ts +5 -0
- package/dist/wasm/base64.js +62 -0
- package/dist/wasm/base64.js.map +1 -0
- package/dist/wasm/binary.d.ts +36 -0
- package/dist/wasm/binary.js +1976 -0
- package/dist/wasm/binary.js.map +1 -0
- package/dist/wasm/binary.test.d.ts +1 -0
- package/dist/wasm/binary.test.js +190 -0
- package/dist/wasm/binary.test.js.map +1 -0
- package/dist/wasm/discover.d.ts +38 -0
- package/dist/wasm/discover.js +377 -0
- package/dist/wasm/discover.js.map +1 -0
- package/dist/wasm/discover.test.d.ts +1 -0
- package/dist/wasm/discover.test.js +24 -0
- package/dist/wasm/discover.test.js.map +1 -0
- package/dist/wasm/module.d.ts +151 -0
- package/dist/wasm/module.js +575 -0
- package/dist/wasm/module.js.map +1 -0
- package/dist/wasm/translate.d.ts +48 -0
- package/dist/wasm/translate.js +2129 -0
- package/dist/wasm/translate.js.map +1 -0
- package/dist/wasm/translate.test.d.ts +1 -0
- package/dist/wasm/translate.test.js +207 -0
- package/dist/wasm/translate.test.js.map +1 -0
- package/package.json +21 -20
- package/surface-manifest.json +303 -19
package/dist/backend/llvm/dyn.js
CHANGED
|
@@ -4,7 +4,7 @@ import { BYTES_ELEM_NUM, SCR_ARR_FIELD, f64Lit, sizeToDouble } from "./common.js
|
|
|
4
4
|
import { emitUnionPeek, emitUnionTag } from "./union-repr.js";
|
|
5
5
|
import { INLINE_UNION_FIELD, loadInlineUnion, stackUnionBox, storeInlineUnion, unionBoxBits, } from "./inline-unions.js";
|
|
6
6
|
import { InternalCompilerError } from "../../errors.js";
|
|
7
|
-
import { DYN_HANDLE_KINDS, isDirentShape, isDynTypedRefType, isRefCounted, typeKey, } from "../../ir/ir.js";
|
|
7
|
+
import { accessorSlotProp, DYN_HANDLE_KINDS, isDirentShape, isDynTypedRefType, isRefCounted, typeKey, } from "../../ir/ir.js";
|
|
8
8
|
import { dynDesc, streamTypedRefEligible } from "../../ir/analysis.js";
|
|
9
9
|
import { mangleRecordNew, mangleRecordStruct } from "../mangle.js";
|
|
10
10
|
import { BlockBuilder } from "./blocks.js";
|
|
@@ -23,8 +23,8 @@ export function recordDynKeepsIdentity(shape) {
|
|
|
23
23
|
shape.fields.some((f) => f.name === "handleEvent" && f.type.kind === "func"));
|
|
24
24
|
}
|
|
25
25
|
/** ScrDynKind values (scr_runtime.h). */
|
|
26
|
-
/** ScrDynHandleTag
|
|
27
|
-
const DYN_HANDLE_TAG_NUM = {
|
|
26
|
+
/** ScrDynHandleTag values (scr_dyn.h's explicit values; dyn-handle-tags.test.ts checks them). */
|
|
27
|
+
export const DYN_HANDLE_TAG_NUM = {
|
|
28
28
|
httpReq: 0,
|
|
29
29
|
httpRes: 1,
|
|
30
30
|
netSocket: 2,
|
|
@@ -35,6 +35,15 @@ const DYN_HANDLE_TAG_NUM = {
|
|
|
35
35
|
child: 16,
|
|
36
36
|
fileHandle: 17,
|
|
37
37
|
dir: 44,
|
|
38
|
+
cryptoHash: 52,
|
|
39
|
+
cryptoHmac: 53,
|
|
40
|
+
};
|
|
41
|
+
/** Handle kinds whose runtime unit boxes them through its own function,
|
|
42
|
+
* which installs the tag's ops on first use (scr_crypto.h). Programs that
|
|
43
|
+
* never box one of these values do not link its dynamic members. */
|
|
44
|
+
const DYN_HANDLE_BOX_FN = {
|
|
45
|
+
cryptoHash: "scr_crypto_hash_to_dyn",
|
|
46
|
+
cryptoHmac: "scr_crypto_hash_to_dyn",
|
|
38
47
|
};
|
|
39
48
|
export const DYN_KIND = {
|
|
40
49
|
NULL: 0,
|
|
@@ -54,6 +63,18 @@ export const DYN_KIND = {
|
|
|
54
63
|
SYMBOL: 15,
|
|
55
64
|
};
|
|
56
65
|
const FN_ATTRS = "#0";
|
|
66
|
+
/** scr_dyn_builtin_stream_check's kind for a runtime stream class (the
|
|
67
|
+
* numbering of scr_dyn_builtin_class.c), or null. */
|
|
68
|
+
function builtinStreamKind(className) {
|
|
69
|
+
const kinds = {
|
|
70
|
+
"%Readable": 2,
|
|
71
|
+
"%Writable": 3,
|
|
72
|
+
"%Duplex": 4,
|
|
73
|
+
"%Transform": 5,
|
|
74
|
+
"%PassThrough": 6,
|
|
75
|
+
};
|
|
76
|
+
return kinds[className] ?? null;
|
|
77
|
+
}
|
|
57
78
|
export class LlDyn {
|
|
58
79
|
host;
|
|
59
80
|
dynMatchers = new Map();
|
|
@@ -444,6 +465,16 @@ export class LlDyn {
|
|
|
444
465
|
* tracking does not count the read's reference. Returns the value and
|
|
445
466
|
* the matching release. */
|
|
446
467
|
memberRead(B, key, t) {
|
|
468
|
+
// An accessor slot reads the getter or setter of the accessor property
|
|
469
|
+
// the checked-dynamic copy holds for it (see accessorSlotProp).
|
|
470
|
+
const slot = accessorSlotProp(key);
|
|
471
|
+
if (slot !== null) {
|
|
472
|
+
this.host.declare(`declare ptr @scr_dyn_obj_accessor_fn(ptr, ptr, ${this.S}, i1 zeroext)`);
|
|
473
|
+
this.host.declare(`declare void @scr_dyn_release(ptr)`);
|
|
474
|
+
const fn = B.tmp();
|
|
475
|
+
B.line(`${fn} = call ptr @scr_dyn_obj_accessor_fn(ptr %d, ptr ${this.host.cstr(slot.prop)}, ${this.S} ${Buffer.byteLength(slot.prop, "utf8")}, i1 ${slot.kind === "set" ? "true" : "false"})`);
|
|
476
|
+
return { value: fn, release: "scr_dyn_release" };
|
|
477
|
+
}
|
|
447
478
|
const held = this.isRecursiveShape(t) || this.holdsRecursiveShape(t);
|
|
448
479
|
const release = held ? "scr_dyn_release_held" : "scr_dyn_release";
|
|
449
480
|
this.host.declare(`declare void @${release}(ptr)`);
|
|
@@ -575,7 +606,9 @@ export class LlDyn {
|
|
|
575
606
|
B.terminate(`ret i1 true`);
|
|
576
607
|
B.startBlock(lNext);
|
|
577
608
|
}
|
|
578
|
-
|
|
609
|
+
// A union matches a capsule of another type through its arms below: a
|
|
610
|
+
// class capsule in a `C | undefined` field matches the `C` arm.
|
|
611
|
+
if (t.kind !== "dyn" && t.kind !== "union") {
|
|
579
612
|
const view = this.viewFn(wrapped);
|
|
580
613
|
this.host.declare(`declare void @scr_dyn_release_v(ptr)`);
|
|
581
614
|
const kind = this.kindOf(B, "%d");
|
|
@@ -902,12 +935,19 @@ export class LlDyn {
|
|
|
902
935
|
jsonSchemas = new Map();
|
|
903
936
|
jsonParsers = new Map();
|
|
904
937
|
recordNameTables = new Map();
|
|
938
|
+
/** Some emitted helper can keep a record's undeclared source: a checked
|
|
939
|
+
* record builder that notes it, or a JSON schema of a closed record
|
|
940
|
+
* (alloc.ts RECORD_SOURCES_GATE). */
|
|
941
|
+
keepsRecordSources = false;
|
|
905
942
|
/** Targets the one-pass parser (scr_json_parse_schema) can build
|
|
906
|
-
* directly: number, boolean and string leaves inside arrays and
|
|
907
|
-
*
|
|
908
|
-
*
|
|
909
|
-
*
|
|
910
|
-
|
|
943
|
+
* directly: number, boolean and string leaves inside arrays and records
|
|
944
|
+
* (no tuple, internal '%' slot or `__proto__` member; at most 64 declared
|
|
945
|
+
* fields, and at least one unless an index signature collects the
|
|
946
|
+
* members), record members typed as unions of those leaves, records and
|
|
947
|
+
* arrays, null and undefined (optional and nullable members; see
|
|
948
|
+
* jsonUnionSupported), and index signatures whose value type is not a
|
|
949
|
+
* union. Everything else keeps the checked-dynamic route alone. */
|
|
950
|
+
jsonSchemaSupported(t, visiting, member = false) {
|
|
911
951
|
switch (t.kind) {
|
|
912
952
|
case "f64":
|
|
913
953
|
case "bool":
|
|
@@ -919,19 +959,51 @@ export class LlDyn {
|
|
|
919
959
|
if (visiting.has(t.shapeId))
|
|
920
960
|
return true;
|
|
921
961
|
const shape = this.host.recordsById.get(t.shapeId);
|
|
922
|
-
if (!shape || shape.tuple
|
|
962
|
+
if (!shape || shape.tuple)
|
|
923
963
|
return false;
|
|
924
|
-
|
|
964
|
+
const index = shape.indexValue;
|
|
965
|
+
if (shape.fields.length > 64 || (shape.fields.length === 0 && !index))
|
|
925
966
|
return false;
|
|
926
967
|
visiting.add(t.shapeId);
|
|
927
|
-
return shape.fields.every((f) => !f.name.startsWith("%") &&
|
|
968
|
+
return (shape.fields.every((f) => !f.name.startsWith("%") &&
|
|
928
969
|
f.name !== "__proto__" &&
|
|
929
|
-
this.jsonSchemaSupported(f.type, visiting))
|
|
970
|
+
this.jsonSchemaSupported(f.type, visiting, true)) &&
|
|
971
|
+
(!index || this.jsonSchemaSupported(index, visiting)));
|
|
930
972
|
}
|
|
973
|
+
case "union":
|
|
974
|
+
return member && this.jsonUnionSupported(t, visiting);
|
|
931
975
|
default:
|
|
932
976
|
return false;
|
|
933
977
|
}
|
|
934
978
|
}
|
|
979
|
+
/** A union record member the one-pass parser writes directly: every arm
|
|
980
|
+
* a number, boolean, string, null, undefined, or a supported record or
|
|
981
|
+
* array, with at most one record and one array arm and no discriminant.
|
|
982
|
+
* Each JSON value kind then selects at most one arm, so the checked
|
|
983
|
+
* route's first full match is that arm, and a value that arm rejects
|
|
984
|
+
* fails every arm. */
|
|
985
|
+
jsonUnionSupported(t, visiting) {
|
|
986
|
+
const def = this.host.unionsById.get(t.unionId);
|
|
987
|
+
if (!def || def.discriminant)
|
|
988
|
+
return false;
|
|
989
|
+
let records = 0, arrays = 0;
|
|
990
|
+
return def.arms.every((arm) => {
|
|
991
|
+
switch (arm.kind) {
|
|
992
|
+
case "f64":
|
|
993
|
+
case "bool":
|
|
994
|
+
case "string":
|
|
995
|
+
case "nullT":
|
|
996
|
+
case "undefinedT":
|
|
997
|
+
return true;
|
|
998
|
+
case "record":
|
|
999
|
+
return ++records === 1 && this.jsonSchemaSupported(arm, visiting);
|
|
1000
|
+
case "array":
|
|
1001
|
+
return ++arrays === 1 && this.jsonSchemaSupported(arm, visiting);
|
|
1002
|
+
default:
|
|
1003
|
+
return false;
|
|
1004
|
+
}
|
|
1005
|
+
});
|
|
1006
|
+
}
|
|
935
1007
|
/** The ScrJsonSchema constant for t (scr_runtime.h layout). Records list
|
|
936
1008
|
* fields in declaration order — the order JSON.stringify writes — so the
|
|
937
1009
|
* runtime's next-field guess usually matches without a scan. */
|
|
@@ -950,14 +1022,14 @@ export class LlDyn {
|
|
|
950
1022
|
case "bool":
|
|
951
1023
|
case "string": {
|
|
952
1024
|
const kind = t.kind === "f64" ? 0 : t.kind === "bool" ? 1 : 2;
|
|
953
|
-
body = `${S} ${kind}, ${S} 0, ptr null, ptr null, ptr null, ptr null, ptr null`;
|
|
1025
|
+
body = `${S} ${kind}, ${S} 0, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ${S} 0`;
|
|
954
1026
|
break;
|
|
955
1027
|
}
|
|
956
1028
|
case "array": {
|
|
957
1029
|
const elem = this.jsonSchema(t.elem);
|
|
958
1030
|
const ctor = `${name}_new`;
|
|
959
1031
|
this.defs.push(`define internal ptr @${ctor}(${S} %cap) ${FN_ATTRS} {`, `entry:`, ` %a = ${arrNewCall(host, t.elem, "%cap")}`, ` ret ptr %a`, `}`, ``);
|
|
960
|
-
body = `${S} 4, ${S} 0, ptr null, ptr @${elem}, ptr null, ptr @${ctor}, ptr ${vAdapters(host, t).release}`;
|
|
1032
|
+
body = `${S} 4, ${S} 0, ptr null, ptr @${elem}, ptr null, ptr @${ctor}, ptr ${vAdapters(host, t).release}, ptr null, ${S} 0`;
|
|
961
1033
|
break;
|
|
962
1034
|
}
|
|
963
1035
|
case "record": {
|
|
@@ -965,27 +1037,99 @@ export class LlDyn {
|
|
|
965
1037
|
if (!shape)
|
|
966
1038
|
throw new InternalCompilerError(`llvm emitter bug: JSON schema of unknown shape ${t.shapeId}`);
|
|
967
1039
|
const struct = mangleRecordStruct(t.shapeId);
|
|
968
|
-
const
|
|
1040
|
+
const base = host.nullableUnions.fieldBase(t.shapeId);
|
|
1041
|
+
const index = new Map(shape.fields.map((f, i) => [f.name, i + base]));
|
|
969
1042
|
// The runtime names kept-source keys by this index (record-sources.ts).
|
|
970
1043
|
const order = recordSourceFieldOrder(shape);
|
|
1044
|
+
if (recordMayKeepSource(shape))
|
|
1045
|
+
this.keepsRecordSources = true;
|
|
971
1046
|
const fieldTy = `{ ptr, ${S}, ${S}, ptr }`;
|
|
972
1047
|
const entries = order.map((fieldName) => {
|
|
973
|
-
const field = shape.fields[index.get(fieldName) -
|
|
1048
|
+
const field = shape.fields[index.get(fieldName) - base];
|
|
974
1049
|
const sub = this.jsonSchema(field.type);
|
|
975
1050
|
const offset = `ptrtoint (ptr getelementptr (%${struct}, ptr null, i64 0, i32 ${index.get(fieldName)}) to ${S})`;
|
|
976
1051
|
return `${fieldTy} { ptr ${host.cstr(fieldName)}, ${S} ${Buffer.byteLength(fieldName, "utf8")}, ${S} ${offset}, ptr @${sub} }`;
|
|
977
1052
|
});
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
1053
|
+
let fields = "null";
|
|
1054
|
+
if (entries.length > 0) {
|
|
1055
|
+
fields = `@${name}_fields`;
|
|
1056
|
+
this.defs.push(`${fields} = internal constant [${entries.length} x ${fieldTy}] [${entries.join(", ")}]`, ``);
|
|
1057
|
+
}
|
|
1058
|
+
// An index signature's undeclared members go to the overflow map
|
|
1059
|
+
// after the declared fields.
|
|
1060
|
+
const overflow = shape.indexValue
|
|
1061
|
+
? {
|
|
1062
|
+
elem: `@${this.jsonSchema(shape.indexValue)}`,
|
|
1063
|
+
offset: `ptrtoint (ptr getelementptr (%${struct}, ptr null, i64 0, i32 ${shape.fields.length + base}) to ${S})`,
|
|
1064
|
+
}
|
|
1065
|
+
: { elem: "null", offset: "0" };
|
|
1066
|
+
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}`;
|
|
981
1067
|
break;
|
|
982
1068
|
}
|
|
1069
|
+
case "union":
|
|
1070
|
+
body = `${S} 5, ${S} 0, ptr null, ptr null, ptr null, ptr null, ptr null, ptr @${this.jsonUnionSchema(t, name)}, ${S} 0`;
|
|
1071
|
+
break;
|
|
983
1072
|
default:
|
|
984
1073
|
throw new InternalCompilerError(`llvm emitter bug: JSON schema of ${t.kind}`);
|
|
985
1074
|
}
|
|
986
|
-
this.defs.push(`@${name} = internal constant { ${S}, ${S}, ptr, ptr, ptr, ptr, ptr } { ${body} }`, ``);
|
|
1075
|
+
this.defs.push(`@${name} = internal constant { ${S}, ${S}, ptr, ptr, ptr, ptr, ptr, ptr, ${S} } { ${body} }`, ``);
|
|
987
1076
|
return name;
|
|
988
1077
|
}
|
|
1078
|
+
/** The ScrJsonUnion descriptor of a union member (scr_json.h layout):
|
|
1079
|
+
* its slot representation, the arm each JSON value kind selects, and the
|
|
1080
|
+
* values the runtime stores for null and for a missing member. Boxed
|
|
1081
|
+
* unions build their boxes through `<name>_box`. */
|
|
1082
|
+
jsonUnionSchema(t, name) {
|
|
1083
|
+
const host = this.host;
|
|
1084
|
+
const S = host.sizeType;
|
|
1085
|
+
const def = host.unionsById.get(t.unionId);
|
|
1086
|
+
if (!def)
|
|
1087
|
+
throw new InternalCompilerError(`llvm emitter bug: JSON schema of ${t.unionId}`);
|
|
1088
|
+
const nullable = host.nullableUnions.has(t.unionId);
|
|
1089
|
+
const inline = host.inlineUnions.record(t);
|
|
1090
|
+
const repr = nullable ? 0 : inline ? 1 : 2;
|
|
1091
|
+
// Indexed by SCR_JARM_*: null, number, boolean, string, object, array, absent.
|
|
1092
|
+
const armKinds = ["nullT", "f64", "bool", "string", "record", "array", "undefinedT"];
|
|
1093
|
+
const tags = armKinds.map((kind) => def.arms.findIndex((arm) => arm.kind === kind));
|
|
1094
|
+
const arms = armKinds.map((_, i) => i >= 1 && i <= 5 && tags[i] >= 0
|
|
1095
|
+
? `ptr @${this.jsonSchema(def.arms[tags[i]])}`
|
|
1096
|
+
: "ptr null");
|
|
1097
|
+
const nullTag = tags[0];
|
|
1098
|
+
const absentTag = tags[6];
|
|
1099
|
+
const nullValue = !inline && nullTag >= 0 ? host.unitInstanceRef(t.unionId, nullTag) : "null";
|
|
1100
|
+
const absentValue = !inline && absentTag >= 0 ? host.absentInstanceRef(t.unionId) : "null";
|
|
1101
|
+
let box = "null";
|
|
1102
|
+
if (repr === 2) {
|
|
1103
|
+
box = `@${name}_box`;
|
|
1104
|
+
const lines = [`define internal ptr ${box}(i32 %tag, i64 %bits) ${FN_ATTRS} {`, `entry:`];
|
|
1105
|
+
const cases = [];
|
|
1106
|
+
const blocks = [];
|
|
1107
|
+
def.arms.forEach((arm, tag) => {
|
|
1108
|
+
if (arm.kind === "nullT" || arm.kind === "undefinedT")
|
|
1109
|
+
return;
|
|
1110
|
+
cases.push(`i32 ${tag}, label %arm${tag}`);
|
|
1111
|
+
blocks.push(`arm${tag}:`);
|
|
1112
|
+
if (arm.kind === "f64") {
|
|
1113
|
+
host.declare(`declare ptr @scr_union_new_f64(i32, double)`);
|
|
1114
|
+
blocks.push(` %f${tag} = bitcast i64 %bits to double`, ` %u${tag} = call ptr @scr_union_new_f64(i32 ${tag}, double %f${tag})`);
|
|
1115
|
+
}
|
|
1116
|
+
else if (arm.kind === "bool") {
|
|
1117
|
+
host.declare(`declare ptr @scr_union_new_bool(i32, i1 zeroext)`);
|
|
1118
|
+
blocks.push(` %b${tag} = trunc i64 %bits to i1`, ` %u${tag} = call ptr @scr_union_new_bool(i32 ${tag}, i1 zeroext %b${tag})`);
|
|
1119
|
+
}
|
|
1120
|
+
else {
|
|
1121
|
+
const rc = vAdapters(host, arm);
|
|
1122
|
+
host.declare(`declare ptr @scr_union_new_ref(i32, ptr, ptr, ptr, ptr)`);
|
|
1123
|
+
blocks.push(` %p${tag} = inttoptr i64 %bits to ptr`, ` %u${tag} = call ptr @scr_union_new_ref(i32 ${tag}, ptr %p${tag}, ptr ${rc.retain}, ptr ${rc.release}, ptr ${traceArg(host, arm)})`);
|
|
1124
|
+
}
|
|
1125
|
+
blocks.push(` ret ptr %u${tag}`);
|
|
1126
|
+
});
|
|
1127
|
+
this.defs.push(...lines, ` switch i32 %tag, label %none [ ${cases.join(" ")} ]`, `none:`, ` unreachable`, ...blocks, `}`, ``);
|
|
1128
|
+
}
|
|
1129
|
+
const descriptor = `${name}_union`;
|
|
1130
|
+
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} }`, ``);
|
|
1131
|
+
return descriptor;
|
|
1132
|
+
}
|
|
989
1133
|
/** The declared-name tables scr_record_source_note scans: parallel
|
|
990
1134
|
* constant arrays of field-name bytes and byte lengths in declaration
|
|
991
1135
|
* order (the order the record serializes), interned per shape. Internal
|
|
@@ -1082,6 +1226,20 @@ export class LlDyn {
|
|
|
1082
1226
|
B.line(`${ref} = call ptr @scr_dyn_typed_ref_unbox(ptr %d)`);
|
|
1083
1227
|
B.terminate(`ret ptr ${ref}`);
|
|
1084
1228
|
B.startBlock(lNext);
|
|
1229
|
+
// A constructor-function stream (scr_dyn_builtin_stream.c) carries
|
|
1230
|
+
// its runtime stream.
|
|
1231
|
+
const streamKind = t.kind === "object" ? builtinStreamKind(t.className) : null;
|
|
1232
|
+
if (streamKind !== null && this.host.usesDynBuiltinStream?.() === true) {
|
|
1233
|
+
host.declare(`declare ptr @scr_dyn_builtin_stream_check(ptr, double)`);
|
|
1234
|
+
const own = B.tmp(), hit = B.tmp();
|
|
1235
|
+
B.line(`${own} = call ptr @scr_dyn_builtin_stream_check(ptr %d, double ${f64Lit(streamKind)})`);
|
|
1236
|
+
B.line(`${hit} = icmp ne ptr ${own}, null`);
|
|
1237
|
+
const lOwn = B.newLabel("dc.ctor"), lNotOwn = B.newLabel("dc.notctor");
|
|
1238
|
+
B.condBr(hit, lOwn, lNotOwn);
|
|
1239
|
+
B.startBlock(lOwn);
|
|
1240
|
+
B.terminate(`ret ptr ${own}`);
|
|
1241
|
+
B.startBlock(lNotOwn);
|
|
1242
|
+
}
|
|
1085
1243
|
if (t.kind !== "union" && preserveRefs) {
|
|
1086
1244
|
const kind = this.kindOf(B, "%d");
|
|
1087
1245
|
const capsule = B.tmp();
|
|
@@ -1162,17 +1320,18 @@ export class LlDyn {
|
|
|
1162
1320
|
B.line(`call void @scr_arr_outline(ptr ${cached})`);
|
|
1163
1321
|
B.line(`call void @scr_arr_outline(ptr ${checked})`);
|
|
1164
1322
|
}
|
|
1323
|
+
const base = t.kind === "record" ? host.nullableUnions.fieldBase(t.shapeId) : 1;
|
|
1165
1324
|
const members = t.kind === "record"
|
|
1166
1325
|
? [
|
|
1167
1326
|
...shape.fields.map((field, index) => ({
|
|
1168
|
-
index: index +
|
|
1327
|
+
index: index + base,
|
|
1169
1328
|
type: llFieldType(field.type, host.inlineUnions.record(field.type)),
|
|
1170
1329
|
name: field.name,
|
|
1171
1330
|
})),
|
|
1172
1331
|
...(shape.indexValue
|
|
1173
1332
|
? [
|
|
1174
1333
|
{
|
|
1175
|
-
index: shape.fields.length +
|
|
1334
|
+
index: shape.fields.length + base,
|
|
1176
1335
|
type: "ptr",
|
|
1177
1336
|
name: "[key: string] overflow",
|
|
1178
1337
|
},
|
|
@@ -1412,7 +1571,8 @@ export class LlDyn {
|
|
|
1412
1571
|
if (!shape)
|
|
1413
1572
|
throw new InternalCompilerError(`llvm emitter bug: dynCheck of unknown shape ${t.shapeId}`);
|
|
1414
1573
|
const struct = mangleRecordStruct(t.shapeId);
|
|
1415
|
-
const
|
|
1574
|
+
const base = host.nullableUnions.fieldBase(t.shapeId);
|
|
1575
|
+
const fieldIndex = new Map(shape.fields.map((f, i) => [f.name, i + base]));
|
|
1416
1576
|
const releaseR = () => {
|
|
1417
1577
|
B.line(`call void ${releaseSym(host, t)}(ptr %r0)`);
|
|
1418
1578
|
};
|
|
@@ -1555,6 +1715,7 @@ export class LlDyn {
|
|
|
1555
1715
|
// that has them stays beside the record so its reflective
|
|
1556
1716
|
// surfaces still observe them (scr_record_source_note).
|
|
1557
1717
|
if (recordMayKeepSource(shape)) {
|
|
1718
|
+
this.keepsRecordSources = true;
|
|
1558
1719
|
const names = this.recordNameTable(t.shapeId, shape);
|
|
1559
1720
|
host.declare(`declare void @scr_record_source_note(ptr, ptr, ptr, ptr, ${host.sizeType})`);
|
|
1560
1721
|
B.line(`call void @scr_record_source_note(ptr %r0, ptr %d, ptr ${names.names}, ptr ${names.lens}, ${host.sizeType} ${shape.fields.length})`);
|
|
@@ -1568,7 +1729,7 @@ export class LlDyn {
|
|
|
1568
1729
|
host.declare(`declare void @scr_str_release(ptr)`);
|
|
1569
1730
|
const ovfp = B.tmp();
|
|
1570
1731
|
const ovf = B.tmp();
|
|
1571
|
-
B.line(`${ovfp} = getelementptr inbounds %${struct}, ptr %r0, i64 0, i32 ${shape.fields.length +
|
|
1732
|
+
B.line(`${ovfp} = getelementptr inbounds %${struct}, ptr %r0, i64 0, i32 ${shape.fields.length + base}`);
|
|
1572
1733
|
B.line(`${ovf} = load ptr, ptr ${ovfp} ; overflow map`);
|
|
1573
1734
|
if (shape.fields.length === 0) {
|
|
1574
1735
|
// Object.create(null)'s dictionary keeps its null prototype:
|
|
@@ -1947,6 +2108,15 @@ export class LlDyn {
|
|
|
1947
2108
|
const B = new BlockBuilder();
|
|
1948
2109
|
let sourceAccessor = null;
|
|
1949
2110
|
switch (t.kind) {
|
|
2111
|
+
case "date": {
|
|
2112
|
+
// A Date handle holding the same time value; native Dates are
|
|
2113
|
+
// immutable values, and so is the handle.
|
|
2114
|
+
host.declare(`declare ptr @scr_dyn_native_date_from_ms(double)`);
|
|
2115
|
+
const r = B.tmp();
|
|
2116
|
+
B.line(`${r} = call ptr @scr_dyn_native_date_from_ms(double %v)`);
|
|
2117
|
+
B.terminate(`ret ptr ${r}`);
|
|
2118
|
+
break;
|
|
2119
|
+
}
|
|
1950
2120
|
case "url":
|
|
1951
2121
|
case "searchParams": {
|
|
1952
2122
|
const native = t.kind === "url" ? "url" : "search_params";
|
|
@@ -2084,7 +2254,8 @@ export class LlDyn {
|
|
|
2084
2254
|
if (!shape)
|
|
2085
2255
|
throw new InternalCompilerError(`llvm emitter bug: to-dyn of unknown shape ${t.shapeId}`);
|
|
2086
2256
|
const struct = mangleRecordStruct(t.shapeId);
|
|
2087
|
-
const
|
|
2257
|
+
const base = host.nullableUnions.fieldBase(t.shapeId);
|
|
2258
|
+
const fieldIndex = new Map(shape.fields.map((f, i) => [f.name, i + base]));
|
|
2088
2259
|
const loadFieldOf = (fname, ft) => {
|
|
2089
2260
|
const p = B.tmp();
|
|
2090
2261
|
B.line(`${p} = getelementptr inbounds %${struct}, ptr %v, i64 0, i32 ${fieldIndex.get(fname)} ; .${llvmCommentText(fname)}`);
|
|
@@ -2167,13 +2338,43 @@ export class LlDyn {
|
|
|
2167
2338
|
// Keys insert in DECLARED order (JS insertion order); internal
|
|
2168
2339
|
// '%'-fields follow so a record→dyn→record round trip keeps them.
|
|
2169
2340
|
const byName = new Map(shape.fields.map((f) => [f.name, f]));
|
|
2170
|
-
|
|
2341
|
+
// An accessor property is one key whose getter and setter are the
|
|
2342
|
+
// slot closures (see accessorSlotProp), in accessorOrder's place.
|
|
2343
|
+
const order = shape.accessorOrder ?? shape.declaredOrder ?? shape.fields.map((f) => f.name);
|
|
2171
2344
|
const inOrder = new Set(order);
|
|
2345
|
+
const accessors = new Set(shape.accessorOrder === undefined
|
|
2346
|
+
? []
|
|
2347
|
+
: shape.fields.flatMap((f) => {
|
|
2348
|
+
const slot = accessorSlotProp(f.name);
|
|
2349
|
+
return slot === null ? [] : [slot.prop];
|
|
2350
|
+
}));
|
|
2172
2351
|
const dynFields = [
|
|
2173
|
-
...order.
|
|
2174
|
-
|
|
2352
|
+
...order.flatMap((n) => {
|
|
2353
|
+
if (accessors.has(n))
|
|
2354
|
+
return [{ accessor: n }];
|
|
2355
|
+
const f = byName.get(n);
|
|
2356
|
+
return f === undefined ? [] : [f];
|
|
2357
|
+
}),
|
|
2358
|
+
...shape.fields.filter((f) => !inOrder.has(f.name) && !(accessors.size > 0 && accessorSlotProp(f.name) !== null)),
|
|
2175
2359
|
];
|
|
2176
|
-
for (const
|
|
2360
|
+
for (const entry of dynFields) {
|
|
2361
|
+
if ("accessor" in entry) {
|
|
2362
|
+
host.declare(`declare void @scr_dyn_obj_set_accessor(ptr, ptr, ${host.sizeType}, ptr, ptr)`);
|
|
2363
|
+
const boxed = (kind) => {
|
|
2364
|
+
const slot = byName.get(`%${kind}:${entry.accessor}`);
|
|
2365
|
+
if (slot === undefined)
|
|
2366
|
+
return "null";
|
|
2367
|
+
const fv = loadFieldOf(slot.name, slot.type);
|
|
2368
|
+
const conv = B.tmp();
|
|
2369
|
+
B.line(`${conv} = call ptr @${this.toDynHelper(slot.type)}(${this.valTy(slot.type)} ${fv})`);
|
|
2370
|
+
return conv;
|
|
2371
|
+
};
|
|
2372
|
+
const getter = boxed("get");
|
|
2373
|
+
const setter = boxed("set");
|
|
2374
|
+
B.line(`call void @scr_dyn_obj_set_accessor(ptr ${d}, ptr ${host.cstr(entry.accessor)}, ${host.sizeType} ${Buffer.byteLength(entry.accessor, "utf8")}, ptr ${getter}, ptr ${setter}) ; ${llvmCommentText(entry.accessor)}`);
|
|
2375
|
+
continue;
|
|
2376
|
+
}
|
|
2377
|
+
const f = entry;
|
|
2177
2378
|
const klen = Buffer.byteLength(f.name, "utf8");
|
|
2178
2379
|
const fv = loadFieldOf(f.name, f.type);
|
|
2179
2380
|
// An ABSENT optional field contributes no key.
|
|
@@ -2201,7 +2402,7 @@ export class LlDyn {
|
|
|
2201
2402
|
host.declare(`declare void @scr_arr_release(ptr)`);
|
|
2202
2403
|
const ovfp = B.tmp();
|
|
2203
2404
|
const ovf = B.tmp();
|
|
2204
|
-
B.line(`${ovfp} = getelementptr inbounds %${struct}, ptr %v, i64 0, i32 ${shape.fields.length +
|
|
2405
|
+
B.line(`${ovfp} = getelementptr inbounds %${struct}, ptr %v, i64 0, i32 ${shape.fields.length + base}`);
|
|
2205
2406
|
B.line(`${ovf} = load ptr, ptr ${ovfp} ; overflow map`);
|
|
2206
2407
|
const ks = B.tmp();
|
|
2207
2408
|
const len = B.tmp();
|
|
@@ -2437,9 +2638,16 @@ export class LlDyn {
|
|
|
2437
2638
|
// tag's installed ops.
|
|
2438
2639
|
const h = DYN_HANDLE_KINDS.get(t.kind);
|
|
2439
2640
|
if (h) {
|
|
2440
|
-
|
|
2641
|
+
const box = DYN_HANDLE_BOX_FN[t.kind];
|
|
2441
2642
|
const r = B.tmp();
|
|
2442
|
-
|
|
2643
|
+
if (box) {
|
|
2644
|
+
host.declare(`declare ptr @${box}(ptr)`);
|
|
2645
|
+
B.line(`${r} = call ptr @${box}(ptr %v)`);
|
|
2646
|
+
}
|
|
2647
|
+
else {
|
|
2648
|
+
host.declare(`declare ptr @scr_dyn_new_handle(ptr, i32)`);
|
|
2649
|
+
B.line(`${r} = call ptr @scr_dyn_new_handle(ptr %v, i32 ${DYN_HANDLE_TAG_NUM[t.kind]})`);
|
|
2650
|
+
}
|
|
2443
2651
|
B.terminate(`ret ptr ${r}`);
|
|
2444
2652
|
break;
|
|
2445
2653
|
}
|
|
@@ -2690,88 +2898,26 @@ export class LlDyn {
|
|
|
2690
2898
|
this.puts(B, "%b", "[object Object]");
|
|
2691
2899
|
B.br(done);
|
|
2692
2900
|
B.startBlock(lErr);
|
|
2693
|
-
|
|
2694
|
-
|
|
2695
|
-
|
|
2696
|
-
|
|
2697
|
-
|
|
2698
|
-
|
|
2699
|
-
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
|
|
2704
|
-
|
|
2705
|
-
|
|
2706
|
-
const k = this.kindOf(B, m);
|
|
2707
|
-
const isStr = B.tmp();
|
|
2708
|
-
B.line(`${isStr} = icmp eq i32 ${k}, ${DYN_KIND.STR}`);
|
|
2709
|
-
const ls = B.newLabel(`${hint}.s`);
|
|
2710
|
-
B.condBr(isStr, ls, lj);
|
|
2711
|
-
B.startBlock(ls);
|
|
2712
|
-
const sv = this.payloadOf(B, m, "ptr");
|
|
2713
|
-
B.line(`store ptr ${sv}, ptr ${slot}`);
|
|
2714
|
-
B.br(lj);
|
|
2715
|
-
B.startBlock(lj);
|
|
2716
|
-
const out = B.tmp();
|
|
2717
|
-
B.line(`${out} = load ptr, ptr ${slot}`);
|
|
2718
|
-
return out;
|
|
2719
|
-
};
|
|
2720
|
-
const ens = strOf(en, "ds.en");
|
|
2721
|
-
const ems = strOf(em, "ds.em");
|
|
2722
|
-
const putIf = (s, hint) => {
|
|
2723
|
-
const nn = B.tmp();
|
|
2724
|
-
B.line(`${nn} = icmp ne ptr ${s}, null`);
|
|
2725
|
-
const lt = B.newLabel(`${hint}.t`);
|
|
2726
|
-
const lj = B.newLabel(`${hint}.j`);
|
|
2727
|
-
B.condBr(nn, lt, lj);
|
|
2728
|
-
B.startBlock(lt);
|
|
2729
|
-
this.putScrStr(B, "%b", s);
|
|
2730
|
-
B.br(lj);
|
|
2731
|
-
B.startBlock(lj);
|
|
2732
|
-
};
|
|
2733
|
-
putIf(ens, "ds.pn");
|
|
2734
|
-
{
|
|
2735
|
-
// if (ens && ens->len && ems && ems->len) ": "
|
|
2736
|
-
const lenNz = (s, hint) => {
|
|
2737
|
-
const slot = B.slot();
|
|
2738
|
-
B.entryAllocas.push(`${slot} = alloca i1`);
|
|
2739
|
-
B.line(`store i1 false, ptr ${slot}`);
|
|
2740
|
-
const nn = B.tmp();
|
|
2741
|
-
B.line(`${nn} = icmp ne ptr ${s}, null`);
|
|
2742
|
-
const lt = B.newLabel(`${hint}.t`);
|
|
2743
|
-
const lj = B.newLabel(`${hint}.j`);
|
|
2744
|
-
B.condBr(nn, lt, lj);
|
|
2745
|
-
B.startBlock(lt);
|
|
2746
|
-
const { len } = this.strParts(B, s);
|
|
2747
|
-
const nz = B.tmp();
|
|
2748
|
-
B.line(`${nz} = icmp ne ${this.S} ${len}, 0`);
|
|
2749
|
-
B.line(`store i1 ${nz}, ptr ${slot}`);
|
|
2750
|
-
B.br(lj);
|
|
2751
|
-
B.startBlock(lj);
|
|
2752
|
-
const out = B.tmp();
|
|
2753
|
-
B.line(`${out} = load i1, ptr ${slot}`);
|
|
2754
|
-
return out;
|
|
2755
|
-
};
|
|
2756
|
-
const a = lenNz(ens, "ds.ln");
|
|
2757
|
-
const b2 = lenNz(ems, "ds.lm");
|
|
2758
|
-
const both = B.tmp();
|
|
2759
|
-
B.line(`${both} = and i1 ${a}, ${b2}`);
|
|
2760
|
-
const lt = B.newLabel("ds.cl");
|
|
2761
|
-
const lj = B.newLabel("ds.cj");
|
|
2762
|
-
B.condBr(both, lt, lj);
|
|
2763
|
-
B.startBlock(lt);
|
|
2764
|
-
this.puts(B, "%b", ": ");
|
|
2765
|
-
B.br(lj);
|
|
2766
|
-
B.startBlock(lj);
|
|
2767
|
-
}
|
|
2768
|
-
putIf(ems, "ds.pm");
|
|
2901
|
+
// Error.prototype.toString, reading name and message through the
|
|
2902
|
+
// prototype. Null leaves the exception its conversion threw pending.
|
|
2903
|
+
host.declare(`declare ptr @scr_dyn_error_string(ptr)`);
|
|
2904
|
+
host.declare(`declare void @scr_str_release(ptr)`);
|
|
2905
|
+
const text = B.tmp();
|
|
2906
|
+
B.line(`${text} = call ptr @scr_dyn_error_string(ptr %d)`);
|
|
2907
|
+
const written = B.tmp();
|
|
2908
|
+
B.line(`${written} = icmp ne ptr ${text}, null`);
|
|
2909
|
+
const lPut = B.newLabel("ds.ep");
|
|
2910
|
+
B.condBr(written, lPut, done);
|
|
2911
|
+
B.startBlock(lPut);
|
|
2912
|
+
this.putScrStr(B, "%b", text);
|
|
2913
|
+
B.line(`call void @scr_str_release(ptr ${text})`);
|
|
2769
2914
|
B.br(done);
|
|
2770
2915
|
}
|
|
2771
2916
|
B.startBlock(labels.get(DYN_KIND.BYTES));
|
|
2772
2917
|
{
|
|
2773
|
-
// Buffer-flavored values coerce utf8;
|
|
2774
|
-
//
|
|
2918
|
+
// Buffer-flavored values coerce utf8; typed arrays join their
|
|
2919
|
+
// elements and a DataView answers "[object DataView]" (the
|
|
2920
|
+
// runtime's conversion).
|
|
2775
2921
|
const bufp = B.tmp();
|
|
2776
2922
|
const bufRaw = B.tmp();
|
|
2777
2923
|
const isBuf = B.tmp();
|
|
@@ -2791,10 +2937,9 @@ export class LlDyn {
|
|
|
2791
2937
|
B.line(`call void @scr_str_release(ptr ${txt})`);
|
|
2792
2938
|
B.br(done);
|
|
2793
2939
|
B.startBlock(lJoin);
|
|
2794
|
-
|
|
2795
|
-
host.declare(`declare ptr @scr_bytes_join(ptr, ptr)`);
|
|
2940
|
+
host.declare(`declare ptr @scr_dyn_to_string(ptr, ptr)`);
|
|
2796
2941
|
const joined = B.tmp();
|
|
2797
|
-
B.line(`${joined} = call ptr @
|
|
2942
|
+
B.line(`${joined} = call ptr @scr_dyn_to_string(ptr %d, ptr null)`);
|
|
2798
2943
|
this.putScrStr(B, "%b", joined);
|
|
2799
2944
|
B.line(`call void @scr_str_release(ptr ${joined})`);
|
|
2800
2945
|
B.br(done);
|
|
@@ -3161,6 +3306,21 @@ export class LlDyn {
|
|
|
3161
3306
|
B.terminate(`ret ptr ${r}`);
|
|
3162
3307
|
B.startBlock(lNext);
|
|
3163
3308
|
}
|
|
3309
|
+
// PROMISE: Promise.prototype.then/catch/finally as function values;
|
|
3310
|
+
// every other key is undefined (promises have no own properties).
|
|
3311
|
+
{
|
|
3312
|
+
const isP = B.tmp();
|
|
3313
|
+
B.line(`${isP} = icmp eq i32 ${kd}, ${DYN_KIND.PROMISE}`);
|
|
3314
|
+
const lP = B.newLabel("kg.p");
|
|
3315
|
+
const lNext = B.newLabel("kg.n");
|
|
3316
|
+
B.condBr(isP, lP, lNext);
|
|
3317
|
+
B.startBlock(lP);
|
|
3318
|
+
host.declare(`declare ptr @scr_dyn_promise_key_get(ptr, ptr)`);
|
|
3319
|
+
const r = B.tmp();
|
|
3320
|
+
B.line(`${r} = call ptr @scr_dyn_promise_key_get(ptr %d, ptr %k)`);
|
|
3321
|
+
B.terminate(`ret ptr ${r}`);
|
|
3322
|
+
B.startBlock(lNext);
|
|
3323
|
+
}
|
|
3164
3324
|
// The canonical-index parse, shared by BYTES/ARR/STR: digits only,
|
|
3165
3325
|
// no leading zero. Leaves (digits, idx).
|
|
3166
3326
|
const parseIndex = () => {
|
|
@@ -3455,14 +3615,9 @@ export class LlDyn {
|
|
|
3455
3615
|
const name = "sc_dyn_iter_n";
|
|
3456
3616
|
this.dynBuilders.set(memoKey, name);
|
|
3457
3617
|
const host = this.host;
|
|
3458
|
-
host.declare(`declare void @scr_jb_init(ptr)`);
|
|
3459
|
-
host.declare(`declare ptr @scr_jb_finish(ptr)`);
|
|
3460
|
-
host.declare(`declare void @scr_jb_puts(ptr, ptr)`);
|
|
3461
|
-
host.declare(`declare void @scr_throw_error(i32, ptr)`);
|
|
3462
3618
|
host.declare(`declare ptr @scr_dyn_new_arr()`);
|
|
3463
3619
|
host.declare(`declare void @scr_dyn_arr_push(ptr, ptr)`);
|
|
3464
3620
|
host.declare(`declare ptr @scr_dyn_new_num(double)`);
|
|
3465
|
-
host.declare(`declare ptr @scr_f64_to_scrstr(double)`);
|
|
3466
3621
|
host.declare(`declare void @scr_str_release(ptr)`);
|
|
3467
3622
|
const B = new BlockBuilder();
|
|
3468
3623
|
const kd = this.kindOf(B, "%d");
|
|
@@ -3474,6 +3629,19 @@ export class LlDyn {
|
|
|
3474
3629
|
const lNext = B.newLabel("din.nt");
|
|
3475
3630
|
B.condBr(isTyped, lTyped, lNext);
|
|
3476
3631
|
B.startBlock(lTyped);
|
|
3632
|
+
// Compiled generators step through the iterator protocol.
|
|
3633
|
+
host.declare(`declare i1 @scr_dyn_iterates_by_protocol(ptr)`);
|
|
3634
|
+
host.declare(`declare ptr @scr_dyn_iter_take(ptr, ${host.sizeType}, ptr)`);
|
|
3635
|
+
const protocol = B.tmp();
|
|
3636
|
+
const lProtocol = B.newLabel("din.pr");
|
|
3637
|
+
const lView = B.newLabel("din.vw");
|
|
3638
|
+
B.line(`${protocol} = call i1 @scr_dyn_iterates_by_protocol(ptr %d)`);
|
|
3639
|
+
B.condBr(protocol, lProtocol, lView);
|
|
3640
|
+
B.startBlock(lProtocol);
|
|
3641
|
+
const stepped = B.tmp();
|
|
3642
|
+
B.line(`${stepped} = call ptr @scr_dyn_iter_take(ptr %d, ${host.sizeType} %n, ptr %spelling)`);
|
|
3643
|
+
B.terminate(`ret ptr ${stepped}`);
|
|
3644
|
+
B.startBlock(lView);
|
|
3477
3645
|
host.declare(`declare ptr @scr_dyn_typed_ref_materialize(ptr)`);
|
|
3478
3646
|
host.declare(`declare void @scr_dyn_release_v(ptr)`);
|
|
3479
3647
|
const materialized = B.tmp();
|
|
@@ -3497,66 +3665,13 @@ export class LlDyn {
|
|
|
3497
3665
|
const lGo = B.newLabel("din.g");
|
|
3498
3666
|
const lThrow = B.newLabel("din.t");
|
|
3499
3667
|
B.condBr(ok, lGo, lThrow);
|
|
3500
|
-
//
|
|
3668
|
+
// Other iterables step through the iterator protocol; non-iterables
|
|
3669
|
+
// throw V8's exact not-iterable TypeError.
|
|
3501
3670
|
B.startBlock(lThrow);
|
|
3502
|
-
|
|
3503
|
-
B.
|
|
3504
|
-
B.line(
|
|
3505
|
-
|
|
3506
|
-
B.line(`${hasSpelling} = icmp ne ptr %spelling, null`);
|
|
3507
|
-
const named = B.newLabel("din.named"), unnamed = B.newLabel("din.unnamed");
|
|
3508
|
-
B.condBr(hasSpelling, named, unnamed);
|
|
3509
|
-
B.startBlock(named);
|
|
3510
|
-
B.line(`call void @scr_jb_puts(ptr ${buf}, ptr %spelling)`);
|
|
3511
|
-
const namedMessage = B.tmp();
|
|
3512
|
-
B.line(`${namedMessage} = call ptr @scr_jb_finish(ptr ${buf})`);
|
|
3513
|
-
B.line(`call void @scr_throw_error(i32 1, ptr ${namedMessage})`);
|
|
3514
|
-
B.terminate(`ret ptr null`);
|
|
3515
|
-
B.startBlock(unnamed);
|
|
3516
|
-
const lU = B.newLabel("din.u");
|
|
3517
|
-
const lN = B.newLabel("din.n");
|
|
3518
|
-
const lB2 = B.newLabel("din.b");
|
|
3519
|
-
const lNum = B.newLabel("din.m");
|
|
3520
|
-
const lF = B.newLabel("din.f");
|
|
3521
|
-
const lDef = B.newLabel("din.d");
|
|
3522
|
-
const lTail = B.newLabel("din.e");
|
|
3523
|
-
B.terminate(`switch i32 ${kd}, label %${lDef} [ i32 ${DYN_KIND.UNDEF}, label %${lU} i32 ${DYN_KIND.NULL}, label %${lN} i32 ${DYN_KIND.BOOL}, label %${lB2} i32 ${DYN_KIND.NUM}, label %${lNum} i32 ${DYN_KIND.FUNC}, label %${lF} ]`);
|
|
3524
|
-
B.startBlock(lU);
|
|
3525
|
-
this.puts(B, buf, "undefined");
|
|
3526
|
-
B.br(lTail);
|
|
3527
|
-
B.startBlock(lN);
|
|
3528
|
-
this.puts(B, buf, "object null");
|
|
3529
|
-
B.br(lTail);
|
|
3530
|
-
B.startBlock(lB2);
|
|
3531
|
-
{
|
|
3532
|
-
const bv = this.boolOf(B, "%d");
|
|
3533
|
-
const s = B.tmp();
|
|
3534
|
-
B.line(`${s} = select i1 ${bv}, ptr ${host.cstr("boolean true")}, ptr ${host.cstr("boolean false")}`);
|
|
3535
|
-
B.line(`call void @scr_jb_puts(ptr ${buf}, ptr ${s})`);
|
|
3536
|
-
B.br(lTail);
|
|
3537
|
-
}
|
|
3538
|
-
B.startBlock(lNum);
|
|
3539
|
-
{
|
|
3540
|
-
this.puts(B, buf, "number ");
|
|
3541
|
-
const x = this.payloadOf(B, "%d", "double");
|
|
3542
|
-
const s = B.tmp();
|
|
3543
|
-
B.line(`${s} = call ptr @scr_f64_to_scrstr(double ${x})`);
|
|
3544
|
-
this.putScrStr(B, buf, s);
|
|
3545
|
-
B.line(`call void @scr_str_release(ptr ${s})`);
|
|
3546
|
-
B.br(lTail);
|
|
3547
|
-
}
|
|
3548
|
-
B.startBlock(lF);
|
|
3549
|
-
this.puts(B, buf, "function");
|
|
3550
|
-
B.br(lTail);
|
|
3551
|
-
B.startBlock(lDef);
|
|
3552
|
-
this.puts(B, buf, "object");
|
|
3553
|
-
B.br(lTail);
|
|
3554
|
-
B.startBlock(lTail);
|
|
3555
|
-
this.puts(B, buf, " is not iterable (cannot read property Symbol(Symbol.iterator))");
|
|
3556
|
-
const msg = B.tmp();
|
|
3557
|
-
B.line(`${msg} = call ptr @scr_jb_finish(ptr ${buf})`);
|
|
3558
|
-
B.line(`call void @scr_throw_error(i32 1, ptr ${msg}) ; SCR_ERR_TYPE`);
|
|
3559
|
-
B.terminate(`ret ptr null`);
|
|
3671
|
+
host.declare(`declare ptr @scr_dyn_iter_take(ptr, ${host.sizeType}, ptr)`);
|
|
3672
|
+
const taken = B.tmp();
|
|
3673
|
+
B.line(`${taken} = call ptr @scr_dyn_iter_take(ptr %d, ${host.sizeType} %n, ptr %spelling)`);
|
|
3674
|
+
B.terminate(`ret ptr ${taken}`);
|
|
3560
3675
|
B.startBlock(lGo);
|
|
3561
3676
|
const out = B.tmp();
|
|
3562
3677
|
B.line(`${out} = call ptr @scr_dyn_new_arr()`);
|