@scriptc/compiler 0.2.10 → 0.3.1
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 +7 -38
- package/ambient/scriptc-overrides.d.ts +1 -25
- package/ambient/scriptc.d.ts +1 -9
- package/dist/backend/cycle-analysis.test.js +1 -1
- package/dist/backend/cycle-mutability.d.ts +1 -1
- package/dist/backend/cycle-mutability.js +1 -18
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.d.ts +1 -1
- package/dist/backend/executable-features.js +3 -8
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.d.ts +1 -1
- package/dist/backend/immutability.js +1 -1
- package/dist/backend/immutability.test.js +1 -1
- package/dist/backend/library-pack.js +0 -2
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/linker.js +1 -1
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/llvm/bigint-wrap.d.ts +4 -0
- package/dist/backend/llvm/bigint-wrap.js +590 -0
- package/dist/backend/llvm/bigint-wrap.js.map +1 -0
- package/dist/backend/llvm/blocks.d.ts +2 -0
- package/dist/backend/llvm/blocks.js +4 -0
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.js +15 -4
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +14 -3
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/checked-narrows.test.js +2 -2
- package/dist/backend/llvm/checked-narrows.test.js.map +1 -1
- package/dist/backend/llvm/classes.js +60 -21
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +11 -11
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +7 -5
- package/dist/backend/llvm/common.js +7 -5
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +1 -1
- package/dist/backend/llvm/constant-callbacks.js +13 -31
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +1 -1
- package/dist/backend/llvm/dense-array-access.js +133 -45
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +54 -2
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +2 -1
- package/dist/backend/llvm/dyn.js +4 -73
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +123 -23
- package/dist/backend/llvm/emitter.js +729 -258
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +17 -10
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +120 -43
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-async.test.js +2 -2
- package/dist/backend/llvm/expr-async.test.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +51 -36
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.js +72 -3
- 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 +159 -30
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-calls.test.js +132 -0
- package/dist/backend/llvm/expr-calls.test.js.map +1 -0
- package/dist/backend/llvm/expr-containers.js +25 -8
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +2 -0
- package/dist/backend/llvm/expr-control.js +4 -107
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dispatch.d.ts +1 -2
- package/dist/backend/llvm/expr-dispatch.js +3 -41
- package/dist/backend/llvm/expr-dispatch.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.d.ts +1 -1
- package/dist/backend/llvm/expr-dynamic.js +39 -31
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.d.ts +7 -0
- package/dist/backend/llvm/expr-primitives.js +80 -22
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +97 -7
- package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
- package/dist/backend/llvm/expr-records.d.ts +9 -0
- package/dist/backend/llvm/expr-records.js +134 -16
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.d.ts +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +80 -1
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +51 -2
- package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
- package/dist/backend/llvm/int32-abi.d.ts +31 -0
- package/dist/backend/llvm/int32-abi.js +62 -0
- package/dist/backend/llvm/int32-abi.js.map +1 -0
- package/dist/backend/llvm/int32-abi.test.js +107 -0
- package/dist/backend/llvm/int32-abi.test.js.map +1 -0
- package/dist/backend/llvm/int32-locals.d.ts +30 -0
- package/dist/backend/llvm/int32-locals.js +95 -0
- package/dist/backend/llvm/int32-locals.js.map +1 -0
- package/dist/backend/llvm/integer-values.d.ts +4 -0
- package/dist/backend/llvm/integer-values.js +30 -1
- package/dist/backend/llvm/integer-values.js.map +1 -1
- package/dist/backend/llvm/integer-views.d.ts +8 -1
- package/dist/backend/llvm/integer-views.js +47 -2
- package/dist/backend/llvm/integer-views.js.map +1 -1
- package/dist/backend/llvm/lazy-captures.d.ts +16 -0
- package/dist/backend/llvm/lazy-captures.js +88 -2
- package/dist/backend/llvm/lazy-captures.js.map +1 -1
- package/dist/backend/llvm/lazy-captures.test.js +48 -0
- package/dist/backend/llvm/lazy-captures.test.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +14 -1
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +3 -13
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +7 -8
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +21 -2
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +4 -3
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +3 -3
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.d.ts +7 -0
- package/dist/backend/llvm/map-number-lookup.js +16 -2
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.js +7 -1
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +25 -8
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +2 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.d.ts +3 -0
- package/dist/backend/llvm/reference-writes.js +10 -2
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.d.ts +39 -0
- package/dist/backend/llvm/regex-matchers.js +1649 -0
- package/dist/backend/llvm/regex-matchers.js.map +1 -0
- package/dist/backend/llvm/regex-matchers.test.js +96 -0
- package/dist/backend/llvm/regex-matchers.test.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +36 -1
- package/dist/backend/llvm/shapes.js +128 -16
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +3 -3
- package/dist/backend/llvm/stack-unions.test.js +2 -2
- package/dist/backend/llvm/stack-unions.test.js.map +1 -1
- package/dist/backend/llvm/string-construction.test.js +3 -3
- package/dist/backend/llvm/string-construction.test.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +6 -6
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-literal-equality.d.ts +22 -0
- package/dist/backend/llvm/string-literal-equality.js +78 -0
- package/dist/backend/llvm/string-literal-equality.js.map +1 -0
- package/dist/backend/llvm/switch-dispatch.js +59 -13
- package/dist/backend/llvm/switch-dispatch.js.map +1 -1
- package/dist/backend/llvm/switch-dispatch.test.js +72 -7
- package/dist/backend/llvm/switch-dispatch.test.js.map +1 -1
- package/dist/backend/llvm/union-retype.test.d.ts +1 -0
- package/dist/backend/llvm/union-retype.test.js +229 -0
- package/dist/backend/llvm/union-retype.test.js.map +1 -0
- package/dist/backend/llvm/wrapping-sums.d.ts +17 -0
- package/dist/backend/llvm/wrapping-sums.js +113 -0
- package/dist/backend/llvm/wrapping-sums.js.map +1 -0
- package/dist/backend/loop-polls.js +1 -0
- package/dist/backend/loop-polls.js.map +1 -1
- package/dist/backend/mangle.d.ts +9 -0
- package/dist/backend/mangle.js +15 -0
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/may-throw.js +6 -12
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +1 -1
- package/dist/backend/native/artifact-stamps.js +0 -2
- package/dist/backend/native/artifact-stamps.js.map +1 -1
- package/dist/backend/native/cache-warm.d.ts +1 -1
- package/dist/backend/native/cache-warm.js +2 -3
- package/dist/backend/native/cache-warm.js.map +1 -1
- package/dist/backend/native/compiler-fingerprint.d.ts +1 -1
- package/dist/backend/native/compiler-fingerprint.js +4 -7
- package/dist/backend/native/compiler-fingerprint.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +3 -28
- package/dist/backend/native/driver.js +1 -3
- package/dist/backend/native/driver.js.map +1 -1
- package/dist/backend/native/executable.d.ts +0 -15
- package/dist/backend/native/executable.js +17 -172
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/tool-identity.js +0 -1
- package/dist/backend/native/tool-identity.js.map +1 -1
- package/dist/backend/native/vendor.d.ts +1 -1
- package/dist/backend/native/vendor.js +1 -1
- package/dist/backend/native/vendor.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +0 -2
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +23 -33
- package/dist/backend/native-toolchain.test.js.map +1 -1
- package/dist/backend/publication.test.js +1 -1
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-core.d.ts +1 -2
- package/dist/backend/runtime-pack-core.js +5 -14
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +3 -8
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +22 -19
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/target-diagnostics.d.ts +0 -5
- package/dist/backend/target-diagnostics.js +1 -11
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +1 -1
- package/dist/backend/vendor-archives.d.ts +1 -7
- package/dist/backend/vendor-archives.js +9 -189
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/backend/vendor-inputs.d.ts +0 -1
- package/dist/backend/vendor-inputs.js +0 -1
- package/dist/backend/vendor-inputs.js.map +1 -1
- package/dist/backend/warm-cache.js +3 -5
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/cli/command.js +4 -8
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/host.d.ts +1 -1
- package/dist/cli/usage.d.ts +1 -5
- package/dist/cli/usage.js +4 -9
- package/dist/cli/usage.js.map +1 -1
- package/dist/compat/fetch-profile.d.ts +2 -2
- package/dist/compat/fetch-profile.js +16 -25
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +2 -17
- package/dist/contracts/check.js +6 -6
- package/dist/contracts/check.js.map +1 -1
- package/dist/coverage/report.d.ts +5 -22
- package/dist/coverage/report.js +12 -76
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.d.ts +3 -3
- package/dist/coverage/surface-manifest.js +22 -27
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/coverage/verdict-cache.d.ts +1 -3
- package/dist/coverage/verdict-cache.js +2 -7
- package/dist/coverage/verdict-cache.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +11 -60
- package/dist/diagnostics/diagnostic.js +39 -118
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +3 -4
- package/dist/diagnostics/envelope.js +0 -9
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/diagnostics/envelope.test.js +1 -1
- package/dist/diagnostics/envelope.test.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +0 -3
- package/dist/executable/executable-cache.js +2 -4
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +0 -4
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +5 -2
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +10 -10
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/cjs-syntax.js +0 -88
- package/dist/frontend/cjs-syntax.js.map +1 -1
- package/dist/frontend/dts-paths.d.ts +1 -1
- package/dist/frontend/dts-paths.js +1 -1
- package/dist/frontend/lowering/abstract-equality.js +1 -4
- package/dist/frontend/lowering/abstract-equality.js.map +1 -1
- package/dist/frontend/lowering/array-values.d.ts +14 -0
- package/dist/frontend/lowering/array-values.js +33 -11
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/builtins/arguments.js +0 -13
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.d.ts +0 -4
- package/dist/frontend/lowering/builtins/crypto.js +0 -4
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +1 -39
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +0 -15
- package/dist/frontend/lowering/builtins/module-resolution.js +5 -44
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.d.ts +0 -6
- package/dist/frontend/lowering/builtins/numbers.js +6 -57
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +4 -67
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/workers.js +1 -1
- package/dist/frontend/lowering/builtins/workers.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.d.ts +1 -37
- package/dist/frontend/lowering/call-arguments.js +11 -94
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.d.ts +1 -6
- package/dist/frontend/lowering/call-signatures.js +16 -68
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +19 -4
- package/dist/frontend/lowering/class-dynamic-dispatch.js +168 -98
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +44 -4
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.js +0 -2
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.js +1 -1
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +5 -35
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/state.d.ts +0 -1
- package/dist/frontend/lowering/coercions/state.js +0 -1
- package/dist/frontend/lowering/coercions/state.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +2 -4
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +2 -12
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.js +0 -1
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +49 -28
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +2 -3
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +10 -54
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.d.ts +54 -0
- package/dist/frontend/lowering/containers/array-pipelines.js +1827 -0
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -0
- package/dist/frontend/lowering/containers/bytes.js +0 -1
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +2 -10
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +1 -6
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/exec-result-uses.d.ts +10 -0
- package/dist/frontend/lowering/containers/exec-result-uses.js +88 -0
- package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -0
- package/dist/frontend/lowering/containers/indexed-objects.js +0 -2
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.d.ts +0 -6
- package/dist/frontend/lowering/containers/string-and-regexp.js +17 -17
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.d.ts +2 -1
- package/dist/frontend/lowering/containers/string-replacement.js +32 -136
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/devirtualize.d.ts +33 -0
- package/dist/frontend/lowering/devirtualize.js +199 -0
- package/dist/frontend/lowering/devirtualize.js.map +1 -0
- package/dist/frontend/lowering/expressions/evaluation-safety.js +0 -3
- package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
- package/dist/frontend/lowering/expressions/native-proxy.js +1 -1
- package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js +55 -8
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +0 -8
- package/dist/frontend/lowering/expressions/object-literals.js +8 -35
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.d.ts +0 -4
- package/dist/frontend/lowering/expressions/optional-chains.js +3 -66
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/function-context.js +0 -1
- package/dist/frontend/lowering/function-context.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.js +0 -1
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/identifier-uses.d.ts +7 -0
- package/dist/frontend/lowering/identifier-uses.js +23 -0
- package/dist/frontend/lowering/identifier-uses.js.map +1 -0
- package/dist/frontend/lowering/iterator-adapters.js +51 -3
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/lib-boundary.js +10 -77
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.js +14 -10
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.test.js +2 -2
- package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +2 -3
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.js +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +2 -27
- package/dist/frontend/lowering/lower-calls.js +111 -493
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.js +12 -60
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-comptime.js +2 -3
- package/dist/frontend/lowering/lower-comptime.js.map +1 -1
- package/dist/frontend/lowering/lower-console.d.ts +14 -0
- package/dist/frontend/lowering/lower-console.js +195 -0
- package/dist/frontend/lowering/lower-console.js.map +1 -0
- package/dist/frontend/lowering/lower-enums.js +5 -8
- package/dist/frontend/lowering/lower-enums.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.js +3 -4
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-expando.js +3 -5
- package/dist/frontend/lowering/lower-expando.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +0 -8
- package/dist/frontend/lowering/lower-exprs.js +180 -905
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +9 -8
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.d.ts +10 -0
- package/dist/frontend/lowering/lower-generators.js +108 -41
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +1 -50
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.d.ts +0 -43
- package/dist/frontend/lowering/lower-modules.js +29 -329
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.test.js +5 -5
- package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +0 -30
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +98 -0
- package/dist/frontend/lowering/{lower-island.js → lower-stdlib.js} +97 -1160
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -0
- package/dist/frontend/lowering/lower-stmts.d.ts +0 -16
- package/dist/frontend/lowering/lower-stmts.js +58 -1016
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.test.js +1 -1
- package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +14 -13
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +42 -155
- package/dist/frontend/lowering/lowerer.js +192 -816
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +4 -51
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/nan-coded-reads.d.ts +16 -0
- package/dist/frontend/lowering/nan-coded-reads.js +108 -1
- package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
- package/dist/frontend/lowering/narrowing-stability.js +1 -1
- package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
- package/dist/frontend/lowering/optional-arguments.js +0 -2
- package/dist/frontend/lowering/optional-arguments.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-bounds.d.ts +4 -0
- package/dist/frontend/lowering/runtime-optional-bounds.js +2 -0
- package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-bounds.test.js +27 -0
- package/dist/frontend/lowering/runtime-optional-bounds.test.js.map +1 -1
- package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
- package/dist/frontend/lowering/split-consumers.js +2 -18
- package/dist/frontend/lowering/split-consumers.js.map +1 -1
- package/dist/frontend/lowering/strict-equality.js +1 -1
- package/dist/frontend/lowering/strict-equality.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +6 -45
- package/dist/frontend/lowering/surfaces.js +8 -73
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/union-retag.d.ts +6 -1
- package/dist/frontend/lowering/union-retag.js +64 -1
- package/dist/frontend/lowering/union-retag.js.map +1 -1
- package/dist/frontend/lowering/union-retag.test.js +46 -0
- package/dist/frontend/lowering/union-retag.test.js.map +1 -1
- package/dist/frontend/module-syntax.d.ts +0 -3
- package/dist/frontend/module-syntax.js.map +1 -1
- package/dist/frontend/npm-node.d.ts +0 -7
- package/dist/frontend/npm-node.js +0 -7
- package/dist/frontend/npm-node.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-syntax.d.ts +1 -1
- package/dist/frontend/npm-static-rewrite-syntax.js +6 -82
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
- package/dist/frontend/npm-static.d.ts +1 -1
- package/dist/frontend/npm-static.js +6 -71
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm.d.ts +3 -319
- package/dist/frontend/npm.js +6 -1007
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/npm.test.js +2 -197
- package/dist/frontend/npm.test.js.map +1 -1
- package/dist/frontend/pipeline-native.js +1 -2
- package/dist/frontend/pipeline-native.js.map +1 -1
- package/dist/frontend/pipeline.d.ts +3 -11
- package/dist/frontend/pipeline.js +37 -56
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/pipeline.test.js +12 -6
- package/dist/frontend/pipeline.test.js.map +1 -1
- package/dist/frontend/program.d.ts +0 -34
- package/dist/frontend/program.js +12 -97
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/provenance-core.d.ts +0 -4
- package/dist/frontend/provenance-core.js +4 -37
- package/dist/frontend/provenance-core.js.map +1 -1
- package/dist/frontend/provenance-registry.d.ts +0 -4
- package/dist/frontend/provenance-registry.js +0 -20
- package/dist/frontend/provenance-registry.js.map +1 -1
- package/dist/frontend/resolve.d.ts +0 -12
- package/dist/frontend/resolve.js +0 -34
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/runtime-resolve.js +2 -2
- package/dist/frontend/runtime-resolve.js.map +1 -1
- package/dist/frontend/services-node.js +2 -3
- package/dist/frontend/services-node.js.map +1 -1
- package/dist/frontend/services.d.ts +1 -8
- package/dist/frontend/services.js +2 -22
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/services.test.js +0 -38
- package/dist/frontend/services.test.js.map +1 -1
- package/dist/frontend/tsc-codes.js +0 -11
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +2 -27
- package/dist/frontend/type-mapper.js +58 -156
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +7 -10
- package/dist/index.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/builtin-effects.js +2 -5
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +13 -56
- package/dist/ir/builtin-signatures.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/final-fields.test.js +1 -1
- package/dist/ir/function-references.d.ts +12 -0
- package/dist/ir/function-references.js +29 -0
- package/dist/ir/function-references.js.map +1 -0
- package/dist/ir/function-references.test.d.ts +1 -0
- package/dist/ir/function-references.test.js +276 -0
- package/dist/ir/function-references.test.js.map +1 -0
- package/dist/ir/initializer-bindings.test.js +1 -1
- package/dist/ir/int32-slots.d.ts +10 -7
- package/dist/ir/int32-slots.js +219 -68
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +39 -2
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-ranges.d.ts +4 -4
- package/dist/ir/integer-ranges.js +89 -64
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +71 -9
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/intrinsic-signatures.js +1 -0
- package/dist/ir/intrinsic-signatures.js.map +1 -1
- package/dist/ir/ir.d.ts +64 -290
- package/dist/ir/ir.js +11 -259
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +2 -7
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +3 -30
- package/dist/ir/runtime-features.js +8 -43
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/scalar-records.test.js +1 -1
- package/dist/ir/serialize.d.ts +1 -1
- package/dist/ir/serialize.js +3 -3
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/traverse.js +4 -21
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/unshare.test.js +1 -1
- package/dist/ir/validate.js +66 -213
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +31 -13
- 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/library-cache.test.js +5 -5
- package/dist/library/prepare.js +5 -20
- package/dist/library/prepare.js.map +1 -1
- package/dist/native/cli.js +0 -2
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.test.js +2 -4
- package/dist/native/compiler.test.js.map +1 -1
- package/dist/native/prepare.js +2 -4
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.js +2 -16
- package/dist/native/sanitizer.js.map +1 -1
- package/dist/native/sanitizer.test.js +0 -3
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/startup-cache.js +0 -2
- package/dist/startup-cache.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +80 -104
- package/dist/backend/llvm/expr-island.d.ts +0 -15
- package/dist/backend/llvm/expr-island.js +0 -709
- package/dist/backend/llvm/expr-island.js.map +0 -1
- package/dist/frontend/lowering/coercions/island.d.ts +0 -37
- package/dist/frontend/lowering/coercions/island.js +0 -350
- package/dist/frontend/lowering/coercions/island.js.map +0 -1
- package/dist/frontend/lowering/lower-island.d.ts +0 -229
- package/dist/frontend/lowering/lower-island.js.map +0 -1
- package/dist/frontend/lowering/lower-island.test.js +0 -56
- package/dist/frontend/lowering/lower-island.test.js.map +0 -1
- package/dist/frontend/npm-fetch-analysis.d.ts +0 -17
- package/dist/frontend/npm-fetch-analysis.js +0 -109
- package/dist/frontend/npm-fetch-analysis.js.map +0 -1
- package/dist/frontend/npm-fetch-analysis.test.js +0 -130
- package/dist/frontend/npm-fetch-analysis.test.js.map +0 -1
- package/dist/frontend/npm-fetch-node.d.ts +0 -2
- package/dist/frontend/npm-fetch-node.js +0 -12
- package/dist/frontend/npm-fetch-node.js.map +0 -1
- package/dist/frontend/npm-fetch-syntax.d.ts +0 -6
- package/dist/frontend/npm-fetch-syntax.js +0 -202
- package/dist/frontend/npm-fetch-syntax.js.map +0 -1
- package/dist/native/runtime-typescript.d.ts +0 -4
- package/dist/native/runtime-typescript.js +0 -74
- package/dist/native/runtime-typescript.js.map +0 -1
- package/dist/native/runtime-typescript.test.js +0 -41
- package/dist/native/runtime-typescript.test.js.map +0 -1
- /package/dist/{frontend/lowering/lower-island.test.d.ts → backend/llvm/expr-calls.test.d.ts} +0 -0
- /package/dist/{frontend/npm-fetch-analysis.test.d.ts → backend/llvm/int32-abi.test.d.ts} +0 -0
- /package/dist/{native/runtime-typescript.test.d.ts → backend/llvm/regex-matchers.test.d.ts} +0 -0
package/dist/ir/validate.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* an ICE that points at source is a gift to whoever debugs it.
|
|
5
5
|
*/
|
|
6
6
|
import { validByteNumberToken } from "./byte-numbers.js";
|
|
7
|
-
import { arrayOf, BYTES_ELEMENT_NAME, BOOL, BYTES_U8, bytesOf, canAdaptDynFuncTo, canDynCheckTo, canConvertToDyn,
|
|
7
|
+
import { arrayOf, BYTES_ELEMENT_NAME, BOOL, BYTES_U8, bytesOf, canAdaptDynFuncTo, canDynCheckTo, canConvertToDyn, DYN, DYN_HANDLE_KINDS, F64, ffiClassType, ffiSourceParamTypes, isDynTypedRefType, isFfiCallbackParam, isFfiContextParam, isFfiReleaseParam, isJsonSafeType, isJsonStringifySafeType, isRefCounted, isSortValuesElement, isSupportedArrayElem, isSupportedIndexValue, isSupportedMapKey, isSupportedMapValue, isSupportedSetElem, isUnitType, REF_TRUTHY_KINDS, RUNTIME_EMITTER_CLASS, RUNTIME_ERROR_CLASSES, RUNTIME_STREAM_CLASSES, shapeHasAccessorSlots, STRING, typeEquals, typeKey, unionContainerArmsOk, VOID, } from "./ir.js";
|
|
8
8
|
import { DYN_CLASS_PROPERTIES } from "./ir.js";
|
|
9
9
|
import { unionWideningTags } from "./analysis.js";
|
|
10
10
|
import { alwaysReturns } from "./control-flow.js";
|
|
@@ -55,7 +55,7 @@ export function validateModule(mod) {
|
|
|
55
55
|
const moduleLoc = { file: mod.sourceFile, start: 0, end: 0 };
|
|
56
56
|
if (mod.workers !== undefined && typeof mod.workers !== "boolean")
|
|
57
57
|
errors.push({ message: "worker execution mode must be a boolean", loc: moduleLoc });
|
|
58
|
-
if (mod.workers &&
|
|
58
|
+
if (mod.workers && mod.lib !== undefined)
|
|
59
59
|
errors.push({
|
|
60
60
|
message: "worker execution requires a native static executable",
|
|
61
61
|
loc: moduleLoc,
|
|
@@ -545,9 +545,8 @@ export function validateModule(mod) {
|
|
|
545
545
|
}
|
|
546
546
|
else
|
|
547
547
|
fields.set(f.name, f.type);
|
|
548
|
-
//
|
|
549
|
-
//
|
|
550
|
-
// are valid; both are refcounted values held by the record shape.
|
|
548
|
+
// Bare unit and void types have no record-field storage; unit values
|
|
549
|
+
// use their union representation.
|
|
551
550
|
if (f.type.kind === "void" || isUnitType(f.type)) {
|
|
552
551
|
errors.push({
|
|
553
552
|
message: `record ${rec.id}: field "${f.name}" is ${f.type.kind}`,
|
|
@@ -688,7 +687,6 @@ export function validateModule(mod) {
|
|
|
688
687
|
if (arm.kind === "void" ||
|
|
689
688
|
arm.kind === "union" ||
|
|
690
689
|
arm.kind === "dyn" ||
|
|
691
|
-
arm.kind === "jsval" ||
|
|
692
690
|
arm.kind === "date" ||
|
|
693
691
|
arm.kind === "generator") {
|
|
694
692
|
errors.push({ message: `union ${u.id}: arm ${i} is ${arm.kind}`, loc: noLoc });
|
|
@@ -1017,10 +1015,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
1017
1015
|
err(`${what}: expected ${want.kind}, got ${expr.type.kind}${detail}`, expr.loc);
|
|
1018
1016
|
}
|
|
1019
1017
|
};
|
|
1020
|
-
/** Union arms a truthiness helper can answer: units (false), scalars and
|
|
1021
|
-
* strings (per-value), ref kinds (always true), jsval (the engine
|
|
1022
|
-
* answers). dyn/caught arms have no ToBoolean — the frontend fences them
|
|
1023
|
-
* before emitting toBool/logical over the union. */
|
|
1024
1018
|
const checkTruthyUnion = (unionId, loc) => {
|
|
1025
1019
|
const def = unions.get(unionId);
|
|
1026
1020
|
if (!def) {
|
|
@@ -1050,13 +1044,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
1050
1044
|
};
|
|
1051
1045
|
function checkNullishOperands(e) {
|
|
1052
1046
|
expectType(e.right, e.type, "nullish right operand");
|
|
1053
|
-
// The ISLAND form: `a ?? b` over an engine value — left, right,
|
|
1054
|
-
// and result are all handles (the emitters' jsval nullish arm).
|
|
1055
|
-
if (e.left.type.kind === "jsval") {
|
|
1056
|
-
if (e.type.kind !== "jsval")
|
|
1057
|
-
err("jsval nullish must answer jsval", e.loc);
|
|
1058
|
-
return;
|
|
1059
|
-
}
|
|
1060
1047
|
// The CHECKED-DYNAMIC form: the runtime kind decides (the
|
|
1061
1048
|
// emitters' scr_dyn_is_nullish arm) — left, right, and result
|
|
1062
1049
|
// all live in the checked-dynamic tree.
|
|
@@ -1115,10 +1102,9 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
1115
1102
|
if (e.type.kind !== "f64" &&
|
|
1116
1103
|
e.type.kind !== "string" &&
|
|
1117
1104
|
e.type.kind !== "bool" &&
|
|
1118
|
-
e.type.kind !== "jsval" &&
|
|
1119
1105
|
e.type.kind !== "union" &&
|
|
1120
1106
|
e.type.kind !== "dyn") {
|
|
1121
|
-
err(`logical ${e.op} must be f64|string|bool|
|
|
1107
|
+
err(`logical ${e.op} must be f64|string|bool|union|dyn, got ${e.type.kind}`, e.loc);
|
|
1122
1108
|
}
|
|
1123
1109
|
if (e.type.kind === "union")
|
|
1124
1110
|
checkTruthyUnion(e.type.unionId, e.loc);
|
|
@@ -1232,7 +1218,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
1232
1218
|
case "fieldAbsent":
|
|
1233
1219
|
return checkRecordExpr(e);
|
|
1234
1220
|
case "dynFrom":
|
|
1235
|
-
case "dynFromJsval":
|
|
1236
1221
|
case "dynCall":
|
|
1237
1222
|
case "dynInvoke":
|
|
1238
1223
|
case "dynObjLit":
|
|
@@ -1252,6 +1237,8 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
1252
1237
|
case "unionKeyGet":
|
|
1253
1238
|
case "unionIsTag":
|
|
1254
1239
|
return checkUnionExpr(e);
|
|
1240
|
+
case "unionRetype":
|
|
1241
|
+
return checkUnionRetype(e);
|
|
1255
1242
|
case "intrinsic":
|
|
1256
1243
|
return checkIntrinsicExpr(e);
|
|
1257
1244
|
case "libCall":
|
|
@@ -1266,11 +1253,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
1266
1253
|
case "newPromise":
|
|
1267
1254
|
case "promiseWithResolvers":
|
|
1268
1255
|
return checkAsyncExpr(e);
|
|
1269
|
-
case "jsMarshal":
|
|
1270
|
-
case "jsOp":
|
|
1271
|
-
case "jsExit":
|
|
1272
|
-
case "jsBridgePromise":
|
|
1273
|
-
return checkIslandExpr(e);
|
|
1274
1256
|
default: {
|
|
1275
1257
|
const _exhaustive = e;
|
|
1276
1258
|
void _exhaustive;
|
|
@@ -1517,16 +1499,16 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
1517
1499
|
}
|
|
1518
1500
|
case "dynDestrCheck": {
|
|
1519
1501
|
checkExpr(e.value);
|
|
1520
|
-
if (e.value.type.kind !== "dyn"
|
|
1521
|
-
err("dynDestrCheck value must be dyn
|
|
1502
|
+
if (e.value.type.kind !== "dyn")
|
|
1503
|
+
err("dynDestrCheck value must be dyn", e.loc);
|
|
1522
1504
|
if (e.type.kind !== e.value.type.kind)
|
|
1523
1505
|
err("dynDestrCheck must have its value's type", e.loc);
|
|
1524
1506
|
break;
|
|
1525
1507
|
}
|
|
1526
1508
|
case "dynIterN": {
|
|
1527
1509
|
checkExpr(e.value);
|
|
1528
|
-
if (e.value.type.kind !== "dyn"
|
|
1529
|
-
err("dynIterN value must be dyn
|
|
1510
|
+
if (e.value.type.kind !== "dyn")
|
|
1511
|
+
err("dynIterN value must be dyn", e.loc);
|
|
1530
1512
|
if (e.type.kind !== e.value.type.kind)
|
|
1531
1513
|
err("dynIterN must have its value's type", e.loc);
|
|
1532
1514
|
if (!Number.isInteger(e.count) || e.count < 0)
|
|
@@ -1611,24 +1593,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
1611
1593
|
break;
|
|
1612
1594
|
case "optChain": {
|
|
1613
1595
|
checkExpr(e.receiver);
|
|
1614
|
-
// An island-handle chain (`x?.y` on 'any'): the nullish test is a
|
|
1615
|
-
// runtime ask of the engine value; the body is the plain island
|
|
1616
|
-
// operation over the bound handle, and both body and result stay
|
|
1617
|
-
// jsval (the unit path is the engine's undefined).
|
|
1618
|
-
if (e.receiver.type.kind === "jsval") {
|
|
1619
|
-
if (activeChains.has(e.id))
|
|
1620
|
-
err(`optChain id "${e.id}" shadows an active chain`, e.loc);
|
|
1621
|
-
activeChains.set(e.id, JSVAL);
|
|
1622
|
-
checkExpr(e.body);
|
|
1623
|
-
activeChains.delete(e.id);
|
|
1624
|
-
if (e.body.type.kind !== "jsval") {
|
|
1625
|
-
err(`jsval optChain with ${e.body.type.kind} body`, e.loc);
|
|
1626
|
-
}
|
|
1627
|
-
if (e.type.kind !== "jsval") {
|
|
1628
|
-
err(`jsval optChain must be jsval, got ${e.type.kind}`, e.loc);
|
|
1629
|
-
}
|
|
1630
|
-
break;
|
|
1631
|
-
}
|
|
1632
1596
|
// A dyn (dyn) chain (`rawName?.match(re)` on a JSON.parse result):
|
|
1633
1597
|
// the nullish test reads the node's kind tag; the body is the
|
|
1634
1598
|
// validated dynamic dispatch, its result converted back into the
|
|
@@ -1817,7 +1781,10 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
1817
1781
|
if (want)
|
|
1818
1782
|
expectType(a, want, `regexIntrinsic ${e.method} arg ${i}`);
|
|
1819
1783
|
});
|
|
1820
|
-
if (e.method === "
|
|
1784
|
+
if (e.method === "execGroups" && e.args[1]?.kind !== "numLit") {
|
|
1785
|
+
err("regexIntrinsic execGroups mask must be a numeric literal", e.loc);
|
|
1786
|
+
}
|
|
1787
|
+
if (e.method === "match" || e.method === "exec" || e.method === "execGroups") {
|
|
1821
1788
|
// The `string[] | null` union (program-dependent id) — checked
|
|
1822
1789
|
// by arms, like the libCall case checks process.envGet.
|
|
1823
1790
|
const def = e.type.kind === "union" ? unions.get(e.type.unionId) : undefined;
|
|
@@ -2153,24 +2120,28 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
2153
2120
|
? { argTypes: [], result: e.type } // union-checked below
|
|
2154
2121
|
: e.method === "sortValues"
|
|
2155
2122
|
? { argTypes: [F64, null], result: VOID }
|
|
2156
|
-
:
|
|
2123
|
+
: e.method === "sortDense"
|
|
2124
|
+
? { argTypes: [null, BOOL], result: BOOL }
|
|
2125
|
+
: { argTypes: [], result: F64 }; // length
|
|
2157
2126
|
if ((e.method === "sortPrimitive" || e.method === "toSortedPrimitive") &&
|
|
2158
2127
|
elem.kind !== "string" &&
|
|
2159
2128
|
elem.kind !== "f64" &&
|
|
2160
2129
|
elem.kind !== "bool") {
|
|
2161
2130
|
err(`arrIntrinsic ${e.method} requires primitive elements, got ${elem.kind}`, e.loc);
|
|
2162
2131
|
}
|
|
2163
|
-
if (e.method === "sortValues") {
|
|
2132
|
+
if (e.method === "sortValues" || e.method === "sortDense") {
|
|
2164
2133
|
const arms = elem.kind === "union" ? unions.get(elem.unionId)?.arms : undefined;
|
|
2165
2134
|
if (!isSortValuesElement(elem, arms))
|
|
2166
|
-
err(`arrIntrinsic
|
|
2167
|
-
const cmp = e.args[1]?.type;
|
|
2135
|
+
err(`arrIntrinsic ${e.method} on ${elem.kind} elements`, e.loc);
|
|
2136
|
+
const cmp = e.args[e.method === "sortValues" ? 1 : 0]?.type;
|
|
2168
2137
|
if (!cmp ||
|
|
2169
2138
|
cmp.kind !== "func" ||
|
|
2170
2139
|
cmp.params.length > 2 ||
|
|
2171
2140
|
!cmp.params.every((param) => typeEquals(param, elem)) ||
|
|
2172
2141
|
cmp.ret.kind !== "f64")
|
|
2173
|
-
err(
|
|
2142
|
+
err(`arrIntrinsic ${e.method} comparator must be (elem, elem) => number`, e.loc);
|
|
2143
|
+
if (e.method === "sortDense" && e.args[1]?.kind !== "boolLit")
|
|
2144
|
+
err("arrIntrinsic sortDense owned flag must be a boolean literal", e.loc);
|
|
2174
2145
|
}
|
|
2175
2146
|
if (e.method === "getNumber" && elem.kind !== "f64") {
|
|
2176
2147
|
err(`arrIntrinsic getNumber requires f64 elements, got ${elem.kind}`, e.loc);
|
|
@@ -2480,7 +2451,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
2480
2451
|
// declared params plus that one must match.
|
|
2481
2452
|
if (e.type.kind === "func") {
|
|
2482
2453
|
const wantRet = callSiteReturnType(target);
|
|
2483
|
-
// ISLAND-REST types (restAbi jsval) SPELL their trailing engine
|
|
2484
2454
|
// array param — the lifted signature matches directly, no
|
|
2485
2455
|
// hidden slot.
|
|
2486
2456
|
const hiddenRest = e.type.rest === true && e.type.restAbi === undefined;
|
|
@@ -3037,18 +3007,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
3037
3007
|
}
|
|
3038
3008
|
break;
|
|
3039
3009
|
}
|
|
3040
|
-
case "dynFromJsval": {
|
|
3041
|
-
// The jsval→dyn crossing: exactly a jsval operand into a dyn
|
|
3042
|
-
// result (the by-reference island wrap; scalars normalize at
|
|
3043
|
-
// runtime).
|
|
3044
|
-
checkExpr(e.value);
|
|
3045
|
-
if (e.type.kind !== "dyn")
|
|
3046
|
-
err(`dynFromJsval must be dyn-typed, got ${e.type.kind}`, e.loc);
|
|
3047
|
-
if (e.value.type.kind !== "jsval") {
|
|
3048
|
-
err(`dynFromJsval operand must be jsval, got ${e.value.type.kind}`, e.loc);
|
|
3049
|
-
}
|
|
3050
|
-
break;
|
|
3051
|
-
}
|
|
3052
3010
|
case "dynCall": {
|
|
3053
3011
|
checkExpr(e.callee);
|
|
3054
3012
|
if (e.calleeNameValue !== undefined) {
|
|
@@ -3262,6 +3220,26 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
3262
3220
|
}
|
|
3263
3221
|
}
|
|
3264
3222
|
}
|
|
3223
|
+
function checkUnionRetype(e) {
|
|
3224
|
+
checkExpr(e.value);
|
|
3225
|
+
const from = unions.get(e.fromId);
|
|
3226
|
+
const to = unions.get(e.unionId);
|
|
3227
|
+
if (!from || !to) {
|
|
3228
|
+
err(`unionRetype between undeclared unions "${e.fromId}" and "${e.unionId}"`, e.loc);
|
|
3229
|
+
return;
|
|
3230
|
+
}
|
|
3231
|
+
expectType(e.value, { kind: "union", unionId: e.fromId }, "unionRetype operand");
|
|
3232
|
+
if (!typeEquals(e.type, { kind: "union", unionId: e.unionId }))
|
|
3233
|
+
err(`unionRetype type ${e.type.kind} != union ${e.unionId}`, e.loc);
|
|
3234
|
+
if (e.tags.length === 0)
|
|
3235
|
+
err(`unionRetype with no tags`, e.loc);
|
|
3236
|
+
for (const tag of e.tags) {
|
|
3237
|
+
const arm = from.arms[tag];
|
|
3238
|
+
const target = to.arms[tag];
|
|
3239
|
+
if (!Number.isInteger(tag) || !arm || !target || !typeEquals(arm, target))
|
|
3240
|
+
err(`unionRetype tag ${tag} is not the same arm in ${e.fromId} and ${e.unionId}`, e.loc);
|
|
3241
|
+
}
|
|
3242
|
+
}
|
|
3265
3243
|
function checkUnionExpr(e) {
|
|
3266
3244
|
switch (e.kind) {
|
|
3267
3245
|
case "unionNarrow": {
|
|
@@ -4548,14 +4526,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
4548
4526
|
return false;
|
|
4549
4527
|
}
|
|
4550
4528
|
function checkLibSpecialCall(e) {
|
|
4551
|
-
if (e.fn === "island.castFail") {
|
|
4552
|
-
// The deferred boundary failure's typed dummy: a promise (the
|
|
4553
|
-
// only cast shape the frontend defers).
|
|
4554
|
-
if (e.type.kind !== "promise") {
|
|
4555
|
-
err(`libCall island.castFail must return a promise type, got ${e.type.kind}`, e.loc);
|
|
4556
|
-
}
|
|
4557
|
-
return true;
|
|
4558
|
-
}
|
|
4559
4529
|
if (e.fn === "global.undefRead") {
|
|
4560
4530
|
// Always throws — the result type is whatever the declared type
|
|
4561
4531
|
// of the undefined global mapped to (never materialized).
|
|
@@ -5002,6 +4972,8 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
5002
4972
|
}
|
|
5003
4973
|
if (!fn.async)
|
|
5004
4974
|
err("await outside an async function", e.loc);
|
|
4975
|
+
if (e.adopt === true && fn.generator !== undefined)
|
|
4976
|
+
err("returned-promise adoption inside a generator", e.loc);
|
|
5005
4977
|
break;
|
|
5006
4978
|
}
|
|
5007
4979
|
case "yieldExpr": {
|
|
@@ -5044,6 +5016,26 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
5044
5016
|
const genT = e.gen.type;
|
|
5045
5017
|
if (e.arg !== null)
|
|
5046
5018
|
checkExpr(e.arg);
|
|
5019
|
+
if (e.mode === "step" || e.mode === "value" || e.mode === "close") {
|
|
5020
|
+
if (genT.async)
|
|
5021
|
+
err(`genResume ${e.mode} on an async generator`, e.loc);
|
|
5022
|
+
if (e.arg !== null)
|
|
5023
|
+
err(`genResume ${e.mode} with an argument`, e.loc);
|
|
5024
|
+
if (e.mode === "step") {
|
|
5025
|
+
if (genT.nextT.kind !== "undefinedT" && genT.nextT.kind !== "dyn")
|
|
5026
|
+
err(`genResume step on a ${typeKey(genT.nextT)} next-channel`, e.loc);
|
|
5027
|
+
if (e.type.kind !== "bool")
|
|
5028
|
+
err(`genResume step result ${typeKey(e.type)}`, e.loc);
|
|
5029
|
+
}
|
|
5030
|
+
else if (e.mode === "close") {
|
|
5031
|
+
if (e.type.kind !== "void")
|
|
5032
|
+
err(`genResume close result ${typeKey(e.type)}`, e.loc);
|
|
5033
|
+
}
|
|
5034
|
+
else if (genT.yieldT.kind === "void" || !typeEquals(e.type, genT.yieldT)) {
|
|
5035
|
+
err(`genResume value ${typeKey(e.type)} != yield channel ${typeKey(genT.yieldT)}`, e.loc);
|
|
5036
|
+
}
|
|
5037
|
+
break;
|
|
5038
|
+
}
|
|
5047
5039
|
if (e.mode === "next") {
|
|
5048
5040
|
if (e.arg === null) {
|
|
5049
5041
|
if (genT.nextT.kind !== "undefinedT" && genT.nextT.kind !== "dyn") {
|
|
@@ -5211,145 +5203,6 @@ function validateFunction(fn, functions, ffiByName, classes, records, recordVali
|
|
|
5211
5203
|
}
|
|
5212
5204
|
}
|
|
5213
5205
|
}
|
|
5214
|
-
function checkIslandExpr(e) {
|
|
5215
|
-
switch (e.kind) {
|
|
5216
|
-
case "jsMarshal": {
|
|
5217
|
-
checkExpr(e.value);
|
|
5218
|
-
if (e.type.kind !== "jsval")
|
|
5219
|
-
err(`jsMarshal must be jsval, got ${e.type.kind}`, e.loc);
|
|
5220
|
-
const src = e.value.type;
|
|
5221
|
-
// The marshal direction admits qualifying closures (host-function
|
|
5222
|
-
// wrapping) on top of the JSON-safe set; jsExit does not. Typed
|
|
5223
|
-
// closures (per-param call-time conversion through the exit
|
|
5224
|
-
// machinery) are the wider func shape.
|
|
5225
|
-
// Typed arrays and URLs marshal IN (an engine typed-array copy /
|
|
5226
|
-
// an engine URL built from the components) without ever joining
|
|
5227
|
-
// the round-trip (JSON) set — the frontend's union lift narrows
|
|
5228
|
-
// union arms before marshaling, so bare bytes/url operands are
|
|
5229
|
-
// exactly what it produces.
|
|
5230
|
-
if (src.kind !== "bytes" &&
|
|
5231
|
-
src.kind !== "url" &&
|
|
5232
|
-
src.kind !== "dyn" && // dyn values deep-copy in (data kinds; the runtime throws on boxes)
|
|
5233
|
-
// A STATIC promise crosses as a real engine thenable when its
|
|
5234
|
-
// fulfillment is in the reverse bridge's payload domain
|
|
5235
|
-
// (scr_jsval_from_promise — the async-callback return bridge).
|
|
5236
|
-
!(src.kind === "promise" && islandPromisePayloadTag(src.inner) !== null) &&
|
|
5237
|
-
!canMarshalIntoIsland(src, (id) => records.get(id), (id) => unions.get(id)) &&
|
|
5238
|
-
!canMarshalTypedFuncIntoIsland(src, (id) => records.get(id), (id) => unions.get(id))) {
|
|
5239
|
-
err(`jsMarshal of unmarshalable type ${src.kind}`, e.loc);
|
|
5240
|
-
}
|
|
5241
|
-
break;
|
|
5242
|
-
}
|
|
5243
|
-
case "jsOp": {
|
|
5244
|
-
for (const a of e.args)
|
|
5245
|
-
checkExpr(a);
|
|
5246
|
-
if (e.type.kind !== jsOpResultKind(e.op)) {
|
|
5247
|
-
err(`jsOp ${e.op} must be ${jsOpResultKind(e.op)}, got ${e.type.kind}`, e.loc);
|
|
5248
|
-
}
|
|
5249
|
-
const named = e.op === "getProp" ||
|
|
5250
|
-
e.op === "setProp" ||
|
|
5251
|
-
e.op === "callMethod" ||
|
|
5252
|
-
e.op === "optCallMethod" ||
|
|
5253
|
-
e.op === "globalGet" ||
|
|
5254
|
-
e.op === "callSpread"; // the spread expression's source spelling (V8's nullish text spells it)
|
|
5255
|
-
if (named !== (e.name !== undefined)) {
|
|
5256
|
-
err(`jsOp ${e.op} ${named ? "requires" : "forbids"} a name`, e.loc);
|
|
5257
|
-
}
|
|
5258
|
-
const arity = {
|
|
5259
|
-
add: 2,
|
|
5260
|
-
sub: 2,
|
|
5261
|
-
mul: 2,
|
|
5262
|
-
div: 2,
|
|
5263
|
-
mod: 2,
|
|
5264
|
-
pow: 2,
|
|
5265
|
-
lt: 2,
|
|
5266
|
-
le: 2,
|
|
5267
|
-
gt: 2,
|
|
5268
|
-
ge: 2,
|
|
5269
|
-
eq: 2,
|
|
5270
|
-
neq: 2,
|
|
5271
|
-
instanceOf: 2,
|
|
5272
|
-
neg: 1,
|
|
5273
|
-
plus: 1,
|
|
5274
|
-
truthy: 1,
|
|
5275
|
-
not: 1,
|
|
5276
|
-
typeof: 1,
|
|
5277
|
-
toStr: 1,
|
|
5278
|
-
getProp: 1,
|
|
5279
|
-
setProp: 2,
|
|
5280
|
-
getIdx: 2,
|
|
5281
|
-
setIdx: 3,
|
|
5282
|
-
globalGet: 0,
|
|
5283
|
-
undefLit: 0,
|
|
5284
|
-
nullLit: 0,
|
|
5285
|
-
iterNew: 1,
|
|
5286
|
-
defineGetter: 3,
|
|
5287
|
-
objSpread: 2,
|
|
5288
|
-
callSpread: 3, // callee + pre array + spread source
|
|
5289
|
-
callMethod: null,
|
|
5290
|
-
optCallMethod: null,
|
|
5291
|
-
callFn: null,
|
|
5292
|
-
callFnThis: null,
|
|
5293
|
-
construct: null, // receiver/callee + any number of args
|
|
5294
|
-
objLit: null,
|
|
5295
|
-
arrLit: null,
|
|
5296
|
-
tplStrings: null, // variable length (objLit: key/value pairs; tplStrings: n cooked + n raw)
|
|
5297
|
-
};
|
|
5298
|
-
const want = arity[e.op];
|
|
5299
|
-
if (want !== null && want !== undefined && e.args.length !== want) {
|
|
5300
|
-
err(`jsOp ${e.op} takes ${want} arg(s), got ${e.args.length}`, e.loc);
|
|
5301
|
-
}
|
|
5302
|
-
if (want === null &&
|
|
5303
|
-
e.op !== "objLit" &&
|
|
5304
|
-
e.op !== "arrLit" &&
|
|
5305
|
-
e.op !== "tplStrings" &&
|
|
5306
|
-
e.args.length < 1) {
|
|
5307
|
-
err(`jsOp ${e.op} needs a receiver/callee arg`, e.loc);
|
|
5308
|
-
}
|
|
5309
|
-
if (e.op === "callFnThis" && e.args.length < 2) {
|
|
5310
|
-
err("jsOp callFnThis needs a callee and receiver", e.loc);
|
|
5311
|
-
}
|
|
5312
|
-
if (e.op === "objLit" && e.args.length % 2 !== 0) {
|
|
5313
|
-
err("jsOp objLit takes key/value pairs", e.loc);
|
|
5314
|
-
}
|
|
5315
|
-
if (e.op === "tplStrings" && e.args.length % 2 !== 0) {
|
|
5316
|
-
err("jsOp tplStrings takes n cooked + n raw strings", e.loc);
|
|
5317
|
-
}
|
|
5318
|
-
for (const a of e.args) {
|
|
5319
|
-
if (a.type.kind !== "jsval")
|
|
5320
|
-
err(`jsOp ${e.op} arg must be jsval, got ${a.type.kind}`, e.loc);
|
|
5321
|
-
}
|
|
5322
|
-
break;
|
|
5323
|
-
}
|
|
5324
|
-
case "jsExit": {
|
|
5325
|
-
checkExpr(e.value);
|
|
5326
|
-
expectType(e.value, JSVAL, "jsExit operand");
|
|
5327
|
-
if (!canExitIslandToType(e.type, (id) => records.get(id), (id) => unions.get(id))) {
|
|
5328
|
-
err(`jsExit to non-extractable type ${e.type.kind}`, e.loc);
|
|
5329
|
-
}
|
|
5330
|
-
break;
|
|
5331
|
-
}
|
|
5332
|
-
case "jsBridgePromise": {
|
|
5333
|
-
checkExpr(e.value);
|
|
5334
|
-
expectType(e.value, JSVAL, "jsBridgePromise operand");
|
|
5335
|
-
// The settled engine value crosses as a HANDLE (or not at all) —
|
|
5336
|
-
// plus the ONE converting payload: an `any[]`-declared
|
|
5337
|
-
// fulfillment exits Array.isArray-gated by reference AT THE
|
|
5338
|
-
// SETTLE (SCR_ISLP_JSVAL_ARR); every other typed use exits later.
|
|
5339
|
-
if (e.type.kind !== "promise" ||
|
|
5340
|
-
(e.type.inner.kind !== "jsval" &&
|
|
5341
|
-
e.type.inner.kind !== "void" &&
|
|
5342
|
-
!(e.type.inner.kind === "array" && e.type.inner.elem.kind === "jsval"))) {
|
|
5343
|
-
err("jsBridgePromise must be a promise of jsval, void, or jsval-element array", e.loc);
|
|
5344
|
-
}
|
|
5345
|
-
break;
|
|
5346
|
-
}
|
|
5347
|
-
default: {
|
|
5348
|
-
const _exhaustive = e;
|
|
5349
|
-
void _exhaustive;
|
|
5350
|
-
}
|
|
5351
|
-
}
|
|
5352
|
-
}
|
|
5353
5206
|
// `continue` needs an enclosing loop; `break` an enclosing loop OR switch.
|
|
5354
5207
|
let loopDepth = 0;
|
|
5355
5208
|
let breakableDepth = 0;
|