@scriptc/compiler 0.3.1 → 0.3.3
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 +832 -55
- package/dist/backend/cycle-analysis.js +6 -1
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/executable-features.js +1 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/literals.d.ts +7 -0
- package/dist/backend/literals.js +32 -0
- package/dist/backend/literals.js.map +1 -1
- package/dist/backend/literals.test.js +17 -1
- package/dist/backend/literals.test.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +15 -4
- package/dist/backend/llvm/alloc.js +63 -25
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/alloc.test.js +62 -2
- package/dist/backend/llvm/alloc.test.js.map +1 -1
- package/dist/backend/llvm/appended-array-literals.d.ts +2 -0
- package/dist/backend/llvm/appended-array-literals.js +109 -0
- package/dist/backend/llvm/appended-array-literals.js.map +1 -0
- package/dist/backend/llvm/appended-array-literals.test.d.ts +1 -0
- package/dist/backend/llvm/appended-array-literals.test.js +90 -0
- package/dist/backend/llvm/appended-array-literals.test.js.map +1 -0
- package/dist/backend/llvm/array-search.d.ts +8 -0
- package/dist/backend/llvm/array-search.js +52 -0
- package/dist/backend/llvm/array-search.js.map +1 -0
- package/dist/backend/llvm/array-search.test.d.ts +1 -0
- package/dist/backend/llvm/array-search.test.js +72 -0
- package/dist/backend/llvm/array-search.test.js.map +1 -0
- package/dist/backend/llvm/call-lifetimes.d.ts +11 -1
- package/dist/backend/llvm/call-lifetimes.js +74 -4
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +54 -0
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/classes.js +97 -38
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +2 -2
- package/dist/backend/llvm/common.d.ts +1 -1
- package/dist/backend/llvm/common.js +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +5 -0
- package/dist/backend/llvm/dense-array-access.js +18 -13
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +15 -2
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +6 -0
- package/dist/backend/llvm/dyn.js +84 -11
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +108 -16
- package/dist/backend/llvm/emitter.js +598 -108
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +26 -3
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +174 -7
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +11 -0
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.d.ts +8 -0
- package/dist/backend/llvm/expr-callbacks.js +96 -2
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +12 -1
- package/dist/backend/llvm/expr-calls.js +133 -54
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +7 -0
- package/dist/backend/llvm/expr-containers.js +80 -22
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +2 -0
- package/dist/backend/llvm/expr-control.d.ts +8 -0
- package/dist/backend/llvm/expr-control.js +103 -69
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +21 -10
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.d.ts +7 -0
- package/dist/backend/llvm/expr-primitives.js +53 -51
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +19 -5
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.d.ts +8 -0
- package/dist/backend/llvm/expr-stream-bridges.js +111 -39
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +49 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +13 -2
- package/dist/backend/llvm/expr-stream-callbacks.js +80 -5
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/inline-unions.d.ts +48 -0
- package/dist/backend/llvm/inline-unions.js +134 -0
- package/dist/backend/llvm/inline-unions.js.map +1 -0
- package/dist/backend/llvm/inline-unions.test.d.ts +1 -0
- package/dist/backend/llvm/inline-unions.test.js +124 -0
- package/dist/backend/llvm/inline-unions.test.js.map +1 -0
- package/dist/backend/llvm/int32-abi.d.ts +18 -2
- package/dist/backend/llvm/int32-abi.js +23 -2
- package/dist/backend/llvm/int32-abi.js.map +1 -1
- package/dist/backend/llvm/int32-abi.test.js +75 -1
- package/dist/backend/llvm/int32-abi.test.js.map +1 -1
- package/dist/backend/llvm/integer-remainder.d.ts +28 -5
- package/dist/backend/llvm/integer-remainder.js +80 -9
- package/dist/backend/llvm/integer-remainder.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +170 -28
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +181 -5
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +9 -6
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +2 -2
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +208 -9
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +97 -0
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +12 -6
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +6 -3
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.d.ts +26 -2
- package/dist/backend/llvm/local-union-storage.js +132 -12
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +107 -1
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/loop-array-borrows.d.ts +8 -2
- package/dist/backend/llvm/loop-array-borrows.js +93 -13
- package/dist/backend/llvm/loop-array-borrows.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.d.ts +20 -0
- package/dist/backend/llvm/map-number-lookup.js +66 -0
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.d.ts +1 -0
- package/dist/backend/llvm/map-number-lookup.test.js +102 -0
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -0
- package/dist/backend/llvm/map-read-lifetimes.js +1 -0
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +4 -0
- package/dist/backend/llvm/publish.js +3 -1
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/record-results.d.ts +29 -0
- package/dist/backend/llvm/record-results.js +260 -0
- package/dist/backend/llvm/record-results.js.map +1 -0
- package/dist/backend/llvm/reference-effects.js +15 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +29 -9
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/regions.d.ts +68 -0
- package/dist/backend/llvm/regions.js +314 -0
- package/dist/backend/llvm/regions.js.map +1 -0
- package/dist/backend/llvm/regions.test.d.ts +1 -0
- package/dist/backend/llvm/regions.test.js +173 -0
- package/dist/backend/llvm/regions.test.js.map +1 -0
- package/dist/backend/llvm/serialized-ir-emission.test.js +2 -0
- package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +86 -13
- package/dist/backend/llvm/shapes.js +208 -54
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +68 -9
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/split-loops.js +1 -1
- package/dist/backend/llvm/split-loops.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +29 -0
- package/dist/backend/llvm/stack-objects.js +142 -0
- package/dist/backend/llvm/stack-objects.js.map +1 -0
- package/dist/backend/llvm/stack-objects.test.d.ts +1 -0
- package/dist/backend/llvm/stack-objects.test.js +255 -0
- package/dist/backend/llvm/stack-objects.test.js.map +1 -0
- package/dist/backend/llvm/string-reads.d.ts +4 -1
- package/dist/backend/llvm/string-reads.js +89 -9
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/switch-dispatch.js +5 -4
- package/dist/backend/llvm/switch-dispatch.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +13 -0
- package/dist/backend/llvm/walkers.js +108 -10
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/may-throw.js +10 -4
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +7 -2
- package/dist/backend/native/executable.js +28 -2
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +1 -1
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +3 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +1 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +1 -1
- package/dist/backend/native-toolchain.test.js.map +1 -1
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-core.d.ts +1 -0
- package/dist/backend/runtime-pack-core.js +1 -0
- 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.test.js +1 -1
- package/dist/backend/target-diagnostics.js +17 -0
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +16 -0
- package/dist/backend/target-diagnostics.test.js.map +1 -1
- package/dist/compat/fetch-profile.js +4 -4
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/contracts/check.js +2 -0
- package/dist/contracts/check.js.map +1 -1
- package/dist/coverage/report.js +1 -1
- package/dist/coverage/report.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +6 -5
- package/dist/diagnostics/diagnostic.js +7 -6
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +1 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/frontend/builtin-modules.d.ts +1 -1
- package/dist/frontend/builtin-modules.js +1 -0
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/comptime-node.js +2 -2
- package/dist/frontend/comptime-node.js.map +1 -1
- package/dist/frontend/experimental-import.d.ts +12 -0
- package/dist/frontend/experimental-import.js +63 -0
- package/dist/frontend/experimental-import.js.map +1 -0
- package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
- package/dist/frontend/lowering/binding-analysis.js +1 -1
- package/dist/frontend/lowering/builtin-calls.d.ts +6 -1
- package/dist/frontend/lowering/builtin-calls.js +36 -0
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
- package/dist/frontend/lowering/builtins/arguments.js +8 -4
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/blob.d.ts +20 -0
- package/dist/frontend/lowering/builtins/blob.js +167 -0
- package/dist/frontend/lowering/builtins/blob.js.map +1 -0
- package/dist/frontend/lowering/builtins/child-process-async.d.ts +2 -2
- package/dist/frontend/lowering/builtins/child-process-async.js +2 -2
- package/dist/frontend/lowering/builtins/child-process-methods.js +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/compression.js +3 -2
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/console.d.ts +16 -6
- package/dist/frontend/lowering/builtins/console.js +33 -9
- package/dist/frontend/lowering/builtins/console.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.js +415 -120
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.js +20 -0
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +10 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +89 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.d.ts +16 -7
- package/dist/frontend/lowering/builtins/filesystem.js +97 -15
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-glob.d.ts +23 -0
- package/dist/frontend/lowering/builtins/fs-glob.js +224 -0
- package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -0
- package/dist/frontend/lowering/builtins/json.d.ts +2 -2
- package/dist/frontend/lowering/builtins/json.js +13 -4
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/key-object.d.ts +13 -0
- package/dist/frontend/lowering/builtins/key-object.js +56 -0
- package/dist/frontend/lowering/builtins/key-object.js.map +1 -0
- package/dist/frontend/lowering/builtins/module-calls.js +60 -12
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.d.ts +1 -0
- package/dist/frontend/lowering/builtins/numbers.js +17 -0
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.d.ts +18 -0
- package/dist/frontend/lowering/builtins/operating-system.js +361 -1
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/performance.d.ts +25 -3
- package/dist/frontend/lowering/builtins/performance.js +340 -5
- package/dist/frontend/lowering/builtins/performance.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +2 -2
- package/dist/frontend/lowering/builtins/process.js +122 -17
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +109 -2
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/properties.d.ts +0 -7
- package/dist/frontend/lowering/builtins/properties.js +39 -11
- package/dist/frontend/lowering/builtins/properties.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +23 -8
- package/dist/frontend/lowering/builtins/readline.js +266 -90
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.d.ts +3 -4
- package/dist/frontend/lowering/builtins/text-codecs.js +3 -4
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.d.ts +8 -0
- package/dist/frontend/lowering/builtins/url.js +36 -0
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.js +1 -1
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +20 -2
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/checked-promise-all.d.ts +10 -3
- package/dist/frontend/lowering/checked-promise-all.js +52 -6
- package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +8 -3
- package/dist/frontend/lowering/class-dynamic-dispatch.js +159 -32
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-protocol-dispatch.d.ts +45 -0
- package/dist/frontend/lowering/class-protocol-dispatch.js +516 -0
- package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -0
- package/dist/frontend/lowering/coercions/structural-plans.js +2 -1
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +3 -3
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/collation-repertoire.js +6 -5
- package/dist/frontend/lowering/collation-repertoire.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +33 -6
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +8 -4
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.d.ts +0 -7
- package/dist/frontend/lowering/containers/array-methods.js +43 -2
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.js +38 -26
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/for-of.d.ts +1 -1
- package/dist/frontend/lowering/containers/for-of.js +5 -1
- package/dist/frontend/lowering/containers/for-of.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +91 -0
- 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 +77 -12
- package/dist/frontend/lowering/crypto-tables.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.d.ts +18 -2
- package/dist/frontend/lowering/cycle-initialization.js +166 -12
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.js +7 -2
- 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/expressions/nullish-assignment.js +10 -0
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +21 -68
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/generator-delegation.d.ts +8 -0
- package/dist/frontend/lowering/generator-delegation.js +231 -10
- package/dist/frontend/lowering/generator-delegation.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +2 -2
- package/dist/frontend/lowering/generic-functions.js +2 -2
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/http2-constants.js +1 -1
- package/dist/frontend/lowering/lifetime-regions.d.ts +11 -0
- package/dist/frontend/lowering/lifetime-regions.js +216 -0
- package/dist/frontend/lowering/lifetime-regions.js.map +1 -0
- package/dist/frontend/lowering/lower-array-sort.d.ts +40 -3
- package/dist/frontend/lowering/lower-array-sort.js +661 -194
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.test.js +103 -4
- package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +2 -2
- package/dist/frontend/lowering/lower-async-iteration.d.ts +6 -3
- package/dist/frontend/lowering/lower-async-iteration.js +248 -2
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +173 -111
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +12 -5
- package/dist/frontend/lowering/lower-classes.js +156 -11
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-comptime.d.ts +1 -1
- package/dist/frontend/lowering/lower-comptime.js +4 -4
- package/dist/frontend/lowering/lower-comptime.js.map +1 -1
- package/dist/frontend/lowering/lower-console.d.ts +13 -0
- package/dist/frontend/lowering/lower-console.js +460 -4
- package/dist/frontend/lowering/lower-console.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +6 -0
- package/dist/frontend/lowering/lower-event-emitter.js +124 -38
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-event-target.d.ts +63 -0
- package/dist/frontend/lowering/lower-event-target.js +362 -0
- package/dist/frontend/lowering/lower-event-target.js.map +1 -0
- package/dist/frontend/lowering/lower-expando.js +2 -2
- package/dist/frontend/lowering/lower-exprs.js +247 -42
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.d.ts +15 -7
- package/dist/frontend/lowering/lower-generators.js +183 -99
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +8 -1
- package/dist/frontend/lowering/lower-inspect.js +247 -28
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.js +1 -1
- package/dist/frontend/lowering/lower-modules.d.ts +1 -1
- package/dist/frontend/lowering/lower-modules.js +27 -17
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +2 -2
- package/dist/frontend/lowering/lower-namespaces.js +2 -2
- package/dist/frontend/lowering/lower-server.js +39 -14
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +11 -1
- package/dist/frontend/lowering/lower-stdlib.js +45 -4
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +2 -2
- package/dist/frontend/lowering/lower-stmts.js +112 -23
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +234 -22
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +45 -6
- package/dist/frontend/lowering/lowerer.js +360 -48
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.js +2 -2
- package/dist/frontend/lowering/native-ffi.js.map +1 -1
- package/dist/frontend/lowering/regex-span-reads.d.ts +12 -0
- package/dist/frontend/lowering/regex-span-reads.js +164 -0
- package/dist/frontend/lowering/regex-span-reads.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-records.d.ts +115 -0
- package/dist/frontend/lowering/runtime-optional-records.js +715 -0
- package/dist/frontend/lowering/runtime-optional-records.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-records.test.d.ts +1 -0
- package/dist/frontend/lowering/runtime-optional-records.test.js +175 -0
- package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +7 -3
- package/dist/frontend/lowering/surfaces.js +385 -32
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/var-hoisting.d.ts +3 -0
- package/dist/frontend/lowering/var-hoisting.js +261 -0
- package/dist/frontend/lowering/var-hoisting.js.map +1 -0
- package/dist/frontend/module-syntax.d.ts +1 -1
- package/dist/frontend/module-syntax.js +1 -1
- package/dist/frontend/npm-static-prune.js +1 -1
- package/dist/frontend/npm-static-prune.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-syntax.js +4 -3
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
- package/dist/frontend/pipeline.js +6 -4
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program.d.ts +6 -5
- package/dist/frontend/program.js +42 -22
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +13 -0
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/resolve.js +1 -1
- package/dist/frontend/ts7/adapter.js +1 -1
- package/dist/frontend/ts7/ast-bytes.d.ts +1 -1
- package/dist/frontend/ts7/ast-bytes.js +1 -1
- package/dist/frontend/ts7/semantic-json.d.ts +1 -1
- package/dist/frontend/ts7/semantic-json.js +1 -1
- package/dist/frontend/ts7/semantic-json.js.map +1 -1
- package/dist/frontend/ts7/world-check.js +1 -1
- package/dist/frontend/tsc-codes.js +2 -2
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +28 -1
- package/dist/frontend/type-mapper.js +288 -30
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.d.ts +12 -6
- package/dist/ir/analysis.js +26 -10
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/analysis.test.js +15 -3
- package/dist/ir/analysis.test.js.map +1 -1
- package/dist/ir/builtin-effects.js +108 -2
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +436 -53
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/function-references.test.js +1 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/int32-slots.js +2 -0
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/intrinsic-signatures.js +2 -0
- package/dist/ir/intrinsic-signatures.js.map +1 -1
- package/dist/ir/ir.d.ts +129 -36
- package/dist/ir/ir.js +42 -1
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +1 -0
- package/dist/ir/runtime-features.js +116 -5
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/scalar-records.js +1 -2
- package/dist/ir/scalar-records.js.map +1 -1
- package/dist/ir/serialize.js +1 -1
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/traverse.js +1 -0
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +250 -34
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +125 -0
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/fence-eval.d.ts +1 -1
- package/dist/library/fence-eval.js +5 -4
- package/dist/library/fence-eval.js.map +1 -1
- package/dist/library/ir-policy.js +11 -4
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-profile.js +13 -13
- package/dist/library/library-profile.js.map +1 -1
- package/dist/library/prepare.js +1 -1
- package/dist/library/prepare.js.map +1 -1
- package/dist/library/sidecar.js +3 -3
- package/dist/library/sidecar.js.map +1 -1
- package/dist/native/prepare.js +3 -2
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.test.js +1 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +537 -142
|
@@ -3,10 +3,12 @@ import { InternalCompilerError } from "../../errors.js";
|
|
|
3
3
|
import * as ts from "../ts7/adapter.js";
|
|
4
4
|
import { unsignedHex } from "../../format-integer.js";
|
|
5
5
|
import { isJsSourceFile } from "../program.js";
|
|
6
|
-
import { BOOL, DYN, F64, RUNTIME_ERROR_CLASSES, STRING, UNDEFINED_T, canConvertToDyn, canDynCheckTo, recordTextCodecClass, shapeHasAccessorSlots, typeKey, } from "../../ir/ir.js";
|
|
6
|
+
import { BOOL, DYN, F64, RUNTIME_ERROR_CLASSES, STRING, UNDEFINED_T, VOID, canConvertToDyn, canDynCheckTo, isDirentShape, isDynTypedRefType, recordTextCodecClass, shapeHasAccessorSlots, typeKey, } from "../../ir/ir.js";
|
|
7
7
|
import { isSafeToRepeat } from "./expressions/evaluation-safety.js";
|
|
8
8
|
import { symbolFieldDisplayName } from "./symbol-fields.js";
|
|
9
|
+
import { eventTargetRootOf } from "./lower-event-target.js";
|
|
9
10
|
import { lowerSystemErrorMap } from "./lower-system-errors.js";
|
|
11
|
+
import { isPerfEntryType, perfEntryJson } from "./builtins/performance.js";
|
|
10
12
|
/* ── IR construction shorthand ───────────────────────────────────────── */
|
|
11
13
|
function concatAll(parts, loc) {
|
|
12
14
|
if (parts.length === 0)
|
|
@@ -20,7 +22,7 @@ function concatAll(parts, loc) {
|
|
|
20
22
|
/* ── property-name rendering (compile-time keys) ─────────────────────── */
|
|
21
23
|
/** strEscape's quote ladder over a COMPILE-TIME string (record field
|
|
22
24
|
* names, format-string chunks never pass through here — only keys).
|
|
23
|
-
* Mirrors scr_inspect.c's insp_quote_into
|
|
25
|
+
* Mirrors scr_inspect.c's insp_quote_into exactly. */
|
|
24
26
|
function inspectQuote(s) {
|
|
25
27
|
const hasSingle = s.includes("'");
|
|
26
28
|
const quote = !hasSingle
|
|
@@ -185,13 +187,35 @@ function inspectSupport(lowerer, t, visiting, out) {
|
|
|
185
187
|
const info = lowerer.classes.get(t.className);
|
|
186
188
|
if (!info)
|
|
187
189
|
return `class '${t.className}' has no inspect lowering`;
|
|
190
|
+
// EventTarget and Event subclasses render through Node's inspectors
|
|
191
|
+
// for those classes (the runtime's capsule view).
|
|
192
|
+
if (eventTargetRootOf(info) !== null)
|
|
193
|
+
return null;
|
|
188
194
|
if (isErrorClass(lowerer, t.className)) {
|
|
189
195
|
return errorRenderable(info)
|
|
190
196
|
? null
|
|
191
197
|
: "error subclasses with declared fields have no inspect lowering yet (the extra own properties are runtime-dynamic)";
|
|
192
198
|
}
|
|
199
|
+
// A class with subclasses renders through its checked-dynamic view,
|
|
200
|
+
// which names the instance's own class and holds its own fields.
|
|
193
201
|
if (info.subclasses.length > 0) {
|
|
194
|
-
|
|
202
|
+
if (!isDynTypedRefType(t) || visiting.has(t.className))
|
|
203
|
+
return null;
|
|
204
|
+
visiting.add(t.className);
|
|
205
|
+
const hierarchy = (current) => [
|
|
206
|
+
current,
|
|
207
|
+
...current.subclasses.flatMap(hierarchy),
|
|
208
|
+
];
|
|
209
|
+
for (const member of hierarchy(info))
|
|
210
|
+
for (const f of member.def.fields) {
|
|
211
|
+
if (f.name.startsWith("#") || f.name.startsWith("%"))
|
|
212
|
+
continue;
|
|
213
|
+
const why = inspectSupport(lowerer, f.type, visiting, out);
|
|
214
|
+
if (why !== null)
|
|
215
|
+
return why;
|
|
216
|
+
}
|
|
217
|
+
visiting.delete(t.className);
|
|
218
|
+
return null;
|
|
195
219
|
}
|
|
196
220
|
if (visiting.has(t.className)) {
|
|
197
221
|
out.recursive = true;
|
|
@@ -241,6 +265,20 @@ function isNumberFlag(lowerer, t, v, loc) {
|
|
|
241
265
|
* with the depth budget `depth` — a direct scalar libCall or a call of
|
|
242
266
|
* the interned per-type helper. */
|
|
243
267
|
export function inspectExpr(lowerer, t, value, recurse, depth, loc) {
|
|
268
|
+
// A Dirent row renders through its dyn view: Node's `Dirent { ... }`
|
|
269
|
+
// with the Symbol(type) key.
|
|
270
|
+
if (t.kind === "record") {
|
|
271
|
+
const shape = lowerer.shapes.get(t.shapeId);
|
|
272
|
+
if (shape && isDirentShape(shape)) {
|
|
273
|
+
return {
|
|
274
|
+
kind: "libCall",
|
|
275
|
+
fn: "insp.dyn",
|
|
276
|
+
args: [lowerer.coerceToExpected(value, DYN), recurse, depth],
|
|
277
|
+
type: STRING,
|
|
278
|
+
loc,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
}
|
|
244
282
|
switch (t.kind) {
|
|
245
283
|
case "f64":
|
|
246
284
|
return { kind: "libCall", fn: "insp.f64", args: [value], type: STRING, loc };
|
|
@@ -265,6 +303,15 @@ export function inspectExpr(lowerer, t, value, recurse, depth, loc) {
|
|
|
265
303
|
case "dyn":
|
|
266
304
|
return { kind: "libCall", fn: "insp.dyn", args: [value, recurse, depth], type: STRING, loc };
|
|
267
305
|
case "object":
|
|
306
|
+
if (eventTargetRootOf(lowerer.classes.get(t.className)) !== null) {
|
|
307
|
+
return {
|
|
308
|
+
kind: "libCall",
|
|
309
|
+
fn: "insp.dyn",
|
|
310
|
+
args: [lowerer.coerceToExpected(value, DYN), recurse, depth],
|
|
311
|
+
type: STRING,
|
|
312
|
+
loc,
|
|
313
|
+
};
|
|
314
|
+
}
|
|
268
315
|
if (isErrorClass(lowerer, t.className)) {
|
|
269
316
|
return {
|
|
270
317
|
kind: "libCall",
|
|
@@ -274,6 +321,15 @@ export function inspectExpr(lowerer, t, value, recurse, depth, loc) {
|
|
|
274
321
|
loc,
|
|
275
322
|
};
|
|
276
323
|
}
|
|
324
|
+
if (lowerer.classes.get(t.className)?.subclasses.length) {
|
|
325
|
+
return {
|
|
326
|
+
kind: "libCall",
|
|
327
|
+
fn: "insp.dyn",
|
|
328
|
+
args: [lowerer.coerceToExpected(value, DYN), recurse, depth],
|
|
329
|
+
type: STRING,
|
|
330
|
+
loc,
|
|
331
|
+
};
|
|
332
|
+
}
|
|
277
333
|
return {
|
|
278
334
|
kind: "call",
|
|
279
335
|
callee: inspectHelper(lowerer, t, loc),
|
|
@@ -599,6 +655,66 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
599
655
|
type,
|
|
600
656
|
loc,
|
|
601
657
|
});
|
|
658
|
+
if (isPerfEntryType(lowerer, t)) {
|
|
659
|
+
// PerformanceEntry's custom inspect: `[PerformanceMark]` past the
|
|
660
|
+
// depth budget, otherwise the class name and a nested inspect of
|
|
661
|
+
// toJSON() one level shallower, in its own context.
|
|
662
|
+
const className = {
|
|
663
|
+
kind: "ternary",
|
|
664
|
+
cond: {
|
|
665
|
+
kind: "strEq",
|
|
666
|
+
negated: false,
|
|
667
|
+
left: get("entryType", STRING),
|
|
668
|
+
right: strLit("mark", loc),
|
|
669
|
+
type: BOOL,
|
|
670
|
+
loc,
|
|
671
|
+
},
|
|
672
|
+
then: strLit("PerformanceMark", loc),
|
|
673
|
+
else_: strLit("PerformanceMeasure", loc),
|
|
674
|
+
type: STRING,
|
|
675
|
+
loc,
|
|
676
|
+
};
|
|
677
|
+
const json = perfEntryJson(lowerer, v(), t, loc);
|
|
678
|
+
const dLess1 = {
|
|
679
|
+
kind: "bin",
|
|
680
|
+
op: "-",
|
|
681
|
+
left: d(),
|
|
682
|
+
right: numLit(1, loc),
|
|
683
|
+
type: F64,
|
|
684
|
+
loc,
|
|
685
|
+
};
|
|
686
|
+
locals.push({ id: "in.0", name: "inner", type: STRING, mutable: false });
|
|
687
|
+
body = [
|
|
688
|
+
{
|
|
689
|
+
kind: "if",
|
|
690
|
+
cond: { kind: "bin", op: ">", left: r(), right: d(), type: BOOL, loc },
|
|
691
|
+
then: [ret(concatAll([strLit("[", loc), className, strLit("]", loc)], loc))],
|
|
692
|
+
else_: null,
|
|
693
|
+
loc,
|
|
694
|
+
},
|
|
695
|
+
exprStmt({
|
|
696
|
+
kind: "libCall",
|
|
697
|
+
fn: "insp.nestedBegin",
|
|
698
|
+
args: [],
|
|
699
|
+
type: { kind: "void" },
|
|
700
|
+
loc,
|
|
701
|
+
}),
|
|
702
|
+
{
|
|
703
|
+
kind: "varDecl",
|
|
704
|
+
localId: "in.0",
|
|
705
|
+
init: inspectExpr(lowerer, json.type, json, numLit(0, loc), dLess1, loc),
|
|
706
|
+
loc,
|
|
707
|
+
},
|
|
708
|
+
ret({
|
|
709
|
+
kind: "libCall",
|
|
710
|
+
fn: "insp.nestedEnd",
|
|
711
|
+
args: [className, varRef("in.0", STRING, loc)],
|
|
712
|
+
type: STRING,
|
|
713
|
+
loc,
|
|
714
|
+
}),
|
|
715
|
+
];
|
|
716
|
+
break;
|
|
717
|
+
}
|
|
602
718
|
if (shape.tuple) {
|
|
603
719
|
// Tuples ARE arrays to Node: bracket form, array-extras grouping.
|
|
604
720
|
if (shape.fields.length === 0) {
|
|
@@ -910,13 +1026,13 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
910
1026
|
// Node prints the class's OWN name — the declaration's, never the
|
|
911
1027
|
// IR name's module qualifier (`m0.Timer` is the frontend's spelling
|
|
912
1028
|
// for a class declared in a non-entry module).
|
|
913
|
-
const display = info.decl?.name?.text ?? info.def.name.replace(/^%/, "");
|
|
1029
|
+
const display = info.def.jsName ?? info.decl?.name?.text ?? info.def.name.replace(/^%/, "");
|
|
914
1030
|
// #private fields never render: they are not properties in any
|
|
915
1031
|
// observable way — Node's inspect omits them entirely (verified),
|
|
916
1032
|
// so a class whose only fields are private prints as `C {}`.
|
|
917
1033
|
const visible = info.def.fields.filter((f) => !f.name.startsWith("#"));
|
|
918
1034
|
if (visible.length === 0) {
|
|
919
|
-
body = [ret(strLit(`${display} {}`, loc))];
|
|
1035
|
+
body = [ret(strLit(display === "" ? "{}" : `${display} {}`, loc))];
|
|
920
1036
|
break;
|
|
921
1037
|
}
|
|
922
1038
|
const get = (field, type) => ({
|
|
@@ -927,7 +1043,7 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
927
1043
|
type,
|
|
928
1044
|
loc,
|
|
929
1045
|
});
|
|
930
|
-
body = [depthGate(`[${display}]`), ...begin()];
|
|
1046
|
+
body = [depthGate(display === "" ? "[Object]" : `[${display}]`), ...begin()];
|
|
931
1047
|
// def.fields carries layout order: the base chain first, then own —
|
|
932
1048
|
// exactly the own-property insertion order of a constructor that
|
|
933
1049
|
// assigns in declaration order (SEMANTICS.md 36's stance). SYMBOL-
|
|
@@ -948,7 +1064,7 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
948
1064
|
const key = symNames.has(f.name) ? symbolFieldDisplayName(f.name) : inspectKey(f.name);
|
|
949
1065
|
body.push(entry(concatAll([strLit(`${key}: `, loc), child(f.type, get(f.name, f.type))], loc), boolLit(false, loc)));
|
|
950
1066
|
}
|
|
951
|
-
body.push(ret(end(strLit("", loc), strLit(`${display} {`, loc), strLit("}", loc), false, boolLit(false, loc))));
|
|
1067
|
+
body.push(ret(end(strLit("", loc), strLit(display === "" ? "{" : `${display} {`, loc), strLit("}", loc), false, boolLit(false, loc))));
|
|
952
1068
|
break;
|
|
953
1069
|
}
|
|
954
1070
|
default:
|
|
@@ -1108,7 +1224,7 @@ export function lowerConsoleInspectArg(lowerer, node, value, surface, loc) {
|
|
|
1108
1224
|
if (t.kind === "undefinedT" || t.kind === "nullT") {
|
|
1109
1225
|
// The baked text ("undefined"/"null"): the operand is a literal or a
|
|
1110
1226
|
// pure read, so dropping its evaluation loses nothing. Effectful
|
|
1111
|
-
// unit-typed operands
|
|
1227
|
+
// unit-typed operands report SC1090 instead of being skipped.
|
|
1112
1228
|
if (value.kind !== "unitLit" && !isSafeToRepeat(value)) {
|
|
1113
1229
|
lowerer.unsupported("SC1090", node, `${surface} of an effectful '${lowerer.fmt(t)}'-typed expression (evaluate it first: const v = ...; ${surface}(v))`);
|
|
1114
1230
|
}
|
|
@@ -1143,16 +1259,17 @@ export function lowerConsoleInspectArg(lowerer, node, value, surface, loc) {
|
|
|
1143
1259
|
/* ── the callsite: options, direct function/class names ──────────────── */
|
|
1144
1260
|
/** The parsed options literal: the resolved depth (numeric; Infinity for
|
|
1145
1261
|
* `null`), with every non-default knob fenced by name. */
|
|
1146
|
-
function parseInspectOptions(lowerer, node, recursive) {
|
|
1262
|
+
function parseInspectOptions(lowerer, node, recursive, dir = false) {
|
|
1263
|
+
const surface = dir ? "console.dir" : "util.inspect";
|
|
1147
1264
|
if (!node || (ts.isIdentifier(node) && node.text === "undefined"))
|
|
1148
1265
|
return 2;
|
|
1149
1266
|
if (!ts.isObjectLiteralExpression(node)) {
|
|
1150
|
-
lowerer.noLowering(
|
|
1267
|
+
lowerer.noLowering(`${surface} with a non-literal options argument`, node, "the options must be an object literal ({ depth, colors: false, ... }) so the knobs resolve at compile time");
|
|
1151
1268
|
}
|
|
1152
1269
|
let depth = 2;
|
|
1153
1270
|
for (const prop of node.properties) {
|
|
1154
1271
|
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) {
|
|
1155
|
-
lowerer.noLowering(
|
|
1272
|
+
lowerer.noLowering(`${surface} options in this form`, prop, "plain `key: literal` entries are the lowered options");
|
|
1156
1273
|
}
|
|
1157
1274
|
const key = prop.name.text;
|
|
1158
1275
|
const value = prop.initializer;
|
|
@@ -1178,28 +1295,34 @@ function parseInspectOptions(lowerer, node, recursive) {
|
|
|
1178
1295
|
else if (!(ts.isIdentifier(value) && value.text === "undefined")) {
|
|
1179
1296
|
const n = numeric();
|
|
1180
1297
|
if (n === null) {
|
|
1181
|
-
lowerer.noLowering(
|
|
1298
|
+
lowerer.noLowering(`${surface} with a non-literal depth option`, value, "depth must be a numeric literal (or null)");
|
|
1182
1299
|
}
|
|
1183
1300
|
depth = n;
|
|
1184
1301
|
}
|
|
1185
1302
|
}
|
|
1186
1303
|
else if (key === "colors") {
|
|
1187
1304
|
if (value.kind !== ts.SyntaxKind.FalseKeyword) {
|
|
1188
|
-
lowerer.noLowering(
|
|
1305
|
+
lowerer.noLowering(`${surface} with colors: true`, value, "ANSI styling has no lowering — only colors: false");
|
|
1189
1306
|
}
|
|
1190
1307
|
}
|
|
1191
1308
|
else if (key === "compact") {
|
|
1192
1309
|
if (numeric() !== 3) {
|
|
1193
|
-
lowerer.noLowering(
|
|
1310
|
+
lowerer.noLowering(`${surface} with a non-default compact option`, value, "only the default compact: 3 is lowered");
|
|
1194
1311
|
}
|
|
1195
1312
|
}
|
|
1196
1313
|
else if (key === "breakLength") {
|
|
1197
1314
|
if (numeric() !== 80) {
|
|
1198
|
-
lowerer.noLowering(
|
|
1315
|
+
lowerer.noLowering(`${surface} with a non-default breakLength option`, value, "only the default breakLength: 80 is lowered");
|
|
1316
|
+
}
|
|
1317
|
+
}
|
|
1318
|
+
else if (dir && key === "customInspect") {
|
|
1319
|
+
// console.dir's own default; only that value is lowered.
|
|
1320
|
+
if (value.kind !== ts.SyntaxKind.FalseKeyword) {
|
|
1321
|
+
lowerer.noLowering("console.dir with customInspect: true", value, "only customInspect: false (console.dir's default) is lowered");
|
|
1199
1322
|
}
|
|
1200
1323
|
}
|
|
1201
1324
|
else {
|
|
1202
|
-
lowerer.noLowering(
|
|
1325
|
+
lowerer.noLowering(`${surface} with the '${key}' option`, prop, `the lowered options are depth (numeric literal or null), colors: false, compact: 3, ${dir ? "breakLength: 80, and customInspect: false" : "and breakLength: 80"}`);
|
|
1203
1326
|
}
|
|
1204
1327
|
}
|
|
1205
1328
|
return depth;
|
|
@@ -1249,16 +1372,25 @@ function lowerInspectCall(lowerer, expr, loc) {
|
|
|
1249
1372
|
if (expr.arguments.length < 1 || expr.arguments.length > 2) {
|
|
1250
1373
|
lowerer.noLowering(`util.inspect with ${expr.arguments.length} arguments`, expr, "the supported forms are inspect(value) and inspect(value, options)");
|
|
1251
1374
|
}
|
|
1252
|
-
|
|
1375
|
+
return lowerInspectValue(lowerer, expr.arguments[0], expr.arguments[1], loc, false);
|
|
1376
|
+
}
|
|
1377
|
+
/** `inspect(value, options)` over one value node: the shared body of
|
|
1378
|
+
* util.inspect and console.dir. console.dir is Node's `inspect(object,
|
|
1379
|
+
* { customInspect: false, ...options })`; the only lowered value with a
|
|
1380
|
+
* custom inspect hook is Buffer (its <Buffer ..> form), so that call
|
|
1381
|
+
* fences Buffers and routes checked-dynamic values through the runtime
|
|
1382
|
+
* walk that refuses a Buffer anywhere inside. */
|
|
1383
|
+
export function lowerInspectValue(lowerer, valueNode, optionsNode, loc, dir) {
|
|
1384
|
+
const surface = dir ? "console.dir" : "util.inspect";
|
|
1253
1385
|
// Inline function/class literals and direct declared names render as
|
|
1254
1386
|
// their baked forms; other function-typed values fence below.
|
|
1255
1387
|
const direct = directCallableInspect(lowerer, valueNode, loc);
|
|
1256
1388
|
if (direct) {
|
|
1257
|
-
parseInspectOptions(lowerer,
|
|
1389
|
+
parseInspectOptions(lowerer, optionsNode, false, dir);
|
|
1258
1390
|
return direct;
|
|
1259
1391
|
}
|
|
1260
1392
|
if (ts.isArrowFunction(valueNode) || ts.isFunctionExpression(valueNode)) {
|
|
1261
|
-
parseInspectOptions(lowerer,
|
|
1393
|
+
parseInspectOptions(lowerer, optionsNode, false, dir);
|
|
1262
1394
|
return strLit(valueNode.kind === ts.SyntaxKind.FunctionExpression &&
|
|
1263
1395
|
valueNode.name
|
|
1264
1396
|
? `[Function: ${valueNode.name.text}]`
|
|
@@ -1276,19 +1408,31 @@ function lowerInspectCall(lowerer, expr, loc) {
|
|
|
1276
1408
|
tname === "NonSharedBuffer" ||
|
|
1277
1409
|
tname.startsWith("Buffer<") ||
|
|
1278
1410
|
tname.startsWith("NonSharedBuffer<");
|
|
1411
|
+
if (dir) {
|
|
1412
|
+
lowerer.noLowering(`console.dir of '${tname}' values`, valueNode, "console.dir disables custom inspection, and the typed-array rendering it falls back to has no lowering yet — use console.log");
|
|
1413
|
+
}
|
|
1279
1414
|
if (value.type.elem !== "u8" || !isBuffer) {
|
|
1280
1415
|
lowerer.noLowering(`util.inspect of '${tname}' values`, valueNode, "Buffer's <Buffer ..> form is the lowered typed-array rendering; other typed arrays fence");
|
|
1281
1416
|
}
|
|
1282
|
-
const bufDepth = parseInspectOptions(lowerer,
|
|
1417
|
+
const bufDepth = parseInspectOptions(lowerer, optionsNode, false, dir);
|
|
1283
1418
|
void bufDepth; // Buffers render fully at any depth (custom inspect)
|
|
1284
1419
|
return inspectExpr(lowerer, value.type, value, numLit(0, loc), numLit(2, loc), loc);
|
|
1285
1420
|
}
|
|
1286
1421
|
const walk = { recursive: false };
|
|
1287
1422
|
const reason = inspectSupport(lowerer, value.type, new Set(), walk);
|
|
1288
1423
|
if (reason !== null) {
|
|
1289
|
-
lowerer.noLowering(
|
|
1424
|
+
lowerer.noLowering(`${surface} of '${lowerer.fmt(value.type)}' values`, valueNode, reason);
|
|
1425
|
+
}
|
|
1426
|
+
const depth = parseInspectOptions(lowerer, optionsNode, walk.recursive, dir);
|
|
1427
|
+
if (dir && value.type.kind === "dyn") {
|
|
1428
|
+
return {
|
|
1429
|
+
kind: "libCall",
|
|
1430
|
+
fn: "console.dirDyn",
|
|
1431
|
+
args: [value, numLit(depth, loc)],
|
|
1432
|
+
type: STRING,
|
|
1433
|
+
loc,
|
|
1434
|
+
};
|
|
1290
1435
|
}
|
|
1291
|
-
const depth = parseInspectOptions(lowerer, expr.arguments[1], walk.recursive);
|
|
1292
1436
|
return inspectExpr(lowerer, value.type, value, numLit(0, loc), numLit(depth, loc), loc);
|
|
1293
1437
|
}
|
|
1294
1438
|
/* ── util.format / util.formatWithOptions ────────────────────────────── */
|
|
@@ -1373,8 +1517,8 @@ function formatOArg(lowerer, node, depth, loc) {
|
|
|
1373
1517
|
* ported exactly — the arg cursor, the args-exhausted guard, %c's
|
|
1374
1518
|
* consume-and-drop), with per-static-type conversions. Non-literal
|
|
1375
1519
|
* format strings lower only in the substitution-free shapes. */
|
|
1376
|
-
export function lowerFormatCall(lowerer, expr, loc, withOptions) {
|
|
1377
|
-
const argNodes = [...expr.arguments];
|
|
1520
|
+
export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverride, literalPrefix = "") {
|
|
1521
|
+
const argNodes = [...(argNodesOverride ?? expr.arguments)];
|
|
1378
1522
|
if (withOptions) {
|
|
1379
1523
|
const opts = argNodes.shift();
|
|
1380
1524
|
if (!opts || !ts.isObjectLiteralExpression(opts) || opts.properties.length > 0) {
|
|
@@ -1402,7 +1546,9 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions) {
|
|
|
1402
1546
|
}
|
|
1403
1547
|
return concatAll(parts, loc);
|
|
1404
1548
|
}
|
|
1405
|
-
|
|
1549
|
+
// A literal prefix joins the format text (console.assert's "Assertion
|
|
1550
|
+
// failed: " — Node formats the joined string).
|
|
1551
|
+
const fmt = literalPrefix + first.text;
|
|
1406
1552
|
// Node's early return: a lone string first argument passes VERBATIM —
|
|
1407
1553
|
// no substitution runs, "%%" stays "%%".
|
|
1408
1554
|
if (argNodes.length === 1)
|
|
@@ -1454,7 +1600,8 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions) {
|
|
|
1454
1600
|
// context.actual)` — test/common's exit report): VALIDATE it as a
|
|
1455
1601
|
// number (dynCheck) and format. A non-number dyn value throws the
|
|
1456
1602
|
// catchable TypeError where Node would print its ToNumber (NaN
|
|
1457
|
-
// for objects) —
|
|
1603
|
+
// for objects) — it throws instead of returning a wrong result
|
|
1604
|
+
// (SEMANTICS.md).
|
|
1458
1605
|
if (value.type.kind === "dyn") {
|
|
1459
1606
|
return {
|
|
1460
1607
|
kind: "libCall",
|
|
@@ -1506,7 +1653,8 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions) {
|
|
|
1506
1653
|
// A checked-dynamic argument (`console.error('headers: %j',
|
|
1507
1654
|
// headers)` — the suite's http logging idiom): the runtime dyn
|
|
1508
1655
|
// walk stringifies JS-exactly (root undefined/function prints
|
|
1509
|
-
// "undefined"; a handle in the tree throws the
|
|
1656
|
+
// "undefined"; a handle in the tree throws the "not supported yet"
|
|
1657
|
+
// Error).
|
|
1510
1658
|
if (value.type.kind === "dyn") {
|
|
1511
1659
|
return { kind: "libCall", fn: "insp.jsonDyn", args: [value], type: STRING, loc };
|
|
1512
1660
|
}
|
|
@@ -1652,6 +1800,12 @@ export function lowerUtilModuleCall(lowerer, expr, bi, loc) {
|
|
|
1652
1800
|
loc,
|
|
1653
1801
|
};
|
|
1654
1802
|
}
|
|
1803
|
+
case "inherits":
|
|
1804
|
+
case "deprecate":
|
|
1805
|
+
case "callbackify":
|
|
1806
|
+
case "debuglog":
|
|
1807
|
+
case "debug":
|
|
1808
|
+
return lowerUtilCallableCall(lowerer, expr, bi.member, loc);
|
|
1655
1809
|
case "getSystemErrorMap": {
|
|
1656
1810
|
if (expr.arguments.some(ts.isSpreadElement))
|
|
1657
1811
|
lowerer.noLowering("util.getSystemErrorMap with spread arguments", expr);
|
|
@@ -1735,6 +1889,71 @@ export function lowerUtilModuleCall(lowerer, expr, bi, loc) {
|
|
|
1735
1889
|
return null;
|
|
1736
1890
|
}
|
|
1737
1891
|
}
|
|
1892
|
+
/** util.inherits/deprecate/callbackify/debuglog: every argument crosses as
|
|
1893
|
+
* a checked-dynamic value, evaluated left to right before the runtime call
|
|
1894
|
+
* (surplus arguments are evaluated and dropped). The function helpers
|
|
1895
|
+
* answer native dyn wrappers; a static function slot checks the wrapper
|
|
1896
|
+
* when it receives it, and dyn slots keep calling it with JS arity. */
|
|
1897
|
+
function lowerUtilCallableCall(lowerer, expr, member, loc) {
|
|
1898
|
+
if (expr.arguments.some(ts.isSpreadElement))
|
|
1899
|
+
lowerer.noLowering(`util.${member} with spread arguments`, expr);
|
|
1900
|
+
const fn = member === "inherits"
|
|
1901
|
+
? "util.inherits"
|
|
1902
|
+
: member === "deprecate"
|
|
1903
|
+
? "util.deprecate"
|
|
1904
|
+
: member === "callbackify"
|
|
1905
|
+
? "util.callbackify"
|
|
1906
|
+
: "util.debuglog";
|
|
1907
|
+
const arity = member === "deprecate" ? 4 : member === "callbackify" ? 1 : 2;
|
|
1908
|
+
// Program classes keep static prototypes: there is no function object
|
|
1909
|
+
// whose prototype chain the runtime could relink or wrap.
|
|
1910
|
+
const classArgs = member === "inherits" ? 2 : member === "deprecate" ? 1 : 0;
|
|
1911
|
+
for (const arg of expr.arguments.slice(0, classArgs)) {
|
|
1912
|
+
if (lowerer.mapTypeOf(lowerer.typeOf(arg))?.kind === "classval")
|
|
1913
|
+
lowerer.noLowering(`util.${member} over a class constructor`, arg, member === "inherits"
|
|
1914
|
+
? "declare the subclass with extends"
|
|
1915
|
+
: "deprecate a factory function or the class's call sites instead");
|
|
1916
|
+
}
|
|
1917
|
+
if (member === "callbackify" && callbackifyErrorExcludesNull(lowerer, expr))
|
|
1918
|
+
lowerer.noLowering("util.callbackify into a callback whose error parameter excludes null", expr, "Node calls back with a null error on success; type the binding's callback as (err: NodeJS.ErrnoException | null, ...) => void");
|
|
1919
|
+
const stmts = [];
|
|
1920
|
+
const args = [];
|
|
1921
|
+
for (let i = 0; i < arity; i++) {
|
|
1922
|
+
const input = expr.arguments[i]
|
|
1923
|
+
? lowerer.lowerExprExpecting(expr.arguments[i], DYN)
|
|
1924
|
+
: dynUndefinedExpr(loc);
|
|
1925
|
+
const saved = lowerer.declareHiddenLocal("%utilInput", DYN);
|
|
1926
|
+
stmts.push({ kind: "varDecl", localId: saved.id, init: input, loc });
|
|
1927
|
+
args.push(varRef(saved.id, DYN, loc));
|
|
1928
|
+
}
|
|
1929
|
+
for (const arg of expr.arguments.slice(arity))
|
|
1930
|
+
stmts.push({ kind: "exprStmt", expr: lowerer.lowerExpr(arg), loc });
|
|
1931
|
+
const type = fn === "util.inherits" ? VOID : DYN;
|
|
1932
|
+
const result = { kind: "libCall", fn, args, type, loc };
|
|
1933
|
+
return { kind: "seqExpr", stmts, result, type: result.type, loc };
|
|
1934
|
+
}
|
|
1935
|
+
/** Whether the slot receiving a callbackify wrapper declares a callback
|
|
1936
|
+
* whose first parameter cannot hold null. Some @types/node overloads type
|
|
1937
|
+
* that error as NodeJS.ErrnoException, but Node passes null on success, and
|
|
1938
|
+
* a statically typed callback parameter cannot receive a value its type
|
|
1939
|
+
* excludes. Untyped (JavaScript or unknown) slots keep the wrapper dyn. */
|
|
1940
|
+
function callbackifyErrorExcludesNull(lowerer, expr) {
|
|
1941
|
+
if (isJsSourceFile(expr.getSourceFile()))
|
|
1942
|
+
return false;
|
|
1943
|
+
const checker = lowerer.checker;
|
|
1944
|
+
const slot = checker.getContextualType(expr) ?? lowerer.typeOf(expr);
|
|
1945
|
+
const wrapper = checker.getCallSignatures(slot)[0];
|
|
1946
|
+
const callbackSymbol = wrapper?.getParameters().at(-1);
|
|
1947
|
+
if (!callbackSymbol)
|
|
1948
|
+
return false;
|
|
1949
|
+
const callback = checker.getCallSignatures(checker.getTypeOfSymbol(callbackSymbol))[0];
|
|
1950
|
+
const errorSymbol = callback?.getParameters()[0];
|
|
1951
|
+
if (!errorSymbol)
|
|
1952
|
+
return false;
|
|
1953
|
+
const error = checker.getTypeOfSymbol(errorSymbol);
|
|
1954
|
+
const arms = error.isUnionType() ? ts.constituentTypes(error) : [error];
|
|
1955
|
+
return !arms.some((arm) => (arm.flags & (ts.TypeFlags.Null | ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0);
|
|
1956
|
+
}
|
|
1738
1957
|
/** util.parseArgs(config?): the configuration is ordinary JSON-safe data,
|
|
1739
1958
|
* so it crosses into the runtime as a checked-dynamic tree. The native
|
|
1740
1959
|
* parser returns the same tree-shaped result Node does (including token
|
|
@@ -1797,7 +2016,7 @@ function lowerParseArgsCall(lowerer, expr, loc) {
|
|
|
1797
2016
|
* mustNotCall — `callSite.scriptName`:`callSite.lineNumber` in the
|
|
1798
2017
|
* failure text — read a printable value instead of throwing). Argument
|
|
1799
2018
|
* forms and TypeScript keep the SC2020 fence: a typed consumer asserting
|
|
1800
|
-
* real frames must fail
|
|
2019
|
+
* real frames must fail at compile time instead of reading placeholders. */
|
|
1801
2020
|
function lowerGetCallSitesCall(lowerer, expr, loc) {
|
|
1802
2021
|
if (expr.arguments.length !== 0)
|
|
1803
2022
|
return null;
|