diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2016-11-26 23:16:38 -0500 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2016-11-26 23:16:38 -0500 |
| commit | a52ede6494d44865fcf05591eaf5715d8bd1dc4a (patch) | |
| tree | 54d336044dce404d17283f01c4643f83afa0572f /src/ast_render.cpp | |
| parent | a3db60b5d726004cbb5d7235893a3e148b493096 (diff) | |
| download | zig-a52ede6494d44865fcf05591eaf5715d8bd1dc4a.tar.gz zig-a52ede6494d44865fcf05591eaf5715d8bd1dc4a.zip | |
IR: support goto and labels
Diffstat (limited to 'src/ast_render.cpp')
| -rw-r--r-- | src/ast_render.cpp | 15 |
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"); |
