@scriptc/compiler 0.2.5 → 0.2.6

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 (307) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +57 -30
  2. package/dist/backend/cycle-analysis.test.js +1 -1
  3. package/dist/backend/executable-features.js +1 -0
  4. package/dist/backend/executable-features.js.map +1 -1
  5. package/dist/backend/link-plan-core.d.ts +2 -0
  6. package/dist/backend/link-plan-core.js +1 -0
  7. package/dist/backend/link-plan-core.js.map +1 -1
  8. package/dist/backend/link-plan.d.ts +1 -0
  9. package/dist/backend/link-plan.js +3 -0
  10. package/dist/backend/link-plan.js.map +1 -1
  11. package/dist/backend/llvm/byte-numbers.js +32 -4
  12. package/dist/backend/llvm/byte-numbers.js.map +1 -1
  13. package/dist/backend/llvm/byte-windows.d.ts +31 -0
  14. package/dist/backend/llvm/byte-windows.js +334 -0
  15. package/dist/backend/llvm/byte-windows.js.map +1 -0
  16. package/dist/backend/llvm/byte-windows.test.d.ts +1 -0
  17. package/dist/backend/llvm/byte-windows.test.js +244 -0
  18. package/dist/backend/llvm/byte-windows.test.js.map +1 -0
  19. package/dist/backend/llvm/call-lifetimes.d.ts +2 -2
  20. package/dist/backend/llvm/call-lifetimes.js +17 -7
  21. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  22. package/dist/backend/llvm/classes.d.ts +14 -1
  23. package/dist/backend/llvm/classes.js +80 -9
  24. package/dist/backend/llvm/classes.js.map +1 -1
  25. package/dist/backend/llvm/classes.test.d.ts +1 -0
  26. package/dist/backend/llvm/classes.test.js +99 -0
  27. package/dist/backend/llvm/classes.test.js.map +1 -0
  28. package/dist/backend/llvm/constant-callbacks.d.ts +11 -0
  29. package/dist/backend/llvm/constant-callbacks.js +213 -0
  30. package/dist/backend/llvm/constant-callbacks.js.map +1 -0
  31. package/dist/backend/llvm/constant-callbacks.test.d.ts +1 -0
  32. package/dist/backend/llvm/constant-callbacks.test.js +124 -0
  33. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -0
  34. package/dist/backend/llvm/dyn.d.ts +1 -1
  35. package/dist/backend/llvm/dyn.js +7 -34
  36. package/dist/backend/llvm/dyn.js.map +1 -1
  37. package/dist/backend/llvm/emitter.d.ts +19 -0
  38. package/dist/backend/llvm/emitter.js +274 -46
  39. package/dist/backend/llvm/emitter.js.map +1 -1
  40. package/dist/backend/llvm/emitter.test.js +17 -11
  41. package/dist/backend/llvm/emitter.test.js.map +1 -1
  42. package/dist/backend/llvm/expr-bytes.js +11 -0
  43. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  44. package/dist/backend/llvm/expr-calls.js +91 -23
  45. package/dist/backend/llvm/expr-calls.js.map +1 -1
  46. package/dist/backend/llvm/expr-containers.js +21 -9
  47. package/dist/backend/llvm/expr-containers.js.map +1 -1
  48. package/dist/backend/llvm/expr-dynamic.js +36 -3
  49. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  50. package/dist/backend/llvm/expr-primitives.js +7 -0
  51. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  52. package/dist/backend/llvm/expr-primitives.test.js +1 -1
  53. package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
  54. package/dist/backend/llvm/integer-remainder.d.ts +7 -0
  55. package/dist/backend/llvm/integer-remainder.js +26 -0
  56. package/dist/backend/llvm/integer-remainder.js.map +1 -0
  57. package/dist/backend/llvm/layouts.js +1 -1
  58. package/dist/backend/llvm/layouts.js.map +1 -1
  59. package/dist/backend/llvm/lib-abi.js +7 -0
  60. package/dist/backend/llvm/lib-abi.js.map +1 -1
  61. package/dist/backend/llvm/lib-dispatch.js +7 -22
  62. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  63. package/dist/backend/llvm/lib-shared.js +15 -0
  64. package/dist/backend/llvm/lib-shared.js.map +1 -1
  65. package/dist/backend/llvm/local-array-reads.d.ts +8 -2
  66. package/dist/backend/llvm/local-array-reads.js +89 -68
  67. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  68. package/dist/backend/llvm/local-array-reads.test.js +28 -4
  69. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  70. package/dist/backend/llvm/local-union-storage.test.js +1 -1
  71. package/dist/backend/llvm/loop-array-borrows.d.ts +11 -0
  72. package/dist/backend/llvm/loop-array-borrows.js +70 -0
  73. package/dist/backend/llvm/loop-array-borrows.js.map +1 -0
  74. package/dist/backend/llvm/loop-array-borrows.test.d.ts +1 -0
  75. package/dist/backend/llvm/loop-array-borrows.test.js +145 -0
  76. package/dist/backend/llvm/loop-array-borrows.test.js.map +1 -0
  77. package/dist/backend/llvm/map-read-lifetimes.d.ts +5 -0
  78. package/dist/backend/llvm/map-read-lifetimes.js +20 -5
  79. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  80. package/dist/backend/llvm/map-read-lifetimes.test.js +1 -1
  81. package/dist/backend/llvm/reference-effects.d.ts +2 -1
  82. package/dist/backend/llvm/reference-effects.js +7 -0
  83. package/dist/backend/llvm/reference-effects.js.map +1 -1
  84. package/dist/backend/llvm/shapes.d.ts +4 -1
  85. package/dist/backend/llvm/shapes.js +22 -7
  86. package/dist/backend/llvm/shapes.js.map +1 -1
  87. package/dist/backend/llvm/split-loops.d.ts +48 -0
  88. package/dist/backend/llvm/split-loops.js +183 -0
  89. package/dist/backend/llvm/split-loops.js.map +1 -0
  90. package/dist/backend/llvm/split.js +0 -7
  91. package/dist/backend/llvm/split.js.map +1 -1
  92. package/dist/backend/llvm/split.test.js +66 -2
  93. package/dist/backend/llvm/split.test.js.map +1 -1
  94. package/dist/backend/llvm/stack-callbacks.d.ts +14 -0
  95. package/dist/backend/llvm/stack-callbacks.js +73 -0
  96. package/dist/backend/llvm/stack-callbacks.js.map +1 -0
  97. package/dist/backend/llvm/stack-captures.d.ts +25 -0
  98. package/dist/backend/llvm/stack-captures.js +150 -0
  99. package/dist/backend/llvm/stack-captures.js.map +1 -0
  100. package/dist/backend/llvm/stack-unions.test.js +1 -1
  101. package/dist/backend/llvm/string-construction.test.js +1 -1
  102. package/dist/backend/llvm/string-lifetimes.test.js +8 -4
  103. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  104. package/dist/backend/llvm/string-slices.d.ts +20 -0
  105. package/dist/backend/llvm/string-slices.js +87 -0
  106. package/dist/backend/llvm/string-slices.js.map +1 -0
  107. package/dist/backend/llvm/string-slices.test.d.ts +1 -0
  108. package/dist/backend/llvm/string-slices.test.js +98 -0
  109. package/dist/backend/llvm/string-slices.test.js.map +1 -0
  110. package/dist/backend/llvm/switch-dispatch.test.js +1 -1
  111. package/dist/backend/llvm/walkers.d.ts +4 -14
  112. package/dist/backend/llvm/walkers.js +53 -311
  113. package/dist/backend/llvm/walkers.js.map +1 -1
  114. package/dist/backend/may-throw.js +1 -1
  115. package/dist/backend/may-throw.js.map +1 -1
  116. package/dist/backend/may-throw.test.js +1 -1
  117. package/dist/backend/native/contracts.d.ts +2 -0
  118. package/dist/backend/native/executable.js +12 -4
  119. package/dist/backend/native/executable.js.map +1 -1
  120. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  121. package/dist/backend/native/runtime-inputs.js +2 -0
  122. package/dist/backend/native/runtime-inputs.js.map +1 -1
  123. package/dist/backend/native-codegen-core.d.ts +6 -0
  124. package/dist/backend/native-codegen-core.js +21 -0
  125. package/dist/backend/native-codegen-core.js.map +1 -1
  126. package/dist/backend/native-codegen.d.ts +4 -0
  127. package/dist/backend/native-codegen.js +34 -18
  128. package/dist/backend/native-codegen.js.map +1 -1
  129. package/dist/backend/native-codegen.test.js +47 -2
  130. package/dist/backend/native-codegen.test.js.map +1 -1
  131. package/dist/backend/native-link-info-core.d.ts +1 -0
  132. package/dist/backend/native-link-info-core.js.map +1 -1
  133. package/dist/backend/native-tools.d.ts +3 -1
  134. package/dist/backend/native-tools.js +6 -4
  135. package/dist/backend/native-tools.js.map +1 -1
  136. package/dist/backend/runtime-abi.d.ts +2 -2
  137. package/dist/backend/runtime-abi.js +2 -2
  138. package/dist/backend/runtime-pack-core.d.ts +1 -0
  139. package/dist/backend/runtime-pack-core.js +8 -1
  140. package/dist/backend/runtime-pack-core.js.map +1 -1
  141. package/dist/backend/runtime-pack-targets.test.js +41 -4
  142. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  143. package/dist/backend/runtime-pack.test.js +11 -1
  144. package/dist/backend/runtime-pack.test.js.map +1 -1
  145. package/dist/backend/target-diagnostics.test.js +1 -1
  146. package/dist/executable/executable-cache.d.ts +1 -0
  147. package/dist/executable/executable-cache.js +2 -1
  148. package/dist/executable/executable-cache.js.map +1 -1
  149. package/dist/executable/executable-cache.test.js +15 -0
  150. package/dist/executable/executable-cache.test.js.map +1 -1
  151. package/dist/frontend/fork-target.d.ts +5 -0
  152. package/dist/frontend/fork-target.js +40 -8
  153. package/dist/frontend/fork-target.js.map +1 -1
  154. package/dist/frontend/fork-target.test.d.ts +1 -0
  155. package/dist/frontend/fork-target.test.js +59 -0
  156. package/dist/frontend/fork-target.test.js.map +1 -0
  157. package/dist/frontend/lowering/binding-analysis.js +2 -2
  158. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  159. package/dist/frontend/lowering/builtins/atomics.d.ts +2 -11
  160. package/dist/frontend/lowering/builtins/atomics.js +64 -28
  161. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  162. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +3 -0
  163. package/dist/frontend/lowering/builtins/filesystem-calls.js +51 -4
  164. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  165. package/dist/frontend/lowering/builtins/module-calls.js +6 -1
  166. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  167. package/dist/frontend/lowering/builtins/workers.d.ts +5 -0
  168. package/dist/frontend/lowering/builtins/workers.js +65 -0
  169. package/dist/frontend/lowering/builtins/workers.js.map +1 -0
  170. package/dist/frontend/lowering/class-assertions.d.ts +7 -0
  171. package/dist/frontend/lowering/class-assertions.js +96 -0
  172. package/dist/frontend/lowering/class-assertions.js.map +1 -0
  173. package/dist/frontend/lowering/class-protocols.d.ts +17 -0
  174. package/dist/frontend/lowering/class-protocols.js +126 -0
  175. package/dist/frontend/lowering/class-protocols.js.map +1 -0
  176. package/dist/frontend/lowering/containers/array-callbacks.d.ts +7 -11
  177. package/dist/frontend/lowering/containers/array-callbacks.js +52 -87
  178. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  179. package/dist/frontend/lowering/containers/bytes.js +12 -34
  180. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  181. package/dist/frontend/lowering/containers/string-and-regexp.js +22 -3
  182. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  183. package/dist/frontend/lowering/expressions/object-literals.js +2 -6
  184. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  185. package/dist/frontend/lowering/generic-functions.d.ts +2 -5
  186. package/dist/frontend/lowering/generic-functions.js +13 -10
  187. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  188. package/dist/frontend/lowering/instantiation-path.d.ts +8 -0
  189. package/dist/frontend/lowering/instantiation-path.js +10 -0
  190. package/dist/frontend/lowering/instantiation-path.js.map +1 -0
  191. package/dist/frontend/lowering/instantiation-path.test.d.ts +1 -0
  192. package/dist/frontend/lowering/instantiation-path.test.js +23 -0
  193. package/dist/frontend/lowering/instantiation-path.test.js.map +1 -0
  194. package/dist/frontend/lowering/lower-builtin-values.js +11 -7
  195. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  196. package/dist/frontend/lowering/lower-calls.js +36 -3
  197. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  198. package/dist/frontend/lowering/lower-classes.d.ts +5 -0
  199. package/dist/frontend/lowering/lower-classes.js +121 -53
  200. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  201. package/dist/frontend/lowering/lower-event-emitter.js +1 -1
  202. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  203. package/dist/frontend/lowering/lower-exprs.js +31 -10
  204. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  205. package/dist/frontend/lowering/lower-functions.d.ts +1 -1
  206. package/dist/frontend/lowering/lower-functions.js +2 -2
  207. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  208. package/dist/frontend/lowering/lower-island.js +1 -1
  209. package/dist/frontend/lowering/lower-island.js.map +1 -1
  210. package/dist/frontend/lowering/lower-modules.d.ts +1 -0
  211. package/dist/frontend/lowering/lower-modules.js +44 -9
  212. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  213. package/dist/frontend/lowering/lower-stmts.js +13 -11
  214. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  215. package/dist/frontend/lowering/lower-stream.js +1 -1
  216. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  217. package/dist/frontend/lowering/lowerer.d.ts +13 -1
  218. package/dist/frontend/lowering/lowerer.js +51 -9
  219. package/dist/frontend/lowering/lowerer.js.map +1 -1
  220. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  221. package/dist/frontend/lowering/split-consumers.d.ts +7 -0
  222. package/dist/frontend/lowering/split-consumers.js +64 -0
  223. package/dist/frontend/lowering/split-consumers.js.map +1 -0
  224. package/dist/frontend/lowering/surfaces.d.ts +3 -4
  225. package/dist/frontend/lowering/surfaces.js +35 -7
  226. package/dist/frontend/lowering/surfaces.js.map +1 -1
  227. package/dist/frontend/module-source-candidates.d.ts +10 -0
  228. package/dist/frontend/module-source-candidates.js +40 -0
  229. package/dist/frontend/module-source-candidates.js.map +1 -0
  230. package/dist/frontend/module-source-candidates.test.d.ts +1 -0
  231. package/dist/frontend/module-source-candidates.test.js +53 -0
  232. package/dist/frontend/module-source-candidates.test.js.map +1 -0
  233. package/dist/frontend/pipeline.js +2 -2
  234. package/dist/frontend/pipeline.js.map +1 -1
  235. package/dist/frontend/program-analysis.d.ts +2 -0
  236. package/dist/frontend/program-analysis.js +2 -0
  237. package/dist/frontend/program-analysis.js.map +1 -1
  238. package/dist/frontend/program.js +17 -29
  239. package/dist/frontend/program.js.map +1 -1
  240. package/dist/frontend/ts7/ast-node.js +6 -8
  241. package/dist/frontend/ts7/ast-node.js.map +1 -1
  242. package/dist/frontend/ts7/ast-node.test.js +42 -1
  243. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  244. package/dist/frontend/ts7/ast-wire.d.ts +4 -0
  245. package/dist/frontend/ts7/ast-wire.js +28 -0
  246. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  247. package/dist/frontend/ts7/ast.d.ts +2 -1
  248. package/dist/frontend/ts7/ast.js +8 -4
  249. package/dist/frontend/ts7/ast.js.map +1 -1
  250. package/dist/frontend/ts7/checker.d.ts +8 -2
  251. package/dist/frontend/ts7/checker.js +41 -5
  252. package/dist/frontend/ts7/checker.js.map +1 -1
  253. package/dist/frontend/ts7/checker.test.js +42 -0
  254. package/dist/frontend/ts7/checker.test.js.map +1 -1
  255. package/dist/frontend/ts7/program-host.d.ts +7 -0
  256. package/dist/frontend/ts7/program-host.js +26 -2
  257. package/dist/frontend/ts7/program-host.js.map +1 -1
  258. package/dist/frontend/ts7/program-host.test.js +29 -0
  259. package/dist/frontend/ts7/program-host.test.js.map +1 -1
  260. package/dist/frontend/type-mapper.d.ts +3 -0
  261. package/dist/frontend/type-mapper.js +44 -2
  262. package/dist/frontend/type-mapper.js.map +1 -1
  263. package/dist/frontend/worker-target.d.ts +6 -0
  264. package/dist/frontend/worker-target.js +108 -0
  265. package/dist/frontend/worker-target.js.map +1 -0
  266. package/dist/frontend/worker-target.test.d.ts +1 -0
  267. package/dist/frontend/worker-target.test.js +71 -0
  268. package/dist/frontend/worker-target.test.js.map +1 -0
  269. package/dist/index.js +24 -7
  270. package/dist/index.js.map +1 -1
  271. package/dist/ir/builtin-effects.js +12 -0
  272. package/dist/ir/builtin-effects.js.map +1 -1
  273. package/dist/ir/builtin-signatures.d.ts +1 -1
  274. package/dist/ir/builtin-signatures.js +13 -12
  275. package/dist/ir/builtin-signatures.js.map +1 -1
  276. package/dist/ir/constant-tables.test.js +1 -1
  277. package/dist/ir/initializer-bindings.test.js +1 -1
  278. package/dist/ir/ir.d.ts +9 -10
  279. package/dist/ir/ir.js.map +1 -1
  280. package/dist/ir/numeric-call-specialization.d.ts +8 -0
  281. package/dist/ir/numeric-call-specialization.js +198 -0
  282. package/dist/ir/numeric-call-specialization.js.map +1 -0
  283. package/dist/ir/runtime-features.js +4 -3
  284. package/dist/ir/runtime-features.js.map +1 -1
  285. package/dist/ir/scalar-records.test.js +1 -1
  286. package/dist/ir/serialize.d.ts +1 -1
  287. package/dist/ir/serialize.js +3 -3
  288. package/dist/ir/serialize.js.map +1 -1
  289. package/dist/ir/validate.js +89 -23
  290. package/dist/ir/validate.js.map +1 -1
  291. package/dist/ir/validate.test.js +91 -4
  292. package/dist/ir/validate.test.js.map +1 -1
  293. package/dist/library/fence-eval.test.js +1 -1
  294. package/dist/library/int-infer.test.js +4 -4
  295. package/dist/library/ir-policy.js +2 -0
  296. package/dist/library/ir-policy.js.map +1 -1
  297. package/dist/library/library-cache.test.js +5 -5
  298. package/dist/native/compiler.js +24 -11
  299. package/dist/native/compiler.js.map +1 -1
  300. package/dist/native/compiler.test.js +7 -3
  301. package/dist/native/compiler.test.js.map +1 -1
  302. package/dist/native/prepare.js +2 -0
  303. package/dist/native/prepare.js.map +1 -1
  304. package/dist/native/sanitizer.test.js +1 -0
  305. package/dist/native/sanitizer.test.js.map +1 -1
  306. package/package.json +20 -20
  307. package/surface-manifest.json +30 -2
@@ -1,3 +1,4 @@
1
+ import { lowerWorkerMetadata } from "./builtins/workers.js";
1
2
  import { dynUndefinedExpr, nodeThrowExpr, numLit, varRef } from "../../ir/build.js";
2
3
  import { lowerBuiltinCall } from "./builtin-calls.js";
3
4
  import { CoercionState } from "./coercions/state.js";
@@ -15,6 +16,7 @@ import { bindingInContext, captureContextBinding, declareContextLocal, declareCo
15
16
  import { InternalCompilerError } from "../../errors.js";
16
17
  import { defaultAfterUndefined, lowerStaticallyUndefinedArgument } from "./optional-arguments.js";
17
18
  import { ClassDynamicDispatch, trackClassFieldCreation } from "./class-dynamic-dispatch.js";
19
+ import { ClassProtocols } from "./class-protocols.js";
18
20
  import { DeferredModuleInitializers } from "./deferred-module-initializers.js";
19
21
  import { finalizeClassMethodValues } from "./class-method-values.js";
20
22
  export { newFnCtx } from "./function-context.js";
@@ -44,7 +46,7 @@ import { provenanceActive } from "../provenance-registry.js";
44
46
  import { ambientDtsPath, canonicalBuiltinModule, cjsExportAssignmentOf, cjsExportDiscardReason, fallbackDtsPath, isCjsExportTableLiteral, isCjsJsFile, isJsSourceFile, isNodeEsmFile, isNodeTypesPath, locOf, orderedImportsOf, overridesDtsPath, npmStaticDepSf7, requireSpecOf, resolveImport, workspacePackageOfPath, } from "../program.js";
45
47
  import { containsRecord, containsUnion, describeComponentBlocker, describeRecordMemberBlocker, formatIrType, ISLAND_AMBIENT_TYPES, isUnitOnlyTsType, jsOpenObjectType, mapType, ShapeRegistry, typeKey, UnionRegistry, withUndefinedArm as withUndefinedArmCanonical, } from "../type-mapper.js";
46
48
  import { boundaryIntoIslandMsg, boundaryOutOfIslandMsg, builtinConstLit, builtinModuleConstOf, builtinModulesArrayLit, builtinFenceHintOf, builtinModuleFnOf, stdlibMemberFence, isStdlibMember, isStdlibSymbol, isStdlibGlobal, stdlibGlobalNameOf, stdlibGlobalMember, nodeTypesOnlySymbol, } from "./surfaces.js";
47
- import { splitFiles, collectProgram, collectNpmImports, collectJsonImports, moduleArtifacts, collectGlobals, declSymbolOf, defaultExportSymbolOf, lowerFileInit, lowerDefaultExport, buildMain, appendDynamicImportModules, appendForkModules, } from "./lower-modules.js";
49
+ import { splitFiles, collectProgram, collectNpmImports, collectJsonImports, moduleArtifacts, collectGlobals, declSymbolOf, defaultExportSymbolOf, lowerFileInit, lowerDefaultExport, buildMain, appendDynamicImportModules, appendForkModules, appendWorkerModules, } from "./lower-modules.js";
48
50
  import { prepareCjsModuleGraph } from "./lower-node-module.js";
49
51
  import { registerBuiltinErrorClasses, registerBuiltinEmitterClass, registerBuiltinStreamClasses, builtinErrorInfoOf, builtinEmitterInfoOf, builtinStreamInfoOf, analyzeClassDecoration, classIteratorDrainCall, classIteratorNextCall, classIteratorOf, classIteratorOpenCall, classIteratorRestDrainCall, classMemberNameOf, classValueRef, collectClassShape, exactClassOfReceiver, collectClassShapeInner, ctorAbiEquals, findMethodOn, findStaticOn, genericClassInstanceType, isSubclassOf, inHierarchy, overrideBelow, staticShadowBelow, upcastTo, lowerClassMembers, lowerClassCtor, lowerClassExpression, lowerClassExpressionInfo, lowerClassMethodMember, lowerClassValueProperty, lowerStaticMethod, throwingSetterFn, fieldInitStmts, lowerStaticFieldInits, lowerStaticFieldRead, lowerDerivedCtorBody, superCallStmt, lowerSuperMethodCall, superThisRef, lowerSuperAccessorRead, lowerSuperAccessorWrite, inheritsBuiltinErrorCtor, inheritsBuiltinEmitterCtor, errorConstructorArgs, lowerNew, accessorCall, } from "./lower-classes.js";
50
52
  import { mixinCallClassInfoOf, mixinIntersectionInstanceType, } from "./lower-mixins.js";
@@ -247,6 +249,7 @@ export function lowerToIr(program, entry, moduleOrder, options = {}) {
247
249
  const extraModuleCycleDiags = [];
248
250
  const cycleKeys = new Set();
249
251
  const forkTargets = [];
252
+ const workerTargets = [];
250
253
  const onExtraCycle = (cycle, reason) => {
251
254
  const key = `${cycle}\0${reason}`;
252
255
  if (cycleKeys.has(key))
@@ -258,6 +261,7 @@ export function lowerToIr(program, entry, moduleOrder, options = {}) {
258
261
  const before = moduleOrder.length;
259
262
  appendDynamicImportModules(program, moduleOrder, onExtraCycle);
260
263
  appendForkModules(program, moduleOrder, forkTargets, onExtraCycle);
264
+ appendWorkerModules(program, moduleOrder, workerTargets, onExtraCycle);
261
265
  if (moduleOrder.length === before)
262
266
  break;
263
267
  if (pass === 31)
@@ -274,6 +278,7 @@ export function lowerToIr(program, entry, moduleOrder, options = {}) {
274
278
  ffiImports,
275
279
  libraryCallbacks,
276
280
  forkTargets,
281
+ workerTargets,
277
282
  externalTypes,
278
283
  externalTypeSpecifiersByFile,
279
284
  });
@@ -293,6 +298,7 @@ export function lowerToIr(program, entry, moduleOrder, options = {}) {
293
298
  ffiImports,
294
299
  libraryCallbacks,
295
300
  forkTargets,
301
+ workerTargets,
296
302
  externalTypes,
297
303
  externalTypeSpecifiersByFile,
298
304
  ffiBindingSymbols: ffiValidation.symbolsByName,
@@ -322,6 +328,7 @@ export function lowerToIr(program, entry, moduleOrder, options = {}) {
322
328
  ffiImports,
323
329
  libraryCallbacks,
324
330
  forkTargets,
331
+ workerTargets,
325
332
  ffiBindingSymbols: ffiValidation.symbolsByName,
326
333
  externalTypes,
327
334
  externalTypeSpecifiersByFile,
@@ -345,6 +352,7 @@ export function lowerToIr(program, entry, moduleOrder, options = {}) {
345
352
  ffiImports,
346
353
  libraryCallbacks,
347
354
  forkTargets,
355
+ workerTargets,
348
356
  ffiBindingSymbols: ffiValidation.symbolsByName,
349
357
  externalTypes,
350
358
  externalTypeSpecifiersByFile,
@@ -927,6 +935,7 @@ export class Lowerer {
927
935
  /** Monomorphization worklist: instances queued by call sites, drained in
928
936
  * run() (processing an instance body can queue more). */
929
937
  instantiationQueue = [];
938
+ genericInstantiationPath = null;
930
939
  /** Historical emit rank of the retained declaration/init body currently
931
940
  * lowering, and the earliest such owner that demanded each generic
932
941
  * instance. Reachability can encounter a later caller first; the minimum
@@ -1234,6 +1243,17 @@ export class Lowerer {
1234
1243
  while (ts.isParenthesizedExpression(origin))
1235
1244
  origin = origin.expression;
1236
1245
  let optionalOrigin = ts.isElementAccessExpression(origin) || ts.isPropertyAccessExpression(origin);
1246
+ if (ts.isCallExpression(origin)) {
1247
+ const name = ts.isPropertyAccessExpression(origin.expression)
1248
+ ? origin.expression.name
1249
+ : origin.expression;
1250
+ const symbol = ts.isIdentifier(name) ? this.resolveValueSymbol(name) : undefined;
1251
+ const signature = symbol ? this.fnSigsBySymbol.get(symbol) : undefined;
1252
+ optionalOrigin =
1253
+ this.runtimeOptionalFunctionReturns.has(origin) ||
1254
+ (signature?.returnType.kind === "union" &&
1255
+ this.armTag(signature.returnType.unionId, UNDEFINED_T) >= 0);
1256
+ }
1237
1257
  if (ts.isIdentifier(origin)) {
1238
1258
  const local = this.resolveLocal(origin);
1239
1259
  const root = local ? this.runtimeOptionalRootOf(local) : null;
@@ -1513,6 +1533,7 @@ export class Lowerer {
1513
1533
  * (the ctx guard keeps hidden locals out of closures — a cross-function
1514
1534
  * walk falls back to the plain array walk and the fence). */
1515
1535
  matchAllDrainIndexes = new Map();
1536
+ splitIdentifierUses = new Map();
1516
1537
  /** STORED numeric value iterators: `const it = numbers.values()` (and
1517
1538
  * the equivalent `[Symbol.iterator]()` spelling) over number[] or a
1518
1539
  * represented typed array has no first-class IR value, so its statically
@@ -1601,6 +1622,9 @@ export class Lowerer {
1601
1622
  fileTag = new Map();
1602
1623
  /** Embedded fork roots and their private startup ids. */
1603
1624
  forkTargets;
1625
+ workerTargets;
1626
+ workerTargetIdByPath = new Map();
1627
+ usesWorkers = false;
1604
1628
  forkTargetIdByPath = new Map();
1605
1629
  /** Namespace ModuleBlocks this program lowers, filled by splitFiles:
1606
1630
  * "flattened" — an instantiated namespace whose body joined the file's
@@ -1815,6 +1839,10 @@ export class Lowerer {
1815
1839
  this.startupCrash = mode.startupCrash ?? null;
1816
1840
  this.ffiImports = mode.ffiImports ?? [];
1817
1841
  this.libraryCallbacks = mode.libraryCallbacks ?? false;
1842
+ this.workerTargets = mode.workerTargets ?? [];
1843
+ this.workerTargets.forEach((sf, id) => {
1844
+ this.workerTargetIdByPath.set(tsgoPath(resolve(sf.fileName)), id);
1845
+ });
1818
1846
  this.forkTargets = mode.forkTargets ?? [];
1819
1847
  this.forkTargets.forEach((sf, id) => {
1820
1848
  this.forkTargetIdByPath.set(tsgoPath(resolve(sf.fileName)), id);
@@ -1881,6 +1909,7 @@ export class Lowerer {
1881
1909
  return { kind: "object", className };
1882
1910
  },
1883
1911
  mixinIntersectionInstance: (widened) => mixinIntersectionInstanceType(this, widened),
1912
+ classImplementedProtocol: (type) => this.classImplementedProtocol(type),
1884
1913
  isStdlibFile: this.isStdlibFile,
1885
1914
  isNpmFile: this.isNpmFile,
1886
1915
  isExternalTypeFile: (sf) => this.externalTypeSpecifiersByFile.has(tsgoPath(resolve(sf.fileName))),
@@ -1910,6 +1939,11 @@ export class Lowerer {
1910
1939
  registerBuiltinErrorClasses() {
1911
1940
  return registerBuiltinErrorClasses(this);
1912
1941
  }
1942
+ classProtocols = null;
1943
+ classImplementedProtocol(type) {
1944
+ this.classProtocols ??= new ClassProtocols(this.checker, this.moduleOrder);
1945
+ return this.classProtocols.usesCheckedIdentity(type);
1946
+ }
1913
1947
  /** The nominal identity of a checker module-namespace type. Program
1914
1948
  * modules use their normalized absolute source name; supported builtins
1915
1949
  * use the lowering tables' canonical bare name. */
@@ -2853,7 +2887,7 @@ export class Lowerer {
2853
2887
  // facade's panic fence, then keep lookup free of lowering side effects:
2854
2888
  // resolveValueSymbol also flushes deferred diagnostics and applies
2855
2889
  // merged-namespace fences, whose authority remains ordinary lowering.
2856
- this.checker.prefetchSymbolRoots(sourceFiles);
2890
+ this.checker.prefetchSymbolRoots(sourceFiles, true);
2857
2891
  const symbolOf = (node) => {
2858
2892
  const s = this.checker.getSymbolAtLocation(node);
2859
2893
  if (!s)
@@ -3928,7 +3962,7 @@ export class Lowerer {
3928
3962
  // generic classes, generic methods calling generic functions) — the
3929
3963
  // index loops run to the joint fixpoint. Same-key recursion re-uses
3930
3964
  // its own entry; polymorphic recursion is cut off by
3931
- // MAX_GENERIC_INSTANCES.
3965
+ // the recursive instantiation demand path.
3932
3966
  {
3933
3967
  let ec = 0;
3934
3968
  let gc = 0;
@@ -4103,7 +4137,7 @@ export class Lowerer {
4103
4137
  const module = this.diags.length > 0
4104
4138
  ? null
4105
4139
  : {
4106
- irVersion: 13,
4140
+ irVersion: 14,
4107
4141
  sourceFile: this.entry.fileName,
4108
4142
  functions,
4109
4143
  classes: artifacts.classes,
@@ -4112,6 +4146,7 @@ export class Lowerer {
4112
4146
  globals: this.globalsList,
4113
4147
  ...(this.npmEmbedded ? { embedded: this.npmEmbedded } : {}),
4114
4148
  entry: ENTRY_NAME,
4149
+ ...(this.usesWorkers ? { workers: true } : {}),
4115
4150
  ...(this.ffiImports.length > 0 ? { ffiImports: [...this.ffiImports] } : {}),
4116
4151
  };
4117
4152
  if (module)
@@ -4712,6 +4747,7 @@ export class Lowerer {
4712
4747
  // globals pre-register before their initializers lower) — an exact
4713
4748
  // duplicate (code + span + message) adds noise, not information.
4714
4749
  if (this.diags.some((p) => p.code === d.code &&
4750
+ p.loc.file === d.loc.file &&
4715
4751
  p.loc.start === d.loc.start &&
4716
4752
  p.loc.end === d.loc.end &&
4717
4753
  p.message === d.message)) {
@@ -4914,9 +4950,8 @@ export class Lowerer {
4914
4950
  'new Intl.NumberFormat("en-US").format(x) and x.toLocaleString("en-US") with default options; ' +
4915
4951
  "the rest is ICU locale data the binary does not carry";
4916
4952
  const typeHints = {
4917
- ArrayBuffer: "no free-standing ArrayBuffer value exists — typed arrays own their storage " +
4918
- "(new Uint8Array(n) allocates; new Uint8Array(new ArrayBuffer(n)) erases the buffer into the view)",
4919
- SharedArrayBuffer: "no shared-memory threads exist in a compiled program — Uint8Array is the byte storage",
4953
+ ArrayBuffer: "fixed ArrayBuffer storage and typed-array views are supported; resizable and detached storage are not modeled",
4954
+ SharedArrayBuffer: "fixed SharedArrayBuffer storage is supported; growable shared storage is not modeled",
4920
4955
  NumberFormat: intlHint,
4921
4956
  DateTimeFormat: intlHint,
4922
4957
  DurationFormat: intlHint,
@@ -6957,6 +6992,8 @@ export class Lowerer {
6957
6992
  * instance table. Filled by collectClassShapeInner's family mode;
6958
6993
  * consulted by mapType's genericClassInstance hook. */
6959
6994
  genericClassByDecl = new Map();
6995
+ /** Forward generic references may demand a family before its declaration turn. */
6996
+ collectingClassDeclarations = new Set();
6960
6997
  /** Instantiations in demand order — the member-lowering worklist run()'s
6961
6998
  * monomorphization fixpoint drains (an instantiation's methods can
6962
6999
  * demand further instances of either kind). */
@@ -8167,8 +8204,8 @@ export class Lowerer {
8167
8204
  lambdaSignature(node) {
8168
8205
  return lambdaSignature(this, node);
8169
8206
  }
8170
- lowerLambda(node) {
8171
- return lowerLambda(this, node);
8207
+ lowerLambda(node, checkedReceiver = false) {
8208
+ return lowerLambda(this, node, checkedReceiver);
8172
8209
  }
8173
8210
  lowerArrayMethodCall(call, access) {
8174
8211
  return lowerArrayMethodCall(this, call, access);
@@ -8537,6 +8574,11 @@ export class Lowerer {
8537
8574
  if (bi.module === "events" && bi.member === "defaultMaxListeners") {
8538
8575
  return { kind: "libCall", fn: "emitter.getDefaultMax", args: [], type: F64, loc };
8539
8576
  }
8577
+ if (bi.module === "worker_threads") {
8578
+ const value = lowerWorkerMetadata(bi.member, loc);
8579
+ if (value)
8580
+ return value;
8581
+ }
8540
8582
  const c = builtinModuleConstOf(this, bi.module, bi.member);
8541
8583
  if (c !== undefined)
8542
8584
  return builtinConstLit(c, loc);