@scriptc/compiler 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ambient/scriptc-node-fallback.d.ts +342 -16
- 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 +39 -15
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/alloc.test.js +15 -1
- 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/call-lifetimes.d.ts +4 -1
- package/dist/backend/llvm/call-lifetimes.js +51 -3
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.js +10 -2
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +2 -2
- package/dist/backend/llvm/dense-array-access.js +17 -12
- 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 +2 -0
- package/dist/backend/llvm/dyn.js +11 -2
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +43 -2
- package/dist/backend/llvm/emitter.js +306 -32
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +122 -6
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.d.ts +8 -0
- package/dist/backend/llvm/expr-callbacks.js +81 -1
- 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 +126 -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 +38 -7
- 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 +2 -2
- 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 +30 -26
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +11 -1
- 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 +77 -8
- 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/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/lib-dispatch.js +7 -0
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +58 -0
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +76 -9
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +5 -3
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.d.ts +24 -2
- package/dist/backend/llvm/local-union-storage.js +127 -12
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +106 -1
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/record-results.d.ts +26 -0
- package/dist/backend/llvm/record-results.js +252 -0
- package/dist/backend/llvm/record-results.js.map +1 -0
- package/dist/backend/llvm/reference-effects.js +2 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +15 -9
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/regions.d.ts +67 -0
- package/dist/backend/llvm/regions.js +309 -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/shapes.d.ts +34 -7
- package/dist/backend/llvm/shapes.js +31 -16
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +7 -6
- 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 +130 -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 +252 -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 +2 -0
- package/dist/backend/llvm/walkers.js +4 -2
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/may-throw.js +1 -0
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +5 -0
- package/dist/backend/native/executable.js +16 -1
- 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 +2 -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/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 +14 -0
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +13 -0
- package/dist/backend/target-diagnostics.test.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/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/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/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/errors.js +20 -0
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- 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/module-calls.js +16 -1
- 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/process.js +15 -3
- 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/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/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 +6 -3
- package/dist/frontend/lowering/class-dynamic-dispatch.js +54 -31
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +34 -4
- 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-pipelines.js +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.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/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/object-literals.js +5 -56
- 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/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 +28 -2
- package/dist/frontend/lowering/lower-array-sort.js +100 -3
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.test.js +99 -2
- package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +72 -102
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +4 -3
- package/dist/frontend/lowering/lower-classes.js +116 -2
- package/dist/frontend/lowering/lower-classes.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-exprs.js +137 -22
- 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 +119 -18
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +20 -14
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
- package/dist/frontend/lowering/lower-stdlib.js +35 -1
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +66 -11
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +22 -1
- package/dist/frontend/lowering/lowerer.js +116 -8
- package/dist/frontend/lowering/lowerer.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/surfaces.js +112 -10
- 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/pipeline.js +5 -3
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program.d.ts +3 -2
- package/dist/frontend/program.js +23 -5
- 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/type-mapper.d.ts +13 -1
- package/dist/frontend/type-mapper.js +146 -13
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/ir/builtin-effects.js +29 -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 +145 -15
- 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 +1 -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 +65 -20
- package/dist/ir/ir.js +5 -0
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +1 -0
- package/dist/ir/runtime-features.js +35 -1
- 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/validate.js +150 -25
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +65 -0
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/ir-policy.js +1 -0
- package/dist/library/ir-policy.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 +159 -1
|
@@ -112,6 +112,10 @@ export interface ClassInfo {
|
|
|
112
112
|
* the base chain. The value names which SIDES the class carries. User
|
|
113
113
|
* `extends` of these classes is fenced at the declaration (phase 1). */
|
|
114
114
|
builtinStream?: "r" | "w" | "rw";
|
|
115
|
+
/** The synthetic LifetimeRegion class (@scriptc/experimental,
|
|
116
|
+
* lifetime-regions.ts): its constructor is synthesized with the class,
|
|
117
|
+
* and its methods lower at their call sites. */
|
|
118
|
+
lifetimeRegion?: true;
|
|
115
119
|
/** This class's own `emit` override in the FORWARDING SHAPE (the one
|
|
116
120
|
* EventEmitter member a subclass may re-declare): never in `methods` —
|
|
117
121
|
* emit calls keep routing through the emitter spoke, which lowers the
|
|
@@ -752,9 +756,6 @@ export declare function inheritsBuiltinErrorCtor(lowerer: Lowerer, info: ClassIn
|
|
|
752
756
|
/** The EventEmitter twin: a ctor-less chain into the emitter base
|
|
753
757
|
* inherits `new C()` — zero arguments (the options bag fences). */
|
|
754
758
|
export declare function inheritsBuiltinEmitterCtor(lowerer: Lowerer, info: ClassInfo): boolean;
|
|
755
|
-
/** Preserve argument evaluation order and option presence through builtin
|
|
756
|
-
* and inherited Error constructors. Checked-dynamic conversion retains
|
|
757
|
-
* Error identity and distinguishes a missing cause from undefined. */
|
|
758
759
|
export declare function errorConstructorArgs(lowerer: Lowerer, args: readonly ts.Expression[], loc: SrcLoc, blame: ts.Node): IrExpr[];
|
|
759
760
|
export declare function lowerNew(lowerer: Lowerer, expr: ts.NewExpression): IrExpr;
|
|
760
761
|
/** A getter/setter invocation over an accessor target's receiver — the
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { dynUndefinedExpr, nodeThrowExpr } from "../../ir/build.js";
|
|
1
|
+
import { dynUndefinedExpr, nodeThrowExpr, varRef } from "../../ir/build.js";
|
|
2
|
+
import { checkedIterableSpread } from "./checked-iterable-spread.js";
|
|
2
3
|
import { collectClassMethodMutations } from "./class-method-mutations.js";
|
|
3
4
|
import { InternalCompilerError } from "../../errors.js";
|
|
4
5
|
/* Class lowering: shape collection over the single-inheritance graph
|
|
@@ -1303,7 +1304,9 @@ mixin) {
|
|
|
1303
1304
|
lowerer.isStdlibGlobal(t.expression.expression, "globalThis")
|
|
1304
1305
|
? lowerer.builtinErrorInfoOf(resolved)
|
|
1305
1306
|
: null;
|
|
1306
|
-
if (globalError &&
|
|
1307
|
+
if (globalError &&
|
|
1308
|
+
globalError.def.name !== "%DOMException" &&
|
|
1309
|
+
globalError.def.name !== "%AggregateError") {
|
|
1307
1310
|
if (t.typeArguments)
|
|
1308
1311
|
lowerer.unsupported("SC1090", t, "extending generic classes");
|
|
1309
1312
|
base = globalError;
|
|
@@ -1432,6 +1435,11 @@ mixin) {
|
|
|
1432
1435
|
if (lowerer.builtinErrorInfoOf(symbol)?.def.name === "%DOMException") {
|
|
1433
1436
|
lowerer.unsupported("SC1090", t, "extending DOMException (its runtime layout carries hidden slots a subclass would overlap — extend Error and set name/code yourself)");
|
|
1434
1437
|
}
|
|
1438
|
+
// `extends AggregateError`: the errors list is the same kind of
|
|
1439
|
+
// hidden runtime slot.
|
|
1440
|
+
if (lowerer.builtinErrorInfoOf(symbol)?.def.name === "%AggregateError") {
|
|
1441
|
+
lowerer.unsupported("SC1090", t, "extending AggregateError (its runtime layout carries a hidden errors slot a subclass would overlap — extend Error and keep the list in a field)");
|
|
1442
|
+
}
|
|
1435
1443
|
const named = (symbol && lowerer.classBySymbol.get(symbol)) ??
|
|
1436
1444
|
lowerer.builtinErrorInfoOf(symbol) ??
|
|
1437
1445
|
lowerer.builtinEmitterInfoOf(symbol) ??
|
|
@@ -3065,6 +3073,10 @@ mixin) {
|
|
|
3065
3073
|
.map((f) => ({ name: f.name, type: f.type })),
|
|
3066
3074
|
],
|
|
3067
3075
|
...(methods.size > 0 ? { methods: [...methods.keys()] } : {}),
|
|
3076
|
+
...(() => {
|
|
3077
|
+
const names = classPrototypeNames(decl);
|
|
3078
|
+
return names.length > 0 ? { prototypeNames: names } : {};
|
|
3079
|
+
})(),
|
|
3068
3080
|
...(abstractClass ? { abstract: true } : {}),
|
|
3069
3081
|
...(() => {
|
|
3070
3082
|
const am = [...methods.entries()].filter(([, s]) => s.abstract === true).map(([n]) => n);
|
|
@@ -5511,6 +5523,33 @@ function lowerClassCtorInner(lowerer, info) {
|
|
|
5511
5523
|
lowerer.currentClass = prevClass;
|
|
5512
5524
|
}
|
|
5513
5525
|
}
|
|
5526
|
+
/** The string keys a class declaration puts on its prototype: concrete
|
|
5527
|
+
* instance methods and accessors with literal names. Symbol-keyed,
|
|
5528
|
+
* private, static and abstract members are not prototype string keys. */
|
|
5529
|
+
function classPrototypeNames(decl) {
|
|
5530
|
+
const names = [];
|
|
5531
|
+
for (const member of decl.members) {
|
|
5532
|
+
if (!ts.isMethodDeclaration(member) &&
|
|
5533
|
+
!ts.isGetAccessorDeclaration(member) &&
|
|
5534
|
+
!ts.isSetAccessorDeclaration(member))
|
|
5535
|
+
continue;
|
|
5536
|
+
if (ts
|
|
5537
|
+
.getModifiers(member)
|
|
5538
|
+
?.some((m) => m.kind === ts.SyntaxKind.StaticKeyword || m.kind === ts.SyntaxKind.AbstractKeyword))
|
|
5539
|
+
continue;
|
|
5540
|
+
const name = member.name;
|
|
5541
|
+
let text = null;
|
|
5542
|
+
if (ts.isIdentifier(name) || ts.isStringLiteralLike(name))
|
|
5543
|
+
text = name.text;
|
|
5544
|
+
else if (ts.isNumericLiteral(name))
|
|
5545
|
+
text = String(Number(name.text));
|
|
5546
|
+
else if (ts.isComputedPropertyName(name) && ts.isStringLiteralLike(name.expression))
|
|
5547
|
+
text = name.expression.text;
|
|
5548
|
+
if (text !== null && !names.includes(text))
|
|
5549
|
+
names.push(text);
|
|
5550
|
+
}
|
|
5551
|
+
return names;
|
|
5552
|
+
}
|
|
5514
5553
|
/** The lowered method-map name of a class member: identifier text, a
|
|
5515
5554
|
* COMPUTED name that folds to one compile-time string
|
|
5516
5555
|
* (foldedStringKeyOf — the object-literal computed-key machinery
|
|
@@ -6615,6 +6654,67 @@ function inheritsBuiltinStreamCtor(lowerer, info) {
|
|
|
6615
6654
|
/** Preserve argument evaluation order and option presence through builtin
|
|
6616
6655
|
* and inherited Error constructors. Checked-dynamic conversion retains
|
|
6617
6656
|
* Error identity and distinguishes a missing cause from undefined. */
|
|
6657
|
+
/** `new AggregateError(errors, message, options)` in the spec's order:
|
|
6658
|
+
* the message and cause install first, then `errors` iterates (a
|
|
6659
|
+
* non-iterable throws out of the constructor). */
|
|
6660
|
+
function aggregateErrorConstructor(lowerer, loc) {
|
|
6661
|
+
const name = "%aggregate.new";
|
|
6662
|
+
if (lowerer.liftedFns.some((fn) => fn.name === name))
|
|
6663
|
+
return name;
|
|
6664
|
+
const type = { kind: "object", className: "%AggregateError" };
|
|
6665
|
+
const context = newFnCtx(false, null, null, type);
|
|
6666
|
+
lowerer.fnStack.push(context);
|
|
6667
|
+
try {
|
|
6668
|
+
const params = ["errors", "message", "options"].map((id) => ({
|
|
6669
|
+
localId: id,
|
|
6670
|
+
name: id,
|
|
6671
|
+
type: DYN,
|
|
6672
|
+
}));
|
|
6673
|
+
const error = varRef("error", type, loc);
|
|
6674
|
+
const list = checkedIterableSpread(lowerer, varRef("errors", DYN, loc), "", loc);
|
|
6675
|
+
lowerer.liftedFns.push({
|
|
6676
|
+
name,
|
|
6677
|
+
params,
|
|
6678
|
+
returnType: type,
|
|
6679
|
+
locals: [
|
|
6680
|
+
...params.map((p) => ({ id: p.localId, name: p.name, type: DYN, mutable: false })),
|
|
6681
|
+
{ id: "error", name: "error", type, mutable: false },
|
|
6682
|
+
...context.locals,
|
|
6683
|
+
],
|
|
6684
|
+
body: [
|
|
6685
|
+
{
|
|
6686
|
+
kind: "varDecl",
|
|
6687
|
+
localId: "error",
|
|
6688
|
+
init: {
|
|
6689
|
+
kind: "libCall",
|
|
6690
|
+
fn: "error.newAggregate",
|
|
6691
|
+
args: [varRef("message", DYN, loc), varRef("options", DYN, loc)],
|
|
6692
|
+
type,
|
|
6693
|
+
loc,
|
|
6694
|
+
},
|
|
6695
|
+
loc,
|
|
6696
|
+
},
|
|
6697
|
+
{
|
|
6698
|
+
kind: "exprStmt",
|
|
6699
|
+
expr: {
|
|
6700
|
+
kind: "libCall",
|
|
6701
|
+
fn: "error.aggregateSetErrors",
|
|
6702
|
+
args: [error, list],
|
|
6703
|
+
type: VOID,
|
|
6704
|
+
loc,
|
|
6705
|
+
},
|
|
6706
|
+
loc,
|
|
6707
|
+
},
|
|
6708
|
+
{ kind: "return", value: error, loc },
|
|
6709
|
+
],
|
|
6710
|
+
loc,
|
|
6711
|
+
});
|
|
6712
|
+
}
|
|
6713
|
+
finally {
|
|
6714
|
+
lowerer.fnStack.pop();
|
|
6715
|
+
}
|
|
6716
|
+
return name;
|
|
6717
|
+
}
|
|
6618
6718
|
export function errorConstructorArgs(lowerer, args, loc, blame) {
|
|
6619
6719
|
if (args.length > 2)
|
|
6620
6720
|
lowerer.unsupported("SC1090", blame, "Error constructors with more than two arguments");
|
|
@@ -6995,6 +7095,20 @@ export function lowerNew(lowerer, expr) {
|
|
|
6995
7095
|
loc,
|
|
6996
7096
|
};
|
|
6997
7097
|
}
|
|
7098
|
+
if (errInfo && errInfo.def.name === "%AggregateError") {
|
|
7099
|
+
const args = expr.arguments ?? [];
|
|
7100
|
+
if (args.length > 3 || args.some(ts.isSpreadElement)) {
|
|
7101
|
+
lowerer.noLowering(`new AggregateError with this argument list`, expr);
|
|
7102
|
+
}
|
|
7103
|
+
const errors = args[0] ? lowerer.lowerExprExpecting(args[0], DYN) : dynUndefinedExpr(loc);
|
|
7104
|
+
return {
|
|
7105
|
+
kind: "call",
|
|
7106
|
+
callee: aggregateErrorConstructor(lowerer, loc),
|
|
7107
|
+
args: [errors, ...lowerer.errorConstructorArgs(args.slice(1), loc, expr)],
|
|
7108
|
+
type: { kind: "object", className: "%AggregateError" },
|
|
7109
|
+
loc,
|
|
7110
|
+
};
|
|
7111
|
+
}
|
|
6998
7112
|
if (errInfo) {
|
|
6999
7113
|
const args = lowerer.errorConstructorArgs(expr.arguments ?? [], loc, expr);
|
|
7000
7114
|
return {
|