aboutsummaryrefslogtreecommitdiff
path: root/src/ast_render.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2016-11-26 23:16:38 -0500
committerAndrew Kelley <superjoe30@gmail.com>2016-11-26 23:16:38 -0500
commita52ede6494d44865fcf05591eaf5715d8bd1dc4a (patch)
tree54d336044dce404d17283f01c4643f83afa0572f /src/ast_render.cpp
parenta3db60b5d726004cbb5d7235893a3e148b493096 (diff)
downloadzig-a52ede6494d44865fcf05591eaf5715d8bd1dc4a.tar.gz
zig-a52ede6494d44865fcf05591eaf5715d8bd1dc4a.zip
IR: support goto and labels
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 4b25bc2f6b..c98b0e81a7 100644
--- a/src/ast_render.cpp
+++ b/src/ast_render.cpp
@@ -356,6 +356,7 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) {
switch (node->type) {
case NodeTypeSwitchProng:
case NodeTypeSwitchRange:
+ case NodeTypeLabel:
zig_unreachable();
case NodeTypeRoot:
for (size_t i = 0; i < node->data.root.top_level_decls.length; i += 1) {
@@ -426,6 +427,13 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) {
ar->indent += ar->indent_size;
for (size_t i = 0; i < node->data.block.statements.length; i += 1) {
AstNode *statement = node->data.block.statements.at(i);
+ if (statement->type == NodeTypeLabel) {
+ ar->indent -= ar->indent_size;
+ print_indent(ar);
+ fprintf(ar->f, "%s:\n", buf_ptr(statement->data.label.name));
+ ar->indent += ar->indent_size;
+ continue;
+ }
print_indent(ar);
render_node_grouped(ar, statement);
if (i != node->data.block.statements.length - 1)
@@ -771,6 +779,11 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) {
fprintf(ar->f, "}");
break;
}
+ case NodeTypeGoto:
+ {
+ fprintf(ar->f, "goto %s", buf_ptr(node->data.goto_expr.name));
+ break;
+ }
case NodeTypeFnDecl:
case NodeTypeParamDecl:
case NodeTypeErrorValueDecl:
@@ -781,8 +794,6 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) {
case NodeTypeUse:
case NodeTypeZeroesLiteral:
case NodeTypeForExpr:
- case NodeTypeLabel:
- case NodeTypeGoto:
case NodeTypeBreak:
case NodeTypeContinue:
zig_panic("TODO more ast rendering");