aboutsummaryrefslogtreecommitdiff
path: root/src/ast_render.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2016-11-17 21:17:58 -0500
committerAndrew Kelley <superjoe30@gmail.com>2016-11-17 21:17:58 -0500
commitc3b603fdf9f1edcfe8a0e45413a1c30a563e87d4 (patch)
treefd9e34fcc48ce162cc2b63ca3ac19bd9555b3bcc /src/ast_render.cpp
parent7a2a0672b4370d0dfe7a64541c4fb90a89132113 (diff)
downloadzig-c3b603fdf9f1edcfe8a0e45413a1c30a563e87d4.tar.gz
zig-c3b603fdf9f1edcfe8a0e45413a1c30a563e87d4.zip
remove AST cloning code and add AST render for while loops
Diffstat (limited to 'src/ast_render.cpp')
-rw-r--r--src/ast_render.cpp16
1 files changed, 13 insertions, 3 deletions
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: