diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2017-02-02 17:09:27 -0500 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2017-02-02 17:09:27 -0500 |
| commit | c0b37e8514a26f56e3596f86b01771b1ae2bf299 (patch) | |
| tree | b24c7fd04b2e8582d4e79455455e740ef58ca864 /src/ast_render.cpp | |
| parent | 8b1c6d8b76ad1861f963fc7a2a079af5d8729a70 (diff) | |
| download | zig-c0b37e8514a26f56e3596f86b01771b1ae2bf299.tar.gz zig-c0b37e8514a26f56e3596f86b01771b1ae2bf299.zip | |
add try expression
See #83
Diffstat (limited to 'src/ast_render.cpp')
| -rw-r--r-- | src/ast_render.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/ast_render.cpp b/src/ast_render.cpp index 12642c71e2..4689f723ee 100644 --- a/src/ast_render.cpp +++ b/src/ast_render.cpp @@ -223,6 +223,8 @@ static const char *node_type_str(NodeType node_type) { return "TypeLiteral"; case NodeTypeVarLiteral: return "VarLiteral"; + case NodeTypeTryExpr: + return "TryExpr"; } zig_unreachable(); } @@ -769,6 +771,25 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) { } break; } + case NodeTypeTryExpr: + { + const char *var_str = node->data.try_expr.var_is_const ? "const" : "var"; + const char *var_name = buf_ptr(node->data.try_expr.var_symbol); + const char *ptr_str = node->data.try_expr.var_is_ptr ? "*" : ""; + fprintf(ar->f, "try (%s %s%s", var_str, ptr_str, var_name); + fprintf(ar->f, " = "); + render_node_grouped(ar, node->data.try_expr.target_node); + fprintf(ar->f, ") "); + render_node_grouped(ar, node->data.try_expr.then_node); + if (node->data.try_expr.else_node) { + fprintf(ar->f, " else "); + if (node->data.try_expr.err_symbol) { + fprintf(ar->f, "|%s| ", buf_ptr(node->data.try_expr.err_symbol)); + } + render_node_grouped(ar, node->data.try_expr.else_node); + } + break; + } case NodeTypeSwitchExpr: { AstNodeSwitchExpr *switch_expr = &node->data.switch_expr; |
