aboutsummaryrefslogtreecommitdiff
path: root/src/ast_render.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2017-05-04 10:18:01 -0400
committerAndrew Kelley <superjoe30@gmail.com>2017-05-04 10:28:00 -0400
commit20b1491e6bd87b10e822282c5867604d634973a1 (patch)
tree0ca98f3cbac3ca3dd9f5a755e059964e374eea0a /src/ast_render.cpp
parent698829b772fe39c4311a75b20324256b8d7392b1 (diff)
downloadzig-20b1491e6bd87b10e822282c5867604d634973a1.tar.gz
zig-20b1491e6bd87b10e822282c5867604d634973a1.zip
implement while for nullables and error unions
See #357
Diffstat (limited to 'src/ast_render.cpp')
-rw-r--r--src/ast_render.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/ast_render.cpp b/src/ast_render.cpp
index 902891b5a2..348d825332 100644
--- a/src/ast_render.cpp
+++ b/src/ast_render.cpp
@@ -725,12 +725,23 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) {
const char *inline_str = node->data.while_expr.is_inline ? "inline " : "";
fprintf(ar->f, "%swhile (", inline_str);
render_node_grouped(ar, node->data.while_expr.condition);
+ fprintf(ar->f, ") ");
+ if (node->data.while_expr.var_symbol) {
+ fprintf(ar->f, "|%s| ", buf_ptr(node->data.while_expr.var_symbol));
+ }
if (node->data.while_expr.continue_expr) {
- fprintf(ar->f, "; ");
+ fprintf(ar->f, ": (");
render_node_grouped(ar, node->data.while_expr.continue_expr);
+ fprintf(ar->f, ") ");
}
- fprintf(ar->f, ") ");
render_node_grouped(ar, node->data.while_expr.body);
+ if (node->data.while_expr.else_node) {
+ fprintf(ar->f, " else ");
+ if (node->data.while_expr.err_symbol) {
+ fprintf(ar->f, "|%s| ", buf_ptr(node->data.while_expr.err_symbol));
+ }
+ render_node_grouped(ar, node->data.while_expr.else_node);
+ }
break;
}
case NodeTypeThisLiteral: