feat: code generation for conditional and switch statements

This commit is contained in:
Brett Broadhurst 2026-03-03 16:22:35 -07:00
parent 889f678dd8
commit d6ff3a40bd
Failed to generate hash of commit
7 changed files with 476 additions and 59 deletions

View file

@ -172,6 +172,9 @@ fn renderError(r: *Render, writer: *std.Io.Writer, err: Ast.Error) !void {
.invalid_lvalue => try renderErrorf(r, writer, err, "invalid lvalue for assignment"),
.too_many_arguments => try renderErrorf(r, writer, err, "too many arguments to '{s}'"),
.too_many_parameters => try renderErrorf(r, writer, err, "too many parameters defined for '{s}'"),
.unexpected_else_stmt => try renderErrorf(r, writer, err, "unexpected else stmt"),
.invalid_else_stmt => try renderErrorf(r, writer, err, "invalid else stmt"),
.invalid_switch_case => try renderErrorf(r, writer, err, "invalid switch case expression"),
}
}
@ -491,9 +494,9 @@ fn renderAstWalk(
if (expr) |n| try children.append(r.gpa, n);
const list = node.data.switch_stmt.cases;
if (list) |items| for (items) |n| {
try children.append(r.gpa, n);
};
for (list) |case_stmt| {
try children.append(r.gpa, case_stmt);
}
},
.inline_logic_expr => {
const lhs = node.data.bin.lhs;