@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.
- package/LICENSE +201 -0
- package/NOTICE +2 -0
- package/dist/src/analysis/control-flow.d.ts +9 -0
- package/dist/src/analysis/control-flow.d.ts.map +1 -0
- package/dist/src/analysis/control-flow.js +47 -0
- package/dist/src/analysis/control-flow.js.map +1 -0
- package/dist/src/ast/nodes.d.ts +495 -0
- package/dist/src/ast/nodes.d.ts.map +1 -0
- package/dist/src/ast/nodes.js +2 -0
- package/dist/src/ast/nodes.js.map +1 -0
- package/dist/src/binder/symbols.d.ts +36 -0
- package/dist/src/binder/symbols.d.ts.map +1 -0
- package/dist/src/binder/symbols.js +30 -0
- package/dist/src/binder/symbols.js.map +1 -0
- package/dist/src/checker/builtin-members.d.ts +4 -0
- package/dist/src/checker/builtin-members.d.ts.map +1 -0
- package/dist/src/checker/builtin-members.js +175 -0
- package/dist/src/checker/builtin-members.js.map +1 -0
- package/dist/src/checker/checker.d.ts +148 -0
- package/dist/src/checker/checker.d.ts.map +1 -0
- package/dist/src/checker/checker.js +2985 -0
- package/dist/src/checker/checker.js.map +1 -0
- package/dist/src/checker/effect-registry.d.ts +14 -0
- package/dist/src/checker/effect-registry.d.ts.map +1 -0
- package/dist/src/checker/effect-registry.js +11 -0
- package/dist/src/checker/effect-registry.js.map +1 -0
- package/dist/src/checker/type-operations.d.ts +27 -0
- package/dist/src/checker/type-operations.d.ts.map +1 -0
- package/dist/src/checker/type-operations.js +268 -0
- package/dist/src/checker/type-operations.js.map +1 -0
- package/dist/src/codegen/emitter.d.ts +83 -0
- package/dist/src/codegen/emitter.d.ts.map +1 -0
- package/dist/src/codegen/emitter.js +1029 -0
- package/dist/src/codegen/emitter.js.map +1 -0
- package/dist/src/codegen/helpers.d.ts +7 -0
- package/dist/src/codegen/helpers.d.ts.map +1 -0
- package/dist/src/codegen/helpers.js +48 -0
- package/dist/src/codegen/helpers.js.map +1 -0
- package/dist/src/codegen/runtime-imports.d.ts +6 -0
- package/dist/src/codegen/runtime-imports.d.ts.map +1 -0
- package/dist/src/codegen/runtime-imports.js +45 -0
- package/dist/src/codegen/runtime-imports.js.map +1 -0
- package/dist/src/codegen/writer.d.ts +14 -0
- package/dist/src/codegen/writer.d.ts.map +1 -0
- package/dist/src/codegen/writer.js +56 -0
- package/dist/src/codegen/writer.js.map +1 -0
- package/dist/src/compiler.d.ts +24 -0
- package/dist/src/compiler.d.ts.map +1 -0
- package/dist/src/compiler.js +97 -0
- package/dist/src/compiler.js.map +1 -0
- package/dist/src/diagnostics/codes.d.ts +18 -0
- package/dist/src/diagnostics/codes.d.ts.map +1 -0
- package/dist/src/diagnostics/codes.js +43 -0
- package/dist/src/diagnostics/codes.js.map +1 -0
- package/dist/src/diagnostics/diagnostic.d.ts +41 -0
- package/dist/src/diagnostics/diagnostic.d.ts.map +1 -0
- package/dist/src/diagnostics/diagnostic.js +50 -0
- package/dist/src/diagnostics/diagnostic.js.map +1 -0
- package/dist/src/diagnostics/render.d.ts +44 -0
- package/dist/src/diagnostics/render.d.ts.map +1 -0
- package/dist/src/diagnostics/render.js +44 -0
- package/dist/src/diagnostics/render.js.map +1 -0
- package/dist/src/experimental-api.d.ts +19 -0
- package/dist/src/experimental-api.d.ts.map +1 -0
- package/dist/src/experimental-api.js +17 -0
- package/dist/src/experimental-api.js.map +1 -0
- package/dist/src/hir/lower.d.ts +6 -0
- package/dist/src/hir/lower.d.ts.map +1 -0
- package/dist/src/hir/lower.js +124 -0
- package/dist/src/hir/lower.js.map +1 -0
- package/dist/src/hir/nodes.d.ts +12 -0
- package/dist/src/hir/nodes.d.ts.map +1 -0
- package/dist/src/hir/nodes.js +2 -0
- package/dist/src/hir/nodes.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/interop/checked-api.d.ts +21 -0
- package/dist/src/interop/checked-api.d.ts.map +1 -0
- package/dist/src/interop/checked-api.js +46 -0
- package/dist/src/interop/checked-api.js.map +1 -0
- package/dist/src/interop/decision.d.ts +24 -0
- package/dist/src/interop/decision.d.ts.map +1 -0
- package/dist/src/interop/decision.js +96 -0
- package/dist/src/interop/decision.js.map +1 -0
- package/dist/src/interop/frontend-component-emission.d.ts +17 -0
- package/dist/src/interop/frontend-component-emission.d.ts.map +1 -0
- package/dist/src/interop/frontend-component-emission.js +271 -0
- package/dist/src/interop/frontend-component-emission.js.map +1 -0
- package/dist/src/interop/jsx-view-validation.d.ts +20 -0
- package/dist/src/interop/jsx-view-validation.d.ts.map +1 -0
- package/dist/src/interop/jsx-view-validation.js +847 -0
- package/dist/src/interop/jsx-view-validation.js.map +1 -0
- package/dist/src/interop/operation-api.d.ts +32 -0
- package/dist/src/interop/operation-api.d.ts.map +1 -0
- package/dist/src/interop/operation-api.js +61 -0
- package/dist/src/interop/operation-api.js.map +1 -0
- package/dist/src/interop/operation.d.ts +136 -0
- package/dist/src/interop/operation.d.ts.map +1 -0
- package/dist/src/interop/operation.js +575 -0
- package/dist/src/interop/operation.js.map +1 -0
- package/dist/src/interop/repetition-host-locator.d.ts +25 -0
- package/dist/src/interop/repetition-host-locator.d.ts.map +1 -0
- package/dist/src/interop/repetition-host-locator.js +61 -0
- package/dist/src/interop/repetition-host-locator.js.map +1 -0
- package/dist/src/interop/repetition-host-usage-validation.d.ts +11 -0
- package/dist/src/interop/repetition-host-usage-validation.d.ts.map +1 -0
- package/dist/src/interop/repetition-host-usage-validation.js +89 -0
- package/dist/src/interop/repetition-host-usage-validation.js.map +1 -0
- package/dist/src/interop/types.d.ts +365 -0
- package/dist/src/interop/types.d.ts.map +1 -0
- package/dist/src/interop/types.js +2 -0
- package/dist/src/interop/types.js.map +1 -0
- package/dist/src/mir/lower.d.ts +4 -0
- package/dist/src/mir/lower.d.ts.map +1 -0
- package/dist/src/mir/lower.js +131 -0
- package/dist/src/mir/lower.js.map +1 -0
- package/dist/src/mir/nodes.d.ts +36 -0
- package/dist/src/mir/nodes.d.ts.map +1 -0
- package/dist/src/mir/nodes.js +2 -0
- package/dist/src/mir/nodes.js.map +1 -0
- package/dist/src/project/incremental.d.ts +9 -0
- package/dist/src/project/incremental.d.ts.map +1 -0
- package/dist/src/project/incremental.js +15 -0
- package/dist/src/project/incremental.js.map +1 -0
- package/dist/src/project/project.d.ts +98 -0
- package/dist/src/project/project.d.ts.map +1 -0
- package/dist/src/project/project.js +884 -0
- package/dist/src/project/project.js.map +1 -0
- package/dist/src/public-api.d.ts +45 -0
- package/dist/src/public-api.d.ts.map +1 -0
- package/dist/src/public-api.js +37 -0
- package/dist/src/public-api.js.map +1 -0
- package/dist/src/reference/evaluator.d.ts +13 -0
- package/dist/src/reference/evaluator.d.ts.map +1 -0
- package/dist/src/reference/evaluator.js +304 -0
- package/dist/src/reference/evaluator.js.map +1 -0
- package/dist/src/selfhost/bootstrap-artifact-normalizer.d.ts +65 -0
- package/dist/src/selfhost/bootstrap-artifact-normalizer.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-artifact-normalizer.js +226 -0
- package/dist/src/selfhost/bootstrap-artifact-normalizer.js.map +1 -0
- package/dist/src/selfhost/bootstrap-artifact-snapshot.d.ts +23 -0
- package/dist/src/selfhost/bootstrap-artifact-snapshot.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-artifact-snapshot.js +122 -0
- package/dist/src/selfhost/bootstrap-artifact-snapshot.js.map +1 -0
- package/dist/src/selfhost/bootstrap-compiler-selection.d.ts +36 -0
- package/dist/src/selfhost/bootstrap-compiler-selection.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-compiler-selection.js +52 -0
- package/dist/src/selfhost/bootstrap-compiler-selection.js.map +1 -0
- package/dist/src/selfhost/bootstrap-execution-probe.d.ts +42 -0
- package/dist/src/selfhost/bootstrap-execution-probe.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-execution-probe.js +115 -0
- package/dist/src/selfhost/bootstrap-execution-probe.js.map +1 -0
- package/dist/src/selfhost/bootstrap-rollback-decision.d.ts +40 -0
- package/dist/src/selfhost/bootstrap-rollback-decision.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-rollback-decision.js +144 -0
- package/dist/src/selfhost/bootstrap-rollback-decision.js.map +1 -0
- package/dist/src/selfhost/bootstrap-shadow-history.d.ts +49 -0
- package/dist/src/selfhost/bootstrap-shadow-history.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-shadow-history.js +348 -0
- package/dist/src/selfhost/bootstrap-shadow-history.js.map +1 -0
- package/dist/src/selfhost/bootstrap-shadow-report.d.ts +43 -0
- package/dist/src/selfhost/bootstrap-shadow-report.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-shadow-report.js +94 -0
- package/dist/src/selfhost/bootstrap-shadow-report.js.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-executor.d.ts +53 -0
- package/dist/src/selfhost/bootstrap-stage-executor.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-executor.js +159 -0
- package/dist/src/selfhost/bootstrap-stage-executor.js.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-loader.d.ts +14 -0
- package/dist/src/selfhost/bootstrap-stage-loader.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-loader.js +112 -0
- package/dist/src/selfhost/bootstrap-stage-loader.js.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-pipeline.d.ts +8 -0
- package/dist/src/selfhost/bootstrap-stage-pipeline.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-pipeline.js +85 -0
- package/dist/src/selfhost/bootstrap-stage-pipeline.js.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-runner.d.ts +47 -0
- package/dist/src/selfhost/bootstrap-stage-runner.d.ts.map +1 -0
- package/dist/src/selfhost/bootstrap-stage-runner.js +106 -0
- package/dist/src/selfhost/bootstrap-stage-runner.js.map +1 -0
- package/dist/src/selfhost/clean-bootstrap-evidence.d.ts +83 -0
- package/dist/src/selfhost/clean-bootstrap-evidence.d.ts.map +1 -0
- package/dist/src/selfhost/clean-bootstrap-evidence.js +233 -0
- package/dist/src/selfhost/clean-bootstrap-evidence.js.map +1 -0
- package/dist/src/selfhost/compiler-facade.d.ts +33 -0
- package/dist/src/selfhost/compiler-facade.d.ts.map +1 -0
- package/dist/src/selfhost/compiler-facade.js +65 -0
- package/dist/src/selfhost/compiler-facade.js.map +1 -0
- package/dist/src/selfhost/contract.d.ts +151 -0
- package/dist/src/selfhost/contract.d.ts.map +1 -0
- package/dist/src/selfhost/contract.js +335 -0
- package/dist/src/selfhost/contract.js.map +1 -0
- package/dist/src/selfhost/differential-artifacts.d.ts +8 -0
- package/dist/src/selfhost/differential-artifacts.d.ts.map +1 -0
- package/dist/src/selfhost/differential-artifacts.js +50 -0
- package/dist/src/selfhost/differential-artifacts.js.map +1 -0
- package/dist/src/selfhost/differential-harness.d.ts +91 -0
- package/dist/src/selfhost/differential-harness.d.ts.map +1 -0
- package/dist/src/selfhost/differential-harness.js +246 -0
- package/dist/src/selfhost/differential-harness.js.map +1 -0
- package/dist/src/selfhost/full-language-inventory-runner.d.ts +49 -0
- package/dist/src/selfhost/full-language-inventory-runner.d.ts.map +1 -0
- package/dist/src/selfhost/full-language-inventory-runner.js +225 -0
- package/dist/src/selfhost/full-language-inventory-runner.js.map +1 -0
- package/dist/src/selfhost/full-language-inventory.d.ts +42 -0
- package/dist/src/selfhost/full-language-inventory.d.ts.map +1 -0
- package/dist/src/selfhost/full-language-inventory.js +163 -0
- package/dist/src/selfhost/full-language-inventory.js.map +1 -0
- package/dist/src/selfhost/interop-resolution-witness.d.ts +35 -0
- package/dist/src/selfhost/interop-resolution-witness.d.ts.map +1 -0
- package/dist/src/selfhost/interop-resolution-witness.js +186 -0
- package/dist/src/selfhost/interop-resolution-witness.js.map +1 -0
- package/dist/src/selfhost/kernel-model-host-adapter.d.ts +28 -0
- package/dist/src/selfhost/kernel-model-host-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/kernel-model-host-adapter.js +36 -0
- package/dist/src/selfhost/kernel-model-host-adapter.js.map +1 -0
- package/dist/src/selfhost/legacy-adapter.d.ts +8 -0
- package/dist/src/selfhost/legacy-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/legacy-adapter.js +186 -0
- package/dist/src/selfhost/legacy-adapter.js.map +1 -0
- package/dist/src/selfhost/module-graph.d.ts +57 -0
- package/dist/src/selfhost/module-graph.d.ts.map +1 -0
- package/dist/src/selfhost/module-graph.js +267 -0
- package/dist/src/selfhost/module-graph.js.map +1 -0
- package/dist/src/selfhost/mvp-adapter.d.ts +19 -0
- package/dist/src/selfhost/mvp-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/mvp-adapter.js +186 -0
- package/dist/src/selfhost/mvp-adapter.js.map +1 -0
- package/dist/src/selfhost/node-executor.d.ts +6 -0
- package/dist/src/selfhost/node-executor.d.ts.map +1 -0
- package/dist/src/selfhost/node-executor.js +138 -0
- package/dist/src/selfhost/node-executor.js.map +1 -0
- package/dist/src/selfhost/project-compiler-adapter.d.ts +77 -0
- package/dist/src/selfhost/project-compiler-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/project-compiler-adapter.js +358 -0
- package/dist/src/selfhost/project-compiler-adapter.js.map +1 -0
- package/dist/src/selfhost/project-differential-adapter.d.ts +15 -0
- package/dist/src/selfhost/project-differential-adapter.d.ts.map +1 -0
- package/dist/src/selfhost/project-differential-adapter.js +65 -0
- package/dist/src/selfhost/project-differential-adapter.js.map +1 -0
- package/dist/src/selfhost/promotion-evidence.d.ts +62 -0
- package/dist/src/selfhost/promotion-evidence.d.ts.map +1 -0
- package/dist/src/selfhost/promotion-evidence.js +332 -0
- package/dist/src/selfhost/promotion-evidence.js.map +1 -0
- package/dist/src/selfhost/promotion-policy-replay-v2.d.ts +54 -0
- package/dist/src/selfhost/promotion-policy-replay-v2.d.ts.map +1 -0
- package/dist/src/selfhost/promotion-policy-replay-v2.js +343 -0
- package/dist/src/selfhost/promotion-policy-replay-v2.js.map +1 -0
- package/dist/src/selfhost/promotion-shadow-history-v2.d.ts +55 -0
- package/dist/src/selfhost/promotion-shadow-history-v2.d.ts.map +1 -0
- package/dist/src/selfhost/promotion-shadow-history-v2.js +227 -0
- package/dist/src/selfhost/promotion-shadow-history-v2.js.map +1 -0
- package/dist/src/selfhost/promotion-subject.d.ts +34 -0
- package/dist/src/selfhost/promotion-subject.d.ts.map +1 -0
- package/dist/src/selfhost/promotion-subject.js +141 -0
- package/dist/src/selfhost/promotion-subject.js.map +1 -0
- package/dist/src/selfhost/source-manifest.d.ts +31 -0
- package/dist/src/selfhost/source-manifest.d.ts.map +1 -0
- package/dist/src/selfhost/source-manifest.js +194 -0
- package/dist/src/selfhost/source-manifest.js.map +1 -0
- package/dist/src/selfhost/stage-compiler-facade.d.ts +25 -0
- package/dist/src/selfhost/stage-compiler-facade.d.ts.map +1 -0
- package/dist/src/selfhost/stage-compiler-facade.js +100 -0
- package/dist/src/selfhost/stage-compiler-facade.js.map +1 -0
- package/dist/src/semantic-evidence/snapshot.d.ts +114 -0
- package/dist/src/semantic-evidence/snapshot.d.ts.map +1 -0
- package/dist/src/semantic-evidence/snapshot.js +336 -0
- package/dist/src/semantic-evidence/snapshot.js.map +1 -0
- package/dist/src/source.d.ts +25 -0
- package/dist/src/source.d.ts.map +1 -0
- package/dist/src/source.js +10 -0
- package/dist/src/source.js.map +1 -0
- package/dist/src/syntax/cst-to-ast.d.ts +108 -0
- package/dist/src/syntax/cst-to-ast.d.ts.map +1 -0
- package/dist/src/syntax/cst-to-ast.js +383 -0
- package/dist/src/syntax/cst-to-ast.js.map +1 -0
- package/dist/src/syntax/documentation.d.ts +11 -0
- package/dist/src/syntax/documentation.d.ts.map +1 -0
- package/dist/src/syntax/documentation.js +261 -0
- package/dist/src/syntax/documentation.js.map +1 -0
- package/dist/src/syntax/parser.d.ts +114 -0
- package/dist/src/syntax/parser.d.ts.map +1 -0
- package/dist/src/syntax/parser.js +970 -0
- package/dist/src/syntax/parser.js.map +1 -0
- package/dist/src/syntax/syntax-metadata.d.ts +8 -0
- package/dist/src/syntax/syntax-metadata.d.ts.map +1 -0
- package/dist/src/syntax/syntax-metadata.js +14 -0
- package/dist/src/syntax/syntax-metadata.js.map +1 -0
- package/dist/src/syntax/tokens.d.ts +96 -0
- package/dist/src/syntax/tokens.d.ts.map +1 -0
- package/dist/src/syntax/tokens.js +260 -0
- package/dist/src/syntax/tokens.js.map +1 -0
- package/dist/src/types/types.d.ts +97 -0
- package/dist/src/types/types.d.ts.map +1 -0
- package/dist/src/types/types.js +105 -0
- package/dist/src/types/types.js.map +1 -0
- package/package.json +47 -0
- 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":"AASA,MAAM,UAAU;IACN,OAAO,GAAmB,EAAE,CAAC;IAC7B,MAAM,GAAqF,EAAE,CAAC;IAEhG,KAAK,CAAC,WAAkC;QAC9C,IAAI,WAAW,CAAC,cAAc;YAAE,OAAO,SAAS,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAwB,EAAE,KAAK,CAAC,CAAC;QAC1E,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC7F,OAAO;YACN,iBAAiB,EAAE,WAAW,CAAC,EAAE;YACjC,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,KAAK;YACL,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;SACxI,CAAC;IACH,CAAC;IAEO,WAAW;QAClB,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5C,OAAO,EAAE,CAAC;IACX,CAAC;IAEO,KAAK,CAAC,EAAc,IAAkB,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAE,CAAC,CAAC,CAAC;IAEjE,UAAU,CAAC,KAAuB,EAAE,KAAiB;QAC5D,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBAClD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;gBAC7D,SAAS;YACV,CAAC;YACD,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,OAAO,CAAC;IAChB,CAAC;IAEO,cAAc,CAAC,SAAsB,EAAE,OAAmB;QACjE,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;YACxB,KAAK,cAAc;gBAClB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBACrE,OAAO,OAAO,CAAC;YAChB,KAAK,qBAAqB;gBACzB,IAAI,SAAS,CAAC,aAAa,KAAK,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBAC7G,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBACxE,OAAO,OAAO,CAAC;YAChB,KAAK,2BAA2B,CAAC;YACjC,KAAK,0BAA0B;gBAC9B,IAAI,SAAS,CAAC,YAAY,KAAK,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;gBACrG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBACxE,OAAO,OAAO,CAAC;YAChB,KAAK,qBAAqB,CAAC;YAC3B,KAAK,kBAAkB;gBACtB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;gBAC/E,OAAO,OAAO,CAAC;YAChB,KAAK,gBAAgB;gBACpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;gBAC5E,OAAO,OAAO,CAAC;YAChB,KAAK,iBAAiB;gBACrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;gBACnI,OAAO,OAAO,CAAC;YAChB,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBAAC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;gBAAC,OAAO,OAAO,CAAC;YAAC,CAAC;YACvM,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBAAC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;gBAAC,OAAO,OAAO,CAAC;YAAC,CAAC;YAC7M,KAAK,aAAa,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC5D,KAAK,gBAAgB,CAAC,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAClE,KAAK,cAAc,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/D,CAAC;IACF,CAAC;IAEO,OAAO,CAAC,SAAwB,EAAE,OAAmB;QAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;QAC3I,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACjE,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,UAAU,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACrH,IAAI,QAAQ,GAAG,SAAS,CAAC;QACzB,IAAI,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACxC,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,KAAK,gBAAgB;gBACxD,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC;gBAClD,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,UAAU,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACrH,OAAO,KAAK,CAAC;IACd,CAAC;IAEO,UAAU,CAAC,SAA2B,EAAE,OAAmB;QAClE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QACrE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QACnI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,UAAU,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QACzH,OAAO,IAAI,CAAC;IACb,CAAC;IAEO,QAAQ,CAAC,SAAyB,EAAE,OAAmB;QAC9D,8EAA8E;QAC9E,8EAA8E;QAC9E,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QACrE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAClI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,UAAU,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QACzH,OAAO,IAAI,CAAC;IACb,CAAC;IAEO,IAAI,CAAC,OAAmB,EAAE,IAAe,EAAE,IAA4B,EAAE,MAAe;QAC/F,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAChI,CAAC;CACD;AAED,MAAM,UAAU,kBAAkB,CAAC,WAAkC;IACpE,OAAO,IAAI,UAAU,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -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 @@
|
|
|
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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"}
|