diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2016-11-21 03:08:24 -0500 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2016-11-21 03:08:24 -0500 |
| commit | 71d95c6597bbca6ef44ba8a2a401c28c19a32bbb (patch) | |
| tree | 01285870db232a793bb25ffbce594515d653fa6f /src/ast_render.cpp | |
| parent | b47e2fa0604a5c785d9ed7d16c8086ecf99357f7 (diff) | |
| download | zig-71d95c6597bbca6ef44ba8a2a401c28c19a32bbb.tar.gz zig-71d95c6597bbca6ef44ba8a2a401c28c19a32bbb.zip | |
IR: support unwrap maybe operation
Diffstat (limited to 'src/ast_render.cpp')
| -rw-r--r-- | src/ast_render.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/ast_render.cpp b/src/ast_render.cpp index 3060670841..37950b3b46 100644 --- a/src/ast_render.cpp +++ b/src/ast_render.cpp @@ -706,6 +706,27 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) { fprintf(ar->f, "null"); break; } + case NodeTypeIfVarExpr: + { + AstNodeVariableDeclaration *var_decl = &node->data.if_var_expr.var_decl; + const char *var_str = var_decl->is_const ? "const" : "var"; + const char *var_name = buf_ptr(var_decl->symbol); + const char *ptr_str = node->data.if_var_expr.var_is_ptr ? "*" : ""; + fprintf(ar->f, "if (%s %s%s", var_str, ptr_str, var_name); + if (var_decl->type) { + fprintf(ar->f, ": "); + render_node_ungrouped(ar, var_decl->type); + } + fprintf(ar->f, " = "); + render_node_grouped(ar, var_decl->expr); + fprintf(ar->f, ") "); + render_node_grouped(ar, node->data.if_var_expr.then_block); + if (node->data.if_var_expr.else_node) { + fprintf(ar->f, " else "); + render_node_grouped(ar, node->data.if_var_expr.else_node); + } + break; + } case NodeTypeFnDecl: case NodeTypeParamDecl: case NodeTypeErrorValueDecl: @@ -715,7 +736,6 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) { case NodeTypeStructValueField: case NodeTypeUse: case NodeTypeZeroesLiteral: - case NodeTypeIfVarExpr: case NodeTypeForExpr: case NodeTypeSwitchExpr: case NodeTypeSwitchProng: |
