@scriptc/compiler 0.4.7 → 0.4.8
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/node-fallback/child_process.d.ts +71 -22
- package/ambient/node-fallback/crypto.d.ts +15 -7
- package/ambient/node-fallback/events.d.ts +23 -5
- package/ambient/node-fallback/fs.d.ts +3 -2
- package/ambient/node-fallback/http.d.ts +23 -17
- package/ambient/node-fallback/https.d.ts +5 -2
- package/ambient/node-fallback/net.d.ts +6 -0
- package/ambient/node-fallback/os.d.ts +11 -1
- package/ambient/node-fallback/path-posix.d.ts +6 -0
- package/ambient/node-fallback/path-win32.d.ts +5 -0
- package/ambient/node-fallback/path.d.ts +2 -0
- package/ambient/node-fallback/zlib.d.ts +31 -2
- package/ambient/scriptc-node-fallback.d.ts +37 -7
- package/ambient/scriptc.d.ts +7 -2
- package/dist/backend/executable-features.js +11 -3
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/library-pack.d.ts +6 -0
- package/dist/backend/library-pack.js +17 -6
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/library-pack.test.d.ts +1 -0
- package/dist/backend/library-pack.test.js +28 -0
- package/dist/backend/library-pack.test.js.map +1 -0
- package/dist/backend/linker.d.ts +9 -2
- package/dist/backend/linker.js +190 -32
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/lld.d.ts +8 -4
- package/dist/backend/lld.js +19 -13
- package/dist/backend/lld.js.map +1 -1
- package/dist/backend/lld.test.js +3 -1
- package/dist/backend/lld.test.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +15 -2
- package/dist/backend/llvm/alloc.js +172 -36
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/alloc.test.js +69 -1
- package/dist/backend/llvm/alloc.test.js.map +1 -1
- package/dist/backend/llvm/arenas.d.ts +17 -4
- package/dist/backend/llvm/arenas.js +105 -10
- package/dist/backend/llvm/arenas.js.map +1 -1
- package/dist/backend/llvm/arenas.test.js +229 -0
- package/dist/backend/llvm/arenas.test.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.js +10 -1
- package/dist/backend/llvm/bytes-alias.js.map +1 -1
- package/dist/backend/llvm/bytes-headers.js +6 -0
- package/dist/backend/llvm/bytes-headers.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +25 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.js +10 -0
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +16 -9
- package/dist/backend/llvm/classes.js +142 -37
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +42 -0
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/cpu-dispatch.d.ts +15 -5
- package/dist/backend/llvm/cpu-dispatch.js +31 -7
- package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +12 -3
- package/dist/backend/llvm/dyn.js +31 -7
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +67 -4
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-module.js +90 -39
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-module.test.d.ts +1 -0
- package/dist/backend/llvm/emit-module.test.js +52 -0
- package/dist/backend/llvm/emit-module.test.js.map +1 -0
- package/dist/backend/llvm/emit-statements.js +99 -15
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +113 -8
- package/dist/backend/llvm/emitter.js +438 -67
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +31 -3
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +19 -1
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +16 -1
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +18 -2
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +31 -10
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +31 -3
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.d.ts +1 -1
- package/dist/backend/llvm/expr-records.js +124 -56
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +17 -0
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/js-groups.d.ts +21 -0
- package/dist/backend/llvm/js-groups.js +277 -0
- package/dist/backend/llvm/js-groups.js.map +1 -0
- package/dist/backend/llvm/js-ic.d.ts +19 -1
- package/dist/backend/llvm/js-ic.js +96 -23
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +132 -1
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +33 -6
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +44 -3
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +69 -2
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +32 -0
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/loop-state.js +7 -2
- package/dist/backend/llvm/loop-state.js.map +1 -1
- package/dist/backend/llvm/map-entry-fusion.d.ts +8 -0
- package/dist/backend/llvm/map-entry-fusion.js +3 -3
- package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +6 -6
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.js +7 -6
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.test.js +4 -1
- package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
- package/dist/backend/llvm/receivers.js +3 -0
- package/dist/backend/llvm/receivers.js.map +1 -1
- package/dist/backend/llvm/record-entry-fusion.d.ts +32 -0
- package/dist/backend/llvm/record-entry-fusion.js +217 -0
- package/dist/backend/llvm/record-entry-fusion.js.map +1 -0
- package/dist/backend/llvm/record-results.d.ts +5 -2
- package/dist/backend/llvm/record-results.js +13 -12
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/record-views.js +12 -6
- package/dist/backend/llvm/record-views.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +1 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +3 -0
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/region-ir.js +1 -0
- package/dist/backend/llvm/region-ir.js.map +1 -1
- package/dist/backend/llvm/region-sites.d.ts +18 -0
- package/dist/backend/llvm/region-sites.js +79 -1
- package/dist/backend/llvm/region-sites.js.map +1 -1
- package/dist/backend/llvm/runtime-registries.test.js +53 -6
- package/dist/backend/llvm/runtime-registries.test.js.map +1 -1
- package/dist/backend/llvm/serialized-ir-emission.test.js +3 -1
- package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +33 -3
- package/dist/backend/llvm/shapes.js +183 -13
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +1 -2
- package/dist/backend/llvm/stack-objects.js +8 -5
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +12 -0
- package/dist/backend/llvm/walkers.js +46 -2
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/may-throw.js +12 -2
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +13 -0
- package/dist/backend/may-throw.test.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +48 -8
- package/dist/backend/native/executable.js +55 -13
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/helper-identity-record.d.ts +11 -0
- package/dist/backend/native/helper-identity-record.js +76 -0
- package/dist/backend/native/helper-identity-record.js.map +1 -0
- package/dist/backend/native/helper-identity-record.test.d.ts +1 -0
- package/dist/backend/native/helper-identity-record.test.js +101 -0
- package/dist/backend/native/helper-identity-record.test.js.map +1 -0
- package/dist/backend/native/library.js +9 -1
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/runtime-inputs.js +4 -1
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native/vendor.d.ts +1 -1
- package/dist/backend/native/vendor.js +1 -1
- package/dist/backend/native/vendor.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +13 -10
- package/dist/backend/native-codegen-core.js +26 -13
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.js +27 -8
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +110 -14
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +37 -8
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/runtime-pack-core.d.ts +17 -2
- package/dist/backend/runtime-pack-core.js +18 -3
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +211 -2
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/tree-classes.d.ts +42 -0
- package/dist/backend/tree-classes.js +723 -0
- package/dist/backend/tree-classes.js.map +1 -0
- package/dist/backend/tree-classes.test.d.ts +1 -0
- package/dist/backend/tree-classes.test.js +338 -0
- package/dist/backend/tree-classes.test.js.map +1 -0
- package/dist/backend/vendor-archives.d.ts +5 -1
- package/dist/backend/vendor-archives.js +51 -7
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/backend/vendor-inputs.d.ts +25 -4
- package/dist/backend/vendor-inputs.js +68 -4
- package/dist/backend/vendor-inputs.js.map +1 -1
- package/dist/backend/vendor-inputs.test.js +35 -1
- package/dist/backend/vendor-inputs.test.js.map +1 -1
- package/dist/backend/warm-cache.js +1 -1
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/compat/fetch-profile.js +2 -2
- package/dist/coverage/report.js +47 -0
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +1 -1
- package/dist/diagnostics/codes.d.ts +8 -0
- package/dist/diagnostics/codes.js +8 -0
- package/dist/diagnostics/codes.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +27 -9
- package/dist/diagnostics/diagnostic.js +60 -19
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +18 -0
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +21 -2
- package/dist/executable/executable-cache.js +21 -1
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +123 -1
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +199 -248
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +200 -18
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/builtin-modules.d.ts +4 -0
- package/dist/frontend/builtin-modules.js +10 -0
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/early-errors.d.ts +12 -2
- package/dist/frontend/early-errors.js +535 -4
- package/dist/frontend/early-errors.js.map +1 -1
- package/dist/frontend/early-errors.test.js +165 -0
- package/dist/frontend/early-errors.test.js.map +1 -1
- package/dist/frontend/inferred-js-diagnostics.test.js +65 -0
- package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
- package/dist/frontend/jsx-opinion-sites.test.d.ts +1 -0
- package/dist/frontend/jsx-opinion-sites.test.js +86 -0
- package/dist/frontend/jsx-opinion-sites.test.js.map +1 -0
- package/dist/frontend/lib-exports.d.ts +23 -4
- package/dist/frontend/lib-exports.js +98 -26
- package/dist/frontend/lib-exports.js.map +1 -1
- package/dist/frontend/lowering/binding-analysis.js +21 -3
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/buffers.d.ts +8 -0
- package/dist/frontend/lowering/buffers.js +43 -0
- package/dist/frontend/lowering/buffers.js.map +1 -0
- package/dist/frontend/lowering/builtin-calls.js +4 -0
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtin-namespaces.d.ts +3 -2
- package/dist/frontend/lowering/builtin-namespaces.js +24 -3
- package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
- package/dist/frontend/lowering/builtin-statics.d.ts +24 -0
- package/dist/frontend/lowering/builtin-statics.js +407 -0
- package/dist/frontend/lowering/builtin-statics.js.map +1 -0
- package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
- package/dist/frontend/lowering/builtins/arguments.js +12 -0
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.d.ts +6 -1
- package/dist/frontend/lowering/builtins/atomics.js +87 -1
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.js +2 -2
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.d.ts +13 -0
- package/dist/frontend/lowering/builtins/child-process-sync.js +1 -13
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.d.ts +10 -4
- package/dist/frontend/lowering/builtins/child-process.js +560 -27
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/compression.d.ts +2 -2
- package/dist/frontend/lowering/builtins/compression.js +41 -21
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/constants.js +7 -2
- package/dist/frontend/lowering/builtins/constants.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +28 -2
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +4 -0
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +3 -1
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.d.ts +4 -1
- package/dist/frontend/lowering/builtins/numbers.js +10 -2
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.d.ts +6 -3
- package/dist/frontend/lowering/builtins/operating-system.js +96 -16
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +2 -2
- package/dist/frontend/lowering/builtins/process.js +103 -8
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +169 -8
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/properties.js +6 -2
- package/dist/frontend/lowering/builtins/properties.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +6 -4
- package/dist/frontend/lowering/builtins/readline.js +180 -36
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +35 -12
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/webassembly.js +2 -0
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.d.ts +10 -0
- package/dist/frontend/lowering/call-arguments.js +37 -2
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.d.ts +10 -0
- package/dist/frontend/lowering/call-signatures.js +103 -0
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +14 -2
- package/dist/frontend/lowering/class-construction.js +99 -5
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +9 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +1283 -1030
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +158 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.js +20 -15
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.d.ts +8 -0
- package/dist/frontend/lowering/class-runtime-statics.js +20 -1
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/class-unions.js +21 -4
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +9 -0
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/state.d.ts +8 -0
- package/dist/frontend/lowering/coercions/state.js +17 -0
- package/dist/frontend/lowering/coercions/state.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +20 -5
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +10 -1
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.d.ts +2 -1
- package/dist/frontend/lowering/coercions/unions.js +54 -10
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/constructor-returns.d.ts +23 -2
- package/dist/frontend/lowering/constructor-returns.js +284 -58
- package/dist/frontend/lowering/constructor-returns.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +156 -62
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +21 -3
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-from-async.js +139 -3
- package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
- package/dist/frontend/lowering/containers/array-iteration.d.ts +14 -4
- package/dist/frontend/lowering/containers/array-iteration.js +24 -7
- package/dist/frontend/lowering/containers/array-iteration.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +14 -11
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +6 -0
- package/dist/frontend/lowering/containers/bytes.js +446 -86
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.d.ts +5 -0
- package/dist/frontend/lowering/containers/callback-arguments.js +21 -12
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-grouping.js +421 -2
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +52 -17
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +23 -0
- package/dist/frontend/lowering/containers/iterator-helpers.js +176 -10
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.d.ts +5 -2
- package/dist/frontend/lowering/containers/string-and-regexp.js +45 -11
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
- package/dist/frontend/lowering/crypto-tables.js +5 -5
- package/dist/frontend/lowering/dispatch-sites.js +3 -0
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
- package/dist/frontend/lowering/divergences.d.ts +40 -0
- package/dist/frontend/lowering/divergences.js +239 -20
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/effect-free.d.ts +12 -0
- package/dist/frontend/lowering/effect-free.js +44 -0
- package/dist/frontend/lowering/effect-free.js.map +1 -0
- package/dist/frontend/lowering/expressions/array-literals.d.ts +10 -0
- package/dist/frontend/lowering/expressions/array-literals.js +62 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +115 -5
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +151 -7
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +15 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.js +54 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +31 -2
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.d.ts +3 -0
- package/dist/frontend/lowering/expressions/narrowing.js +175 -22
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +173 -11
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +5 -1
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +8 -0
- package/dist/frontend/lowering/expressions/property-access.js +379 -109
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +237 -7
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +8 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-fields.d.ts +20 -1
- package/dist/frontend/lowering/expressions/union-fields.js +103 -13
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +74 -55
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/function-returns.js +37 -10
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/general-streams.js +5 -0
- package/dist/frontend/lowering/general-streams.js.map +1 -1
- package/dist/frontend/lowering/generator-delegation.d.ts +15 -7
- package/dist/frontend/lowering/generator-delegation.js +301 -118
- package/dist/frontend/lowering/generator-delegation.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +27 -1
- package/dist/frontend/lowering/generic-functions.js +432 -18
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/global-function-values.d.ts +25 -0
- package/dist/frontend/lowering/global-function-values.js +193 -0
- package/dist/frontend/lowering/global-function-values.js.map +1 -0
- package/dist/frontend/lowering/global-values.d.ts +6 -4
- package/dist/frontend/lowering/global-values.js +24 -10
- package/dist/frontend/lowering/global-values.js.map +1 -1
- package/dist/frontend/lowering/host-global-values.d.ts +31 -0
- package/dist/frontend/lowering/host-global-values.js +121 -0
- package/dist/frontend/lowering/host-global-values.js.map +1 -0
- package/dist/frontend/lowering/host-globals.d.ts +74 -0
- package/dist/frontend/lowering/host-globals.js +344 -0
- package/dist/frontend/lowering/host-globals.js.map +1 -0
- package/dist/frontend/lowering/http2-constants.js +1 -1
- package/dist/frontend/lowering/iterator-adapters.js +46 -17
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/iterator-prototype.d.ts +30 -0
- package/dist/frontend/lowering/iterator-prototype.js +160 -0
- package/dist/frontend/lowering/iterator-prototype.js.map +1 -0
- package/dist/frontend/lowering/key-order-witness.js +43 -22
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +1 -0
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lib-boundary.js +11 -3
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +30 -15
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.d.ts +11 -0
- package/dist/frontend/lowering/lower-async-iteration.js +15 -0
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.js +11 -1
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +25 -0
- package/dist/frontend/lowering/lower-calls.js +929 -227
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.test.js +59 -16
- package/dist/frontend/lowering/lower-calls.test.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +20 -0
- package/dist/frontend/lowering/lower-classes.js +468 -44
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +6 -2
- package/dist/frontend/lowering/lower-event-emitter.js +253 -83
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +1 -1
- package/dist/frontend/lowering/lower-exprs.js +71 -20
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +25 -6
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +57 -10
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.d.ts +6 -0
- package/dist/frontend/lowering/lower-global-value.js +14 -5
- package/dist/frontend/lowering/lower-global-value.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +4 -0
- package/dist/frontend/lowering/lower-inspect.js +638 -64
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +48 -2
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.js +18 -0
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-island.js +16 -6
- package/dist/frontend/lowering/lower-node-island.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +303 -87
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.js +45 -0
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +14 -11
- package/dist/frontend/lowering/lower-stmts.js +270 -52
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +110 -27
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lower-url.js +6 -3
- package/dist/frontend/lowering/lower-url.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +227 -21
- package/dist/frontend/lowering/lowerer.js +651 -92
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +18 -0
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/lowering-facts.d.ts +110 -0
- package/dist/frontend/lowering/lowering-facts.js +323 -0
- package/dist/frontend/lowering/lowering-facts.js.map +1 -0
- package/dist/frontend/lowering/lowering-facts.test.d.ts +1 -0
- package/dist/frontend/lowering/lowering-facts.test.js +100 -0
- package/dist/frontend/lowering/lowering-facts.test.js.map +1 -0
- package/dist/frontend/lowering/nan-coded-reads.d.ts +27 -4
- package/dist/frontend/lowering/nan-coded-reads.js +112 -9
- package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
- package/dist/frontend/lowering/optional-arguments.d.ts +4 -0
- package/dist/frontend/lowering/optional-arguments.js +26 -2
- package/dist/frontend/lowering/optional-arguments.js.map +1 -1
- package/dist/frontend/lowering/partial-assertions.d.ts +0 -3
- package/dist/frontend/lowering/partial-assertions.js +9 -15
- package/dist/frontend/lowering/partial-assertions.js.map +1 -1
- package/dist/frontend/lowering/primitive-throws.d.ts +100 -0
- package/dist/frontend/lowering/primitive-throws.js +241 -0
- package/dist/frontend/lowering/primitive-throws.js.map +1 -0
- package/dist/frontend/lowering/primitive-wrappers.js +1 -0
- package/dist/frontend/lowering/primitive-wrappers.js.map +1 -1
- package/dist/frontend/lowering/record-inherited.d.ts +17 -1
- package/dist/frontend/lowering/record-inherited.js +16 -2
- package/dist/frontend/lowering/record-inherited.js.map +1 -1
- package/dist/frontend/lowering/record-links.d.ts +73 -0
- package/dist/frontend/lowering/record-links.js +797 -0
- package/dist/frontend/lowering/record-links.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-provenance.d.ts +27 -7
- package/dist/frontend/lowering/runtime-optional-provenance.js +25 -11
- package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-report.d.ts +40 -0
- package/dist/frontend/lowering/runtime-optional-report.js +300 -0
- package/dist/frontend/lowering/runtime-optional-report.js.map +1 -0
- package/dist/frontend/lowering/scoped-type-memo.test.d.ts +1 -0
- package/dist/frontend/lowering/scoped-type-memo.test.js +86 -0
- package/dist/frontend/lowering/scoped-type-memo.test.js.map +1 -0
- package/dist/frontend/lowering/static-typeof.d.ts +3 -1
- package/dist/frontend/lowering/static-typeof.js +6 -1
- package/dist/frontend/lowering/static-typeof.js.map +1 -1
- package/dist/frontend/lowering/strict-mode.d.ts +1 -5
- package/dist/frontend/lowering/strict-mode.js +4 -30
- package/dist/frontend/lowering/strict-mode.js.map +1 -1
- package/dist/frontend/lowering/structural-instances.d.ts +7 -0
- package/dist/frontend/lowering/structural-instances.js +23 -0
- package/dist/frontend/lowering/structural-instances.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +15 -1
- package/dist/frontend/lowering/surfaces.js +78 -10
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/union-retag.d.ts +13 -1
- package/dist/frontend/lowering/union-retag.js +55 -1
- package/dist/frontend/lowering/union-retag.js.map +1 -1
- package/dist/frontend/lowering/union-retag.test.js +51 -0
- package/dist/frontend/lowering/union-retag.test.js.map +1 -1
- package/dist/frontend/lowering/unit-journal.d.ts +8 -0
- package/dist/frontend/lowering/unit-journal.js +14 -0
- package/dist/frontend/lowering/unit-journal.js.map +1 -1
- package/dist/frontend/lowering/unit-journal.test.js +36 -1
- package/dist/frontend/lowering/unit-journal.test.js.map +1 -1
- package/dist/frontend/lowering/zlib-constants.js +3 -2
- package/dist/frontend/lowering/zlib-constants.js.map +1 -1
- package/dist/frontend/npm-static.js +78 -9
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm-static.test.js +95 -2
- package/dist/frontend/npm-static.test.js.map +1 -1
- package/dist/frontend/pipeline.d.ts +5 -4
- package/dist/frontend/pipeline.js +94 -31
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/pipeline.test.js +68 -11
- package/dist/frontend/pipeline.test.js.map +1 -1
- package/dist/frontend/program.d.ts +62 -2
- package/dist/frontend/program.js +695 -422
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +37 -1
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/services-node.d.ts +7 -0
- package/dist/frontend/services-node.js +32 -1
- package/dist/frontend/services-node.js.map +1 -1
- package/dist/frontend/services-node.test.js +51 -0
- package/dist/frontend/services-node.test.js.map +1 -1
- package/dist/frontend/shape-inference/overlay.js +68 -2
- package/dist/frontend/shape-inference/overlay.js.map +1 -1
- package/dist/frontend/tier-analysis.d.ts +9 -0
- package/dist/frontend/tier-analysis.js +1 -0
- package/dist/frontend/tier-analysis.js.map +1 -1
- package/dist/frontend/tsc-codes.d.ts +57 -3
- package/dist/frontend/tsc-codes.js +935 -150
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/tsc-codes.test.js +221 -12
- package/dist/frontend/tsc-codes.test.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +91 -9
- package/dist/frontend/type-mapper.js +622 -181
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +80 -15
- package/dist/index.js.map +1 -1
- package/dist/index.test.d.ts +1 -0
- package/dist/index.test.js +60 -0
- package/dist/index.test.js.map +1 -0
- package/dist/ir/builtin-effects.js +43 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +242 -16
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +3 -2
- package/dist/ir/callback-specialization.js +35 -25
- package/dist/ir/callback-specialization.js.map +1 -1
- package/dist/ir/capture-values.d.ts +8 -4
- package/dist/ir/capture-values.js +9 -6
- package/dist/ir/capture-values.js.map +1 -1
- package/dist/ir/char-unit-locals.d.ts +6 -2
- package/dist/ir/char-unit-locals.js +11 -2
- package/dist/ir/char-unit-locals.js.map +1 -1
- package/dist/ir/class-key-index.d.ts +18 -0
- package/dist/ir/class-key-index.js +29 -0
- package/dist/ir/class-key-index.js.map +1 -0
- package/dist/ir/class-key-index.test.d.ts +1 -0
- package/dist/ir/class-key-index.test.js +25 -0
- package/dist/ir/class-key-index.test.js.map +1 -0
- package/dist/ir/codec.generated.d.ts +1 -1
- package/dist/ir/codec.generated.js +724 -648
- package/dist/ir/codec.generated.js.map +1 -1
- package/dist/ir/constant-globals.d.ts +5 -2
- package/dist/ir/constant-globals.js +25 -27
- package/dist/ir/constant-globals.js.map +1 -1
- package/dist/ir/expression-inlining.d.ts +4 -2
- package/dist/ir/expression-inlining.js +8 -2
- package/dist/ir/expression-inlining.js.map +1 -1
- package/dist/ir/field-values.d.ts +5 -2
- package/dist/ir/field-values.js +32 -21
- package/dist/ir/field-values.js.map +1 -1
- package/dist/ir/fields.generated.d.ts +11 -2
- package/dist/ir/fields.generated.js +8 -0
- package/dist/ir/fields.generated.js.map +1 -1
- package/dist/ir/final-fields.js +1 -1
- package/dist/ir/final-fields.js.map +1 -1
- package/dist/ir/function-references.d.ts +5 -4
- package/dist/ir/function-references.js +7 -4
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +7 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/init-only-globals.d.ts +4 -2
- package/dist/ir/init-only-globals.js +17 -18
- package/dist/ir/init-only-globals.js.map +1 -1
- package/dist/ir/inline-array-views.js +1 -0
- package/dist/ir/inline-array-views.js.map +1 -1
- package/dist/ir/int32-slots.js +7 -0
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/ir.d.ts +59 -4
- package/dist/ir/ir.js +7 -0
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/js-groups.d.ts +51 -0
- package/dist/ir/js-groups.js +394 -0
- package/dist/ir/js-groups.js.map +1 -0
- package/dist/ir/js-groups.test.d.ts +1 -0
- package/dist/ir/js-groups.test.js +555 -0
- package/dist/ir/js-groups.test.js.map +1 -0
- package/dist/ir/js-ic.js +30 -5
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +27 -1
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/node-index.d.ts +23 -6
- package/dist/ir/node-index.js +126 -49
- package/dist/ir/node-index.js.map +1 -1
- package/dist/ir/numeric-call-specialization.d.ts +4 -2
- package/dist/ir/numeric-call-specialization.js +40 -26
- package/dist/ir/numeric-call-specialization.js.map +1 -1
- package/dist/ir/paired-while-loops.d.ts +4 -2
- package/dist/ir/paired-while-loops.js +8 -2
- package/dist/ir/paired-while-loops.js.map +1 -1
- package/dist/ir/parameter-versions.d.ts +13 -4
- package/dist/ir/parameter-versions.js +63 -42
- package/dist/ir/parameter-versions.js.map +1 -1
- package/dist/ir/property-bags.d.ts +4 -2
- package/dist/ir/property-bags.js +22 -17
- package/dist/ir/property-bags.js.map +1 -1
- package/dist/ir/row-pairs.d.ts +4 -2
- package/dist/ir/row-pairs.js +12 -11
- package/dist/ir/row-pairs.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +87 -12
- package/dist/ir/runtime-features.js +263 -160
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/runtime-features.test.js +109 -139
- package/dist/ir/runtime-features.test.js.map +1 -1
- package/dist/ir/runtime-jam-loops.d.ts +35 -0
- package/dist/ir/runtime-jam-loops.js +604 -0
- package/dist/ir/runtime-jam-loops.js.map +1 -0
- package/dist/ir/runtime-jam-loops.test.d.ts +1 -0
- package/dist/ir/runtime-jam-loops.test.js +565 -0
- package/dist/ir/runtime-jam-loops.test.js.map +1 -0
- package/dist/ir/saturating-loop-jams.d.ts +4 -2
- package/dist/ir/saturating-loop-jams.js +11 -10
- package/dist/ir/saturating-loop-jams.js.map +1 -1
- package/dist/ir/scalar-records.d.ts +5 -2
- package/dist/ir/scalar-records.js +12 -2
- package/dist/ir/scalar-records.js.map +1 -1
- package/dist/ir/self-captures.d.ts +4 -2
- package/dist/ir/self-captures.js +32 -27
- package/dist/ir/self-captures.js.map +1 -1
- package/dist/ir/serialize.d.ts +6 -1
- package/dist/ir/serialize.js +87 -23
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.js +26 -0
- package/dist/ir/serialize.test.js.map +1 -1
- package/dist/ir/tiers.js +1 -0
- package/dist/ir/tiers.js.map +1 -1
- package/dist/ir/traverse.js +4 -0
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/typed-argument-clones.d.ts +30 -0
- package/dist/ir/typed-argument-clones.js +789 -0
- package/dist/ir/typed-argument-clones.js.map +1 -0
- package/dist/ir/union-arm-loops.d.ts +3 -0
- package/dist/ir/union-arm-loops.js +373 -0
- package/dist/ir/union-arm-loops.js.map +1 -0
- package/dist/ir/union-arm-loops.test.d.ts +1 -0
- package/dist/ir/union-arm-loops.test.js +230 -0
- package/dist/ir/union-arm-loops.test.js.map +1 -0
- package/dist/ir/validate.js +88 -18
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/compiler-self-identity.d.ts +8 -2
- package/dist/library/compiler-self-identity.js +92 -18
- package/dist/library/compiler-self-identity.js.map +1 -1
- package/dist/library/compiler-self-identity.test.js +150 -3
- package/dist/library/compiler-self-identity.test.js.map +1 -1
- package/dist/library/int-infer.d.ts +5 -0
- package/dist/library/int-infer.js +15 -3
- package/dist/library/int-infer.js.map +1 -1
- package/dist/library/ir-policy.js +1 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.d.ts +4 -0
- package/dist/library/library-cache.js +2 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +26 -0
- package/dist/library/library-cache.test.js.map +1 -1
- package/dist/library/prepare.js +99 -31
- package/dist/library/prepare.js.map +1 -1
- package/dist/native/cache.d.ts +7 -0
- package/dist/native/cache.js +47 -0
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cache.test.js +13 -1
- package/dist/native/cache.test.js.map +1 -1
- package/dist/native/cli.js +1 -1
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +18 -3
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/executable-cache-open.test.js +31 -5
- package/dist/native/executable-cache-open.test.js.map +1 -1
- package/dist/native/executable-cache.d.ts +6 -1
- package/dist/native/executable-cache.js +7 -1
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/prepare.d.ts +3 -0
- package/dist/native/prepare.js +43 -26
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +25 -3
- package/dist/native/prepare.test.js.map +1 -1
- package/dist/native/sanitizer.js +10 -1
- package/dist/native/sanitizer.js.map +1 -1
- package/dist/native/sanitizer.test.js +7 -2
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/node-islands/boundary.d.ts +12 -0
- package/dist/node-islands/boundary.js +38 -6
- package/dist/node-islands/boundary.js.map +1 -1
- package/dist/node-islands/boundary.test.d.ts +1 -0
- package/dist/node-islands/boundary.test.js +76 -0
- package/dist/node-islands/boundary.test.js.map +1 -0
- package/dist/node-islands/detect.d.ts +9 -0
- package/dist/node-islands/detect.js +110 -0
- package/dist/node-islands/detect.js.map +1 -1
- package/dist/node-islands/detect.test.js +24 -0
- package/dist/node-islands/detect.test.js.map +1 -1
- package/dist/node-islands/graph-islands.d.ts +40 -0
- package/dist/node-islands/graph-islands.js +128 -0
- package/dist/node-islands/graph-islands.js.map +1 -0
- package/dist/node-islands/growth.d.ts +57 -0
- package/dist/node-islands/growth.js +205 -0
- package/dist/node-islands/growth.js.map +1 -0
- package/dist/node-islands/report.d.ts +12 -0
- package/dist/node-islands/report.js +28 -0
- package/dist/node-islands/report.js.map +1 -1
- package/dist/node-islands/report.test.js +2 -0
- package/dist/node-islands/report.test.js.map +1 -1
- package/dist/node-islands/rules.js +5 -0
- package/dist/node-islands/rules.js.map +1 -1
- package/dist/node-islands/scan.d.ts +11 -2
- package/dist/node-islands/scan.js +61 -9
- package/dist/node-islands/scan.js.map +1 -1
- package/dist/wasm/translate.js +11 -5
- package/dist/wasm/translate.js.map +1 -1
- package/dist/wasm/translate.test.js +35 -0
- package/dist/wasm/translate.test.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +184 -117
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/* Object guard groups, the backend half (shape-tier design 3.3; the plan
|
|
2
|
+
* is ir/js-groups.ts, the record scr_js_group_probe in scr_js_object.c).
|
|
3
|
+
*
|
|
4
|
+
* A group is a run of constant-key reads on one subject inside one
|
|
5
|
+
* statement. Today each read is its own cache site: kind test, layout test,
|
|
6
|
+
* entry compares, slot load. The group tests the subject's layout once and
|
|
7
|
+
* answers every member from one entry that holds all the group's slots:
|
|
8
|
+
*
|
|
9
|
+
* guard k = obj+8; k == OBJ else no entry
|
|
10
|
+
* L = obj+80; L != null else probe
|
|
11
|
+
* L == @sc_js_group_N+0 -> entry 0
|
|
12
|
+
* L == @sc_js_group_N+16 -> entry 1
|
|
13
|
+
* else scr_js_group_probe(obj, @keys, K, @sc_js_group_N) (cold)
|
|
14
|
+
* member entry == null ? the site's helper : slots[i] for i = entry->slot[k]
|
|
15
|
+
*
|
|
16
|
+
* A member after a clobbering operation (one that may run user code, which
|
|
17
|
+
* can change the subject's layout) rechecks the layout against its entry
|
|
18
|
+
* first and takes the helper when it moved. The guard is emitted at the
|
|
19
|
+
* group's first member and every later member reuses its entry value, so
|
|
20
|
+
* the plan's membership must match emission order; a member whose position
|
|
21
|
+
* does not follow the last one emitted takes its plain site. */
|
|
22
|
+
import { DYN, STRING } from "../../ir/ir.js";
|
|
23
|
+
import { emitBorrowedInput } from "./borrowed-inputs.js";
|
|
24
|
+
import { DYN_KIND } from "./dyn.js";
|
|
25
|
+
import { asResult, gep, helperCall, jsIcSiteOf, kindIs, load } from "./js-ic.js";
|
|
26
|
+
import { JS_BITS } from "./jsval-encoding.js";
|
|
27
|
+
/** Words of one ScrJsGroup record: four entries of 16 bytes, then count
|
|
28
|
+
* and next (scr_js.h). */
|
|
29
|
+
export const JS_GROUP_WORDS = 9;
|
|
30
|
+
/** How many entries the guard compares inline. Two is the site's inline
|
|
31
|
+
* way count (js-ic.ts): a group guards the same ties a site does. */
|
|
32
|
+
const GUARD_WAYS = 2;
|
|
33
|
+
/** Bytes between two entries of a record. */
|
|
34
|
+
const WAY_BYTES = 16;
|
|
35
|
+
/** Bytes of an entry's slot bytes, at the entry's start. */
|
|
36
|
+
const SLOT_BASE = 8;
|
|
37
|
+
/** ScrDyn object fields (js-ic.ts). */
|
|
38
|
+
const OBJECT_SLOTS = 32;
|
|
39
|
+
const OBJECT_LAYOUT = 80;
|
|
40
|
+
/** The result of a grouped read of `e`, or null when `e` is not a member
|
|
41
|
+
* whose guard is in effect and the plain site path must answer. */
|
|
42
|
+
export function emitGroupedGet(host, e, callee) {
|
|
43
|
+
const member = host.jsGroupPlan?.member(e);
|
|
44
|
+
if (member === undefined)
|
|
45
|
+
return null;
|
|
46
|
+
if (jsIcSiteOf(host, e) === null)
|
|
47
|
+
return null;
|
|
48
|
+
const group = member.group;
|
|
49
|
+
const receiver = emitBorrowedInput(host, e.args[0]);
|
|
50
|
+
let run = host.groupRuns.get(group);
|
|
51
|
+
if (member.position === 0) {
|
|
52
|
+
run = { entry: emitGuard(host, receiver.name, group, e), next: 0 };
|
|
53
|
+
host.groupRuns.set(group, run);
|
|
54
|
+
}
|
|
55
|
+
else if (run === undefined || run.next !== member.position) {
|
|
56
|
+
// A member emitted out of order (or without its guard) reads through
|
|
57
|
+
// its own site: the plan's entry does not dominate it.
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
run.next = member.position + 1;
|
|
61
|
+
return emitMember(host, e, callee, receiver, run.entry, member);
|
|
62
|
+
}
|
|
63
|
+
/** Emits the guard of `group` on `receiver` in the current block and
|
|
64
|
+
* answers the entry value it found (a record address, or null). */
|
|
65
|
+
function emitGuard(host, receiver, group, e) {
|
|
66
|
+
const B = host.B;
|
|
67
|
+
const record = host.jsGroup();
|
|
68
|
+
const keys = host.jsGroupKeys(group.keys.map((key) => keyString(host, key, e)));
|
|
69
|
+
const join = B.newLabel("grp.j");
|
|
70
|
+
const none = B.newLabel("grp.none");
|
|
71
|
+
const shaped = B.newLabel("grp.shape");
|
|
72
|
+
kindIs(host, receiver, DYN_KIND.OBJ, shaped, none);
|
|
73
|
+
B.startBlock(shaped);
|
|
74
|
+
const layout = load(host, "ptr", receiver, OBJECT_LAYOUT);
|
|
75
|
+
const present = B.tmp();
|
|
76
|
+
B.line(`${present} = icmp ne ptr ${layout}, null`);
|
|
77
|
+
const ways = [];
|
|
78
|
+
const hits = [];
|
|
79
|
+
const probes = [];
|
|
80
|
+
for (let way = 0; way < GUARD_WAYS; way++) {
|
|
81
|
+
ways.push(B.newLabel("grp.w"));
|
|
82
|
+
hits.push(B.newLabel("grp.hit"));
|
|
83
|
+
}
|
|
84
|
+
const miss = B.newLabel("grp.miss");
|
|
85
|
+
B.condBr(present, ways[0], miss);
|
|
86
|
+
const incoming = [];
|
|
87
|
+
for (let way = 0; way < GUARD_WAYS; way++) {
|
|
88
|
+
B.startBlock(ways[way]);
|
|
89
|
+
const cached = load(host, "ptr", record, way * WAY_BYTES);
|
|
90
|
+
const same = B.tmp();
|
|
91
|
+
B.line(`${same} = icmp eq ptr ${cached}, ${layout}`);
|
|
92
|
+
B.condBr(same, hits[way], way + 1 < GUARD_WAYS ? ways[way + 1] : miss);
|
|
93
|
+
B.startBlock(hits[way]);
|
|
94
|
+
incoming.push(`[ ${gep(host, record, way * WAY_BYTES)}, %${B.currentLabel()} ]`);
|
|
95
|
+
B.br(join);
|
|
96
|
+
}
|
|
97
|
+
B.startBlock(none);
|
|
98
|
+
probes.push(`[ null, %${B.currentLabel()} ]`);
|
|
99
|
+
B.br(join);
|
|
100
|
+
B.startBlock(miss);
|
|
101
|
+
// The probe answers the layouts the guard does not know, and refuses
|
|
102
|
+
// every object whose layout lacks one of the group's keys.
|
|
103
|
+
host.declare(`declare ptr @scr_js_group_probe(ptr, ptr, i32, ptr)`);
|
|
104
|
+
const probed = B.tmp();
|
|
105
|
+
B.line(`${probed} = call ptr @scr_js_group_probe(ptr ${receiver}, ptr ${keys}, i32 ${group.keys.length}, ptr ${record}) cold`);
|
|
106
|
+
probes.push(`[ ${probed}, %${B.currentLabel()} ]`);
|
|
107
|
+
B.br(join);
|
|
108
|
+
B.startBlock(join);
|
|
109
|
+
const entry = B.tmp();
|
|
110
|
+
B.line(`${entry} = phi ptr ${[...incoming, ...probes].join(", ")}`);
|
|
111
|
+
return entry;
|
|
112
|
+
}
|
|
113
|
+
/** Emits one grouped read of `member` through `entry`, with the site's
|
|
114
|
+
* helper as the fallback. */
|
|
115
|
+
function emitMember(host, e, callee, receiver, entry, member) {
|
|
116
|
+
const B = host.B;
|
|
117
|
+
const fast = B.newLabel("grp.fast");
|
|
118
|
+
const slow = B.newLabel("grp.slow");
|
|
119
|
+
const join = B.newLabel("grp.j");
|
|
120
|
+
const ready = B.tmp();
|
|
121
|
+
B.line(`${ready} = icmp ne ptr ${entry}, null`);
|
|
122
|
+
B.condBr(ready, fast, slow);
|
|
123
|
+
const incoming = [];
|
|
124
|
+
B.startBlock(fast);
|
|
125
|
+
if (member.recheck) {
|
|
126
|
+
// A clobbering operation may have run user code since the guard: the
|
|
127
|
+
// entry answers for the subject only while its layout still holds.
|
|
128
|
+
const now = load(host, "ptr", receiver.name, OBJECT_LAYOUT);
|
|
129
|
+
const entryLayout = load(host, "ptr", entry, 0);
|
|
130
|
+
const same = B.tmp();
|
|
131
|
+
B.line(`${same} = icmp eq ptr ${now}, ${entryLayout}`);
|
|
132
|
+
const read = B.newLabel("grp.read");
|
|
133
|
+
B.condBr(same, read, slow);
|
|
134
|
+
B.startBlock(read);
|
|
135
|
+
}
|
|
136
|
+
const slots = load(host, "ptr", receiver.name, OBJECT_SLOTS);
|
|
137
|
+
const index = load(host, "i8", entry, SLOT_BASE + member.index);
|
|
138
|
+
const wide = B.tmp();
|
|
139
|
+
B.line(`${wide} = zext i8 ${index} to i64`);
|
|
140
|
+
const address = B.tmp();
|
|
141
|
+
B.line(`${address} = getelementptr inbounds ptr, ptr ${slots}, i64 ${wide}`);
|
|
142
|
+
const cell = load(host, "ptr", address, 0);
|
|
143
|
+
incoming.push(`[ ${asResult(host, cell, e, false)}, %${B.currentLabel()} ]`);
|
|
144
|
+
B.br(join);
|
|
145
|
+
B.startBlock(slow);
|
|
146
|
+
incoming.push(`[ ${helperCall(host, e, callee, [receiver])}, %${B.currentLabel()} ]`);
|
|
147
|
+
B.br(join);
|
|
148
|
+
B.startBlock(join);
|
|
149
|
+
const value = B.tmp();
|
|
150
|
+
B.line(`${value} = phi ptr ${incoming.join(", ")}`);
|
|
151
|
+
return host.own({ name: value, type: e.type });
|
|
152
|
+
}
|
|
153
|
+
function keyString(host, key, e) {
|
|
154
|
+
return host.emitExpr({ kind: "strLit", value: key, type: STRING, loc: e.loc }).name;
|
|
155
|
+
}
|
|
156
|
+
/** The result of a grouped store of `e`, or null when `e` is not a member
|
|
157
|
+
* whose guard is in effect and the plain site path must answer. The store's
|
|
158
|
+
* receiver and value are already evaluated: a member read inside the stored
|
|
159
|
+
* value comes before the store in the group's order.
|
|
160
|
+
*
|
|
161
|
+
* The grouped store is the site's fast branch: the guard has established
|
|
162
|
+
* that the subject is a layout-mode object whose layout holds every key of
|
|
163
|
+
* the group, so the store replaces an existing slot and the shape stays.
|
|
164
|
+
* The value is a static primitive, which the parse region treats as inert,
|
|
165
|
+
* so no write barrier can fire either. */
|
|
166
|
+
export function emitGroupedSet(host, e, callee, receiver, word, value) {
|
|
167
|
+
const member = host.jsGroupPlan?.member(e);
|
|
168
|
+
if (member === undefined || !member.store)
|
|
169
|
+
return null;
|
|
170
|
+
if (jsIcSiteOf(host, e) === null)
|
|
171
|
+
return null;
|
|
172
|
+
const B = host.B;
|
|
173
|
+
const group = member.group;
|
|
174
|
+
const open = host.groupRuns.get(group);
|
|
175
|
+
// A member whose guard is not in effect (emitted out of order, or
|
|
176
|
+
// without its guard) stores through its own site.
|
|
177
|
+
if (member.position !== 0 && (open === undefined || open.next !== member.position))
|
|
178
|
+
return null;
|
|
179
|
+
let entry;
|
|
180
|
+
if (member.position === 0) {
|
|
181
|
+
entry = emitGuard(host, receiver.name, group, e);
|
|
182
|
+
host.groupRuns.set(group, { entry, next: 0 });
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
entry = open.entry;
|
|
186
|
+
}
|
|
187
|
+
host.groupRuns.get(group).next = member.position + 1;
|
|
188
|
+
// The cell the cold path passes to the helper is boxed lazily there.
|
|
189
|
+
let boxedSlot = null;
|
|
190
|
+
if (word !== null) {
|
|
191
|
+
boxedSlot = B.slot();
|
|
192
|
+
B.entryAllocas.push(`${boxedSlot} = alloca ptr`);
|
|
193
|
+
B.line(`store ptr null, ptr ${boxedSlot}`);
|
|
194
|
+
host.ownSlot(boxedSlot, DYN);
|
|
195
|
+
}
|
|
196
|
+
const fast = B.newLabel("grp.fast");
|
|
197
|
+
const slow = B.newLabel("grp.slow");
|
|
198
|
+
const join = B.newLabel("grp.j");
|
|
199
|
+
if (word !== null)
|
|
200
|
+
host.declare(`declare ptr @scr_js_to_dyn_borrow(ptr)`);
|
|
201
|
+
const ready = B.tmp();
|
|
202
|
+
B.line(`${ready} = icmp ne ptr ${entry}, null`);
|
|
203
|
+
B.condBr(ready, fast, slow);
|
|
204
|
+
B.startBlock(fast);
|
|
205
|
+
if (member.recheck) {
|
|
206
|
+
// A clobbering operation may have run user code since the guard: the
|
|
207
|
+
// entry answers for the subject only while its layout still holds.
|
|
208
|
+
const now = load(host, "ptr", receiver.name, OBJECT_LAYOUT);
|
|
209
|
+
const entryLayout = load(host, "ptr", entry, 0);
|
|
210
|
+
const same = B.tmp();
|
|
211
|
+
B.line(`${same} = icmp eq ptr ${now}, ${entryLayout}`);
|
|
212
|
+
const write = B.newLabel("grp.write");
|
|
213
|
+
B.condBr(same, write, slow);
|
|
214
|
+
B.startBlock(write);
|
|
215
|
+
}
|
|
216
|
+
const slots = load(host, "ptr", receiver.name, OBJECT_SLOTS);
|
|
217
|
+
const index = load(host, "i8", entry, SLOT_BASE + member.index);
|
|
218
|
+
const wide = B.tmp();
|
|
219
|
+
B.line(`${wide} = zext i8 ${index} to i64`);
|
|
220
|
+
const address = B.tmp();
|
|
221
|
+
B.line(`${address} = getelementptr inbounds ptr, ptr ${slots}, i64 ${wide}`);
|
|
222
|
+
const old = B.tmp();
|
|
223
|
+
B.line(`${old} = load ptr, ptr ${address}`);
|
|
224
|
+
if (word === null) {
|
|
225
|
+
B.line(`store ptr ${host.retainHeap(value.name, DYN)}, ptr ${address}`);
|
|
226
|
+
host.releaseHeap(old, DYN);
|
|
227
|
+
B.br(join);
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
// A new number replaces the value of an unshared number cell in place;
|
|
231
|
+
// any other value is boxed, and the store takes the box.
|
|
232
|
+
const bits = B.tmp();
|
|
233
|
+
const isDouble = B.tmp();
|
|
234
|
+
B.line(`${bits} = ptrtoint ptr ${word} to i64`);
|
|
235
|
+
B.line(`${isDouble} = icmp ult i64 ${bits}, ${JS_BITS.limit}`);
|
|
236
|
+
const number = B.newLabel("grp.dbl");
|
|
237
|
+
const box = B.newLabel("grp.box");
|
|
238
|
+
B.condBr(isDouble, number, box);
|
|
239
|
+
B.startBlock(number);
|
|
240
|
+
const oldKind = load(host, "i32", old, 8);
|
|
241
|
+
const oldRc = load(host, "i64", old, 0);
|
|
242
|
+
const isNumber = B.tmp();
|
|
243
|
+
const unshared = B.tmp();
|
|
244
|
+
const inPlace = B.tmp();
|
|
245
|
+
B.line(`${isNumber} = icmp eq i32 ${oldKind}, ${DYN_KIND.NUM}`);
|
|
246
|
+
B.line(`${unshared} = icmp eq i64 ${oldRc}, 1`);
|
|
247
|
+
B.line(`${inPlace} = and i1 ${isNumber}, ${unshared}`);
|
|
248
|
+
const update = B.newLabel("grp.inplace");
|
|
249
|
+
B.condBr(inPlace, update, box);
|
|
250
|
+
B.startBlock(update);
|
|
251
|
+
const d = B.tmp();
|
|
252
|
+
B.line(`${d} = bitcast i64 ${bits} to double`);
|
|
253
|
+
B.line(`store double ${d}, ptr ${gep(host, old, 16)}`);
|
|
254
|
+
B.br(join);
|
|
255
|
+
B.startBlock(box);
|
|
256
|
+
const cell = B.tmp();
|
|
257
|
+
B.line(`${cell} = call ptr @scr_js_to_dyn_borrow(ptr ${word})`);
|
|
258
|
+
B.line(`store ptr ${cell}, ptr ${address}`);
|
|
259
|
+
host.releaseHeap(old, DYN);
|
|
260
|
+
B.br(join);
|
|
261
|
+
}
|
|
262
|
+
B.startBlock(slow);
|
|
263
|
+
let cell;
|
|
264
|
+
if (word !== null) {
|
|
265
|
+
cell = B.tmp();
|
|
266
|
+
B.line(`${cell} = call ptr @scr_js_to_dyn_borrow(ptr ${word})`);
|
|
267
|
+
B.line(`store ptr ${cell}, ptr ${boxedSlot}`);
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
cell = value.name;
|
|
271
|
+
}
|
|
272
|
+
helperCall(host, e, callee, [receiver, { name: cell, type: DYN }]);
|
|
273
|
+
B.br(join);
|
|
274
|
+
B.startBlock(join);
|
|
275
|
+
return { name: "", type: e.type };
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=js-groups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"js-groups.js","sourceRoot":"","sources":["../../../src/backend/llvm/js-groups.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type IrFunction } from "../../ir/ir.js";
|
|
1
|
+
import { type IrExpr, type IrFunction } from "../../ir/ir.js";
|
|
2
2
|
import { type JsIcSite } from "../../ir/js-ic.js";
|
|
3
3
|
import type { ExprOf, LlValue, LlvmEmitterContext } from "./expr-context.js";
|
|
4
4
|
type Host = LlvmEmitterContext;
|
|
@@ -9,6 +9,24 @@ export declare const JS_IC_WORDS = 21;
|
|
|
9
9
|
export declare function jsIcSiteOf(host: Host, e: ExprOf<"call">): JsIcSite | null;
|
|
10
10
|
/** Whether method dispatch in the current function reads through a cache. */
|
|
11
11
|
export declare function jsIcMethods(host: Host): boolean;
|
|
12
|
+
export declare function gep(host: Host, base: string, offset: number): string;
|
|
13
|
+
export declare function load(host: Host, type: string, base: string, offset: number): string;
|
|
14
|
+
/** Branches to `yes` when the dyn cell `d` has kind `kind`. */
|
|
15
|
+
export declare function kindIs(host: Host, d: string, kind: number, yes: string, no: string): void;
|
|
16
|
+
/** The attribution way count `SCRIPTC_DEBUG_JS_IC_WAYS` asks for, or null
|
|
17
|
+
* when the variable is unset. The value changes emitted code, so the build
|
|
18
|
+
* cache keys on it (executable/executable-cache.ts). */
|
|
19
|
+
export declare function debugJsIcWays(env?: NodeJS.ProcessEnv): 0 | 1 | 2 | null;
|
|
20
|
+
/** A property value (a dyn cell, `owned` or borrowed from its entry) as
|
|
21
|
+
* the site's result type, owned. A jsval result reads a number cell as an
|
|
22
|
+
* immediate, so arithmetic on it takes no reference and a later store can
|
|
23
|
+
* update an unshared number cell in place; any other cell is carried under
|
|
24
|
+
* the cell tag. */
|
|
25
|
+
export declare function asResult(host: Host, cell: string, e: IrExpr, owned: boolean | string): string;
|
|
26
|
+
/** The helper call of a site's slow path, with the site's evaluated
|
|
27
|
+
* (borrowed) arguments. Ordinary parameters take a reference; borrowed
|
|
28
|
+
* ones lend it. Returns the owned result, or "" for a void helper. */
|
|
29
|
+
export declare function helperCall(host: Host, e: ExprOf<"call">, callee: IrFunction, args: LlValue[]): string;
|
|
12
30
|
/** A class instance's answer that a method dispatch helper gives by
|
|
13
31
|
* calling one compiled method: the branch `if (dyn.typedRefIs(p, KEY)) {
|
|
14
32
|
* M(R, p1, ..., pn); return [js.fromDyn](p) }` of a method that returns
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
* read slot `slot` inline; otherwise scr_js_get_probe
|
|
9
9
|
* (polymorphic, prototype hits, absent keys, misses)
|
|
10
10
|
* store ordinary object whose layout is entry 0's replace layout,
|
|
11
|
-
* outside an intact parse region
|
|
11
|
+
* outside an intact parse region (or storing an inert value,
|
|
12
|
+
* which leaves a region intact): replace inline; otherwise
|
|
12
13
|
* scr_js_store_probe (adds, polymorphic, misses)
|
|
13
14
|
* keyed dense array element at an integral number key: inline;
|
|
14
15
|
* otherwise scr_js_keyed_probe (string keys of ordinary objects)
|
|
@@ -33,6 +34,7 @@
|
|
|
33
34
|
* ScrJsIc entries of 40 bytes {layout, target, holder,
|
|
34
35
|
* holder_layout, slot}; 168 bytes in all */
|
|
35
36
|
import { BOOL, DYN, F64, STRING } from "../../ir/ir.js";
|
|
37
|
+
import { inertValue } from "../../ir/js-groups.js";
|
|
36
38
|
import { jsIcMethodSites } from "../../ir/js-ic.js";
|
|
37
39
|
import { mangleBorrowedFunction } from "../mangle.js";
|
|
38
40
|
import { emitBorrowedInput } from "./borrowed-inputs.js";
|
|
@@ -40,6 +42,7 @@ import { classFieldBase, classFieldIndex } from "./classes.js";
|
|
|
40
42
|
import { DYN_KIND } from "./dyn.js";
|
|
41
43
|
import { dispatchesCall } from "./integer-clones.js";
|
|
42
44
|
import { JS_BITS } from "./jsval-encoding.js";
|
|
45
|
+
import { emitGroupedGet, emitGroupedSet } from "./js-groups.js";
|
|
43
46
|
import { jsImmediates } from "./jsval.js";
|
|
44
47
|
/** Words of one ScrJsIc record. */
|
|
45
48
|
export const JS_IC_WORDS = 21;
|
|
@@ -58,18 +61,18 @@ export function jsIcMethods(host) {
|
|
|
58
61
|
host.currentTier === "dynamic" &&
|
|
59
62
|
jsIcMethodSites(host.currentFunctionName, host.loopDepth > 0));
|
|
60
63
|
}
|
|
61
|
-
function gep(host, base, offset) {
|
|
64
|
+
export function gep(host, base, offset) {
|
|
62
65
|
const p = host.B.tmp();
|
|
63
66
|
host.B.line(`${p} = getelementptr inbounds i8, ptr ${base}, i64 ${offset}`);
|
|
64
67
|
return p;
|
|
65
68
|
}
|
|
66
|
-
function load(host, type, base, offset) {
|
|
69
|
+
export function load(host, type, base, offset) {
|
|
67
70
|
const v = host.B.tmp();
|
|
68
71
|
host.B.line(`${v} = load ${type}, ptr ${offset === 0 ? base : gep(host, base, offset)}`);
|
|
69
72
|
return v;
|
|
70
73
|
}
|
|
71
74
|
/** Branches to `yes` when the dyn cell `d` has kind `kind`. */
|
|
72
|
-
function kindIs(host, d, kind, yes, no) {
|
|
75
|
+
export function kindIs(host, d, kind, yes, no) {
|
|
73
76
|
const k = load(host, "i32", d, 8);
|
|
74
77
|
const is = host.B.tmp();
|
|
75
78
|
host.B.line(`${is} = icmp eq i32 ${k}, ${kind}`);
|
|
@@ -85,8 +88,29 @@ function kindIs(host, d, kind, yes, no) {
|
|
|
85
88
|
* they made the run 13% faster than one entry, and 26% faster without its
|
|
86
89
|
* class instances; four were no faster than two. So a site tests entries
|
|
87
90
|
* 0 and 1, own or prototype, and its probe does the rest. (0 makes every access probe: with a runtime
|
|
88
|
-
* built with SCR_JS_VERIFY, that probes every access.)
|
|
89
|
-
|
|
91
|
+
* built with SCR_JS_VERIFY, that probes every access.)
|
|
92
|
+
*
|
|
93
|
+
* SCRIPTC_DEBUG_JS_IC_WAYS=0|1|2 overrides the count for an attribution run,
|
|
94
|
+
* where every access should reach the probe so that the runtime entry points
|
|
95
|
+
* can count it; the value is read once, so one build is one way count. */
|
|
96
|
+
/** The attribution way count `SCRIPTC_DEBUG_JS_IC_WAYS` asks for, or null
|
|
97
|
+
* when the variable is unset. The value changes emitted code, so the build
|
|
98
|
+
* cache keys on it (executable/executable-cache.ts). */
|
|
99
|
+
export function debugJsIcWays(env = process.env) {
|
|
100
|
+
const raw = env["SCRIPTC_DEBUG_JS_IC_WAYS"];
|
|
101
|
+
if (raw === undefined || raw === "")
|
|
102
|
+
return null;
|
|
103
|
+
const ways = Number(raw);
|
|
104
|
+
if (ways !== 0 && ways !== 1 && ways !== 2)
|
|
105
|
+
throw new Error(`SCRIPTC_DEBUG_JS_IC_WAYS must be 0, 1 or 2, got ${raw}`);
|
|
106
|
+
return ways;
|
|
107
|
+
}
|
|
108
|
+
const IC_WAYS_DEBUG = debugJsIcWays();
|
|
109
|
+
const INLINE_WAYS = IC_WAYS_DEBUG ?? 2;
|
|
110
|
+
/* An attribution run gives an object literal's member stores their own probe
|
|
111
|
+
* entry point, so a profile can split them from other stores. With the
|
|
112
|
+
* variable unset the emitted code calls scr_js_store_probe as before. */
|
|
113
|
+
const LITERAL_PROBE = IC_WAYS_DEBUG === null ? "scr_js_store_probe" : "scr_js_literal_probe";
|
|
90
114
|
const INLINE_PROTO = true;
|
|
91
115
|
/** The address of slot `slot` of layout-mode object `d`. */
|
|
92
116
|
function slotAt(host, d, slot) {
|
|
@@ -199,7 +223,7 @@ function inlineReplace(host, d, ic, ways, store, miss) {
|
|
|
199
223
|
* immediate, so arithmetic on it takes no reference and a later store can
|
|
200
224
|
* update an unshared number cell in place; any other cell is carried under
|
|
201
225
|
* the cell tag. */
|
|
202
|
-
function asResult(host, cell, e, owned) {
|
|
226
|
+
export function asResult(host, cell, e, owned) {
|
|
203
227
|
const B = host.B;
|
|
204
228
|
/** Retains the cell unless the caller owns it. */
|
|
205
229
|
const hold = () => {
|
|
@@ -268,7 +292,7 @@ function asResult(host, cell, e, owned) {
|
|
|
268
292
|
/** The helper call of a site's slow path, with the site's evaluated
|
|
269
293
|
* (borrowed) arguments. Ordinary parameters take a reference; borrowed
|
|
270
294
|
* ones lend it. Returns the owned result, or "" for a void helper. */
|
|
271
|
-
function helperCall(host, e, callee, args) {
|
|
295
|
+
export function helperCall(host, e, callee, args) {
|
|
272
296
|
const B = host.B;
|
|
273
297
|
const borrowed = host.callLifetimes.borrowed.get(e.callee);
|
|
274
298
|
const argList = args
|
|
@@ -313,7 +337,7 @@ function capsuleReads(host, helper) {
|
|
|
313
337
|
if (receiver === undefined || helper.params.length !== 1)
|
|
314
338
|
return [];
|
|
315
339
|
const reads = new Map();
|
|
316
|
-
for (const stmt of helper.body) {
|
|
340
|
+
for (const stmt of tableBranches(helper.body)) {
|
|
317
341
|
if (normalizes(stmt, receiver))
|
|
318
342
|
continue;
|
|
319
343
|
if (stmt.kind !== "if" || stmt.else_ !== null)
|
|
@@ -346,6 +370,29 @@ function capsuleReads(host, helper) {
|
|
|
346
370
|
}
|
|
347
371
|
return out;
|
|
348
372
|
}
|
|
373
|
+
/** A class table's branches in the order a receiver that matches none of
|
|
374
|
+
* them reaches their guards: the statements of the body, with a
|
|
375
|
+
* `dyn.classHash` switch replaced by its cases' branches. A capsule whose
|
|
376
|
+
* key is a branch's selects that case, whose guard is then true, so the
|
|
377
|
+
* site can treat the branches as the chain they were lowered from. */
|
|
378
|
+
function tableBranches(body) {
|
|
379
|
+
if (!body.some(isClassHashSwitch))
|
|
380
|
+
return body;
|
|
381
|
+
const branches = [];
|
|
382
|
+
for (const stmt of body) {
|
|
383
|
+
if (isClassHashSwitch(stmt))
|
|
384
|
+
for (const { body: caseBody } of stmt.cases)
|
|
385
|
+
branches.push(...caseBody);
|
|
386
|
+
else
|
|
387
|
+
branches.push(stmt);
|
|
388
|
+
}
|
|
389
|
+
return branches;
|
|
390
|
+
}
|
|
391
|
+
/** The switch the compiler builds over a generated class table's branches
|
|
392
|
+
* (frontend/lowering/class-dynamic-dispatch.ts). */
|
|
393
|
+
function isClassHashSwitch(stmt) {
|
|
394
|
+
return stmt.kind === "switch" && stmt.disc.kind === "libCall" && stmt.disc.fn === "dyn.classHash";
|
|
395
|
+
}
|
|
349
396
|
/** `p = %dyn.class.normalize(p)`. */
|
|
350
397
|
function normalizes(stmt, receiver) {
|
|
351
398
|
return (stmt.kind === "assign" &&
|
|
@@ -401,7 +448,7 @@ function normalizationTargets(host) {
|
|
|
401
448
|
const value = normalize.params[0]?.localId;
|
|
402
449
|
if (value === undefined)
|
|
403
450
|
return null;
|
|
404
|
-
for (const stmt of normalize.body) {
|
|
451
|
+
for (const stmt of tableBranches(normalize.body)) {
|
|
405
452
|
if (stmt.kind === "return") {
|
|
406
453
|
if (stmt.value !== null && isLocal(stmt.value, value))
|
|
407
454
|
continue;
|
|
@@ -538,7 +585,7 @@ export function capsuleCallSite(host, e, helper) {
|
|
|
538
585
|
return null;
|
|
539
586
|
const branches = new Map();
|
|
540
587
|
const self = params[0].localId;
|
|
541
|
-
for (const stmt of helper.body) {
|
|
588
|
+
for (const stmt of tableBranches(helper.body)) {
|
|
542
589
|
if (normalizes(stmt, self))
|
|
543
590
|
continue;
|
|
544
591
|
if (stmt.kind !== "if" || stmt.else_ !== null)
|
|
@@ -578,7 +625,7 @@ export function capsuleCallSite(host, e, helper) {
|
|
|
578
625
|
function callbackKeys(callback) {
|
|
579
626
|
const value = callback.params[0].localId;
|
|
580
627
|
const keys = new Set();
|
|
581
|
-
const body = callback.body;
|
|
628
|
+
const body = tableBranches(callback.body);
|
|
582
629
|
for (let i = 0; i < body.length; i++) {
|
|
583
630
|
const stmt = body[i];
|
|
584
631
|
if (normalizes(stmt, value))
|
|
@@ -800,6 +847,11 @@ export function emitJsIcCall(host, e, callee, site) {
|
|
|
800
847
|
}
|
|
801
848
|
}
|
|
802
849
|
function emitGet(host, e, callee, key) {
|
|
850
|
+
// A member of a guard group reads through the group's entry (js-groups.ts)
|
|
851
|
+
// unless its guard is not in effect here.
|
|
852
|
+
const grouped = emitGroupedGet(host, e, callee);
|
|
853
|
+
if (grouped !== null)
|
|
854
|
+
return grouped;
|
|
803
855
|
const B = host.B;
|
|
804
856
|
const receiver = emitBorrowedInput(host, e.args[0]);
|
|
805
857
|
const name = keyString(host, key, e);
|
|
@@ -894,17 +946,31 @@ function numberResult(host, d, e) {
|
|
|
894
946
|
B.line(`${cell} = call ptr @scr_dyn_new_num(double ${d})`);
|
|
895
947
|
return cell;
|
|
896
948
|
}
|
|
949
|
+
/** The jsval word of a store's value when the jsval pass left one: the
|
|
950
|
+
* operand of `js.toDyn`. The word of a double is its bits with NaN
|
|
951
|
+
* canonicalized, the same word the pass carries for it. */
|
|
952
|
+
function storeWord(host, value) {
|
|
953
|
+
if (value.kind === "libCall" && value.fn === "js.toDyn")
|
|
954
|
+
return host.emitExpr(value.args[0]).name;
|
|
955
|
+
return null;
|
|
956
|
+
}
|
|
897
957
|
function emitSet(host, e, callee, key) {
|
|
898
958
|
const B = host.B;
|
|
899
959
|
const receiver = emitBorrowedInput(host, e.args[0]);
|
|
900
960
|
// A value the jsval pass left as `js.toDyn(x)` is stored from the jsval
|
|
901
|
-
// itself: a number replaces the value of an unshared number cell in
|
|
902
|
-
//
|
|
961
|
+
// itself: a number replaces the value of an unshared number cell in place
|
|
962
|
+
// instead of boxing a new one, and the generic path boxes it only where it
|
|
963
|
+
// must store a cell.
|
|
903
964
|
const stored = e.args[1];
|
|
904
|
-
const word =
|
|
905
|
-
? host.emitExpr(stored.args[0]).name
|
|
906
|
-
: null;
|
|
965
|
+
const word = storeWord(host, stored);
|
|
907
966
|
const value = word === null ? emitBorrowedInput(host, stored) : null;
|
|
967
|
+
// A member of a guard group stores through the group's entry
|
|
968
|
+
// (js-groups.ts) unless its guard is not in effect here. Its operands are
|
|
969
|
+
// already evaluated: a member read inside the stored value comes first in
|
|
970
|
+
// the group's order.
|
|
971
|
+
const grouped = emitGroupedSet(host, e, callee, receiver, word, value);
|
|
972
|
+
if (grouped !== null)
|
|
973
|
+
return grouped;
|
|
908
974
|
const name = keyString(host, key, e);
|
|
909
975
|
const ic = host.jsIcSite();
|
|
910
976
|
const object = B.newLabel("ics.obj");
|
|
@@ -922,11 +988,18 @@ function emitSet(host, e, callee, key) {
|
|
|
922
988
|
}
|
|
923
989
|
kindIs(host, receiver.name, DYN_KIND.OBJ, object, probe);
|
|
924
990
|
B.startBlock(object);
|
|
925
|
-
const region = load(host, "ptr", receiver.name, 72);
|
|
926
|
-
const outside = B.tmp();
|
|
927
|
-
B.line(`${outside} = icmp eq ptr ${region}, null`);
|
|
928
991
|
const unshared = B.newLabel("ics.r");
|
|
929
|
-
|
|
992
|
+
if (inertValue(stored)) {
|
|
993
|
+
// An inert value leaves a parse region intact, so the barrier the probe
|
|
994
|
+
// applies behind the region test cannot fire: the replace stays inline.
|
|
995
|
+
B.br(unshared);
|
|
996
|
+
}
|
|
997
|
+
else {
|
|
998
|
+
const region = load(host, "ptr", receiver.name, 72);
|
|
999
|
+
const outside = B.tmp();
|
|
1000
|
+
B.line(`${outside} = icmp eq ptr ${region}, null`);
|
|
1001
|
+
B.condBr(outside, unshared, probe);
|
|
1002
|
+
}
|
|
930
1003
|
B.startBlock(unshared);
|
|
931
1004
|
host.declare(`declare ptr @scr_js_to_dyn_borrow(ptr)`);
|
|
932
1005
|
inlineReplace(host, receiver.name, ic, INLINE_WAYS, (slot) => {
|
|
@@ -1258,9 +1331,9 @@ function emitKeyed(host, e, callee) {
|
|
|
1258
1331
|
export function emitJsIcLiteralMember(host, obj, key, value) {
|
|
1259
1332
|
const B = host.B;
|
|
1260
1333
|
const ic = host.jsIcSite();
|
|
1261
|
-
host.declare(`declare zeroext i1
|
|
1334
|
+
host.declare(`declare zeroext i1 @${LITERAL_PROBE}(ptr, ptr, ptr, ptr)`);
|
|
1262
1335
|
const done = B.tmp();
|
|
1263
|
-
B.line(`${done} = call zeroext i1
|
|
1336
|
+
B.line(`${done} = call zeroext i1 @${LITERAL_PROBE}(ptr ${obj}, ptr ${key}, ptr ${value}, ptr ${ic})`);
|
|
1264
1337
|
const slow = B.newLabel("icl.slow");
|
|
1265
1338
|
const join = B.newLabel("icl.j");
|
|
1266
1339
|
B.condBr(done, join, slow);
|