@scriptc/compiler 0.4.1 → 0.4.2
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 +582 -78
- package/dist/backend/cycle-analysis.d.ts +2 -1
- package/dist/backend/cycle-analysis.js +4 -4
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-mutability.d.ts +2 -1
- package/dist/backend/cycle-mutability.js +2 -2
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.js +4 -1
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.d.ts +2 -1
- package/dist/backend/immutability.js +2 -2
- package/dist/backend/immutability.js.map +1 -1
- package/dist/backend/library-pack.js +4 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +7 -3
- package/dist/backend/llvm/alloc.js +7 -4
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/array-search.js +2 -1
- package/dist/backend/llvm/array-search.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.d.ts +23 -2
- package/dist/backend/llvm/bytes-loop-versions.js +115 -19
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +131 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +72 -1
- package/dist/backend/llvm/classes.js +331 -45
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +223 -16
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +1 -3
- package/dist/backend/llvm/common.js +1 -3
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.js +8 -4
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +4 -4
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +4 -1
- package/dist/backend/llvm/counted-loops.js +62 -23
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.d.ts +19 -16
- package/dist/backend/llvm/dense-array-loops.js +46 -10
- package/dist/backend/llvm/dense-array-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.test.js +50 -14
- package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +25 -1
- package/dist/backend/llvm/dyn.js +331 -8
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +22 -6
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-module.js +17 -11
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-statements.d.ts +0 -23
- package/dist/backend/llvm/emit-statements.js +325 -25
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +141 -15
- package/dist/backend/llvm/emitter.js +537 -64
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +19 -0
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +5 -2
- package/dist/backend/llvm/expr-bytes.js +110 -40
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +1 -1
- package/dist/backend/llvm/expr-calls.js +34 -22
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +21 -5
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-control.js +2 -3
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +54 -6
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +26 -8
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +38 -6
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.js +131 -35
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +10 -0
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +61 -0
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.d.ts +4 -0
- package/dist/backend/llvm/lib-http2.js +20 -17
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +65 -14
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +53 -1
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +65 -28
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/lib-tls.js +23 -0
- package/dist/backend/llvm/lib-tls.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +66 -45
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +14 -0
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +8 -1
- package/dist/backend/llvm/publish.js +64 -25
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/publish.test.js +3 -0
- package/dist/backend/llvm/publish.test.js.map +1 -1
- package/dist/backend/llvm/receivers.js +1 -1
- package/dist/backend/llvm/receivers.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +2 -0
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.js +161 -14
- package/dist/backend/llvm/regex-matchers.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.test.js +18 -0
- package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +9 -7
- package/dist/backend/llvm/shapes.js +12 -10
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +2 -1
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-reads.d.ts +3 -0
- package/dist/backend/llvm/string-reads.js +84 -0
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/wasm-modules.d.ts +6 -5
- package/dist/backend/llvm/wasm-modules.js +32 -9
- package/dist/backend/llvm/wasm-modules.js.map +1 -1
- package/dist/backend/mangle.d.ts +3 -0
- package/dist/backend/mangle.js +5 -0
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +22 -4
- package/dist/backend/native/executable.js +24 -8
- 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-codegen.d.ts +11 -6
- package/dist/backend/native-codegen.js +36 -9
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +0 -23
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +14 -4
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/optimization.d.ts +2 -2
- 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 -1
- package/dist/backend/runtime-pack-core.js +1 -1
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +4 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.d.ts +0 -21
- package/dist/backend/runtime-pack.js +0 -29
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +9 -69
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/target-diagnostics.js +31 -1
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/warm-cache.js +3 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/cli/command.js +26 -6
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +5 -1
- package/dist/cli/usage.js +7 -2
- package/dist/cli/usage.js.map +1 -1
- package/dist/contracts/check.js +1 -1
- package/dist/contracts/check.js.map +1 -1
- package/dist/coverage/report.d.ts +7 -2
- package/dist/coverage/report.js +18 -0
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/verdict-cache.d.ts +1 -0
- package/dist/coverage/verdict-cache.js +4 -0
- package/dist/coverage/verdict-cache.js.map +1 -1
- package/dist/coverage/verdict-semantic.js +4 -0
- package/dist/coverage/verdict-semantic.js.map +1 -1
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/dynamic-tier.d.ts +40 -0
- package/dist/diagnostics/dynamic-tier.js +57 -0
- package/dist/diagnostics/dynamic-tier.js.map +1 -0
- package/dist/diagnostics/envelope.d.ts +2 -1
- package/dist/diagnostics/envelope.js +5 -2
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +23 -1
- package/dist/executable/executable-cache.js +59 -7
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +45 -3
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +3 -1
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +1 -0
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/dispose-hook.d.ts +2 -0
- package/dist/frontend/dispose-hook.js +14 -0
- package/dist/frontend/dispose-hook.js.map +1 -0
- package/dist/frontend/jsx-entities.d.ts +4 -0
- package/dist/frontend/jsx-entities.js +259 -0
- package/dist/frontend/jsx-entities.js.map +1 -0
- package/dist/frontend/jsx-source.d.ts +71 -0
- package/dist/frontend/jsx-source.js +781 -0
- package/dist/frontend/jsx-source.js.map +1 -0
- package/dist/frontend/jsx-source.test.d.ts +1 -0
- package/dist/frontend/jsx-source.test.js +200 -0
- package/dist/frontend/jsx-source.test.js.map +1 -0
- package/dist/frontend/literal-values.test.js +8 -9
- package/dist/frontend/literal-values.test.js.map +1 -1
- package/dist/frontend/lowering/array-indexed-mutation.js +2 -1
- package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
- package/dist/frontend/lowering/array-values.js +3 -2
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
- package/dist/frontend/lowering/binding-analysis.js +2 -2
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/builtins/arguments.d.ts +3 -0
- package/dist/frontend/lowering/builtins/arguments.js +30 -15
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.js +10 -6
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-async.js +2 -1
- package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js +2 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.d.ts +4 -2
- package/dist/frontend/lowering/builtins/crypto.js +59 -3
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/date-classes.d.ts +46 -0
- package/dist/frontend/lowering/builtins/date-classes.js +477 -0
- package/dist/frontend/lowering/builtins/date-classes.js.map +1 -0
- package/dist/frontend/lowering/builtins/dates.d.ts +11 -1
- package/dist/frontend/lowering/builtins/dates.js +55 -26
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/dh.d.ts +15 -0
- package/dist/frontend/lowering/builtins/dh.js +151 -0
- package/dist/frontend/lowering/builtins/dh.js.map +1 -0
- package/dist/frontend/lowering/builtins/disposable-stack.js +2 -1
- package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -1
- package/dist/frontend/lowering/builtins/ecdh.d.ts +12 -1
- package/dist/frontend/lowering/builtins/ecdh.js +7 -7
- package/dist/frontend/lowering/builtins/ecdh.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.d.ts +15 -0
- package/dist/frontend/lowering/builtins/errors.js +110 -0
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +23 -17
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.js +6 -4
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-paths.d.ts +15 -0
- package/dist/frontend/lowering/builtins/fs-paths.js +209 -0
- package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -0
- package/dist/frontend/lowering/builtins/hash-stream.d.ts +16 -4
- package/dist/frontend/lowering/builtins/hash-stream.js +86 -23
- package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +2 -1
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/key-object.d.ts +2 -1
- package/dist/frontend/lowering/builtins/key-object.js +20 -7
- package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +11 -4
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.js +9 -5
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.js +4 -3
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/performance.js +3 -2
- package/dist/frontend/lowering/builtins/performance.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.js +3 -2
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +3 -2
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/promisify-callback.js +2 -1
- package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +2 -1
- package/dist/frontend/lowering/builtins/readline.js +23 -6
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/strings.js +13 -5
- package/dist/frontend/lowering/builtins/strings.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.js +2 -1
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/timers.js +1 -1
- package/dist/frontend/lowering/builtins/timers.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +4 -3
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/v8.js +2 -1
- package/dist/frontend/lowering/builtins/v8.js.map +1 -1
- package/dist/frontend/lowering/builtins/webcrypto.js +39 -20
- package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.js +2 -1
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +13 -6
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/caught-value-dispatch.d.ts +18 -1
- package/dist/frontend/lowering/caught-value-dispatch.js +201 -32
- package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-assertions.js +3 -2
- package/dist/frontend/lowering/class-assertions.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +2 -1
- package/dist/frontend/lowering/class-construction.js +8 -13
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-descriptors.js +1 -1
- package/dist/frontend/lowering/class-descriptors.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +34 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +568 -151
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +77 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.js +3 -0
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-method-values.js +1 -1
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +7 -0
- package/dist/frontend/lowering/class-protocols.js +64 -4
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.d.ts +5 -0
- package/dist/frontend/lowering/class-prototypes.js +36 -3
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-to-primitive.js +25 -5
- package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
- package/dist/frontend/lowering/class-unions.js +2 -1
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +6 -5
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +8 -7
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.js +8 -7
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/collection-ingestion.js +2 -1
- package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +7 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +14 -13
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.js +2 -1
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +25 -4
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +6 -5
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +2 -1
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +1 -1
- package/dist/frontend/lowering/containers/bytes.js +129 -28
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +52 -2
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-grouping.js +3 -2
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +8 -7
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +8 -7
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +32 -1
- package/dist/frontend/lowering/containers/iterator-helpers.js +6 -5
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +36 -9
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +2 -1
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.js +25 -4
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.d.ts +18 -1
- package/dist/frontend/lowering/deferred-module-initializers.js +226 -115
- package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.test.js +28 -0
- package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
- package/dist/frontend/lowering/dispatch-sites.d.ts +59 -0
- package/dist/frontend/lowering/dispatch-sites.js +204 -0
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -0
- package/dist/frontend/lowering/dispatch-sites.test.d.ts +1 -0
- package/dist/frontend/lowering/dispatch-sites.test.js +59 -0
- package/dist/frontend/lowering/dispatch-sites.test.js.map +1 -0
- package/dist/frontend/lowering/dyn-streams.d.ts +3 -0
- package/dist/frontend/lowering/dyn-streams.js +1 -1
- package/dist/frontend/lowering/dyn-streams.js.map +1 -1
- package/dist/frontend/lowering/dynamic-tier.d.ts +25 -0
- package/dist/frontend/lowering/dynamic-tier.js +327 -0
- package/dist/frontend/lowering/dynamic-tier.js.map +1 -0
- package/dist/frontend/lowering/error-methods.js +4 -0
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/expressions/array-literals.js +15 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +45 -3
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +17 -1
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +46 -7
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.js +35 -5
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +0 -3
- package/dist/frontend/lowering/expressions/object-literals.js +27 -6
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +5 -5
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +0 -4
- package/dist/frontend/lowering/expressions/property-access.js +99 -7
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +63 -5
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +63 -9
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +6 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.js +20 -30
- package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +42 -1
- package/dist/frontend/lowering/generic-functions.js +448 -18
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/intern-tables.js +2 -1
- package/dist/frontend/lowering/intern-tables.js.map +1 -1
- package/dist/frontend/lowering/iterator-adapters.js +9 -8
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/js-dynamic-objects.js +3 -2
- package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -1
- package/dist/frontend/lowering/json-require.js +2 -1
- package/dist/frontend/lowering/json-require.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.d.ts +7 -2
- package/dist/frontend/lowering/key-order-witness.js +21 -4
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +38 -2
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lifetime-regions.js +2 -1
- package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +6 -5
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.js +3 -1
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +4 -0
- package/dist/frontend/lowering/lower-calls.js +339 -91
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +18 -0
- package/dist/frontend/lowering/lower-classes.js +280 -25
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +3 -2
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +14 -0
- package/dist/frontend/lowering/lower-event-emitter.js +267 -20
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +19 -2
- package/dist/frontend/lowering/lower-exprs.js +116 -11
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +304 -72
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +10 -6
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.js +2 -1
- package/dist/frontend/lowering/lower-mixins.js.map +1 -1
- package/dist/frontend/lowering/lower-mock.js +2 -1
- package/dist/frontend/lowering/lower-mock.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +15 -5
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.test.js +2 -2
- package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +2 -1
- package/dist/frontend/lowering/lower-namespaces.js +4 -3
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +10 -0
- package/dist/frontend/lowering/lower-server.js +237 -59
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.js +12 -10
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +168 -20
- 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 +575 -165
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +4 -3
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +125 -28
- package/dist/frontend/lowering/lowerer.js +557 -63
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +21 -9
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/narrowing-stability.js +5 -0
- package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.js +1 -1
- package/dist/frontend/lowering/native-ffi.js.map +1 -1
- package/dist/frontend/lowering/object-enumeration-receiver.js +2 -1
- package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
- package/dist/frontend/lowering/pairs-snapshot.js +2 -1
- package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
- package/dist/frontend/lowering/private-brands.d.ts +9 -0
- package/dist/frontend/lowering/private-brands.js +66 -15
- package/dist/frontend/lowering/private-brands.js.map +1 -1
- package/dist/frontend/lowering/promise-executor-adapter.js +2 -1
- package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -1
- package/dist/frontend/lowering/require-initialization.js +2 -1
- package/dist/frontend/lowering/require-initialization.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-elements.d.ts +5 -0
- package/dist/frontend/lowering/runtime-optional-elements.js +17 -1
- package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-records.d.ts +2 -0
- package/dist/frontend/lowering/runtime-optional-records.js +18 -5
- package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
- package/dist/frontend/lowering/site-dependencies.d.ts +35 -0
- package/dist/frontend/lowering/site-dependencies.js +84 -0
- package/dist/frontend/lowering/site-dependencies.js.map +1 -0
- package/dist/frontend/lowering/site-dependencies.test.d.ts +1 -0
- package/dist/frontend/lowering/site-dependencies.test.js +53 -0
- package/dist/frontend/lowering/site-dependencies.test.js.map +1 -0
- package/dist/frontend/lowering/stable-names.d.ts +11 -0
- package/dist/frontend/lowering/stable-names.js +35 -0
- package/dist/frontend/lowering/stable-names.js.map +1 -0
- package/dist/frontend/lowering/static-typeof.d.ts +2 -2
- package/dist/frontend/lowering/static-typeof.js +42 -3
- package/dist/frontend/lowering/static-typeof.js.map +1 -1
- package/dist/frontend/lowering/strict-equality.js +2 -1
- package/dist/frontend/lowering/strict-equality.js.map +1 -1
- package/dist/frontend/lowering/structural-positions.d.ts +32 -0
- package/dist/frontend/lowering/structural-positions.js +108 -0
- package/dist/frontend/lowering/structural-positions.js.map +1 -0
- package/dist/frontend/lowering/surfaces.js +42 -26
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/var-hoisting.js +37 -3
- package/dist/frontend/lowering/var-hoisting.js.map +1 -1
- package/dist/frontend/npm-static-tsc-helpers.d.ts +5 -0
- package/dist/frontend/npm-static-tsc-helpers.js +106 -0
- package/dist/frontend/npm-static-tsc-helpers.js.map +1 -0
- package/dist/frontend/npm-static-tsc-helpers.test.d.ts +1 -0
- package/dist/frontend/npm-static-tsc-helpers.test.js +58 -0
- package/dist/frontend/npm-static-tsc-helpers.test.js.map +1 -0
- package/dist/frontend/npm-static-type-exports-host.d.ts +8 -0
- package/dist/frontend/npm-static-type-exports-host.js +214 -0
- package/dist/frontend/npm-static-type-exports-host.js.map +1 -0
- package/dist/frontend/npm-static-type-exports-host.test.d.ts +1 -0
- package/dist/frontend/npm-static-type-exports-host.test.js +53 -0
- package/dist/frontend/npm-static-type-exports-host.test.js.map +1 -0
- package/dist/frontend/npm-static-type-exports.d.ts +52 -0
- package/dist/frontend/npm-static-type-exports.js +261 -0
- package/dist/frontend/npm-static-type-exports.js.map +1 -0
- package/dist/frontend/npm-static-type-exports.test.d.ts +1 -0
- package/dist/frontend/npm-static-type-exports.test.js +103 -0
- package/dist/frontend/npm-static-type-exports.test.js.map +1 -0
- package/dist/frontend/npm-static-umd.d.ts +6 -0
- package/dist/frontend/npm-static-umd.js +203 -0
- package/dist/frontend/npm-static-umd.js.map +1 -0
- package/dist/frontend/npm-static-umd.test.d.ts +1 -0
- package/dist/frontend/npm-static-umd.test.js +105 -0
- package/dist/frontend/npm-static-umd.test.js.map +1 -0
- package/dist/frontend/npm-static.d.ts +8 -0
- package/dist/frontend/npm-static.js +47 -2
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/program.d.ts +13 -0
- package/dist/frontend/program.js +103 -6
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +1 -1
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/services.d.ts +6 -0
- package/dist/frontend/services.js +18 -0
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/ts7/ast-node.d.ts +21 -7
- package/dist/frontend/ts7/ast-node.js +131 -29
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +60 -0
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.d.ts +27 -2
- package/dist/frontend/ts7/ast-wire.js +124 -21
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/ast.d.ts +23 -2
- package/dist/frontend/ts7/ast.js +143 -2
- package/dist/frontend/ts7/ast.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +13 -1
- package/dist/frontend/ts7/checker.js +75 -1
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +9 -6
- package/dist/frontend/ts7/checker.test.js.map +1 -1
- package/dist/frontend/ts7/enums.d.ts +3 -3
- package/dist/frontend/ts7/enums.generated.d.ts +10 -0
- package/dist/frontend/ts7/enums.generated.js +21 -0
- package/dist/frontend/ts7/enums.generated.js.map +1 -1
- package/dist/frontend/ts7/enums.js +19 -0
- package/dist/frontend/ts7/enums.js.map +1 -1
- package/dist/frontend/ts7/program-host.js +5 -2
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.d.ts +10 -0
- package/dist/frontend/ts7/semantic-checker.js +25 -20
- package/dist/frontend/ts7/semantic-checker.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.d.ts +13 -0
- package/dist/frontend/ts7/semantic-json.js +146 -0
- package/dist/frontend/ts7/semantic-json.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.test.js +57 -1
- package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.d.ts +15 -0
- package/dist/frontend/ts7/semantic-model.js +67 -19
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +3 -2
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/session.js +1 -1
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/tsc-codes.d.ts +1 -1
- package/dist/frontend/tsc-codes.js +7 -0
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +38 -6
- package/dist/frontend/type-mapper.js +265 -32
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.js +1 -1
- package/dist/frontend/type-mapper.test.js.map +1 -1
- package/dist/frontend-process-args.d.ts +4 -0
- package/dist/frontend-process-args.js +52 -0
- package/dist/frontend-process-args.js.map +1 -0
- package/dist/frontend-process-args.test.d.ts +1 -0
- package/dist/frontend-process-args.test.js +47 -0
- package/dist/frontend-process-args.test.js.map +1 -0
- package/dist/frontend-process.d.ts +1 -0
- package/dist/frontend-process.js +23 -0
- package/dist/frontend-process.js.map +1 -0
- package/dist/heap-collection.d.ts +16 -0
- package/dist/heap-collection.js +42 -0
- package/dist/heap-collection.js.map +1 -0
- package/dist/heap-collection.test.d.ts +1 -0
- package/dist/heap-collection.test.js +59 -0
- package/dist/heap-collection.test.js.map +1 -0
- package/dist/heap-pressure.d.ts +2 -0
- package/dist/heap-pressure.js +12 -0
- package/dist/heap-pressure.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +402 -86
- package/dist/index.js.map +1 -1
- package/dist/ir/array-length-stability.js +7 -0
- package/dist/ir/array-length-stability.js.map +1 -1
- package/dist/ir/array-length-stability.test.js +25 -0
- package/dist/ir/array-length-stability.test.js.map +1 -1
- package/dist/ir/builtin-effects.js +28 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +5 -1
- package/dist/ir/builtin-signatures.js +141 -12
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/final-fields.d.ts +2 -1
- package/dist/ir/final-fields.js +2 -2
- package/dist/ir/final-fields.js.map +1 -1
- package/dist/ir/function-references.test.js +2 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/int32-slots.d.ts +13 -5
- package/dist/ir/int32-slots.js +112 -115
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +3 -1
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loop-facts.d.ts +9 -4
- package/dist/ir/integer-loop-facts.js +93 -18
- package/dist/ir/integer-loop-facts.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +49 -0
- package/dist/ir/integer-loops.js +193 -39
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +201 -1
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +64 -0
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +17 -2
- package/dist/ir/ir.js +3 -1
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +31 -7
- package/dist/ir/runtime-features.js +138 -11
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/tiers.js +1 -0
- package/dist/ir/tiers.js.map +1 -1
- package/dist/ir/traverse.d.ts +2 -0
- package/dist/ir/traverse.js +14 -2
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +56 -16
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/ir-policy.js +10 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.d.ts +2 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/prepare.js +2 -0
- 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/prepare.js +5 -1
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.test.js +4 -1
- package/dist/native/sanitizer.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/text-parts.d.ts +7 -0
- package/dist/text-parts.js +44 -0
- package/dist/text-parts.js.map +1 -1
- package/dist/text-parts.test.d.ts +1 -0
- package/dist/text-parts.test.js +46 -0
- package/dist/text-parts.test.js.map +1 -0
- package/dist/timing.d.ts +9 -2
- package/dist/timing.js +7 -4
- package/dist/timing.js.map +1 -1
- package/dist/wasm/translate.d.ts +4 -0
- package/dist/wasm/translate.js +2 -2
- package/dist/wasm/translate.js.map +1 -1
- package/package.json +21 -21
- package/shims/undici/core/client.ts +4 -4
- package/surface-manifest.json +19 -49
|
@@ -93,15 +93,17 @@ test("loops that may resize, rebind or move storage keep the ordinary copy only"
|
|
|
93
93
|
]);
|
|
94
94
|
expect([...rebound.arrays.keys()]).toEqual(["a"]);
|
|
95
95
|
});
|
|
96
|
+
const counted = (fields) => ({
|
|
97
|
+
localId: "i",
|
|
98
|
+
guarded: false,
|
|
99
|
+
limitGuarded: false,
|
|
100
|
+
startGuarded: false,
|
|
101
|
+
guardLimit: 0,
|
|
102
|
+
followers: [],
|
|
103
|
+
...fields,
|
|
104
|
+
});
|
|
96
105
|
test("counted shapes need a non-negative counter strictly below the length", () => {
|
|
97
|
-
const ascending = (limit, inclusive, min = 0) => countedDenseShape(loop([]), {
|
|
98
|
-
localId: "i",
|
|
99
|
-
start: num(min),
|
|
100
|
-
limit,
|
|
101
|
-
step: 1,
|
|
102
|
-
inclusive,
|
|
103
|
-
range: { min, max: 100 },
|
|
104
|
-
});
|
|
106
|
+
const ascending = (limit, inclusive, min = 0) => countedDenseShape(loop([]), counted({ start: num(min), limit, step: 1, inclusive, range: { min, max: 100 } }));
|
|
105
107
|
const minus = (offset) => ({
|
|
106
108
|
kind: "bin",
|
|
107
109
|
op: "-",
|
|
@@ -110,19 +112,53 @@ test("counted shapes need a non-negative counter strictly below the length", ()
|
|
|
110
112
|
type: F64,
|
|
111
113
|
loc,
|
|
112
114
|
});
|
|
113
|
-
expect(ascending(method("a", "length"), false)?.length
|
|
114
|
-
expect(ascending(minus(1), true)?.length
|
|
115
|
+
expect(ascending(method("a", "length"), false)?.length?.localId).toBe("a");
|
|
116
|
+
expect(ascending(minus(1), true)?.length?.localId).toBe("a");
|
|
115
117
|
expect(ascending(method("a", "length"), true)).toBeNull();
|
|
116
118
|
expect(ascending(minus(1), false, -1)).toBeNull();
|
|
117
|
-
|
|
118
|
-
|
|
119
|
+
// Another invariant limit bounds the counter itself; the entry test
|
|
120
|
+
// compares it with every indexed array's hole-free prefix.
|
|
121
|
+
const limited = ascending(ref("n"), false);
|
|
122
|
+
expect(limited?.length).toBeNull();
|
|
123
|
+
expect(limited?.limit?.limit).toEqual(ref("n"));
|
|
124
|
+
expect(ascending(ref("n"), false, -1)).toBeNull();
|
|
125
|
+
const descending = (offset) => countedDenseShape(loop([]), counted({
|
|
119
126
|
start: minus(offset),
|
|
120
127
|
limit: num(0),
|
|
121
128
|
step: -1,
|
|
122
129
|
inclusive: true,
|
|
123
130
|
range: { min: 0, max: 100 },
|
|
124
|
-
});
|
|
125
|
-
expect(descending(1)?.length
|
|
131
|
+
}));
|
|
132
|
+
expect(descending(1)?.length?.localId).toBe("a");
|
|
126
133
|
expect(descending(0)).toBeNull();
|
|
127
134
|
});
|
|
135
|
+
test("a loop to another invariant limit covers each array whose length it keeps", () => {
|
|
136
|
+
const limited = {
|
|
137
|
+
counter: "i",
|
|
138
|
+
length: null,
|
|
139
|
+
limit: counted({
|
|
140
|
+
start: num(0),
|
|
141
|
+
limit: ref("n"),
|
|
142
|
+
step: 1,
|
|
143
|
+
inclusive: false,
|
|
144
|
+
range: { min: 0, max: 100 },
|
|
145
|
+
}),
|
|
146
|
+
range: { min: 0, max: 100 },
|
|
147
|
+
};
|
|
148
|
+
const matchLimited = (body, unaliased = new Set()) => matchDenseArrayLoop(loop(body), limited, locals, unaliased, new Set(["a", "b"]));
|
|
149
|
+
const copy = write("b", read("a"));
|
|
150
|
+
const dense = matchLimited([copy]);
|
|
151
|
+
expect([...dense.arrays.keys()].sort()).toEqual(["a", "b"]);
|
|
152
|
+
expect(dense.length).toBeNull();
|
|
153
|
+
expect(dense.limit?.limit).toEqual(ref("n"));
|
|
154
|
+
// An array the loop may resize is not covered; neither is one it may
|
|
155
|
+
// share storage with.
|
|
156
|
+
const resizing = [
|
|
157
|
+
{ kind: "exprStmt", expr: read("a"), loc },
|
|
158
|
+
{ kind: "exprStmt", expr: method("b", "getNumber", [ref("i")]), loc },
|
|
159
|
+
{ kind: "exprStmt", expr: method("b", "push", [num(1)]), loc },
|
|
160
|
+
];
|
|
161
|
+
expect([...matchLimited(resizing, new Set(["b"])).arrays.keys()]).toEqual(["a"]);
|
|
162
|
+
expect(matchLimited(resizing)).toBeNull();
|
|
163
|
+
});
|
|
128
164
|
//# sourceMappingURL=dense-array-loops.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dense-array-loops.test.js","sourceRoot":"","sources":["../../../src/backend/llvm/dense-array-loops.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAA0C,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"dense-array-loops.test.js","sourceRoot":"","sources":["../../../src/backend/llvm/dense-array-loops.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -60,6 +60,8 @@ export declare class LlDyn {
|
|
|
60
60
|
private readonly dynFuncThunks;
|
|
61
61
|
private readonly dynFuncBoxes;
|
|
62
62
|
private readonly dynFuncAdapters;
|
|
63
|
+
private readonly messageListeners;
|
|
64
|
+
private readonly messageReaders;
|
|
63
65
|
private readonly promiseDynAdapters;
|
|
64
66
|
private readonly mapDynOps;
|
|
65
67
|
private dynToStrFn;
|
|
@@ -241,7 +243,8 @@ export declare class LlDyn {
|
|
|
241
243
|
* inner typeKey. */
|
|
242
244
|
private promiseDynAdapterHelper;
|
|
243
245
|
/** Node's String() over a dyn value — sc_ds (+1 result) over the
|
|
244
|
-
* recursive sc_ds_buf walker. Borrowed operand;
|
|
246
|
+
* recursive sc_ds_buf walker. Borrowed operand; an exception that an
|
|
247
|
+
* object's toString or valueOf throws stays pending. */
|
|
245
248
|
dynToStrHelper(): string;
|
|
246
249
|
/** A catch binding flowing into an `unknown` slot: the typed→unknown
|
|
247
250
|
* deep-copy stance over the exception snapshot's runtime kind. */
|
|
@@ -266,6 +269,27 @@ export declare class LlDyn {
|
|
|
266
269
|
dynFuncBoxHelper(t: IrType & {
|
|
267
270
|
kind: "func";
|
|
268
271
|
}): string;
|
|
272
|
+
/** `sc_dml_<n>(ptr c, ptr message) -> i1`, the typed message entry of a
|
|
273
|
+
* closure registered as a 'message' listener (ScrDynMessageListener):
|
|
274
|
+
* builds the closure's parameter from the message's nodes and calls the
|
|
275
|
+
* closure. It answers false, without calling it, when the message does
|
|
276
|
+
* not have the parameter's exact layout, and the listener then runs
|
|
277
|
+
* through its thunk on the decoded message, as before. Null when the
|
|
278
|
+
* signature's parameter has no message reader (messageReadable). */
|
|
279
|
+
messageListenerHelper(t: IrType & {
|
|
280
|
+
kind: "func";
|
|
281
|
+
}): string | null;
|
|
282
|
+
/** Whether a message reader can build T: numbers, booleans and strings;
|
|
283
|
+
* records of them with only declared fields, none of union type; and
|
|
284
|
+
* boxed unions of those arms and null or undefined without a literal
|
|
285
|
+
* discriminator, with at most one number, boolean and string arm. */
|
|
286
|
+
private messageReadable;
|
|
287
|
+
/** `sc_dmr_<n>(ptr message, size node, ptr fail) -> T`: T (+1) built
|
|
288
|
+
* from a message node, for a type messageReadable accepts. Sets *fail
|
|
289
|
+
* and returns a dummy when the node does not have T's layout: the arm
|
|
290
|
+
* the checked conversion would choose, a record's declared keys in
|
|
291
|
+
* declaration order and no others. */
|
|
292
|
+
private messageReaderHelper;
|
|
269
293
|
/** The adapter closure body for one TARGET signature: caps[0] is an
|
|
270
294
|
* untraced obj-box owning the dyn function value. */
|
|
271
295
|
dynFuncAdapterHelper(t: IrType & {
|
package/dist/backend/llvm/dyn.js
CHANGED
|
@@ -54,6 +54,14 @@ const DYN_HANDLE_BOX_FN = {
|
|
|
54
54
|
const DYN_HANDLE_UNBOX_FN = {
|
|
55
55
|
dgramSocket: "scr_dgram_from_dyn",
|
|
56
56
|
};
|
|
57
|
+
/** ScrMessageKind (scr_message.h): the node kinds message readers test. */
|
|
58
|
+
const MESSAGE_KIND = {
|
|
59
|
+
UNDEFINED: 0,
|
|
60
|
+
NULL: 1,
|
|
61
|
+
BOOL: 2,
|
|
62
|
+
NUMBER: 3,
|
|
63
|
+
STRING: 4,
|
|
64
|
+
};
|
|
57
65
|
export const DYN_KIND = {
|
|
58
66
|
NULL: 0,
|
|
59
67
|
BOOL: 1,
|
|
@@ -92,6 +100,8 @@ export class LlDyn {
|
|
|
92
100
|
dynFuncThunks = new Map();
|
|
93
101
|
dynFuncBoxes = new Map();
|
|
94
102
|
dynFuncAdapters = new Map();
|
|
103
|
+
messageListeners = new Map();
|
|
104
|
+
messageReaders = new Map();
|
|
95
105
|
promiseDynAdapters = new Map();
|
|
96
106
|
mapDynOps = new Map();
|
|
97
107
|
dynToStrFn = null;
|
|
@@ -2805,7 +2815,8 @@ export class LlDyn {
|
|
|
2805
2815
|
}
|
|
2806
2816
|
/* ── the dyn ToString pair (dynToStrHelper, ported) ────────────────── */
|
|
2807
2817
|
/** Node's String() over a dyn value — sc_ds (+1 result) over the
|
|
2808
|
-
* recursive sc_ds_buf walker. Borrowed operand;
|
|
2818
|
+
* recursive sc_ds_buf walker. Borrowed operand; an exception that an
|
|
2819
|
+
* object's toString or valueOf throws stays pending. */
|
|
2809
2820
|
dynToStrHelper() {
|
|
2810
2821
|
if (this.dynToStrFn)
|
|
2811
2822
|
return this.dynToStrFn;
|
|
@@ -2909,9 +2920,9 @@ export class LlDyn {
|
|
|
2909
2920
|
B.startBlock(labels.get(DYN_KIND.ARR));
|
|
2910
2921
|
{
|
|
2911
2922
|
// Array.prototype.toString: join(",") — null/undefined ELEMENTS
|
|
2912
|
-
// print empty (unlike top level), nested arrays flatten.
|
|
2923
|
+
// print empty (unlike top level), nested arrays flatten. The length
|
|
2924
|
+
// is read once, as join reads it.
|
|
2913
2925
|
const n = this.lenOf(B, "%d");
|
|
2914
|
-
const items = this.itemsOf(B, "%d");
|
|
2915
2926
|
this.i64Loop(B, "ds.ar", n, (i, brNext) => {
|
|
2916
2927
|
const nz = B.tmp();
|
|
2917
2928
|
B.line(`${nz} = icmp ugt ${this.S} ${i}, 0`);
|
|
@@ -2922,7 +2933,22 @@ export class LlDyn {
|
|
|
2922
2933
|
B.line(`call void @scr_jb_putc(ptr %b, i8 44)`);
|
|
2923
2934
|
B.br(lel);
|
|
2924
2935
|
B.startBlock(lel);
|
|
2925
|
-
|
|
2936
|
+
// Each index reads the element as join does (scr_dyn_arr_at, +1):
|
|
2937
|
+
// from the current storage, undefined past the current length,
|
|
2938
|
+
// and through the prototype for a hole. An element's toString
|
|
2939
|
+
// can append to, shrink or reallocate the array; a getter that
|
|
2940
|
+
// throws answers NULL with the exception pending.
|
|
2941
|
+
host.declare(`declare ptr @scr_dyn_arr_at(ptr, double)`);
|
|
2942
|
+
host.declare(`declare void @scr_dyn_release_v(ptr)`);
|
|
2943
|
+
const index = B.tmp();
|
|
2944
|
+
B.line(`${index} = uitofp ${this.S} ${i} to double`);
|
|
2945
|
+
const e = B.tmp();
|
|
2946
|
+
B.line(`${e} = call ptr @scr_dyn_arr_at(ptr %d, double ${index})`);
|
|
2947
|
+
const missing = B.tmp();
|
|
2948
|
+
B.line(`${missing} = icmp eq ptr ${e}, null`);
|
|
2949
|
+
const lGot = B.newLabel("ds.gt");
|
|
2950
|
+
B.condBr(missing, done, lGot);
|
|
2951
|
+
B.startBlock(lGot);
|
|
2926
2952
|
const ek = this.kindOf(B, e);
|
|
2927
2953
|
const isU = B.tmp();
|
|
2928
2954
|
const isN = B.tmp();
|
|
@@ -2930,20 +2956,31 @@ export class LlDyn {
|
|
|
2930
2956
|
B.line(`${isU} = icmp eq i32 ${ek}, ${DYN_KIND.UNDEF}`);
|
|
2931
2957
|
B.line(`${isN} = icmp eq i32 ${ek}, ${DYN_KIND.NULL}`);
|
|
2932
2958
|
B.line(`${unit} = or i1 ${isU}, ${isN}`);
|
|
2933
|
-
const lSkip = B.newLabel("ds.sk");
|
|
2934
2959
|
const lRec = B.newLabel("ds.rc");
|
|
2960
|
+
const lSkip = B.newLabel("ds.sk");
|
|
2935
2961
|
B.condBr(unit, lSkip, lRec);
|
|
2936
2962
|
B.startBlock(lSkip);
|
|
2963
|
+
B.line(`call void @scr_dyn_release_v(ptr ${e})`);
|
|
2937
2964
|
brNext();
|
|
2938
2965
|
B.startBlock(lRec);
|
|
2939
2966
|
B.line(`call void @sc_ds_buf(ptr %b, ptr ${e})`);
|
|
2967
|
+
B.line(`call void @scr_dyn_release_v(ptr ${e})`);
|
|
2968
|
+
// The first exception an element's conversion throws ends the
|
|
2969
|
+
// conversion; later elements are not read.
|
|
2970
|
+
const thrown = B.tmp();
|
|
2971
|
+
for (const line of host.pendingTestLines(thrown))
|
|
2972
|
+
B.line(line.trimStart());
|
|
2973
|
+
const lMore = B.newLabel("ds.mo");
|
|
2974
|
+
B.condBr(thrown, done, lMore);
|
|
2975
|
+
B.startBlock(lMore);
|
|
2940
2976
|
});
|
|
2941
2977
|
B.br(done);
|
|
2942
2978
|
}
|
|
2943
2979
|
B.startBlock(labels.get(DYN_KIND.OBJ));
|
|
2944
2980
|
{
|
|
2945
2981
|
// The checked-dynamic tree's error encoding renders Error.prototype.toString;
|
|
2946
|
-
//
|
|
2982
|
+
// other objects convert with ToPrimitive's string hint: a toString or
|
|
2983
|
+
// valueOf of their own or of their prototypes, else "[object Object]".
|
|
2947
2984
|
const marker = this.objGetLit(B, "%d", "%error");
|
|
2948
2985
|
const isErr = B.tmp();
|
|
2949
2986
|
B.line(`${isErr} = icmp ne ptr ${marker}, null`);
|
|
@@ -2951,8 +2988,21 @@ export class LlDyn {
|
|
|
2951
2988
|
const lPlain = B.newLabel("ds.pl");
|
|
2952
2989
|
B.condBr(isErr, lErr, lPlain);
|
|
2953
2990
|
B.startBlock(lPlain);
|
|
2954
|
-
|
|
2955
|
-
|
|
2991
|
+
{
|
|
2992
|
+
// Null leaves the exception the conversion threw pending.
|
|
2993
|
+
host.declare(`declare ptr @scr_dyn_string_coerce_js(ptr)`);
|
|
2994
|
+
host.declare(`declare void @scr_str_release(ptr)`);
|
|
2995
|
+
const text = B.tmp();
|
|
2996
|
+
B.line(`${text} = call ptr @scr_dyn_string_coerce_js(ptr %d)`);
|
|
2997
|
+
const converted = B.tmp();
|
|
2998
|
+
B.line(`${converted} = icmp ne ptr ${text}, null`);
|
|
2999
|
+
const lPut = B.newLabel("ds.pp");
|
|
3000
|
+
B.condBr(converted, lPut, done);
|
|
3001
|
+
B.startBlock(lPut);
|
|
3002
|
+
this.putScrStr(B, "%b", text);
|
|
3003
|
+
B.line(`call void @scr_str_release(ptr ${text})`);
|
|
3004
|
+
B.br(done);
|
|
3005
|
+
}
|
|
2956
3006
|
B.startBlock(lErr);
|
|
2957
3007
|
// Error.prototype.toString, reading name and message through the
|
|
2958
3008
|
// prototype. Null leaves the exception its conversion threw pending.
|
|
@@ -4049,6 +4099,279 @@ export class LlDyn {
|
|
|
4049
4099
|
this.defs.push(`define internal ptr @${name}(ptr %v, ptr %fname) ${FN_ATTRS} { ; box ${key} into dyn`, `entry:`, ` %c = call ptr @scr_closure_retain_v(ptr %v)`, ` %r = call ptr @scr_dyn_new_func(ptr %c, ptr @${thunk}, i32 ${t.params.length - (t.restAbi === "typed" ? 1 : 0)}, ptr ${sigLit}, ptr %fname)`, ` ret ptr %r`, `}`, ``);
|
|
4050
4100
|
return name;
|
|
4051
4101
|
}
|
|
4102
|
+
/** `sc_dml_<n>(ptr c, ptr message) -> i1`, the typed message entry of a
|
|
4103
|
+
* closure registered as a 'message' listener (ScrDynMessageListener):
|
|
4104
|
+
* builds the closure's parameter from the message's nodes and calls the
|
|
4105
|
+
* closure. It answers false, without calling it, when the message does
|
|
4106
|
+
* not have the parameter's exact layout, and the listener then runs
|
|
4107
|
+
* through its thunk on the decoded message, as before. Null when the
|
|
4108
|
+
* signature's parameter has no message reader (messageReadable). */
|
|
4109
|
+
messageListenerHelper(t) {
|
|
4110
|
+
const key = typeKey(t);
|
|
4111
|
+
const existing = this.messageListeners.get(key);
|
|
4112
|
+
if (existing !== undefined)
|
|
4113
|
+
return existing;
|
|
4114
|
+
const param = t.params[0];
|
|
4115
|
+
const supported = t.params.length === 1 &&
|
|
4116
|
+
t.rest !== true &&
|
|
4117
|
+
param !== undefined &&
|
|
4118
|
+
(t.ret.kind === "void" || t.ret.kind === "f64" || t.ret.kind === "bool") &&
|
|
4119
|
+
this.messageReadable(param, new Set());
|
|
4120
|
+
if (!supported) {
|
|
4121
|
+
this.messageListeners.set(key, null);
|
|
4122
|
+
return null;
|
|
4123
|
+
}
|
|
4124
|
+
const name = `sc_dml_${this.messageListeners.size}`;
|
|
4125
|
+
this.messageListeners.set(key, name);
|
|
4126
|
+
const B = new BlockBuilder();
|
|
4127
|
+
B.entryAllocas.push(`%fail = alloca i1`);
|
|
4128
|
+
B.line(`store i1 false, ptr %fail`);
|
|
4129
|
+
const value = B.tmp();
|
|
4130
|
+
B.line(`${value} = call ${this.valTy(param)} @${this.messageReaderHelper(param)}(ptr %m, ${this.host.sizeType} 0, ptr %fail)`);
|
|
4131
|
+
const failed = B.tmp();
|
|
4132
|
+
B.line(`${failed} = load i1, ptr %fail`);
|
|
4133
|
+
const lMiss = B.newLabel("dml.miss");
|
|
4134
|
+
const lCall = B.newLabel("dml.call");
|
|
4135
|
+
B.condBr(failed, lMiss, lCall);
|
|
4136
|
+
B.startBlock(lMiss);
|
|
4137
|
+
B.terminate(`ret i1 false`);
|
|
4138
|
+
B.startBlock(lCall);
|
|
4139
|
+
// The closure consumes its parameter; a pending exception stays for
|
|
4140
|
+
// the emitter, as after the thunk.
|
|
4141
|
+
const fnp = B.tmp();
|
|
4142
|
+
const fn = B.tmp();
|
|
4143
|
+
B.line(`${fnp} = getelementptr inbounds %ScrClosure, ptr %c, i64 0, i32 1`);
|
|
4144
|
+
B.line(`${fn} = load ptr, ptr ${fnp}`);
|
|
4145
|
+
const args = `ptr %c, ${this.valTy(param)} ${value}`;
|
|
4146
|
+
if (t.ret.kind === "void")
|
|
4147
|
+
B.line(`call void ${fn}(${args})`);
|
|
4148
|
+
else
|
|
4149
|
+
B.line(`${B.tmp()} = call ${this.valTy(t.ret)} ${fn}(${args})`);
|
|
4150
|
+
B.terminate(`ret i1 true`);
|
|
4151
|
+
this.defs.push(`define internal zeroext i1 @${name}(ptr %c, ptr %m) ${FN_ATTRS} { ; message entry for ${llvmCommentText(key)}`, B.render(), `}`, ``);
|
|
4152
|
+
return name;
|
|
4153
|
+
}
|
|
4154
|
+
/** Whether a message reader can build T: numbers, booleans and strings;
|
|
4155
|
+
* records of them with only declared fields, none of union type; and
|
|
4156
|
+
* boxed unions of those arms and null or undefined without a literal
|
|
4157
|
+
* discriminator, with at most one number, boolean and string arm. */
|
|
4158
|
+
messageReadable(t, seen) {
|
|
4159
|
+
switch (t.kind) {
|
|
4160
|
+
case "f64":
|
|
4161
|
+
case "bool":
|
|
4162
|
+
case "string":
|
|
4163
|
+
return true;
|
|
4164
|
+
case "record": {
|
|
4165
|
+
const shape = this.host.recordsById.get(t.shapeId);
|
|
4166
|
+
if (!shape || shape.tuple || shape.indexValue || shape.fields.length === 0)
|
|
4167
|
+
return false;
|
|
4168
|
+
if (seen.has(t.shapeId) || this.isRecursiveShape(t))
|
|
4169
|
+
return false;
|
|
4170
|
+
seen.add(t.shapeId);
|
|
4171
|
+
const readable = shape.fields.every((f) => !f.name.startsWith("%") &&
|
|
4172
|
+
f.type.kind !== "union" &&
|
|
4173
|
+
llFieldType(f.type, this.host.inlineUnions.record(f.type)) !== INLINE_UNION_FIELD &&
|
|
4174
|
+
this.messageReadable(f.type, seen));
|
|
4175
|
+
seen.delete(t.shapeId);
|
|
4176
|
+
return readable;
|
|
4177
|
+
}
|
|
4178
|
+
case "union": {
|
|
4179
|
+
const def = this.host.unionsById.get(t.unionId);
|
|
4180
|
+
// A discriminated union's checked conversion also tests the arm's
|
|
4181
|
+
// literal discriminator, which the readers do not.
|
|
4182
|
+
if (!def || def.discriminant || this.host.nullableUnions.has(t.unionId))
|
|
4183
|
+
return false;
|
|
4184
|
+
const scalars = new Set();
|
|
4185
|
+
for (const arm of def.arms) {
|
|
4186
|
+
if (arm.kind === "nullT" || arm.kind === "undefinedT")
|
|
4187
|
+
continue;
|
|
4188
|
+
if (arm.kind === "f64" || arm.kind === "bool" || arm.kind === "string") {
|
|
4189
|
+
if (scalars.has(arm.kind))
|
|
4190
|
+
return false;
|
|
4191
|
+
scalars.add(arm.kind);
|
|
4192
|
+
continue;
|
|
4193
|
+
}
|
|
4194
|
+
if (arm.kind !== "record" || !this.messageReadable(arm, seen))
|
|
4195
|
+
return false;
|
|
4196
|
+
}
|
|
4197
|
+
return true;
|
|
4198
|
+
}
|
|
4199
|
+
default:
|
|
4200
|
+
return false;
|
|
4201
|
+
}
|
|
4202
|
+
}
|
|
4203
|
+
/** `sc_dmr_<n>(ptr message, size node, ptr fail) -> T`: T (+1) built
|
|
4204
|
+
* from a message node, for a type messageReadable accepts. Sets *fail
|
|
4205
|
+
* and returns a dummy when the node does not have T's layout: the arm
|
|
4206
|
+
* the checked conversion would choose, a record's declared keys in
|
|
4207
|
+
* declaration order and no others. */
|
|
4208
|
+
messageReaderHelper(t) {
|
|
4209
|
+
const key = typeKey(t);
|
|
4210
|
+
const existing = this.messageReaders.get(key);
|
|
4211
|
+
if (existing)
|
|
4212
|
+
return existing;
|
|
4213
|
+
const name = `sc_dmr_${this.messageReaders.size}`;
|
|
4214
|
+
this.messageReaders.set(key, name);
|
|
4215
|
+
const host = this.host;
|
|
4216
|
+
const S = host.sizeType;
|
|
4217
|
+
if (t.kind !== "record")
|
|
4218
|
+
host.declare(`declare i32 @scr_message_kind(ptr, ${S})`);
|
|
4219
|
+
const retTy = this.valTy(t);
|
|
4220
|
+
const dummy = retTy === "double" ? f64Lit(0) : retTy === "i1" ? "false" : "null";
|
|
4221
|
+
const B = new BlockBuilder();
|
|
4222
|
+
const lFail = B.newLabel("dmr.fail");
|
|
4223
|
+
// scr_message_fields tests a record's kind itself.
|
|
4224
|
+
const kind = B.tmp();
|
|
4225
|
+
if (t.kind !== "record")
|
|
4226
|
+
B.line(`${kind} = call i32 @scr_message_kind(ptr %m, ${S} %n)`);
|
|
4227
|
+
const requireKind = (want) => {
|
|
4228
|
+
const ok = B.tmp();
|
|
4229
|
+
B.line(`${ok} = icmp eq i32 ${kind}, ${want}`);
|
|
4230
|
+
const lOk = B.newLabel("dmr.kind");
|
|
4231
|
+
B.condBr(ok, lOk, lFail);
|
|
4232
|
+
B.startBlock(lOk);
|
|
4233
|
+
};
|
|
4234
|
+
switch (t.kind) {
|
|
4235
|
+
case "f64":
|
|
4236
|
+
case "bool": {
|
|
4237
|
+
host.declare(`declare double @scr_message_number(ptr, ${S})`);
|
|
4238
|
+
requireKind(t.kind === "f64" ? MESSAGE_KIND.NUMBER : MESSAGE_KIND.BOOL);
|
|
4239
|
+
const n = B.tmp();
|
|
4240
|
+
B.line(`${n} = call double @scr_message_number(ptr %m, ${S} %n)`);
|
|
4241
|
+
if (t.kind === "f64")
|
|
4242
|
+
B.terminate(`ret double ${n}`);
|
|
4243
|
+
else {
|
|
4244
|
+
const b = B.tmp();
|
|
4245
|
+
B.line(`${b} = fcmp une double ${n}, ${f64Lit(0)}`);
|
|
4246
|
+
B.terminate(`ret i1 ${b}`);
|
|
4247
|
+
}
|
|
4248
|
+
break;
|
|
4249
|
+
}
|
|
4250
|
+
case "string": {
|
|
4251
|
+
host.declare(`declare ptr @scr_message_string(ptr, ${S})`);
|
|
4252
|
+
requireKind(MESSAGE_KIND.STRING);
|
|
4253
|
+
const str = B.tmp();
|
|
4254
|
+
B.line(`${str} = call ptr @scr_message_string(ptr %m, ${S} %n)`);
|
|
4255
|
+
B.terminate(`ret ptr ${str}`);
|
|
4256
|
+
break;
|
|
4257
|
+
}
|
|
4258
|
+
case "record": {
|
|
4259
|
+
const shape = host.recordsById.get(t.shapeId);
|
|
4260
|
+
const order = recordSourceFieldOrder(shape);
|
|
4261
|
+
const fields = new Map(shape.fields.map((f, i) => [f.name, { field: f, index: i }]));
|
|
4262
|
+
const base = host.nullableUnions.fieldBase(t.shapeId);
|
|
4263
|
+
const struct = mangleRecordStruct(t.shapeId);
|
|
4264
|
+
const names = this.recordNameTable(t.shapeId, shape);
|
|
4265
|
+
host.declare(`declare zeroext i1 @scr_message_fields(ptr, ${S}, ptr, ptr, ${S}, ptr)`);
|
|
4266
|
+
B.entryAllocas.push(`%kids = alloca [${order.length} x ${S}]`);
|
|
4267
|
+
const matched = B.tmp();
|
|
4268
|
+
B.line(`${matched} = call zeroext i1 @scr_message_fields(ptr %m, ${S} %n, ptr ${names.names}, ptr ${names.lens}, ${S} ${order.length}, ptr %kids)`);
|
|
4269
|
+
const lBuild = B.newLabel("dmr.build");
|
|
4270
|
+
B.condBr(matched, lBuild, lFail);
|
|
4271
|
+
B.startBlock(lBuild);
|
|
4272
|
+
B.line(`%r0 = call ptr @${mangleRecordNew(t.shapeId)}()`);
|
|
4273
|
+
order.forEach((fieldName, i) => {
|
|
4274
|
+
const { field, index } = fields.get(fieldName);
|
|
4275
|
+
const kidp = B.tmp();
|
|
4276
|
+
const kid = B.tmp();
|
|
4277
|
+
B.line(`${kidp} = getelementptr inbounds [${order.length} x ${S}], ptr %kids, i64 0, i64 ${i}`);
|
|
4278
|
+
B.line(`${kid} = load ${S}, ptr ${kidp}`);
|
|
4279
|
+
const v = B.tmp();
|
|
4280
|
+
B.line(`${v} = call ${this.valTy(field.type)} @${this.messageReaderHelper(field.type)}(ptr %m, ${S} ${kid}, ptr %fail)`);
|
|
4281
|
+
const failed = B.tmp();
|
|
4282
|
+
B.line(`${failed} = load i1, ptr %fail`);
|
|
4283
|
+
const lDrop = B.newLabel("dmr.drop");
|
|
4284
|
+
const lStore = B.newLabel("dmr.store");
|
|
4285
|
+
B.condBr(failed, lDrop, lStore);
|
|
4286
|
+
B.startBlock(lDrop);
|
|
4287
|
+
B.line(`call void ${releaseSym(host, t)}(ptr %r0)`);
|
|
4288
|
+
B.terminate(`ret ptr null`);
|
|
4289
|
+
B.startBlock(lStore);
|
|
4290
|
+
const p = B.tmp();
|
|
4291
|
+
B.line(`${p} = getelementptr inbounds %${struct}, ptr %r0, i64 0, i32 ${index + base} ; .${llvmCommentText(fieldName)}`);
|
|
4292
|
+
const fieldTy = llFieldType(field.type, host.inlineUnions.record(field.type));
|
|
4293
|
+
if (fieldTy === "i8") {
|
|
4294
|
+
const z = B.tmp();
|
|
4295
|
+
B.line(`${z} = zext i1 ${v} to i8`);
|
|
4296
|
+
B.line(`store i8 ${z}, ptr ${p}`);
|
|
4297
|
+
}
|
|
4298
|
+
else {
|
|
4299
|
+
B.line(`store ${fieldTy} ${v}, ptr ${p}`);
|
|
4300
|
+
}
|
|
4301
|
+
});
|
|
4302
|
+
B.terminate(`ret ptr %r0`);
|
|
4303
|
+
break;
|
|
4304
|
+
}
|
|
4305
|
+
case "union": {
|
|
4306
|
+
const def = host.unionsById.get(t.unionId);
|
|
4307
|
+
def.arms.forEach((arm, i) => {
|
|
4308
|
+
const lNext = B.newLabel("dmr.next");
|
|
4309
|
+
if (arm.kind === "nullT" || arm.kind === "undefinedT") {
|
|
4310
|
+
const hit = B.tmp();
|
|
4311
|
+
B.line(`${hit} = icmp eq i32 ${kind}, ${arm.kind === "nullT" ? MESSAGE_KIND.NULL : MESSAGE_KIND.UNDEFINED}`);
|
|
4312
|
+
const lHit = B.newLabel("dmr.unit");
|
|
4313
|
+
B.condBr(hit, lHit, lNext);
|
|
4314
|
+
B.startBlock(lHit);
|
|
4315
|
+
B.terminate(`ret ptr ${host.unitInstanceRef(t.unionId, i)}`);
|
|
4316
|
+
B.startBlock(lNext);
|
|
4317
|
+
return;
|
|
4318
|
+
}
|
|
4319
|
+
if (arm.kind !== "record") {
|
|
4320
|
+
const want = arm.kind === "f64"
|
|
4321
|
+
? MESSAGE_KIND.NUMBER
|
|
4322
|
+
: arm.kind === "bool"
|
|
4323
|
+
? MESSAGE_KIND.BOOL
|
|
4324
|
+
: MESSAGE_KIND.STRING;
|
|
4325
|
+
const hit = B.tmp();
|
|
4326
|
+
B.line(`${hit} = icmp eq i32 ${kind}, ${want}`);
|
|
4327
|
+
const lHit = B.newLabel("dmr.arm");
|
|
4328
|
+
B.condBr(hit, lHit, lNext);
|
|
4329
|
+
B.startBlock(lHit);
|
|
4330
|
+
}
|
|
4331
|
+
// A record arm that does not match leaves *fail clear for the
|
|
4332
|
+
// next arm, like the checked conversion's next-arm match.
|
|
4333
|
+
const v = B.tmp();
|
|
4334
|
+
B.line(`${v} = call ${this.valTy(arm)} @${this.messageReaderHelper(arm)}(ptr %m, ${S} %n, ptr %fail)`);
|
|
4335
|
+
if (arm.kind === "record") {
|
|
4336
|
+
const failed = B.tmp();
|
|
4337
|
+
B.line(`${failed} = load i1, ptr %fail`);
|
|
4338
|
+
const lHit = B.newLabel("dmr.arm");
|
|
4339
|
+
const lMiss = B.newLabel("dmr.miss");
|
|
4340
|
+
B.condBr(failed, lMiss, lHit);
|
|
4341
|
+
B.startBlock(lMiss);
|
|
4342
|
+
B.line(`store i1 false, ptr %fail`);
|
|
4343
|
+
B.br(lNext);
|
|
4344
|
+
B.startBlock(lHit);
|
|
4345
|
+
}
|
|
4346
|
+
const u = B.tmp();
|
|
4347
|
+
if (arm.kind === "f64") {
|
|
4348
|
+
host.declare(`declare ptr @scr_union_new_f64(i32, double)`);
|
|
4349
|
+
B.line(`${u} = call ptr @scr_union_new_f64(i32 ${i}, double ${v})`);
|
|
4350
|
+
}
|
|
4351
|
+
else if (arm.kind === "bool") {
|
|
4352
|
+
host.declare(`declare ptr @scr_union_new_bool(i32, i1 zeroext)`);
|
|
4353
|
+
B.line(`${u} = call ptr @scr_union_new_bool(i32 ${i}, i1 ${v})`);
|
|
4354
|
+
}
|
|
4355
|
+
else {
|
|
4356
|
+
const rc = vAdapters(host, arm);
|
|
4357
|
+
host.declare(`declare ptr @scr_union_new_ref(i32, ptr, ptr, ptr, ptr)`);
|
|
4358
|
+
B.line(`${u} = call ptr @scr_union_new_ref(i32 ${i}, ptr ${v}, ptr ${rc.retain}, ptr ${rc.release}, ptr ${traceArg(host, arm)})`);
|
|
4359
|
+
}
|
|
4360
|
+
B.terminate(`ret ptr ${u}`);
|
|
4361
|
+
B.startBlock(lNext);
|
|
4362
|
+
});
|
|
4363
|
+
B.br(lFail);
|
|
4364
|
+
break;
|
|
4365
|
+
}
|
|
4366
|
+
default:
|
|
4367
|
+
throw new InternalCompilerError(`llvm emitter bug: message reader of ${key}`);
|
|
4368
|
+
}
|
|
4369
|
+
B.startBlock(lFail);
|
|
4370
|
+
B.line(`store i1 true, ptr %fail`);
|
|
4371
|
+
B.terminate(`ret ${retTy} ${dummy}`);
|
|
4372
|
+
this.defs.push(`define internal ${retTy === "i1" ? "zeroext i1" : retTy} @${name}(ptr %m, ${S} %n, ptr %fail) ${FN_ATTRS} { ; message reader for ${llvmCommentText(key)}`, B.render(), `}`, ``);
|
|
4373
|
+
return name;
|
|
4374
|
+
}
|
|
4052
4375
|
/** The adapter closure body for one TARGET signature: caps[0] is an
|
|
4053
4376
|
* untraced obj-box owning the dyn function value. */
|
|
4054
4377
|
dynFuncAdapterHelper(t) {
|