@scriptc/compiler 0.2.6 → 0.2.7
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 +5 -18
- package/dist/backend/cycle-analysis.d.ts +21 -9
- package/dist/backend/cycle-analysis.js +139 -67
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-analysis.test.js +283 -3
- package/dist/backend/cycle-analysis.test.js.map +1 -1
- package/dist/backend/cycle-mutability.d.ts +39 -0
- package/dist/backend/cycle-mutability.js +205 -0
- package/dist/backend/cycle-mutability.js.map +1 -0
- package/dist/backend/link-plan-core.d.ts +2 -1
- package/dist/backend/link-plan-core.js +15 -3
- package/dist/backend/link-plan-core.js.map +1 -1
- package/dist/backend/link-plan.d.ts +2 -1
- package/dist/backend/link-plan.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +40 -0
- package/dist/backend/llvm/alloc.js +205 -0
- package/dist/backend/llvm/alloc.js.map +1 -0
- package/dist/backend/llvm/alloc.test.d.ts +1 -0
- package/dist/backend/llvm/alloc.test.js +102 -0
- package/dist/backend/llvm/alloc.test.js.map +1 -0
- package/dist/backend/llvm/call-lifetimes.d.ts +15 -3
- package/dist/backend/llvm/call-lifetimes.js +42 -18
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +170 -0
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +4 -1
- package/dist/backend/llvm/classes.js +35 -32
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +36 -3
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +13 -0
- package/dist/backend/llvm/common.js +30 -0
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +19 -3
- package/dist/backend/llvm/constant-callbacks.js +289 -52
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +140 -3
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +29 -0
- package/dist/backend/llvm/dense-array-access.js +335 -0
- package/dist/backend/llvm/dense-array-access.js.map +1 -0
- package/dist/backend/llvm/dense-array-access.test.d.ts +1 -0
- package/dist/backend/llvm/dense-array-access.test.js +149 -0
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +34 -0
- package/dist/backend/llvm/dyn.js +189 -1
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +124 -4
- package/dist/backend/llvm/emitter.js +623 -105
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +68 -6
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +58 -4
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-async.test.d.ts +1 -0
- package/dist/backend/llvm/expr-async.test.js +62 -0
- package/dist/backend/llvm/expr-async.test.js.map +1 -0
- package/dist/backend/llvm/expr-calls.js +64 -6
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +16 -5
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-control.js +92 -2
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dispatch.js +2 -0
- package/dist/backend/llvm/expr-dispatch.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +174 -25
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.d.ts +1 -1
- package/dist/backend/llvm/expr-primitives.js +52 -24
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +1 -1
- package/dist/backend/llvm/expr-records.js +3 -3
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +59 -2
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
- package/dist/backend/llvm/integer-remainder.d.ts +11 -0
- package/dist/backend/llvm/integer-remainder.js +91 -0
- package/dist/backend/llvm/integer-remainder.js.map +1 -1
- package/dist/backend/llvm/layouts.d.ts +2 -1
- package/dist/backend/llvm/layouts.js +3 -2
- package/dist/backend/llvm/layouts.js.map +1 -1
- package/dist/backend/llvm/lazy-captures.d.ts +16 -0
- package/dist/backend/llvm/lazy-captures.js +96 -0
- package/dist/backend/llvm/lazy-captures.js.map +1 -0
- package/dist/backend/llvm/lazy-captures.test.d.ts +1 -0
- package/dist/backend/llvm/lazy-captures.test.js +78 -0
- package/dist/backend/llvm/lazy-captures.test.js.map +1 -0
- package/dist/backend/llvm/lib-filesystem.js +3 -4
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.d.ts +5 -1
- package/dist/backend/llvm/local-array-reads.js +78 -17
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +78 -1
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.d.ts +5 -1
- package/dist/backend/llvm/local-union-storage.js +48 -6
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +91 -4
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +1 -1
- package/dist/backend/llvm/nullable-fields.d.ts +28 -0
- package/dist/backend/llvm/nullable-fields.js +45 -0
- package/dist/backend/llvm/nullable-fields.js.map +1 -0
- package/dist/backend/llvm/nullable-fields.test.d.ts +1 -0
- package/dist/backend/llvm/nullable-fields.test.js +48 -0
- package/dist/backend/llvm/nullable-fields.test.js.map +1 -0
- package/dist/backend/llvm/serialized-ir-emission.test.d.ts +1 -0
- package/dist/backend/llvm/serialized-ir-emission.test.js +52 -0
- package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +69 -2
- package/dist/backend/llvm/shapes.js +259 -27
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +114 -5
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/stack-callbacks.js +2 -3
- package/dist/backend/llvm/stack-callbacks.js.map +1 -1
- package/dist/backend/llvm/stack-captures.d.ts +3 -1
- package/dist/backend/llvm/stack-captures.js +5 -3
- package/dist/backend/llvm/stack-captures.js.map +1 -1
- package/dist/backend/llvm/stack-unions.test.js +38 -1
- package/dist/backend/llvm/stack-unions.test.js.map +1 -1
- package/dist/backend/llvm/string-construction.test.js +1 -1
- package/dist/backend/llvm/string-key-hash.d.ts +8 -0
- package/dist/backend/llvm/string-key-hash.js +59 -0
- package/dist/backend/llvm/string-key-hash.js.map +1 -0
- package/dist/backend/llvm/string-key-hash.test.d.ts +1 -0
- package/dist/backend/llvm/string-key-hash.test.js +34 -0
- package/dist/backend/llvm/string-key-hash.test.js.map +1 -0
- package/dist/backend/llvm/string-lifetimes.test.js +41 -4
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/switch-dispatch.js +1 -1
- package/dist/backend/llvm/switch-dispatch.js.map +1 -1
- package/dist/backend/llvm/switch-dispatch.test.js +2 -2
- package/dist/backend/llvm/switch-dispatch.test.js.map +1 -1
- package/dist/backend/may-throw.js +3 -0
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +1 -1
- package/dist/backend/native/cache-warm.d.ts +2 -1
- package/dist/backend/native/cache-warm.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +3 -2
- package/dist/backend/native/contracts.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +1 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +2 -1
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +5 -0
- package/dist/backend/native-codegen.js +4 -0
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +23 -0
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +3 -2
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-link-info.d.ts +2 -1
- package/dist/backend/native-link-info.js.map +1 -1
- package/dist/backend/native-link-info.test.js +2 -2
- package/dist/backend/native-link-info.test.js.map +1 -1
- package/dist/backend/native-tools.d.ts +3 -1
- package/dist/backend/native-tools.js +0 -1
- package/dist/backend/native-tools.js.map +1 -1
- package/dist/backend/optimization.d.ts +25 -0
- package/dist/backend/optimization.js +21 -0
- package/dist/backend/optimization.js.map +1 -0
- package/dist/backend/optimization.test.d.ts +1 -0
- package/dist/backend/optimization.test.js +24 -0
- package/dist/backend/optimization.test.js.map +1 -0
- 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 +15 -4
- package/dist/backend/runtime-pack-core.js +23 -12
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.d.ts +7 -3
- package/dist/backend/runtime-pack-native.js +0 -3
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack.d.ts +20 -2
- package/dist/backend/runtime-pack.js +23 -0
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +115 -2
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +1 -1
- package/dist/backend/targets.d.ts +2 -1
- package/dist/backend/targets.js +1 -1
- package/dist/backend/targets.js.map +1 -1
- package/dist/cli/command.js +5 -4
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/host.d.ts +2 -1
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +5 -2
- package/dist/cli/usage.js.map +1 -1
- package/dist/compile-types.d.ts +5 -2
- package/dist/diagnostics/diagnostic.js +10 -8
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +2 -2
- package/dist/executable/executable-cache.js +7 -4
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +20 -0
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/frontend/lowering/abstract-equality.js +5 -49
- package/dist/frontend/lowering/abstract-equality.js.map +1 -1
- package/dist/frontend/lowering/array-values.d.ts +23 -0
- package/dist/frontend/lowering/array-values.js +129 -0
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.js +17 -2
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +6 -17
- package/dist/frontend/lowering/builtins/process.js +56 -29
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/caught-value-dispatch.d.ts +11 -0
- package/dist/frontend/lowering/caught-value-dispatch.js +87 -0
- package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -0
- package/dist/frontend/lowering/class-assertions.d.ts +4 -0
- package/dist/frontend/lowering/class-assertions.js +12 -4
- package/dist/frontend/lowering/class-assertions.js.map +1 -1
- package/dist/frontend/lowering/class-callbacks.d.ts +3 -3
- package/dist/frontend/lowering/class-callbacks.js +18 -5
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +4 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.d.ts +5 -0
- package/dist/frontend/lowering/class-method-mutations.js +472 -0
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -0
- package/dist/frontend/lowering/class-method-values.js +25 -5
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.js +8 -2
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-unions.d.ts +16 -0
- package/dist/frontend/lowering/class-unions.js +127 -0
- package/dist/frontend/lowering/class-unions.js.map +1 -0
- package/dist/frontend/lowering/coercions/builders.js +8 -1
- package/dist/frontend/lowering/coercions/builders.js.map +1 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +2 -0
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/identity.d.ts +7 -0
- package/dist/frontend/lowering/coercions/identity.js +26 -0
- package/dist/frontend/lowering/coercions/identity.js.map +1 -0
- package/dist/frontend/lowering/coercions/structural.js +9 -6
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/collection-narrowing.d.ts +6 -0
- package/dist/frontend/lowering/collection-narrowing.js +31 -0
- package/dist/frontend/lowering/collection-narrowing.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callback-call.d.ts +7 -0
- package/dist/frontend/lowering/containers/array-callback-call.js +52 -0
- package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +363 -49
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.d.ts +7 -0
- package/dist/frontend/lowering/containers/array-concat.js +130 -0
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -0
- package/dist/frontend/lowering/containers/array-construction.d.ts +2 -0
- package/dist/frontend/lowering/containers/array-construction.js +95 -3
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.d.ts +1 -11
- package/dist/frontend/lowering/containers/array-methods.js +43 -132
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +10 -1
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +56 -70
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.d.ts +41 -0
- package/dist/frontend/lowering/cycle-initialization.js +277 -0
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -0
- package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -0
- package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +138 -32
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-field-write.d.ts +4 -4
- package/dist/frontend/lowering/expressions/union-field-write.js +54 -44
- package/dist/frontend/lowering/expressions/union-field-write.js.map +1 -1
- package/dist/frontend/lowering/iterator-adapters.d.ts +20 -0
- package/dist/frontend/lowering/iterator-adapters.js +605 -0
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -0
- package/dist/frontend/lowering/lower-array-sort.d.ts +1 -1
- package/dist/frontend/lowering/lower-array-sort.js +44 -5
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.test.d.ts +1 -0
- package/dist/frontend/lowering/lower-array-sort.test.js +31 -0
- package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -0
- package/dist/frontend/lowering/lower-assert.js +7 -0
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.js +1 -0
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +3 -3
- package/dist/frontend/lowering/lower-calls.js +162 -121
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +2 -0
- package/dist/frontend/lowering/lower-classes.js +45 -43
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +9 -2
- package/dist/frontend/lowering/lower-exprs.js +390 -157
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +32 -19
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +26 -2
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +10 -2
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +46 -58
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +37 -0
- package/dist/frontend/lowering/lowerer.js +283 -18
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.js +3 -1
- package/dist/frontend/lowering/native-ffi.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-provenance.d.ts +15 -0
- package/dist/frontend/lowering/runtime-optional-provenance.js +40 -0
- package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -0
- package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
- package/dist/frontend/lowering/strict-equality.d.ts +9 -0
- package/dist/frontend/lowering/strict-equality.js +116 -0
- package/dist/frontend/lowering/strict-equality.js.map +1 -0
- package/dist/frontend/lowering/surfaces.js +3 -0
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/union-comparison.d.ts +5 -0
- package/dist/frontend/lowering/union-comparison.js +47 -0
- package/dist/frontend/lowering/union-comparison.js.map +1 -0
- package/dist/frontend/program.d.ts +38 -2
- package/dist/frontend/program.js +440 -59
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +59 -6
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +1 -1
- package/dist/frontend/type-mapper.js +89 -14
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.js +15 -3
- package/dist/frontend/type-mapper.test.js.map +1 -1
- package/dist/index.js +25 -9
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.d.ts +3 -1
- package/dist/ir/analysis.js +4 -0
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/builtin-signatures.js +2 -3
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/constant-tables.test.js +1 -1
- package/dist/ir/initializer-bindings.test.js +1 -1
- package/dist/ir/ir.d.ts +78 -15
- package/dist/ir/ir.js +20 -6
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/scalar-records.test.js +1 -1
- package/dist/ir/serialize.d.ts +1 -1
- package/dist/ir/serialize.js +3 -3
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/traverse.js +8 -0
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +118 -20
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +269 -8
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/fence-eval.test.js +1 -1
- package/dist/library/int-infer.test.js +4 -4
- package/dist/library/library-cache.test.js +5 -5
- package/dist/library/library-profile.d.ts +2 -1
- package/dist/library/library-profile.js +4 -3
- package/dist/library/library-profile.js.map +1 -1
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +2 -2
- package/dist/native/library.d.ts +2 -1
- package/dist/native/library.js.map +1 -1
- package/dist/native/prepare.js +27 -3
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.d.ts +3 -2
- package/dist/native/sanitizer.js +3 -13
- package/dist/native/sanitizer.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +8 -2
|
@@ -164,6 +164,8 @@ export interface ClassInfo {
|
|
|
164
164
|
staticFields: {
|
|
165
165
|
name: string;
|
|
166
166
|
type: IrType;
|
|
167
|
+
/** Indexed sources can be absent despite the declared static type. */
|
|
168
|
+
runtimeOptional?: true;
|
|
167
169
|
initializer: ts.Expression;
|
|
168
170
|
globalId: string;
|
|
169
171
|
readonly: boolean;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { dynUndefinedExpr, nodeThrowExpr } from "../../ir/build.js";
|
|
2
|
+
import { collectClassMethodMutations } from "./class-method-mutations.js";
|
|
2
3
|
import { InternalCompilerError } from "../../errors.js";
|
|
3
4
|
/* Class lowering: shape collection over the single-inheritance graph
|
|
4
5
|
* (fields, methods, accessors, overrides), constructor/member lowering with
|
|
@@ -380,6 +381,10 @@ export function registerBuiltinErrorClasses(lowerer) {
|
|
|
380
381
|
{ name: "%nameEnumerable", type: BOOL },
|
|
381
382
|
{ name: "%stackFrames", type: STRING },
|
|
382
383
|
{ name: "%stack", type: STRING },
|
|
384
|
+
{ name: "%systemErrno", type: F64 },
|
|
385
|
+
{ name: "%systemCall", type: STRING },
|
|
386
|
+
{ name: "%systemPath", type: STRING },
|
|
387
|
+
{ name: "%systemDest", type: STRING },
|
|
383
388
|
],
|
|
384
389
|
loc,
|
|
385
390
|
},
|
|
@@ -1883,8 +1888,8 @@ mixin) {
|
|
|
1883
1888
|
// declaration is an ordinary OWN field (tsc guarantees every
|
|
1884
1889
|
// instantiable subclass declares it and, under
|
|
1885
1890
|
// strictPropertyInitialization, initializes it). Reads through
|
|
1886
|
-
// ABSTRACT-typed receivers
|
|
1887
|
-
//
|
|
1891
|
+
// ABSTRACT-typed receivers resolve the concrete instance's
|
|
1892
|
+
// property through checked class dispatch.
|
|
1888
1893
|
if (modifiers?.some((m) => m.kind === ts.SyntaxKind.AbstractKeyword))
|
|
1889
1894
|
continue;
|
|
1890
1895
|
if (modifiers?.some((m) => m.kind === ts.SyntaxKind.AccessorKeyword)) {
|
|
@@ -2234,15 +2239,12 @@ mixin) {
|
|
|
2234
2239
|
if (findGenericMethodOn(lowerer, base, mName)) {
|
|
2235
2240
|
lowerer.unsupported("SC1090", member.name, `overriding the inherited generic method '${mName}' with a non-generic method (generic methods dispatch statically and would never reach this override)`);
|
|
2236
2241
|
}
|
|
2237
|
-
// Abstract re-declarations keep the overridden ABI exactly,
|
|
2238
|
-
// like any override (a concrete implementation below must
|
|
2239
|
-
// agree with BOTH, which exactness makes one constraint).
|
|
2240
2242
|
const overridden = lowerer.findMethodOn(base, mName);
|
|
2241
2243
|
if (overridden &&
|
|
2242
2244
|
(overridden.sig.params.length !== shapes.length ||
|
|
2243
2245
|
!overridden.sig.params.every((p, i) => typeEquals(p.type, shapes[i].type)) ||
|
|
2244
|
-
!typeEquals(overridden.sig.ret, ret))) {
|
|
2245
|
-
lowerer.unsupported("SC1090", member.name, "overriding a method with a different signature (parameter
|
|
2246
|
+
!typeEquals(overridden.sig.ret, overrideReturnAbi(lowerer, ret, overridden.sig.ret, className, base)))) {
|
|
2247
|
+
lowerer.unsupported("SC1090", member.name, "overriding a method with a different signature (parameter types must match the base declaration exactly; returns may narrow to a subclass)");
|
|
2246
2248
|
}
|
|
2247
2249
|
methods.set(mName, { params: shapes, ret, abstract: true });
|
|
2248
2250
|
continue;
|
|
@@ -2363,11 +2365,12 @@ mixin) {
|
|
|
2363
2365
|
if (refined)
|
|
2364
2366
|
ft.ret = refined;
|
|
2365
2367
|
}
|
|
2366
|
-
// Overrides keep the
|
|
2368
|
+
// Overrides keep the inherited ABI signature. tsc's method
|
|
2367
2369
|
// bivariance would let a narrowed parameter type through, and a
|
|
2368
2370
|
// vtable-dispatched call could then hand the override a base
|
|
2369
2371
|
// instance it reads out-of-bounds fields from — exactness keeps
|
|
2370
|
-
// every slot sound
|
|
2372
|
+
// every parameter slot sound. Nominal covariant returns share the
|
|
2373
|
+
// base pointer ABI while retaining their declared result type. Comparing
|
|
2371
2374
|
// ABI types only (not modes) is deliberate: call sites complete
|
|
2372
2375
|
// against the STATIC receiver's shape, so `m(x?: number)` and
|
|
2373
2376
|
// `m(x: number | undefined)` interchange soundly in overrides.
|
|
@@ -2429,7 +2432,7 @@ mixin) {
|
|
|
2429
2432
|
member.asteriskToken === undefined &&
|
|
2430
2433
|
(overridden.sig.params.length !== shapes.length ||
|
|
2431
2434
|
!overridden.sig.params.every((p, i) => typeEquals(p.type, shapes[i].type)) ||
|
|
2432
|
-
!typeEquals(overridden.sig.ret, ft.ret))) {
|
|
2435
|
+
!typeEquals(overridden.sig.ret, overrideReturnAbi(lowerer, ft.ret, overridden.sig.ret, className, base)))) {
|
|
2433
2436
|
const fencedJsOverride = isJsSourceFile(member.getSourceFile()) &&
|
|
2434
2437
|
overridden.declarer.decl !== null &&
|
|
2435
2438
|
isJsSourceFile(overridden.declarer.decl.getSourceFile()) &&
|
|
@@ -2456,12 +2459,12 @@ mixin) {
|
|
|
2456
2459
|
});
|
|
2457
2460
|
methodEntryFences.set(mName, unsupportedDiag("SC1090", locOf(member.name), returnOnly
|
|
2458
2461
|
? `overriding method '${mName}' with a different return type (the native return type must match the base declaration exactly)`
|
|
2459
|
-
: `overriding method '${mName}' with a different signature (the native parameter
|
|
2462
|
+
: `overriding method '${mName}' with a different signature (the native parameter types must match the base declaration exactly; returns may narrow to a subclass)`));
|
|
2460
2463
|
shapes.splice(0, shapes.length, ...overridden.sig.params);
|
|
2461
2464
|
ft.ret = overridden.sig.ret;
|
|
2462
2465
|
}
|
|
2463
2466
|
else {
|
|
2464
|
-
lowerer.unsupported("SC1090", member.name, "overriding a method with a different signature (parameter
|
|
2467
|
+
lowerer.unsupported("SC1090", member.name, "overriding a method with a different signature (parameter types must match the base declaration exactly; returns may narrow to a subclass)");
|
|
2465
2468
|
}
|
|
2466
2469
|
}
|
|
2467
2470
|
const asyncMember = member.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword) === true;
|
|
@@ -3939,7 +3942,13 @@ export function lowerStaticFieldRead(lowerer, expr) {
|
|
|
3939
3942
|
lowerer.unsupported("SC1090", expr, `reading the private static '${expr.name.text}' through the subclass '${info.def.name.replace(/^%|^%m\d+\./, "")}' (JS brands the declaring class object alone — Node throws a TypeError here; spell the declaring class's name)`);
|
|
3940
3943
|
}
|
|
3941
3944
|
if (found?.field !== undefined) {
|
|
3942
|
-
|
|
3945
|
+
const value = {
|
|
3946
|
+
kind: "varRef",
|
|
3947
|
+
localId: found.field.globalId,
|
|
3948
|
+
type: found.field.type,
|
|
3949
|
+
loc,
|
|
3950
|
+
};
|
|
3951
|
+
return found.field.runtimeOptional ? value : lowerer.maybeNarrow(value, expr);
|
|
3943
3952
|
}
|
|
3944
3953
|
if (found) {
|
|
3945
3954
|
return staticMethodValue(lowerer, found.declarer, expr.name.text, found.method, expr, loc);
|
|
@@ -4752,7 +4761,13 @@ export function lowerClassValueProperty(lowerer, expr) {
|
|
|
4752
4761
|
lowerer.unsupported("SC1090", expr, `reading the static member '${member}' through a class value (a subclass of '${info.def.name.replace(/^%|^%m\d+\./, "")}' redeclares it, so the runtime class decides which declaration answers)`);
|
|
4753
4762
|
}
|
|
4754
4763
|
if (found.field !== undefined) {
|
|
4755
|
-
|
|
4764
|
+
const value = {
|
|
4765
|
+
kind: "varRef",
|
|
4766
|
+
localId: found.field.globalId,
|
|
4767
|
+
type: found.field.type,
|
|
4768
|
+
loc,
|
|
4769
|
+
};
|
|
4770
|
+
return found.field.runtimeOptional ? value : lowerer.maybeNarrow(value, expr);
|
|
4756
4771
|
}
|
|
4757
4772
|
return staticMethodValue(lowerer, found.declarer, member, found.method, expr, loc);
|
|
4758
4773
|
}
|
|
@@ -4770,6 +4785,20 @@ function abstractMemberSignature(lowerer, member) {
|
|
|
4770
4785
|
ret: lowerer.declaredReturnType(member, member.name),
|
|
4771
4786
|
};
|
|
4772
4787
|
}
|
|
4788
|
+
/** A nominal return subtype uses the same owned pointer as the inherited
|
|
4789
|
+
* return slot. The current class is still being collected, so consult its
|
|
4790
|
+
* already collected base chain before the complete class graph is available. */
|
|
4791
|
+
function overrideReturnAbi(lowerer, declared, inherited, className, base) {
|
|
4792
|
+
if (declared.kind !== "object" || inherited.kind !== "object")
|
|
4793
|
+
return declared;
|
|
4794
|
+
if (lowerer.isSubclassOf(declared.className, inherited.className) ||
|
|
4795
|
+
(declared.className === className &&
|
|
4796
|
+
base !== null &&
|
|
4797
|
+
(base.def.name === inherited.className ||
|
|
4798
|
+
lowerer.isSubclassOf(base.def.name, inherited.className))))
|
|
4799
|
+
return inherited;
|
|
4800
|
+
return declared;
|
|
4801
|
+
}
|
|
4773
4802
|
/** The nearest declaration of `name` at or above `info` — the method a
|
|
4774
4803
|
* receiver of that static class runs when nothing below overrides it. */
|
|
4775
4804
|
export function findMethodOn(lowerer, info, name) {
|
|
@@ -4933,34 +4962,7 @@ export function collectInheritedJsFieldWrites(lowerer, files) {
|
|
|
4933
4962
|
* hierarchy identifies the original declarations through aliases as well. */
|
|
4934
4963
|
export function collectVirtualJsMethods(lowerer, files) {
|
|
4935
4964
|
const families = [];
|
|
4936
|
-
|
|
4937
|
-
// Those slots need a callable ABI even when JavaScript would otherwise
|
|
4938
|
-
// specialize each call independently.
|
|
4939
|
-
for (const file of files)
|
|
4940
|
-
ts.walkPreorder(file, (node) => {
|
|
4941
|
-
if (!ts.isPropertyAccessExpression(node) && !ts.isElementAccessExpression(node))
|
|
4942
|
-
return;
|
|
4943
|
-
const name = ts.isPropertyAccessExpression(node)
|
|
4944
|
-
? node.name.text
|
|
4945
|
-
: ts.isStringLiteralLike(node.argumentExpression)
|
|
4946
|
-
? node.argumentExpression.text
|
|
4947
|
-
: null;
|
|
4948
|
-
if (name === null)
|
|
4949
|
-
return;
|
|
4950
|
-
const prototype = ts.isPropertyAccessExpression(node.expression) && node.expression.name.text === "prototype";
|
|
4951
|
-
const assigned = ts.isBinaryExpression(node.parent) &&
|
|
4952
|
-
node.parent.left === node &&
|
|
4953
|
-
node.parent.operatorToken.kind === ts.SyntaxKind.EqualsToken;
|
|
4954
|
-
const symbol = !assigned
|
|
4955
|
-
? undefined
|
|
4956
|
-
: ts.isPropertyAccessExpression(node)
|
|
4957
|
-
? lowerer.checker.getSymbolAtLocation(node.name)
|
|
4958
|
-
: lowerer.checker.getPropertyOfType(lowerer.typeOf(node.expression), name);
|
|
4959
|
-
if (prototype ||
|
|
4960
|
-
(symbol && lowerer.checker.declarationsOf(symbol).some(ts.isMethodDeclaration))) {
|
|
4961
|
-
lowerer.prototypeMethodAccesses.set(name, node);
|
|
4962
|
-
}
|
|
4963
|
-
});
|
|
4965
|
+
collectClassMethodMutations(lowerer, files);
|
|
4964
4966
|
const visit = (node) => {
|
|
4965
4967
|
if (ts.isClassDeclaration(node) || ts.isClassExpression(node)) {
|
|
4966
4968
|
const accessors = node.members.filter((member) => (ts.isGetAccessorDeclaration(member) || ts.isSetAccessorDeclaration(member)) &&
|
|
@@ -7273,7 +7275,7 @@ export function lowerNew(lowerer, expr) {
|
|
|
7273
7275
|
if (targs[1]) {
|
|
7274
7276
|
lowerer.unsupported("SC1090", expr, `Map values of type '${lowerer.checker.typeToString(targs[1])}' ` +
|
|
7275
7277
|
`(Map values must be number, string, boolean, records, class instances, ` +
|
|
7276
|
-
`arrays, promises, Maps, Sets, or unions
|
|
7278
|
+
`typed arrays, arrays, promises, Maps, Sets, or supported unions and checked values)`);
|
|
7277
7279
|
}
|
|
7278
7280
|
lowerer.badType(expr, tsType);
|
|
7279
7281
|
}
|