Add support for tuple literals

This commit is contained in:
nora 2023-07-30 21:49:18 +02:00
parent 0c996eb9bc
commit b64c02cf4a
6 changed files with 82 additions and 35 deletions

View file

@ -18,7 +18,7 @@ export function printAst(ast: Ast): string {
}
function printStringLiteral(lit: StringLiteral): string {
return `"${lit.value}"`;
return `"${lit.value.replace("\n", "\\n")}"`;
}
function printItem(item: Item): string {
@ -49,7 +49,7 @@ function printTypeDef(type: TypeDef): string {
);
const fieldPart =
type.fields.length === 0 ? "()" : `(\n${fields.join("\n")}\n)`;
type.fields.length === 0 ? "{}" : `{\n${fields.join("\n")}\n}`;
return `type ${type.name} = ${fieldPart};`;
}
@ -150,7 +150,7 @@ function printExpr(expr: Expr, indent: number): string {
)}${elsePart}`;
}
case "loop": {
return `loop ${printExpr(expr.body, indent + 1)}`;
return `loop ${printExpr(expr.body, indent)}`;
}
case "break": {
const target = expr.target !== undefined ? `#${expr.target}` : "";
@ -161,6 +161,11 @@ function printExpr(expr: Expr, indent: number): string {
.map(([name, expr]) => `${name.name}: ${printExpr(expr, indent + 1)}`)
.join(", ")} }`;
}
case "tupleLiteral": {
return `(${expr.fields
.map((expr) => printExpr(expr, indent))
.join(", ")})`;
}
}
}
@ -234,5 +239,5 @@ function linebreak(indent: number): string {
}
function ind(indent: number): string {
return " ".repeat(indent * 2);
return " ".repeat(indent);
}