remove AST cloning code and add AST render for while loops

This commit is contained in:
Andrew Kelley
2016-11-17 21:17:58 -05:00
parent 7a2a0672b4
commit c3b603fdf9
5 changed files with 13 additions and 337 deletions

View File

@@ -343,8 +343,6 @@ static void print_symbol(AstRender *ar, Buf *symbol) {
}
static void render_node(AstRender *ar, AstNode *node) {
assert(node->type == NodeTypeRoot || *node->parent_field == node);
switch (node->type) {
case NodeTypeRoot:
for (size_t i = 0; i < node->data.root.top_level_decls.length; i += 1) {
@@ -658,6 +656,19 @@ static void render_node(AstRender *ar, AstNode *node) {
fprintf(ar->f, ")");
break;
}
case NodeTypeWhileExpr:
{
const char *inline_str = node->data.while_expr.is_inline ? "inline " : "";
fprintf(ar->f, "%swhile (", inline_str);
render_node(ar, node->data.while_expr.condition);
if (node->data.while_expr.continue_expr) {
fprintf(ar->f, "; ");
render_node(ar, node->data.while_expr.continue_expr);
}
fprintf(ar->f, ") ");
render_node(ar, node->data.while_expr.body);
break;
}
case NodeTypeFnDecl:
case NodeTypeParamDecl:
case NodeTypeErrorValueDecl:
@@ -672,7 +683,6 @@ static void render_node(AstRender *ar, AstNode *node) {
case NodeTypeThisLiteral:
case NodeTypeIfBoolExpr:
case NodeTypeIfVarExpr:
case NodeTypeWhileExpr:
case NodeTypeForExpr:
case NodeTypeSwitchExpr:
case NodeTypeSwitchProng: