From c3b603fdf9f1edcfe8a0e45413a1c30a563e87d4 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Thu, 17 Nov 2016 21:17:58 -0500 Subject: remove AST cloning code and add AST render for while loops --- src/ast_render.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'src/ast_render.cpp') diff --git a/src/ast_render.cpp b/src/ast_render.cpp index 6a24b4faad..3c59dce998 100644 --- a/src/ast_render.cpp +++ b/src/ast_render.cpp @@ -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: -- cgit v1.2.3