@virune/compiler 1.1.0-rc.0

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 (300) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +2 -0
  3. package/dist/src/analysis/control-flow.d.ts +9 -0
  4. package/dist/src/analysis/control-flow.d.ts.map +1 -0
  5. package/dist/src/analysis/control-flow.js +47 -0
  6. package/dist/src/analysis/control-flow.js.map +1 -0
  7. package/dist/src/ast/nodes.d.ts +495 -0
  8. package/dist/src/ast/nodes.d.ts.map +1 -0
  9. package/dist/src/ast/nodes.js +2 -0
  10. package/dist/src/ast/nodes.js.map +1 -0
  11. package/dist/src/binder/symbols.d.ts +36 -0
  12. package/dist/src/binder/symbols.d.ts.map +1 -0
  13. package/dist/src/binder/symbols.js +30 -0
  14. package/dist/src/binder/symbols.js.map +1 -0
  15. package/dist/src/checker/builtin-members.d.ts +4 -0
  16. package/dist/src/checker/builtin-members.d.ts.map +1 -0
  17. package/dist/src/checker/builtin-members.js +175 -0
  18. package/dist/src/checker/builtin-members.js.map +1 -0
  19. package/dist/src/checker/checker.d.ts +148 -0
  20. package/dist/src/checker/checker.d.ts.map +1 -0
  21. package/dist/src/checker/checker.js +2985 -0
  22. package/dist/src/checker/checker.js.map +1 -0
  23. package/dist/src/checker/effect-registry.d.ts +14 -0
  24. package/dist/src/checker/effect-registry.d.ts.map +1 -0
  25. package/dist/src/checker/effect-registry.js +11 -0
  26. package/dist/src/checker/effect-registry.js.map +1 -0
  27. package/dist/src/checker/type-operations.d.ts +27 -0
  28. package/dist/src/checker/type-operations.d.ts.map +1 -0
  29. package/dist/src/checker/type-operations.js +268 -0
  30. package/dist/src/checker/type-operations.js.map +1 -0
  31. package/dist/src/codegen/emitter.d.ts +83 -0
  32. package/dist/src/codegen/emitter.d.ts.map +1 -0
  33. package/dist/src/codegen/emitter.js +1029 -0
  34. package/dist/src/codegen/emitter.js.map +1 -0
  35. package/dist/src/codegen/helpers.d.ts +7 -0
  36. package/dist/src/codegen/helpers.d.ts.map +1 -0
  37. package/dist/src/codegen/helpers.js +48 -0
  38. package/dist/src/codegen/helpers.js.map +1 -0
  39. package/dist/src/codegen/runtime-imports.d.ts +6 -0
  40. package/dist/src/codegen/runtime-imports.d.ts.map +1 -0
  41. package/dist/src/codegen/runtime-imports.js +45 -0
  42. package/dist/src/codegen/runtime-imports.js.map +1 -0
  43. package/dist/src/codegen/writer.d.ts +14 -0
  44. package/dist/src/codegen/writer.d.ts.map +1 -0
  45. package/dist/src/codegen/writer.js +56 -0
  46. package/dist/src/codegen/writer.js.map +1 -0
  47. package/dist/src/compiler.d.ts +24 -0
  48. package/dist/src/compiler.d.ts.map +1 -0
  49. package/dist/src/compiler.js +97 -0
  50. package/dist/src/compiler.js.map +1 -0
  51. package/dist/src/diagnostics/codes.d.ts +18 -0
  52. package/dist/src/diagnostics/codes.d.ts.map +1 -0
  53. package/dist/src/diagnostics/codes.js +43 -0
  54. package/dist/src/diagnostics/codes.js.map +1 -0
  55. package/dist/src/diagnostics/diagnostic.d.ts +41 -0
  56. package/dist/src/diagnostics/diagnostic.d.ts.map +1 -0
  57. package/dist/src/diagnostics/diagnostic.js +50 -0
  58. package/dist/src/diagnostics/diagnostic.js.map +1 -0
  59. package/dist/src/diagnostics/render.d.ts +44 -0
  60. package/dist/src/diagnostics/render.d.ts.map +1 -0
  61. package/dist/src/diagnostics/render.js +44 -0
  62. package/dist/src/diagnostics/render.js.map +1 -0
  63. package/dist/src/experimental-api.d.ts +19 -0
  64. package/dist/src/experimental-api.d.ts.map +1 -0
  65. package/dist/src/experimental-api.js +17 -0
  66. package/dist/src/experimental-api.js.map +1 -0
  67. package/dist/src/hir/lower.d.ts +6 -0
  68. package/dist/src/hir/lower.d.ts.map +1 -0
  69. package/dist/src/hir/lower.js +124 -0
  70. package/dist/src/hir/lower.js.map +1 -0
  71. package/dist/src/hir/nodes.d.ts +12 -0
  72. package/dist/src/hir/nodes.d.ts.map +1 -0
  73. package/dist/src/hir/nodes.js +2 -0
  74. package/dist/src/hir/nodes.js.map +1 -0
  75. package/dist/src/index.d.ts +2 -0
  76. package/dist/src/index.d.ts.map +1 -0
  77. package/dist/src/index.js +2 -0
  78. package/dist/src/index.js.map +1 -0
  79. package/dist/src/interop/checked-api.d.ts +21 -0
  80. package/dist/src/interop/checked-api.d.ts.map +1 -0
  81. package/dist/src/interop/checked-api.js +46 -0
  82. package/dist/src/interop/checked-api.js.map +1 -0
  83. package/dist/src/interop/decision.d.ts +24 -0
  84. package/dist/src/interop/decision.d.ts.map +1 -0
  85. package/dist/src/interop/decision.js +96 -0
  86. package/dist/src/interop/decision.js.map +1 -0
  87. package/dist/src/interop/frontend-component-emission.d.ts +17 -0
  88. package/dist/src/interop/frontend-component-emission.d.ts.map +1 -0
  89. package/dist/src/interop/frontend-component-emission.js +271 -0
  90. package/dist/src/interop/frontend-component-emission.js.map +1 -0
  91. package/dist/src/interop/jsx-view-validation.d.ts +20 -0
  92. package/dist/src/interop/jsx-view-validation.d.ts.map +1 -0
  93. package/dist/src/interop/jsx-view-validation.js +847 -0
  94. package/dist/src/interop/jsx-view-validation.js.map +1 -0
  95. package/dist/src/interop/operation-api.d.ts +32 -0
  96. package/dist/src/interop/operation-api.d.ts.map +1 -0
  97. package/dist/src/interop/operation-api.js +61 -0
  98. package/dist/src/interop/operation-api.js.map +1 -0
  99. package/dist/src/interop/operation.d.ts +136 -0
  100. package/dist/src/interop/operation.d.ts.map +1 -0
  101. package/dist/src/interop/operation.js +575 -0
  102. package/dist/src/interop/operation.js.map +1 -0
  103. package/dist/src/interop/repetition-host-locator.d.ts +25 -0
  104. package/dist/src/interop/repetition-host-locator.d.ts.map +1 -0
  105. package/dist/src/interop/repetition-host-locator.js +61 -0
  106. package/dist/src/interop/repetition-host-locator.js.map +1 -0
  107. package/dist/src/interop/repetition-host-usage-validation.d.ts +11 -0
  108. package/dist/src/interop/repetition-host-usage-validation.d.ts.map +1 -0
  109. package/dist/src/interop/repetition-host-usage-validation.js +89 -0
  110. package/dist/src/interop/repetition-host-usage-validation.js.map +1 -0
  111. package/dist/src/interop/types.d.ts +365 -0
  112. package/dist/src/interop/types.d.ts.map +1 -0
  113. package/dist/src/interop/types.js +2 -0
  114. package/dist/src/interop/types.js.map +1 -0
  115. package/dist/src/mir/lower.d.ts +4 -0
  116. package/dist/src/mir/lower.d.ts.map +1 -0
  117. package/dist/src/mir/lower.js +131 -0
  118. package/dist/src/mir/lower.js.map +1 -0
  119. package/dist/src/mir/nodes.d.ts +36 -0
  120. package/dist/src/mir/nodes.d.ts.map +1 -0
  121. package/dist/src/mir/nodes.js +2 -0
  122. package/dist/src/mir/nodes.js.map +1 -0
  123. package/dist/src/project/incremental.d.ts +9 -0
  124. package/dist/src/project/incremental.d.ts.map +1 -0
  125. package/dist/src/project/incremental.js +15 -0
  126. package/dist/src/project/incremental.js.map +1 -0
  127. package/dist/src/project/project.d.ts +98 -0
  128. package/dist/src/project/project.d.ts.map +1 -0
  129. package/dist/src/project/project.js +884 -0
  130. package/dist/src/project/project.js.map +1 -0
  131. package/dist/src/public-api.d.ts +45 -0
  132. package/dist/src/public-api.d.ts.map +1 -0
  133. package/dist/src/public-api.js +37 -0
  134. package/dist/src/public-api.js.map +1 -0
  135. package/dist/src/reference/evaluator.d.ts +13 -0
  136. package/dist/src/reference/evaluator.d.ts.map +1 -0
  137. package/dist/src/reference/evaluator.js +304 -0
  138. package/dist/src/reference/evaluator.js.map +1 -0
  139. package/dist/src/selfhost/bootstrap-artifact-normalizer.d.ts +65 -0
  140. package/dist/src/selfhost/bootstrap-artifact-normalizer.d.ts.map +1 -0
  141. package/dist/src/selfhost/bootstrap-artifact-normalizer.js +226 -0
  142. package/dist/src/selfhost/bootstrap-artifact-normalizer.js.map +1 -0
  143. package/dist/src/selfhost/bootstrap-artifact-snapshot.d.ts +23 -0
  144. package/dist/src/selfhost/bootstrap-artifact-snapshot.d.ts.map +1 -0
  145. package/dist/src/selfhost/bootstrap-artifact-snapshot.js +122 -0
  146. package/dist/src/selfhost/bootstrap-artifact-snapshot.js.map +1 -0
  147. package/dist/src/selfhost/bootstrap-compiler-selection.d.ts +36 -0
  148. package/dist/src/selfhost/bootstrap-compiler-selection.d.ts.map +1 -0
  149. package/dist/src/selfhost/bootstrap-compiler-selection.js +52 -0
  150. package/dist/src/selfhost/bootstrap-compiler-selection.js.map +1 -0
  151. package/dist/src/selfhost/bootstrap-execution-probe.d.ts +42 -0
  152. package/dist/src/selfhost/bootstrap-execution-probe.d.ts.map +1 -0
  153. package/dist/src/selfhost/bootstrap-execution-probe.js +115 -0
  154. package/dist/src/selfhost/bootstrap-execution-probe.js.map +1 -0
  155. package/dist/src/selfhost/bootstrap-rollback-decision.d.ts +40 -0
  156. package/dist/src/selfhost/bootstrap-rollback-decision.d.ts.map +1 -0
  157. package/dist/src/selfhost/bootstrap-rollback-decision.js +144 -0
  158. package/dist/src/selfhost/bootstrap-rollback-decision.js.map +1 -0
  159. package/dist/src/selfhost/bootstrap-shadow-history.d.ts +49 -0
  160. package/dist/src/selfhost/bootstrap-shadow-history.d.ts.map +1 -0
  161. package/dist/src/selfhost/bootstrap-shadow-history.js +348 -0
  162. package/dist/src/selfhost/bootstrap-shadow-history.js.map +1 -0
  163. package/dist/src/selfhost/bootstrap-shadow-report.d.ts +43 -0
  164. package/dist/src/selfhost/bootstrap-shadow-report.d.ts.map +1 -0
  165. package/dist/src/selfhost/bootstrap-shadow-report.js +94 -0
  166. package/dist/src/selfhost/bootstrap-shadow-report.js.map +1 -0
  167. package/dist/src/selfhost/bootstrap-stage-executor.d.ts +53 -0
  168. package/dist/src/selfhost/bootstrap-stage-executor.d.ts.map +1 -0
  169. package/dist/src/selfhost/bootstrap-stage-executor.js +159 -0
  170. package/dist/src/selfhost/bootstrap-stage-executor.js.map +1 -0
  171. package/dist/src/selfhost/bootstrap-stage-loader.d.ts +14 -0
  172. package/dist/src/selfhost/bootstrap-stage-loader.d.ts.map +1 -0
  173. package/dist/src/selfhost/bootstrap-stage-loader.js +112 -0
  174. package/dist/src/selfhost/bootstrap-stage-loader.js.map +1 -0
  175. package/dist/src/selfhost/bootstrap-stage-pipeline.d.ts +8 -0
  176. package/dist/src/selfhost/bootstrap-stage-pipeline.d.ts.map +1 -0
  177. package/dist/src/selfhost/bootstrap-stage-pipeline.js +85 -0
  178. package/dist/src/selfhost/bootstrap-stage-pipeline.js.map +1 -0
  179. package/dist/src/selfhost/bootstrap-stage-runner.d.ts +47 -0
  180. package/dist/src/selfhost/bootstrap-stage-runner.d.ts.map +1 -0
  181. package/dist/src/selfhost/bootstrap-stage-runner.js +106 -0
  182. package/dist/src/selfhost/bootstrap-stage-runner.js.map +1 -0
  183. package/dist/src/selfhost/clean-bootstrap-evidence.d.ts +83 -0
  184. package/dist/src/selfhost/clean-bootstrap-evidence.d.ts.map +1 -0
  185. package/dist/src/selfhost/clean-bootstrap-evidence.js +233 -0
  186. package/dist/src/selfhost/clean-bootstrap-evidence.js.map +1 -0
  187. package/dist/src/selfhost/compiler-facade.d.ts +33 -0
  188. package/dist/src/selfhost/compiler-facade.d.ts.map +1 -0
  189. package/dist/src/selfhost/compiler-facade.js +65 -0
  190. package/dist/src/selfhost/compiler-facade.js.map +1 -0
  191. package/dist/src/selfhost/contract.d.ts +151 -0
  192. package/dist/src/selfhost/contract.d.ts.map +1 -0
  193. package/dist/src/selfhost/contract.js +335 -0
  194. package/dist/src/selfhost/contract.js.map +1 -0
  195. package/dist/src/selfhost/differential-artifacts.d.ts +8 -0
  196. package/dist/src/selfhost/differential-artifacts.d.ts.map +1 -0
  197. package/dist/src/selfhost/differential-artifacts.js +50 -0
  198. package/dist/src/selfhost/differential-artifacts.js.map +1 -0
  199. package/dist/src/selfhost/differential-harness.d.ts +91 -0
  200. package/dist/src/selfhost/differential-harness.d.ts.map +1 -0
  201. package/dist/src/selfhost/differential-harness.js +246 -0
  202. package/dist/src/selfhost/differential-harness.js.map +1 -0
  203. package/dist/src/selfhost/full-language-inventory-runner.d.ts +49 -0
  204. package/dist/src/selfhost/full-language-inventory-runner.d.ts.map +1 -0
  205. package/dist/src/selfhost/full-language-inventory-runner.js +225 -0
  206. package/dist/src/selfhost/full-language-inventory-runner.js.map +1 -0
  207. package/dist/src/selfhost/full-language-inventory.d.ts +42 -0
  208. package/dist/src/selfhost/full-language-inventory.d.ts.map +1 -0
  209. package/dist/src/selfhost/full-language-inventory.js +163 -0
  210. package/dist/src/selfhost/full-language-inventory.js.map +1 -0
  211. package/dist/src/selfhost/interop-resolution-witness.d.ts +35 -0
  212. package/dist/src/selfhost/interop-resolution-witness.d.ts.map +1 -0
  213. package/dist/src/selfhost/interop-resolution-witness.js +186 -0
  214. package/dist/src/selfhost/interop-resolution-witness.js.map +1 -0
  215. package/dist/src/selfhost/kernel-model-host-adapter.d.ts +28 -0
  216. package/dist/src/selfhost/kernel-model-host-adapter.d.ts.map +1 -0
  217. package/dist/src/selfhost/kernel-model-host-adapter.js +36 -0
  218. package/dist/src/selfhost/kernel-model-host-adapter.js.map +1 -0
  219. package/dist/src/selfhost/legacy-adapter.d.ts +8 -0
  220. package/dist/src/selfhost/legacy-adapter.d.ts.map +1 -0
  221. package/dist/src/selfhost/legacy-adapter.js +186 -0
  222. package/dist/src/selfhost/legacy-adapter.js.map +1 -0
  223. package/dist/src/selfhost/module-graph.d.ts +57 -0
  224. package/dist/src/selfhost/module-graph.d.ts.map +1 -0
  225. package/dist/src/selfhost/module-graph.js +267 -0
  226. package/dist/src/selfhost/module-graph.js.map +1 -0
  227. package/dist/src/selfhost/mvp-adapter.d.ts +19 -0
  228. package/dist/src/selfhost/mvp-adapter.d.ts.map +1 -0
  229. package/dist/src/selfhost/mvp-adapter.js +186 -0
  230. package/dist/src/selfhost/mvp-adapter.js.map +1 -0
  231. package/dist/src/selfhost/node-executor.d.ts +6 -0
  232. package/dist/src/selfhost/node-executor.d.ts.map +1 -0
  233. package/dist/src/selfhost/node-executor.js +138 -0
  234. package/dist/src/selfhost/node-executor.js.map +1 -0
  235. package/dist/src/selfhost/project-compiler-adapter.d.ts +77 -0
  236. package/dist/src/selfhost/project-compiler-adapter.d.ts.map +1 -0
  237. package/dist/src/selfhost/project-compiler-adapter.js +358 -0
  238. package/dist/src/selfhost/project-compiler-adapter.js.map +1 -0
  239. package/dist/src/selfhost/project-differential-adapter.d.ts +15 -0
  240. package/dist/src/selfhost/project-differential-adapter.d.ts.map +1 -0
  241. package/dist/src/selfhost/project-differential-adapter.js +65 -0
  242. package/dist/src/selfhost/project-differential-adapter.js.map +1 -0
  243. package/dist/src/selfhost/promotion-evidence.d.ts +62 -0
  244. package/dist/src/selfhost/promotion-evidence.d.ts.map +1 -0
  245. package/dist/src/selfhost/promotion-evidence.js +332 -0
  246. package/dist/src/selfhost/promotion-evidence.js.map +1 -0
  247. package/dist/src/selfhost/promotion-policy-replay-v2.d.ts +54 -0
  248. package/dist/src/selfhost/promotion-policy-replay-v2.d.ts.map +1 -0
  249. package/dist/src/selfhost/promotion-policy-replay-v2.js +343 -0
  250. package/dist/src/selfhost/promotion-policy-replay-v2.js.map +1 -0
  251. package/dist/src/selfhost/promotion-shadow-history-v2.d.ts +55 -0
  252. package/dist/src/selfhost/promotion-shadow-history-v2.d.ts.map +1 -0
  253. package/dist/src/selfhost/promotion-shadow-history-v2.js +227 -0
  254. package/dist/src/selfhost/promotion-shadow-history-v2.js.map +1 -0
  255. package/dist/src/selfhost/promotion-subject.d.ts +34 -0
  256. package/dist/src/selfhost/promotion-subject.d.ts.map +1 -0
  257. package/dist/src/selfhost/promotion-subject.js +141 -0
  258. package/dist/src/selfhost/promotion-subject.js.map +1 -0
  259. package/dist/src/selfhost/source-manifest.d.ts +31 -0
  260. package/dist/src/selfhost/source-manifest.d.ts.map +1 -0
  261. package/dist/src/selfhost/source-manifest.js +194 -0
  262. package/dist/src/selfhost/source-manifest.js.map +1 -0
  263. package/dist/src/selfhost/stage-compiler-facade.d.ts +25 -0
  264. package/dist/src/selfhost/stage-compiler-facade.d.ts.map +1 -0
  265. package/dist/src/selfhost/stage-compiler-facade.js +100 -0
  266. package/dist/src/selfhost/stage-compiler-facade.js.map +1 -0
  267. package/dist/src/semantic-evidence/snapshot.d.ts +114 -0
  268. package/dist/src/semantic-evidence/snapshot.d.ts.map +1 -0
  269. package/dist/src/semantic-evidence/snapshot.js +336 -0
  270. package/dist/src/semantic-evidence/snapshot.js.map +1 -0
  271. package/dist/src/source.d.ts +25 -0
  272. package/dist/src/source.d.ts.map +1 -0
  273. package/dist/src/source.js +10 -0
  274. package/dist/src/source.js.map +1 -0
  275. package/dist/src/syntax/cst-to-ast.d.ts +108 -0
  276. package/dist/src/syntax/cst-to-ast.d.ts.map +1 -0
  277. package/dist/src/syntax/cst-to-ast.js +383 -0
  278. package/dist/src/syntax/cst-to-ast.js.map +1 -0
  279. package/dist/src/syntax/documentation.d.ts +11 -0
  280. package/dist/src/syntax/documentation.d.ts.map +1 -0
  281. package/dist/src/syntax/documentation.js +261 -0
  282. package/dist/src/syntax/documentation.js.map +1 -0
  283. package/dist/src/syntax/parser.d.ts +114 -0
  284. package/dist/src/syntax/parser.d.ts.map +1 -0
  285. package/dist/src/syntax/parser.js +970 -0
  286. package/dist/src/syntax/parser.js.map +1 -0
  287. package/dist/src/syntax/syntax-metadata.d.ts +8 -0
  288. package/dist/src/syntax/syntax-metadata.d.ts.map +1 -0
  289. package/dist/src/syntax/syntax-metadata.js +14 -0
  290. package/dist/src/syntax/syntax-metadata.js.map +1 -0
  291. package/dist/src/syntax/tokens.d.ts +96 -0
  292. package/dist/src/syntax/tokens.d.ts.map +1 -0
  293. package/dist/src/syntax/tokens.js +260 -0
  294. package/dist/src/syntax/tokens.js.map +1 -0
  295. package/dist/src/types/types.d.ts +97 -0
  296. package/dist/src/types/types.d.ts.map +1 -0
  297. package/dist/src/types/types.js +105 -0
  298. package/dist/src/types/types.js.map +1 -0
  299. package/package.json +47 -0
  300. package/schema/diagnostics-v1.schema.json +75 -0
@@ -0,0 +1,131 @@
1
+ class MirBuilder {
2
+ #blocks = [];
3
+ #loops = [];
4
+ lower(declaration) {
5
+ if (declaration.expressionBody)
6
+ return undefined;
7
+ const entry = this.createBlock();
8
+ const exit = this.lowerBlock(declaration.body, entry);
9
+ if (this.block(exit).terminator === undefined)
10
+ this.block(exit).terminator = { kind: 'end' };
11
+ return {
12
+ declarationNodeId: declaration.id,
13
+ name: declaration.name,
14
+ entry,
15
+ blocks: this.#blocks.map(block => ({ id: block.id, instructions: block.instructions, terminator: block.terminator ?? { kind: 'end' } })),
16
+ };
17
+ }
18
+ createBlock() {
19
+ const id = this.#blocks.length;
20
+ this.#blocks.push({ id, instructions: [] });
21
+ return id;
22
+ }
23
+ block(id) { return this.#blocks[id]; }
24
+ lowerBlock(block, start) {
25
+ let current = start;
26
+ for (const statement of block.statements) {
27
+ if (this.block(current).terminator !== undefined) {
28
+ const unreachable = this.createBlock();
29
+ this.block(unreachable).terminator = { kind: 'unreachable' };
30
+ continue;
31
+ }
32
+ current = this.lowerStatement(statement, current);
33
+ }
34
+ return current;
35
+ }
36
+ lowerStatement(statement, current) {
37
+ switch (statement.kind) {
38
+ case 'LetStatement':
39
+ this.push(current, statement, 'let', statement.value.inferredTypeId);
40
+ return current;
41
+ case 'AssignmentStatement':
42
+ if (statement.invalidTarget !== undefined)
43
+ throw new Error('Invalid assignment target reached MIR lowering');
44
+ this.push(current, statement, 'assign', statement.value.inferredTypeId);
45
+ return current;
46
+ case 'MemberAssignmentStatement':
47
+ case 'IndexAssignmentStatement':
48
+ if (statement.foreignWrite !== true)
49
+ throw new Error('Unproven writable facet reached MIR lowering');
50
+ this.push(current, statement, 'assign', statement.value.inferredTypeId);
51
+ return current;
52
+ case 'ExpressionStatement':
53
+ case 'DiscardStatement':
54
+ this.push(current, statement, 'evaluate', statement.expression.inferredTypeId);
55
+ return current;
56
+ case 'DeferStatement':
57
+ this.push(current, statement, 'defer', statement.expression.inferredTypeId);
58
+ return current;
59
+ case 'ReturnStatement':
60
+ this.block(current).terminator = { kind: 'return', ...(statement.value === undefined ? {} : { valueNodeId: statement.value.id }) };
61
+ return current;
62
+ case 'BreakStatement': {
63
+ const loop = this.#loops.at(-1);
64
+ this.block(current).terminator = loop === undefined ? { kind: 'unreachable' } : { kind: 'goto', target: loop.breakTarget };
65
+ return current;
66
+ }
67
+ case 'ContinueStatement': {
68
+ const loop = this.#loops.at(-1);
69
+ this.block(current).terminator = loop === undefined ? { kind: 'unreachable' } : { kind: 'goto', target: loop.continueTarget };
70
+ return current;
71
+ }
72
+ case 'IfStatement': return this.lowerIf(statement, current);
73
+ case 'WhileStatement': return this.lowerWhile(statement, current);
74
+ case 'ForStatement': return this.lowerFor(statement, current);
75
+ }
76
+ }
77
+ lowerIf(statement, current) {
78
+ const thenBlock = this.createBlock();
79
+ const elseBlock = this.createBlock();
80
+ const merge = this.createBlock();
81
+ this.block(current).terminator = { kind: 'branch', conditionNodeId: statement.condition.id, thenTarget: thenBlock, elseTarget: elseBlock };
82
+ const thenExit = this.lowerBlock(statement.thenBlock, thenBlock);
83
+ if (this.block(thenExit).terminator === undefined)
84
+ this.block(thenExit).terminator = { kind: 'goto', target: merge };
85
+ let elseExit = elseBlock;
86
+ if (statement.elseBranch !== undefined) {
87
+ elseExit = statement.elseBranch.kind === 'BlockStatement'
88
+ ? this.lowerBlock(statement.elseBranch, elseBlock)
89
+ : this.lowerStatement(statement.elseBranch, elseBlock);
90
+ }
91
+ if (this.block(elseExit).terminator === undefined)
92
+ this.block(elseExit).terminator = { kind: 'goto', target: merge };
93
+ return merge;
94
+ }
95
+ lowerWhile(statement, current) {
96
+ const condition = this.createBlock();
97
+ const body = this.createBlock();
98
+ const exit = this.createBlock();
99
+ this.block(current).terminator = { kind: 'goto', target: condition };
100
+ this.block(condition).terminator = { kind: 'branch', conditionNodeId: statement.condition.id, thenTarget: body, elseTarget: exit };
101
+ this.#loops.push({ continueTarget: condition, breakTarget: exit });
102
+ const bodyExit = this.lowerBlock(statement.body, body);
103
+ this.#loops.pop();
104
+ if (this.block(bodyExit).terminator === undefined)
105
+ this.block(bodyExit).terminator = { kind: 'goto', target: condition };
106
+ return exit;
107
+ }
108
+ lowerFor(statement, current) {
109
+ // The iterator protocol is lowered by code generation. MIR records the loop's
110
+ // control-flow shape and the iterable expression as an evaluated instruction.
111
+ this.push(current, statement, 'evaluate', statement.iterable.inferredTypeId);
112
+ const condition = this.createBlock();
113
+ const body = this.createBlock();
114
+ const exit = this.createBlock();
115
+ this.block(current).terminator = { kind: 'goto', target: condition };
116
+ this.block(condition).terminator = { kind: 'branch', conditionNodeId: statement.iterable.id, thenTarget: body, elseTarget: exit };
117
+ this.#loops.push({ continueTarget: condition, breakTarget: exit });
118
+ const bodyExit = this.lowerBlock(statement.body, body);
119
+ this.#loops.pop();
120
+ if (this.block(bodyExit).terminator === undefined)
121
+ this.block(bodyExit).terminator = { kind: 'goto', target: condition };
122
+ return exit;
123
+ }
124
+ push(blockId, node, kind, typeId) {
125
+ this.block(blockId).instructions.push({ nodeId: node.id, kind, span: node.span, ...(typeId === undefined ? {} : { typeId }) });
126
+ }
127
+ }
128
+ export function lowerFunctionToMir(declaration) {
129
+ return new MirBuilder().lower(declaration);
130
+ }
131
+ //# sourceMappingURL=lower.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lower.js","sourceRoot":"","sources":["../../../src/mir/lower.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { NodeId, SourceSpan, TypeId } from '../source.js';
2
+ export type MirBlockId = number;
3
+ export interface MirInstruction {
4
+ readonly nodeId: NodeId;
5
+ readonly kind: 'let' | 'assign' | 'evaluate' | 'defer';
6
+ readonly span: SourceSpan;
7
+ readonly typeId?: TypeId;
8
+ }
9
+ export type MirTerminator = {
10
+ readonly kind: 'goto';
11
+ readonly target: MirBlockId;
12
+ } | {
13
+ readonly kind: 'branch';
14
+ readonly conditionNodeId: NodeId;
15
+ readonly thenTarget: MirBlockId;
16
+ readonly elseTarget: MirBlockId;
17
+ } | {
18
+ readonly kind: 'return';
19
+ readonly valueNodeId?: NodeId;
20
+ } | {
21
+ readonly kind: 'end';
22
+ } | {
23
+ readonly kind: 'unreachable';
24
+ };
25
+ export interface MirBasicBlock {
26
+ readonly id: MirBlockId;
27
+ readonly instructions: readonly MirInstruction[];
28
+ readonly terminator: MirTerminator;
29
+ }
30
+ export interface MirFunction {
31
+ readonly declarationNodeId: NodeId;
32
+ readonly name: string;
33
+ readonly entry: MirBlockId;
34
+ readonly blocks: readonly MirBasicBlock[];
35
+ }
36
+ //# sourceMappingURL=nodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../../src/mir/nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IACvD,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,aAAa,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GACtD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;CAAE,GAC/H;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAEpC,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,SAAS,cAAc,EAAE,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;CAC1C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=nodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../../src/mir/nodes.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import { type BuildProjectOptions, type ProjectBuildResult } from './project.js';
2
+ /** Stateful project compiler used by editors and watch-mode integrations. */
3
+ export declare class IncrementalProjectBuilder {
4
+ #private;
5
+ build(rootDirectory: string, options?: Omit<BuildProjectOptions, 'incrementalCache'>): Promise<ProjectBuildResult>;
6
+ invalidate(path?: string): void;
7
+ clear(): void;
8
+ }
9
+ //# sourceMappingURL=incremental.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incremental.d.ts","sourceRoot":"","sources":["../../../src/project/incremental.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElH,6EAA6E;AAC7E,qBAAa,yBAAyB;;IAGxB,KAAK,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,GAAE,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,CAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAI5H,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAI/B,KAAK,IAAI,IAAI;CAGpB"}
@@ -0,0 +1,15 @@
1
+ import { buildProject, ProjectBuildCache } from './project.js';
2
+ /** Stateful project compiler used by editors and watch-mode integrations. */
3
+ export class IncrementalProjectBuilder {
4
+ #cache = new ProjectBuildCache();
5
+ async build(rootDirectory, options = {}) {
6
+ return buildProject(rootDirectory, { ...options, incrementalCache: this.#cache });
7
+ }
8
+ invalidate(path) {
9
+ this.#cache.invalidate(path);
10
+ }
11
+ clear() {
12
+ this.#cache.clear();
13
+ }
14
+ }
15
+ //# sourceMappingURL=incremental.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incremental.js","sourceRoot":"","sources":["../../../src/project/incremental.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAqD,MAAM,cAAc,CAAC;AAElH,6EAA6E;AAC7E,MAAM,OAAO,yBAAyB;IAC5B,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAEnC,KAAK,CAAC,KAAK,CAAC,aAAqB,EAAE,UAAyD,EAAE;QACpG,OAAO,YAAY,CAAC,aAAa,EAAE,EAAE,GAAG,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACnF,CAAC;IAEM,UAAU,CAAC,IAAa;QAC9B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAEM,KAAK;QACX,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACD"}
@@ -0,0 +1,98 @@
1
+ import type * as A from '../ast/nodes.js';
2
+ import { type SemanticModel } from '../checker/checker.js';
3
+ import { type EmitResult } from '../codegen/emitter.js';
4
+ import { type Diagnostic } from '../diagnostics/diagnostic.js';
5
+ import type { JsInteropProvider } from '../interop/types.js';
6
+ import type { SourceFile } from '../source.js';
7
+ export interface ViruneConfig {
8
+ readonly languageVersion: '1.0';
9
+ readonly platform: 'node' | 'browser' | 'neutral';
10
+ readonly sourceDir: string;
11
+ readonly outDir: string;
12
+ readonly entry: string;
13
+ readonly target: 'es2022';
14
+ readonly sourceMap: boolean;
15
+ readonly sourcesContent: boolean;
16
+ readonly test?: {
17
+ readonly include?: readonly string[];
18
+ };
19
+ }
20
+ export interface ParsedModule {
21
+ readonly source: SourceFile;
22
+ readonly ast?: A.ModuleNode;
23
+ readonly diagnostics: readonly Diagnostic[];
24
+ }
25
+ export interface BuiltModule extends ParsedModule {
26
+ readonly semantic?: SemanticModel;
27
+ readonly output?: EmitResult;
28
+ readonly outputPath?: string;
29
+ }
30
+ export interface ProjectBuildStats {
31
+ readonly parsedModules: number;
32
+ readonly reusedParsedModules: number;
33
+ readonly checkedModules: number;
34
+ readonly reusedCheckedModules: number;
35
+ readonly emittedModules: number;
36
+ readonly reusedEmittedModules: number;
37
+ readonly invalidatedModules: number;
38
+ }
39
+ export interface ProjectBuildResult {
40
+ readonly root: string;
41
+ readonly config: ViruneConfig;
42
+ readonly modules: readonly BuiltModule[];
43
+ readonly diagnostics: readonly Diagnostic[];
44
+ readonly stats: ProjectBuildStats;
45
+ }
46
+ interface CachedProjectModule {
47
+ readonly sourceHash: string;
48
+ readonly parsed: ParsedModule;
49
+ readonly interfaceHash: string;
50
+ readonly buildFingerprint: string;
51
+ readonly built: BuiltModule;
52
+ }
53
+ /**
54
+ * Return the exact modules that can be loaded from the supplied roots by emitted
55
+ * Virune-to-Virune runtime imports in this ProjectBuildResult. The dependency
56
+ * sidecar is attached to the same BuiltModule objects that own emitted output,
57
+ * so execution checks do not need to rebuild or re-read project state.
58
+ */
59
+ export declare function projectRuntimeModuleClosure(result: ProjectBuildResult, rootPaths: readonly string[]): readonly BuiltModule[];
60
+ /**
61
+ * Reusable state for incremental project builds. The cache is intentionally
62
+ * explicit so one-shot CLI builds remain deterministic and side-effect free.
63
+ */
64
+ export declare class ProjectBuildCache {
65
+ #private;
66
+ clear(): void;
67
+ invalidate(path?: string): void;
68
+ fileId(path: string): number;
69
+ get(path: string): CachedProjectModule | undefined;
70
+ set(path: string, value: CachedProjectModule): void;
71
+ prune(paths: ReadonlySet<string>): number;
72
+ }
73
+ export interface ProjectHost {
74
+ readFile(path: string): Promise<string>;
75
+ }
76
+ export interface BuildProjectOptions {
77
+ readonly write?: boolean;
78
+ readonly additionalEntries?: readonly string[];
79
+ readonly host?: ProjectHost;
80
+ readonly includeConfigEntry?: boolean;
81
+ readonly incrementalCache?: ProjectBuildCache;
82
+ readonly jsInteropProvider?: JsInteropProvider;
83
+ }
84
+ export interface EntryPointValidationResult {
85
+ readonly main?: A.FunctionDeclaration;
86
+ readonly diagnostics: readonly Diagnostic[];
87
+ }
88
+ export declare function loadConfig(root: string, host?: ProjectHost): Promise<ViruneConfig>;
89
+ export declare function parseSource(source: SourceFile): ParsedModule;
90
+ export declare function buildProject(rootDirectory: string, options?: BuildProjectOptions): Promise<ProjectBuildResult>;
91
+ export declare function buildProject(rootDirectory: string, write?: boolean, additionalEntries?: readonly string[]): Promise<ProjectBuildResult>;
92
+ /**
93
+ * Validate the executable entry point without making library builds depend on
94
+ * the presence of `main`. The CLI invokes this only for `virune run`.
95
+ */
96
+ export declare function validateEntryPoint(module: BuiltModule): EntryPointValidationResult;
97
+ export {};
98
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../../src/project/project.ts"],"names":[],"mappings":"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"}