@scriptc/compiler 0.3.2 → 0.3.4
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 +1202 -64
- package/dist/backend/cycle-analysis.js +6 -1
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-mutability.d.ts +5 -0
- package/dist/backend/cycle-mutability.js +62 -3
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.js +1 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/library-pack.js +1 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/llvm/alloc.js +24 -10
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/alloc.test.js +47 -1
- package/dist/backend/llvm/alloc.test.js.map +1 -1
- 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 +12 -1
- package/dist/backend/llvm/call-lifetimes.js +41 -11
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +85 -1
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/classes.js +87 -36
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +6 -1
- package/dist/backend/llvm/common.js +8 -1
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +5 -0
- package/dist/backend/llvm/dense-array-access.js +3 -3
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +44 -1
- package/dist/backend/llvm/dyn.js +251 -36
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +77 -14
- package/dist/backend/llvm/emitter.js +461 -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 +52 -1
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +9 -0
- package/dist/backend/llvm/expr-bytes.js +169 -63
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.js +16 -2
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +3 -1
- package/dist/backend/llvm/expr-calls.js +57 -2
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +57 -19
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +19 -8
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +28 -30
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +8 -4
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +35 -32
- package/dist/backend/llvm/expr-stream-bridges.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/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/intern-tables.test.d.ts +1 -0
- package/dist/backend/llvm/intern-tables.test.js +77 -0
- package/dist/backend/llvm/intern-tables.test.js.map +1 -0
- package/dist/backend/llvm/lib-datagram.js +10 -0
- package/dist/backend/llvm/lib-datagram.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +255 -29
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +176 -7
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +25 -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.d.ts +5 -0
- package/dist/backend/llvm/lib-shared.js +212 -1
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +184 -0
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/lib-test.js +9 -0
- package/dist/backend/llvm/lib-test.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +7 -3
- 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 +2 -0
- package/dist/backend/llvm/local-union-storage.js +5 -0
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +1 -0
- 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 +24 -0
- package/dist/backend/llvm/map-number-lookup.js +88 -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 +158 -0
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -0
- package/dist/backend/llvm/map-read-lifetimes.d.ts +9 -0
- package/dist/backend/llvm/map-read-lifetimes.js +90 -1
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +129 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +9 -0
- package/dist/backend/llvm/publish.js +25 -4
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/record-results.d.ts +8 -5
- package/dist/backend/llvm/record-results.js +20 -12
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +13 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +19 -2
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/regions.d.ts +5 -1
- package/dist/backend/llvm/regions.js +24 -10
- package/dist/backend/llvm/regions.js.map +1 -1
- 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 +56 -10
- package/dist/backend/llvm/shapes.js +178 -39
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +61 -3
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/stack-objects.js +16 -4
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/stack-objects.test.js +3 -0
- package/dist/backend/llvm/stack-objects.test.js.map +1 -1
- package/dist/backend/llvm/string-reads.js +2 -2
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/string-slices.js +2 -2
- package/dist/backend/llvm/string-slices.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +11 -0
- package/dist/backend/llvm/walkers.js +106 -10
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/may-throw.js +13 -4
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +5 -2
- package/dist/backend/native/executable.js +27 -8
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +2 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +4 -4
- package/dist/backend/native-codegen-core.js +4 -6
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.test.js +7 -8
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +3 -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/publication.js +3 -1
- package/dist/backend/publication.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-targets.test.js +2 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +2 -1
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/target-diagnostics.js +11 -1
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +4 -1
- package/dist/backend/target-diagnostics.test.js.map +1 -1
- package/dist/backend/warm-cache.js +1 -0
- package/dist/backend/warm-cache.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 +1 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +1 -0
- package/dist/executable/executable-cache.test.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 +5 -1
- package/dist/frontend/experimental-import.js +28 -3
- package/dist/frontend/experimental-import.js.map +1 -1
- package/dist/frontend/lowering/assert-instances.d.ts +38 -0
- package/dist/frontend/lowering/assert-instances.js +269 -0
- package/dist/frontend/lowering/assert-instances.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/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.d.ts +18 -0
- package/dist/frontend/lowering/builtins/compression.js +178 -4
- 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/crypto.d.ts +6 -0
- package/dist/frontend/lowering/builtins/crypto.js +526 -121
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.js +23 -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/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 +44 -11
- package/dist/frontend/lowering/builtins/module-calls.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 +107 -14
- package/dist/frontend/lowering/builtins/process.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/timers.d.ts +3 -0
- package/dist/frontend/lowering/builtins/timers.js +109 -23
- package/dist/frontend/lowering/builtins/timers.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 +26 -2
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +2 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +171 -13
- 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 +4 -7
- package/dist/frontend/lowering/containers/array-callbacks.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/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/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/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 +16 -12
- package/dist/frontend/lowering/expressions/object-literals.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/intern-tables.d.ts +13 -0
- package/dist/frontend/lowering/intern-tables.js +536 -0
- package/dist/frontend/lowering/intern-tables.js.map +1 -0
- package/dist/frontend/lowering/lower-array-sort.d.ts +12 -1
- package/dist/frontend/lowering/lower-array-sort.js +561 -191
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.test.js +4 -2
- package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +702 -63
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.d.ts +6 -3
- package/dist/frontend/lowering/lower-async-iteration.js +259 -4
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +118 -12
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +11 -2
- package/dist/frontend/lowering/lower-classes.js +76 -9
- 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-dgram.js +77 -52
- package/dist/frontend/lowering/lower-dgram.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 +124 -22
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +6 -0
- package/dist/frontend/lowering/lower-inspect.js +240 -49
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.js +1 -1
- package/dist/frontend/lowering/lower-mock.d.ts +11 -0
- package/dist/frontend/lowering/lower-mock.js +504 -0
- package/dist/frontend/lowering/lower-mock.js.map +1 -0
- package/dist/frontend/lowering/lower-modules.d.ts +1 -1
- package/dist/frontend/lowering/lower-modules.js +14 -3
- 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.d.ts +3 -0
- package/dist/frontend/lowering/lower-server.js +419 -44
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +7 -1
- package/dist/frontend/lowering/lower-stdlib.js +10 -3
- 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 +69 -14
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +10 -6
- package/dist/frontend/lowering/lower-stream.js +1020 -49
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-test.js +86 -8
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +45 -5
- package/dist/frontend/lowering/lowerer.js +317 -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/pairs-snapshot.d.ts +6 -0
- package/dist/frontend/lowering/pairs-snapshot.js +49 -0
- package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
- 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 +11 -3
- package/dist/frontend/lowering/surfaces.js +334 -37
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/zlib-constants.d.ts +1 -0
- package/dist/frontend/lowering/zlib-constants.js +181 -0
- package/dist/frontend/lowering/zlib-constants.js.map +1 -0
- package/dist/frontend/mock-shapes.d.ts +10 -0
- package/dist/frontend/mock-shapes.js +76 -0
- package/dist/frontend/mock-shapes.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 +3 -3
- package/dist/frontend/program.js +25 -18
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/resolve.d.ts +4 -0
- package/dist/frontend/resolve.js +15 -1
- package/dist/frontend/resolve.js.map +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 +3 -2
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +21 -1
- package/dist/frontend/type-mapper.js +245 -27
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.js +7 -5
- 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 +115 -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 +438 -46
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/int32-slots.js +1 -0
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/ir.d.ts +84 -17
- package/dist/ir/ir.js +54 -1
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +1 -0
- package/dist/ir/runtime-features.js +111 -7
- package/dist/ir/runtime-features.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 +295 -14
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +60 -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/cli.js +1 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +1 -3
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/prepare.js +4 -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 +1279 -221
|
@@ -12,6 +12,12 @@ export declare function inspectExpr(lowerer: Lowerer, t: IrType, value: IrExpr,
|
|
|
12
12
|
* <ref *N>/[Circular *N]); everything acyclic keeps the zero-cost path
|
|
13
13
|
* (a value of an acyclic type can never repeat on its own path). */
|
|
14
14
|
export declare function typeReachesItself(lowerer: Lowerer, t: IrType): boolean;
|
|
15
|
+
/** True when a value of `t` can be cyclic: `t` or any type reachable from
|
|
16
|
+
* it reaches itself. */
|
|
17
|
+
export declare function typeReachesCycle(lowerer: Lowerer, t: IrType): boolean;
|
|
18
|
+
/** True when a value of `t` can hold a function: `t` or any type
|
|
19
|
+
* reachable from it is a function type. */
|
|
20
|
+
export declare function typeReachesFunction(lowerer: Lowerer, t: IrType): boolean;
|
|
15
21
|
/** One console.log/info/debug/error/warn argument OUTSIDE the direct
|
|
16
22
|
* scalar set (number/string/boolean ride the ScrLogArg protocol
|
|
17
23
|
* untouched, and dyn/function values have their own paths at the call
|
|
@@ -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, VOID, canConvertToDyn, canDynCheckTo, recordTextCodecClass, shapeHasAccessorSlots, typeKey, } from "../../ir/ir.js";
|
|
7
|
-
import { isSafeToRepeat } from "./expressions/evaluation-safety.js";
|
|
6
|
+
import { BOOL, DYN, F64, RUNTIME_ERROR_CLASSES, STRING, isUnitType, UNDEFINED_T, VOID, canConvertToDyn, canDynCheckTo, isDirentShape, isDynTypedRefType, recordTextCodecClass, shapeHasAccessorSlots, typeKey, } from "../../ir/ir.js";
|
|
7
|
+
import { isSafeToDiscard, 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),
|
|
@@ -301,40 +357,7 @@ export function typeReachesItself(lowerer, t) {
|
|
|
301
357
|
const root = typeKey(t);
|
|
302
358
|
const seen = new Set();
|
|
303
359
|
const walk = (u) => {
|
|
304
|
-
const
|
|
305
|
-
switch (u.kind) {
|
|
306
|
-
case "record": {
|
|
307
|
-
const shape = lowerer.shapes.get(u.shapeId);
|
|
308
|
-
if (!shape)
|
|
309
|
-
return false;
|
|
310
|
-
constituents.push(...shape.fields.map((f) => f.type));
|
|
311
|
-
if (shape.indexValue)
|
|
312
|
-
constituents.push(shape.indexValue);
|
|
313
|
-
break;
|
|
314
|
-
}
|
|
315
|
-
case "array":
|
|
316
|
-
case "set":
|
|
317
|
-
constituents.push(u.elem);
|
|
318
|
-
break;
|
|
319
|
-
case "map":
|
|
320
|
-
constituents.push(u.key, u.value);
|
|
321
|
-
break;
|
|
322
|
-
case "union": {
|
|
323
|
-
const def = lowerer.unions.get(u.unionId);
|
|
324
|
-
if (def)
|
|
325
|
-
constituents.push(...def.arms);
|
|
326
|
-
break;
|
|
327
|
-
}
|
|
328
|
-
case "object": {
|
|
329
|
-
const info = lowerer.classes.get(u.className);
|
|
330
|
-
if (info)
|
|
331
|
-
constituents.push(...info.def.fields.map((f) => f.type));
|
|
332
|
-
break;
|
|
333
|
-
}
|
|
334
|
-
default:
|
|
335
|
-
return false;
|
|
336
|
-
}
|
|
337
|
-
for (const c of constituents) {
|
|
360
|
+
for (const c of typeConstituents(lowerer, u)) {
|
|
338
361
|
const k = typeKey(c);
|
|
339
362
|
if (k === root)
|
|
340
363
|
return true;
|
|
@@ -348,6 +371,59 @@ export function typeReachesItself(lowerer, t) {
|
|
|
348
371
|
};
|
|
349
372
|
return walk(t);
|
|
350
373
|
}
|
|
374
|
+
/** True when a value of `t` can be cyclic: `t` or any type reachable from
|
|
375
|
+
* it reaches itself. */
|
|
376
|
+
export function typeReachesCycle(lowerer, t) {
|
|
377
|
+
const seen = new Set();
|
|
378
|
+
const walk = (u) => {
|
|
379
|
+
const k = typeKey(u);
|
|
380
|
+
if (seen.has(k))
|
|
381
|
+
return false;
|
|
382
|
+
seen.add(k);
|
|
383
|
+
if (typeReachesItself(lowerer, u))
|
|
384
|
+
return true;
|
|
385
|
+
return typeConstituents(lowerer, u).some(walk);
|
|
386
|
+
};
|
|
387
|
+
return walk(t);
|
|
388
|
+
}
|
|
389
|
+
/** True when a value of `t` can hold a function: `t` or any type
|
|
390
|
+
* reachable from it is a function type. */
|
|
391
|
+
export function typeReachesFunction(lowerer, t) {
|
|
392
|
+
const seen = new Set();
|
|
393
|
+
const walk = (u) => {
|
|
394
|
+
if (u.kind === "func")
|
|
395
|
+
return true;
|
|
396
|
+
const k = typeKey(u);
|
|
397
|
+
if (seen.has(k))
|
|
398
|
+
return false;
|
|
399
|
+
seen.add(k);
|
|
400
|
+
return typeConstituents(lowerer, u).some(walk);
|
|
401
|
+
};
|
|
402
|
+
return walk(t);
|
|
403
|
+
}
|
|
404
|
+
/** The types a value of `u` holds directly. */
|
|
405
|
+
function typeConstituents(lowerer, u) {
|
|
406
|
+
switch (u.kind) {
|
|
407
|
+
case "record": {
|
|
408
|
+
const shape = lowerer.shapes.get(u.shapeId);
|
|
409
|
+
if (!shape)
|
|
410
|
+
return [];
|
|
411
|
+
const fields = shape.fields.map((f) => f.type);
|
|
412
|
+
return shape.indexValue ? [...fields, shape.indexValue] : fields;
|
|
413
|
+
}
|
|
414
|
+
case "array":
|
|
415
|
+
case "set":
|
|
416
|
+
return [u.elem];
|
|
417
|
+
case "map":
|
|
418
|
+
return [u.key, u.value];
|
|
419
|
+
case "union":
|
|
420
|
+
return lowerer.unions.get(u.unionId)?.arms.slice() ?? [];
|
|
421
|
+
case "object":
|
|
422
|
+
return lowerer.classes.get(u.className)?.def.fields.map((f) => f.type) ?? [];
|
|
423
|
+
default:
|
|
424
|
+
return [];
|
|
425
|
+
}
|
|
426
|
+
}
|
|
351
427
|
/* ── the interned per-type helper ────────────────────────────────────── */
|
|
352
428
|
/** `%util.insp.<n>(v, r, d): string` — formatValue over the static type:
|
|
353
429
|
* empty composites answer their literals (before the depth check, Node's
|
|
@@ -599,6 +675,66 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
599
675
|
type,
|
|
600
676
|
loc,
|
|
601
677
|
});
|
|
678
|
+
if (isPerfEntryType(lowerer, t)) {
|
|
679
|
+
// PerformanceEntry's custom inspect: `[PerformanceMark]` past the
|
|
680
|
+
// depth budget, otherwise the class name and a nested inspect of
|
|
681
|
+
// toJSON() one level shallower, in its own context.
|
|
682
|
+
const className = {
|
|
683
|
+
kind: "ternary",
|
|
684
|
+
cond: {
|
|
685
|
+
kind: "strEq",
|
|
686
|
+
negated: false,
|
|
687
|
+
left: get("entryType", STRING),
|
|
688
|
+
right: strLit("mark", loc),
|
|
689
|
+
type: BOOL,
|
|
690
|
+
loc,
|
|
691
|
+
},
|
|
692
|
+
then: strLit("PerformanceMark", loc),
|
|
693
|
+
else_: strLit("PerformanceMeasure", loc),
|
|
694
|
+
type: STRING,
|
|
695
|
+
loc,
|
|
696
|
+
};
|
|
697
|
+
const json = perfEntryJson(lowerer, v(), t, loc);
|
|
698
|
+
const dLess1 = {
|
|
699
|
+
kind: "bin",
|
|
700
|
+
op: "-",
|
|
701
|
+
left: d(),
|
|
702
|
+
right: numLit(1, loc),
|
|
703
|
+
type: F64,
|
|
704
|
+
loc,
|
|
705
|
+
};
|
|
706
|
+
locals.push({ id: "in.0", name: "inner", type: STRING, mutable: false });
|
|
707
|
+
body = [
|
|
708
|
+
{
|
|
709
|
+
kind: "if",
|
|
710
|
+
cond: { kind: "bin", op: ">", left: r(), right: d(), type: BOOL, loc },
|
|
711
|
+
then: [ret(concatAll([strLit("[", loc), className, strLit("]", loc)], loc))],
|
|
712
|
+
else_: null,
|
|
713
|
+
loc,
|
|
714
|
+
},
|
|
715
|
+
exprStmt({
|
|
716
|
+
kind: "libCall",
|
|
717
|
+
fn: "insp.nestedBegin",
|
|
718
|
+
args: [],
|
|
719
|
+
type: { kind: "void" },
|
|
720
|
+
loc,
|
|
721
|
+
}),
|
|
722
|
+
{
|
|
723
|
+
kind: "varDecl",
|
|
724
|
+
localId: "in.0",
|
|
725
|
+
init: inspectExpr(lowerer, json.type, json, numLit(0, loc), dLess1, loc),
|
|
726
|
+
loc,
|
|
727
|
+
},
|
|
728
|
+
ret({
|
|
729
|
+
kind: "libCall",
|
|
730
|
+
fn: "insp.nestedEnd",
|
|
731
|
+
args: [className, varRef("in.0", STRING, loc)],
|
|
732
|
+
type: STRING,
|
|
733
|
+
loc,
|
|
734
|
+
}),
|
|
735
|
+
];
|
|
736
|
+
break;
|
|
737
|
+
}
|
|
602
738
|
if (shape.tuple) {
|
|
603
739
|
// Tuples ARE arrays to Node: bracket form, array-extras grouping.
|
|
604
740
|
if (shape.fields.length === 0) {
|
|
@@ -910,13 +1046,13 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
910
1046
|
// Node prints the class's OWN name — the declaration's, never the
|
|
911
1047
|
// IR name's module qualifier (`m0.Timer` is the frontend's spelling
|
|
912
1048
|
// for a class declared in a non-entry module).
|
|
913
|
-
const display = info.decl?.name?.text ?? info.def.name.replace(/^%/, "");
|
|
1049
|
+
const display = info.def.jsName ?? info.decl?.name?.text ?? info.def.name.replace(/^%/, "");
|
|
914
1050
|
// #private fields never render: they are not properties in any
|
|
915
1051
|
// observable way — Node's inspect omits them entirely (verified),
|
|
916
1052
|
// so a class whose only fields are private prints as `C {}`.
|
|
917
1053
|
const visible = info.def.fields.filter((f) => !f.name.startsWith("#"));
|
|
918
1054
|
if (visible.length === 0) {
|
|
919
|
-
body = [ret(strLit(`${display} {}`, loc))];
|
|
1055
|
+
body = [ret(strLit(display === "" ? "{}" : `${display} {}`, loc))];
|
|
920
1056
|
break;
|
|
921
1057
|
}
|
|
922
1058
|
const get = (field, type) => ({
|
|
@@ -927,7 +1063,7 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
927
1063
|
type,
|
|
928
1064
|
loc,
|
|
929
1065
|
});
|
|
930
|
-
body = [depthGate(`[${display}]`), ...begin()];
|
|
1066
|
+
body = [depthGate(display === "" ? "[Object]" : `[${display}]`), ...begin()];
|
|
931
1067
|
// def.fields carries layout order: the base chain first, then own —
|
|
932
1068
|
// exactly the own-property insertion order of a constructor that
|
|
933
1069
|
// assigns in declaration order (SEMANTICS.md 36's stance). SYMBOL-
|
|
@@ -948,7 +1084,7 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
948
1084
|
const key = symNames.has(f.name) ? symbolFieldDisplayName(f.name) : inspectKey(f.name);
|
|
949
1085
|
body.push(entry(concatAll([strLit(`${key}: `, loc), child(f.type, get(f.name, f.type))], loc), boolLit(false, loc)));
|
|
950
1086
|
}
|
|
951
|
-
body.push(ret(end(strLit("", loc), strLit(`${display} {`, loc), strLit("}", loc), false, boolLit(false, loc))));
|
|
1087
|
+
body.push(ret(end(strLit("", loc), strLit(display === "" ? "{" : `${display} {`, loc), strLit("}", loc), false, boolLit(false, loc))));
|
|
952
1088
|
break;
|
|
953
1089
|
}
|
|
954
1090
|
default:
|
|
@@ -1108,7 +1244,7 @@ export function lowerConsoleInspectArg(lowerer, node, value, surface, loc) {
|
|
|
1108
1244
|
if (t.kind === "undefinedT" || t.kind === "nullT") {
|
|
1109
1245
|
// The baked text ("undefined"/"null"): the operand is a literal or a
|
|
1110
1246
|
// pure read, so dropping its evaluation loses nothing. Effectful
|
|
1111
|
-
// unit-typed operands
|
|
1247
|
+
// unit-typed operands report SC1090 instead of being skipped.
|
|
1112
1248
|
if (value.kind !== "unitLit" && !isSafeToRepeat(value)) {
|
|
1113
1249
|
lowerer.unsupported("SC1090", node, `${surface} of an effectful '${lowerer.fmt(t)}'-typed expression (evaluate it first: const v = ...; ${surface}(v))`);
|
|
1114
1250
|
}
|
|
@@ -1484,7 +1620,8 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
|
|
|
1484
1620
|
// context.actual)` — test/common's exit report): VALIDATE it as a
|
|
1485
1621
|
// number (dynCheck) and format. A non-number dyn value throws the
|
|
1486
1622
|
// catchable TypeError where Node would print its ToNumber (NaN
|
|
1487
|
-
// for objects) —
|
|
1623
|
+
// for objects) — it throws instead of returning a wrong result
|
|
1624
|
+
// (SEMANTICS.md).
|
|
1488
1625
|
if (value.type.kind === "dyn") {
|
|
1489
1626
|
return {
|
|
1490
1627
|
kind: "libCall",
|
|
@@ -1536,7 +1673,8 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
|
|
|
1536
1673
|
// A checked-dynamic argument (`console.error('headers: %j',
|
|
1537
1674
|
// headers)` — the suite's http logging idiom): the runtime dyn
|
|
1538
1675
|
// walk stringifies JS-exactly (root undefined/function prints
|
|
1539
|
-
// "undefined"; a handle in the tree throws the
|
|
1676
|
+
// "undefined"; a handle in the tree throws the "not supported yet"
|
|
1677
|
+
// Error).
|
|
1540
1678
|
if (value.type.kind === "dyn") {
|
|
1541
1679
|
return { kind: "libCall", fn: "insp.jsonDyn", args: [value], type: STRING, loc };
|
|
1542
1680
|
}
|
|
@@ -1545,6 +1683,61 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
|
|
|
1545
1683
|
}
|
|
1546
1684
|
return { kind: "jsonStringify", value, type: STRING, loc };
|
|
1547
1685
|
}
|
|
1686
|
+
case 102: {
|
|
1687
|
+
// %f — parseFloat(String(arg)) formatted: a number keeps its value
|
|
1688
|
+
// except -0, which String() prints as "0"; strings parse with the
|
|
1689
|
+
// global parseFloat; booleans and unit values (void calls and
|
|
1690
|
+
// null | undefined unions included) parse to NaN.
|
|
1691
|
+
const value = lowerer.lowerExpr(node);
|
|
1692
|
+
const format = (number) => ({
|
|
1693
|
+
kind: "libCall",
|
|
1694
|
+
fn: "insp.f64",
|
|
1695
|
+
args: [number],
|
|
1696
|
+
type: STRING,
|
|
1697
|
+
loc,
|
|
1698
|
+
});
|
|
1699
|
+
const parse = (text) => format({ kind: "libCall", fn: "num.parseFloat", args: [text], type: F64, loc });
|
|
1700
|
+
if (value.type.kind === "f64")
|
|
1701
|
+
return format({
|
|
1702
|
+
kind: "bin",
|
|
1703
|
+
op: "+",
|
|
1704
|
+
left: value,
|
|
1705
|
+
right: numLit(0, loc),
|
|
1706
|
+
type: F64,
|
|
1707
|
+
loc,
|
|
1708
|
+
});
|
|
1709
|
+
if (value.type.kind === "string")
|
|
1710
|
+
return parse(value);
|
|
1711
|
+
if (value.type.kind === "dyn") {
|
|
1712
|
+
return parse({
|
|
1713
|
+
kind: "libCall",
|
|
1714
|
+
fn: "dyn.toStringCoerce",
|
|
1715
|
+
args: [value],
|
|
1716
|
+
type: STRING,
|
|
1717
|
+
loc,
|
|
1718
|
+
});
|
|
1719
|
+
}
|
|
1720
|
+
const unitArms = (t) => t.kind === "union" && (lowerer.unions.get(t.unionId)?.arms.every(isUnitType) ?? false);
|
|
1721
|
+
if (value.type.kind === "bool" ||
|
|
1722
|
+
value.type.kind === "void" ||
|
|
1723
|
+
isUnitType(value.type) ||
|
|
1724
|
+
unitArms(value.type)) {
|
|
1725
|
+
// The argument still evaluates once, for its effects: the value
|
|
1726
|
+
// already lowered, as a statement (never a second lowering of the
|
|
1727
|
+
// node, whose lifted helpers and closures would be built twice).
|
|
1728
|
+
if (isSafeToDiscard(value))
|
|
1729
|
+
return strLit("NaN", loc);
|
|
1730
|
+
return {
|
|
1731
|
+
kind: "seqExpr",
|
|
1732
|
+
stmts: [{ kind: "exprStmt", expr: value, loc }],
|
|
1733
|
+
result: strLit("NaN", loc),
|
|
1734
|
+
type: STRING,
|
|
1735
|
+
loc,
|
|
1736
|
+
};
|
|
1737
|
+
}
|
|
1738
|
+
lowerer.noLowering(`util.format %f of '${lowerer.fmt(value.type)}' values`, node, "pass a number, string or boolean, or convert the argument with String() first");
|
|
1739
|
+
return strLit("NaN", loc);
|
|
1740
|
+
}
|
|
1548
1741
|
case 79: // %O — inspect at the defaults
|
|
1549
1742
|
return formatOArg(lowerer, node, 2, loc);
|
|
1550
1743
|
case 111: // %o — showHidden semantics; depth 4
|
|
@@ -1562,6 +1755,7 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
|
|
|
1562
1755
|
case 100: // d
|
|
1563
1756
|
case 79: // O
|
|
1564
1757
|
case 111: // o
|
|
1758
|
+
case 102: // f
|
|
1565
1759
|
case 105: {
|
|
1566
1760
|
// i
|
|
1567
1761
|
const node = args[++a];
|
|
@@ -1571,9 +1765,6 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
|
|
|
1571
1765
|
lastPos = i + 1;
|
|
1572
1766
|
continue;
|
|
1573
1767
|
}
|
|
1574
|
-
case 102: // f — parseFloat's full grammar has no static lowering
|
|
1575
|
-
lowerer.noLowering("util.format %f", expr, "parseFloat has no native lowering");
|
|
1576
|
-
break;
|
|
1577
1768
|
case 99: // c — consumes its argument, contributes nothing
|
|
1578
1769
|
a += 1;
|
|
1579
1770
|
if (lastPos !== i - 1)
|
|
@@ -1898,7 +2089,7 @@ function lowerParseArgsCall(lowerer, expr, loc) {
|
|
|
1898
2089
|
* mustNotCall — `callSite.scriptName`:`callSite.lineNumber` in the
|
|
1899
2090
|
* failure text — read a printable value instead of throwing). Argument
|
|
1900
2091
|
* forms and TypeScript keep the SC2020 fence: a typed consumer asserting
|
|
1901
|
-
* real frames must fail
|
|
2092
|
+
* real frames must fail at compile time instead of reading placeholders. */
|
|
1902
2093
|
function lowerGetCallSitesCall(lowerer, expr, loc) {
|
|
1903
2094
|
if (expr.arguments.length !== 0)
|
|
1904
2095
|
return null;
|