@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.
Files changed (280) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +342 -16
  2. package/dist/backend/executable-features.js +1 -0
  3. package/dist/backend/executable-features.js.map +1 -1
  4. package/dist/backend/literals.d.ts +7 -0
  5. package/dist/backend/literals.js +32 -0
  6. package/dist/backend/literals.js.map +1 -1
  7. package/dist/backend/literals.test.js +17 -1
  8. package/dist/backend/literals.test.js.map +1 -1
  9. package/dist/backend/llvm/alloc.d.ts +15 -4
  10. package/dist/backend/llvm/alloc.js +39 -15
  11. package/dist/backend/llvm/alloc.js.map +1 -1
  12. package/dist/backend/llvm/alloc.test.js +15 -1
  13. package/dist/backend/llvm/alloc.test.js.map +1 -1
  14. package/dist/backend/llvm/appended-array-literals.d.ts +2 -0
  15. package/dist/backend/llvm/appended-array-literals.js +109 -0
  16. package/dist/backend/llvm/appended-array-literals.js.map +1 -0
  17. package/dist/backend/llvm/appended-array-literals.test.d.ts +1 -0
  18. package/dist/backend/llvm/appended-array-literals.test.js +90 -0
  19. package/dist/backend/llvm/appended-array-literals.test.js.map +1 -0
  20. package/dist/backend/llvm/call-lifetimes.d.ts +4 -1
  21. package/dist/backend/llvm/call-lifetimes.js +51 -3
  22. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  23. package/dist/backend/llvm/classes.js +10 -2
  24. package/dist/backend/llvm/classes.js.map +1 -1
  25. package/dist/backend/llvm/classes.test.js +2 -2
  26. package/dist/backend/llvm/dense-array-access.js +17 -12
  27. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  28. package/dist/backend/llvm/dense-array-access.test.js +15 -2
  29. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  30. package/dist/backend/llvm/dyn.d.ts +2 -0
  31. package/dist/backend/llvm/dyn.js +11 -2
  32. package/dist/backend/llvm/dyn.js.map +1 -1
  33. package/dist/backend/llvm/emitter.d.ts +43 -2
  34. package/dist/backend/llvm/emitter.js +306 -32
  35. package/dist/backend/llvm/emitter.js.map +1 -1
  36. package/dist/backend/llvm/expr-async.js +122 -6
  37. package/dist/backend/llvm/expr-async.js.map +1 -1
  38. package/dist/backend/llvm/expr-callbacks.d.ts +8 -0
  39. package/dist/backend/llvm/expr-callbacks.js +81 -1
  40. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  41. package/dist/backend/llvm/expr-calls.d.ts +12 -1
  42. package/dist/backend/llvm/expr-calls.js +126 -54
  43. package/dist/backend/llvm/expr-calls.js.map +1 -1
  44. package/dist/backend/llvm/expr-containers.d.ts +7 -0
  45. package/dist/backend/llvm/expr-containers.js +38 -7
  46. package/dist/backend/llvm/expr-containers.js.map +1 -1
  47. package/dist/backend/llvm/expr-context.d.ts +2 -0
  48. package/dist/backend/llvm/expr-control.d.ts +8 -0
  49. package/dist/backend/llvm/expr-control.js +103 -69
  50. package/dist/backend/llvm/expr-control.js.map +1 -1
  51. package/dist/backend/llvm/expr-dynamic.js +2 -2
  52. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  53. package/dist/backend/llvm/expr-primitives.d.ts +7 -0
  54. package/dist/backend/llvm/expr-primitives.js +30 -26
  55. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  56. package/dist/backend/llvm/expr-records.js +11 -1
  57. package/dist/backend/llvm/expr-records.js.map +1 -1
  58. package/dist/backend/llvm/expr-stream-bridges.d.ts +8 -0
  59. package/dist/backend/llvm/expr-stream-bridges.js +77 -8
  60. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  61. package/dist/backend/llvm/expr-stream-bridges.test.js +49 -1
  62. package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
  63. package/dist/backend/llvm/int32-abi.d.ts +18 -2
  64. package/dist/backend/llvm/int32-abi.js +23 -2
  65. package/dist/backend/llvm/int32-abi.js.map +1 -1
  66. package/dist/backend/llvm/int32-abi.test.js +75 -1
  67. package/dist/backend/llvm/int32-abi.test.js.map +1 -1
  68. package/dist/backend/llvm/lib-dispatch.js +7 -0
  69. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  70. package/dist/backend/llvm/lib-filesystem.js +58 -0
  71. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  72. package/dist/backend/llvm/lib-shared.js +76 -9
  73. package/dist/backend/llvm/lib-shared.js.map +1 -1
  74. package/dist/backend/llvm/local-array-reads.js +5 -3
  75. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  76. package/dist/backend/llvm/local-union-storage.d.ts +24 -2
  77. package/dist/backend/llvm/local-union-storage.js +127 -12
  78. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  79. package/dist/backend/llvm/local-union-storage.test.js +106 -1
  80. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  81. package/dist/backend/llvm/record-results.d.ts +26 -0
  82. package/dist/backend/llvm/record-results.js +252 -0
  83. package/dist/backend/llvm/record-results.js.map +1 -0
  84. package/dist/backend/llvm/reference-effects.js +2 -0
  85. package/dist/backend/llvm/reference-effects.js.map +1 -1
  86. package/dist/backend/llvm/reference-writes.js +15 -9
  87. package/dist/backend/llvm/reference-writes.js.map +1 -1
  88. package/dist/backend/llvm/regions.d.ts +67 -0
  89. package/dist/backend/llvm/regions.js +309 -0
  90. package/dist/backend/llvm/regions.js.map +1 -0
  91. package/dist/backend/llvm/regions.test.d.ts +1 -0
  92. package/dist/backend/llvm/regions.test.js +173 -0
  93. package/dist/backend/llvm/regions.test.js.map +1 -0
  94. package/dist/backend/llvm/shapes.d.ts +34 -7
  95. package/dist/backend/llvm/shapes.js +31 -16
  96. package/dist/backend/llvm/shapes.js.map +1 -1
  97. package/dist/backend/llvm/shapes.test.js +7 -6
  98. package/dist/backend/llvm/shapes.test.js.map +1 -1
  99. package/dist/backend/llvm/split-loops.js +1 -1
  100. package/dist/backend/llvm/split-loops.js.map +1 -1
  101. package/dist/backend/llvm/stack-objects.d.ts +29 -0
  102. package/dist/backend/llvm/stack-objects.js +130 -0
  103. package/dist/backend/llvm/stack-objects.js.map +1 -0
  104. package/dist/backend/llvm/stack-objects.test.d.ts +1 -0
  105. package/dist/backend/llvm/stack-objects.test.js +252 -0
  106. package/dist/backend/llvm/stack-objects.test.js.map +1 -0
  107. package/dist/backend/llvm/string-reads.d.ts +4 -1
  108. package/dist/backend/llvm/string-reads.js +89 -9
  109. package/dist/backend/llvm/string-reads.js.map +1 -1
  110. package/dist/backend/llvm/switch-dispatch.js +5 -4
  111. package/dist/backend/llvm/switch-dispatch.js.map +1 -1
  112. package/dist/backend/llvm/walkers.d.ts +2 -0
  113. package/dist/backend/llvm/walkers.js +4 -2
  114. package/dist/backend/llvm/walkers.js.map +1 -1
  115. package/dist/backend/may-throw.js +1 -0
  116. package/dist/backend/may-throw.js.map +1 -1
  117. package/dist/backend/native/contracts.d.ts +5 -0
  118. package/dist/backend/native/executable.js +16 -1
  119. package/dist/backend/native/executable.js.map +1 -1
  120. package/dist/backend/native/library.js +1 -1
  121. package/dist/backend/native/library.js.map +1 -1
  122. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  123. package/dist/backend/native/runtime-inputs.js +2 -0
  124. package/dist/backend/native/runtime-inputs.js.map +1 -1
  125. package/dist/backend/native-link-info-core.d.ts +1 -0
  126. package/dist/backend/native-link-info-core.js.map +1 -1
  127. package/dist/backend/runtime-abi.d.ts +2 -2
  128. package/dist/backend/runtime-abi.js +2 -2
  129. package/dist/backend/runtime-pack-core.d.ts +1 -0
  130. package/dist/backend/runtime-pack-core.js +1 -0
  131. package/dist/backend/runtime-pack-core.js.map +1 -1
  132. package/dist/backend/runtime-pack-targets.test.js +1 -1
  133. package/dist/backend/runtime-pack.test.js +1 -1
  134. package/dist/backend/target-diagnostics.js +14 -0
  135. package/dist/backend/target-diagnostics.js.map +1 -1
  136. package/dist/backend/target-diagnostics.test.js +13 -0
  137. package/dist/backend/target-diagnostics.test.js.map +1 -1
  138. package/dist/executable/executable-cache.d.ts +1 -0
  139. package/dist/executable/executable-cache.js.map +1 -1
  140. package/dist/frontend/experimental-import.d.ts +12 -0
  141. package/dist/frontend/experimental-import.js +63 -0
  142. package/dist/frontend/experimental-import.js.map +1 -0
  143. package/dist/frontend/lowering/builtin-calls.d.ts +6 -1
  144. package/dist/frontend/lowering/builtin-calls.js +36 -0
  145. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  146. package/dist/frontend/lowering/builtins/console.d.ts +16 -6
  147. package/dist/frontend/lowering/builtins/console.js +33 -9
  148. package/dist/frontend/lowering/builtins/console.js.map +1 -1
  149. package/dist/frontend/lowering/builtins/errors.js +20 -0
  150. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  151. package/dist/frontend/lowering/builtins/json.d.ts +2 -2
  152. package/dist/frontend/lowering/builtins/json.js +13 -4
  153. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  154. package/dist/frontend/lowering/builtins/module-calls.js +16 -1
  155. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  156. package/dist/frontend/lowering/builtins/numbers.d.ts +1 -0
  157. package/dist/frontend/lowering/builtins/numbers.js +17 -0
  158. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  159. package/dist/frontend/lowering/builtins/operating-system.d.ts +18 -0
  160. package/dist/frontend/lowering/builtins/operating-system.js +361 -1
  161. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  162. package/dist/frontend/lowering/builtins/process.js +15 -3
  163. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  164. package/dist/frontend/lowering/builtins/promises.js +109 -2
  165. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  166. package/dist/frontend/lowering/builtins/text-codecs.d.ts +3 -4
  167. package/dist/frontend/lowering/builtins/text-codecs.js +3 -4
  168. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  169. package/dist/frontend/lowering/checked-promise-all.d.ts +10 -3
  170. package/dist/frontend/lowering/checked-promise-all.js +52 -6
  171. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  172. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +6 -3
  173. package/dist/frontend/lowering/class-dynamic-dispatch.js +54 -31
  174. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  175. package/dist/frontend/lowering/containers/array-callbacks.js +34 -4
  176. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  177. package/dist/frontend/lowering/containers/array-construction.js +8 -4
  178. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  179. package/dist/frontend/lowering/containers/array-pipelines.js +1 -1
  180. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  181. package/dist/frontend/lowering/containers/string-and-regexp.js +91 -0
  182. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  183. package/dist/frontend/lowering/cycle-initialization.d.ts +18 -2
  184. package/dist/frontend/lowering/cycle-initialization.js +166 -12
  185. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  186. package/dist/frontend/lowering/deferred-module-initializers.js +7 -2
  187. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  188. package/dist/frontend/lowering/deferred-module-initializers.test.js +28 -0
  189. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  190. package/dist/frontend/lowering/expressions/object-literals.js +5 -56
  191. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  192. package/dist/frontend/lowering/generator-delegation.d.ts +8 -0
  193. package/dist/frontend/lowering/generator-delegation.js +231 -10
  194. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  195. package/dist/frontend/lowering/lifetime-regions.d.ts +11 -0
  196. package/dist/frontend/lowering/lifetime-regions.js +216 -0
  197. package/dist/frontend/lowering/lifetime-regions.js.map +1 -0
  198. package/dist/frontend/lowering/lower-array-sort.d.ts +28 -2
  199. package/dist/frontend/lowering/lower-array-sort.js +100 -3
  200. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  201. package/dist/frontend/lowering/lower-array-sort.test.js +99 -2
  202. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
  203. package/dist/frontend/lowering/lower-calls.js +72 -102
  204. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  205. package/dist/frontend/lowering/lower-classes.d.ts +4 -3
  206. package/dist/frontend/lowering/lower-classes.js +116 -2
  207. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  208. package/dist/frontend/lowering/lower-console.d.ts +13 -0
  209. package/dist/frontend/lowering/lower-console.js +460 -4
  210. package/dist/frontend/lowering/lower-console.js.map +1 -1
  211. package/dist/frontend/lowering/lower-event-emitter.d.ts +6 -0
  212. package/dist/frontend/lowering/lower-event-emitter.js +124 -38
  213. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  214. package/dist/frontend/lowering/lower-exprs.js +137 -22
  215. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  216. package/dist/frontend/lowering/lower-generators.d.ts +15 -7
  217. package/dist/frontend/lowering/lower-generators.js +183 -99
  218. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  219. package/dist/frontend/lowering/lower-inspect.d.ts +8 -1
  220. package/dist/frontend/lowering/lower-inspect.js +119 -18
  221. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  222. package/dist/frontend/lowering/lower-modules.js +20 -14
  223. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  224. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
  225. package/dist/frontend/lowering/lower-stdlib.js +35 -1
  226. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  227. package/dist/frontend/lowering/lower-stmts.js +66 -11
  228. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  229. package/dist/frontend/lowering/lowerer.d.ts +22 -1
  230. package/dist/frontend/lowering/lowerer.js +116 -8
  231. package/dist/frontend/lowering/lowerer.js.map +1 -1
  232. package/dist/frontend/lowering/regex-span-reads.d.ts +12 -0
  233. package/dist/frontend/lowering/regex-span-reads.js +164 -0
  234. package/dist/frontend/lowering/regex-span-reads.js.map +1 -0
  235. package/dist/frontend/lowering/surfaces.js +112 -10
  236. package/dist/frontend/lowering/surfaces.js.map +1 -1
  237. package/dist/frontend/lowering/var-hoisting.d.ts +3 -0
  238. package/dist/frontend/lowering/var-hoisting.js +261 -0
  239. package/dist/frontend/lowering/var-hoisting.js.map +1 -0
  240. package/dist/frontend/pipeline.js +5 -3
  241. package/dist/frontend/pipeline.js.map +1 -1
  242. package/dist/frontend/program.d.ts +3 -2
  243. package/dist/frontend/program.js +23 -5
  244. package/dist/frontend/program.js.map +1 -1
  245. package/dist/frontend/program.test.js +13 -0
  246. package/dist/frontend/program.test.js.map +1 -1
  247. package/dist/frontend/type-mapper.d.ts +13 -1
  248. package/dist/frontend/type-mapper.js +146 -13
  249. package/dist/frontend/type-mapper.js.map +1 -1
  250. package/dist/index.js +1 -0
  251. package/dist/index.js.map +1 -1
  252. package/dist/ir/builtin-effects.js +29 -2
  253. package/dist/ir/builtin-effects.js.map +1 -1
  254. package/dist/ir/builtin-signatures.d.ts +1 -1
  255. package/dist/ir/builtin-signatures.js +145 -15
  256. package/dist/ir/builtin-signatures.js.map +1 -1
  257. package/dist/ir/function-references.test.js +1 -0
  258. package/dist/ir/function-references.test.js.map +1 -1
  259. package/dist/ir/int32-slots.js +1 -0
  260. package/dist/ir/int32-slots.js.map +1 -1
  261. package/dist/ir/intrinsic-signatures.js +2 -0
  262. package/dist/ir/intrinsic-signatures.js.map +1 -1
  263. package/dist/ir/ir.d.ts +65 -20
  264. package/dist/ir/ir.js +5 -0
  265. package/dist/ir/ir.js.map +1 -1
  266. package/dist/ir/runtime-features.d.ts +1 -0
  267. package/dist/ir/runtime-features.js +35 -1
  268. package/dist/ir/runtime-features.js.map +1 -1
  269. package/dist/ir/scalar-records.js +1 -2
  270. package/dist/ir/scalar-records.js.map +1 -1
  271. package/dist/ir/validate.js +150 -25
  272. package/dist/ir/validate.js.map +1 -1
  273. package/dist/ir/validate.test.js +65 -0
  274. package/dist/ir/validate.test.js.map +1 -1
  275. package/dist/library/ir-policy.js +1 -0
  276. package/dist/library/ir-policy.js.map +1 -1
  277. package/dist/native/sanitizer.test.js +1 -0
  278. package/dist/native/sanitizer.test.js.map +1 -1
  279. package/package.json +20 -20
  280. 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 && globalError.def.name !== "%DOMException") {
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 {