aboutsummaryrefslogtreecommitdiff
path: root/src/ast_render.cpp
diff options
context:
space:
mode:
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: