aboutsummaryrefslogtreecommitdiff
path: root/src/ast_render.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2017-02-02 17:09:27 -0500
committerAndrew Kelley <superjoe30@gmail.com>2017-02-02 17:09:27 -0500
commitc0b37e8514a26f56e3596f86b01771b1ae2bf299 (patch)
treeb24c7fd04b2e8582d4e79455455e740ef58ca864 /src/ast_render.cpp
parent8b1c6d8b76ad1861f963fc7a2a079af5d8729a70 (diff)
downloadzig-c0b37e8514a26f56e3596f86b01771b1ae2bf299.tar.gz
zig-c0b37e8514a26f56e3596f86b01771b1ae2bf299.zip
add try expression
See #83
Diffstat (limited to 'src/ast_render.cpp')
-rw-r--r--src/ast_render.cpp21
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;