start implememting crate loading

This commit is contained in:
nora 2023-07-31 18:03:26 +02:00
parent a0599342ea
commit b3b0bc2e6f
12 changed files with 249 additions and 165 deletions

View file

@ -1,6 +1,6 @@
import {
AnyPhase,
Ast,
Crate,
Expr,
FunctionDef,
IdentWithRes,
@ -15,7 +15,7 @@ import {
tyIsUnit,
} from "./ast";
export function printAst(ast: Ast<AnyPhase>): string {
export function printAst(ast: Crate<AnyPhase>): string {
return ast.rootItems.map(printItem).join("\n");
}
@ -39,6 +39,9 @@ function printItem(item: Item<AnyPhase>): string {
case "mod": {
return id + printMod(item.node);
}
case "extern": {
return id + `extern mod ${item.node.name};`;
}
}
}
@ -73,14 +76,7 @@ function printImportDef(def: ImportDef<AnyPhase>): string {
}
function printMod(mod: ModItem<AnyPhase>): string {
switch (mod.modKind.kind) {
case "inline":
return `mod ${mod.name} (\n${mod.modKind.contents
.map(printItem)
.join("\n ")});`;
case "extern":
return `extern mod ${mod.name};`;
}
return `mod ${mod.name} (\n${mod.contents.map(printItem).join("\n ")});`;
}
function printExpr(expr: Expr<AnyPhase>, indent: number): string {