aboutsummaryrefslogtreecommitdiff
path: root/src/ast_render.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2018-02-11 23:49:20 -0500
committerAndrew Kelley <superjoe30@gmail.com>2018-02-11 23:49:20 -0500
commitef6260b3a7ed09e5dc5d8383ad20f229411bd9ff (patch)
tree23f2b5396a95cae6c730cdfafb7dfcdba7eca8f2 /src/ast_render.cpp
parent5d9e3cb77f864ccdbcae43329e13a9c8e1f8494e (diff)
parentf2d601661d286b135293373a83ce1a8628272379 (diff)
downloadzig-ef6260b3a7ed09e5dc5d8383ad20f229411bd9ff.tar.gz
zig-ef6260b3a7ed09e5dc5d8383ad20f229411bd9ff.zip
Merge remote-tracking branch 'origin/master' into llvm6
Diffstat (limited to 'src/ast_render.cpp')
-rw-r--r--src/ast_render.cpp33
1 files changed, 26 insertions, 7 deletions
diff --git a/src/ast_render.cpp b/src/ast_render.cpp
index 79cbc1b49a..aed4b3e6db 100644
--- a/src/ast_render.cpp
+++ b/src/ast_render.cpp
@@ -49,11 +49,12 @@ static const char *bin_op_str(BinOpType bin_op) {
case BinOpTypeAssignBitAnd: return "&=";
case BinOpTypeAssignBitXor: return "^=";
case BinOpTypeAssignBitOr: return "|=";
- case BinOpTypeAssignBoolAnd: return "&&=";
- case BinOpTypeAssignBoolOr: return "||=";
+ case BinOpTypeAssignMergeErrorSets: return "||=";
case BinOpTypeUnwrapMaybe: return "??";
case BinOpTypeArrayCat: return "++";
case BinOpTypeArrayMult: return "**";
+ case BinOpTypeErrorUnion: return "!";
+ case BinOpTypeMergeErrorSets: return "||";
}
zig_unreachable();
}
@@ -67,7 +68,6 @@ static const char *prefix_op_str(PrefixOp prefix_op) {
case PrefixOpBinNot: return "~";
case PrefixOpDereference: return "*";
case PrefixOpMaybe: return "?";
- case PrefixOpError: return "%";
case PrefixOpUnwrapMaybe: return "??";
}
zig_unreachable();
@@ -174,8 +174,6 @@ static const char *node_type_str(NodeType node_type) {
return "Defer";
case NodeTypeVariableDeclaration:
return "VariableDeclaration";
- case NodeTypeErrorValueDecl:
- return "ErrorValueDecl";
case NodeTypeTestDecl:
return "TestDecl";
case NodeTypeIntLiteral:
@@ -244,6 +242,8 @@ static const char *node_type_str(NodeType node_type) {
return "IfErrorExpr";
case NodeTypeTestExpr:
return "TestExpr";
+ case NodeTypeErrorSetDecl:
+ return "ErrorSetDecl";
}
zig_unreachable();
}
@@ -396,7 +396,6 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) {
if (child->type == NodeTypeUse ||
child->type == NodeTypeVariableDeclaration ||
- child->type == NodeTypeErrorValueDecl ||
child->type == NodeTypeFnProto)
{
fprintf(ar->f, ";");
@@ -452,6 +451,9 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) {
AstNode *return_type_node = node->data.fn_proto.return_type;
assert(return_type_node != nullptr);
fprintf(ar->f, " ");
+ if (node->data.fn_proto.auto_err_set) {
+ fprintf(ar->f, "!");
+ }
render_node_grouped(ar, return_type_node);
break;
}
@@ -1017,9 +1019,26 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) {
render_node_ungrouped(ar, node->data.unwrap_err_expr.op2);
break;
}
+ case NodeTypeErrorSetDecl:
+ {
+ fprintf(ar->f, "error {\n");
+ ar->indent += ar->indent_size;
+
+ for (size_t i = 0; i < node->data.err_set_decl.decls.length; i += 1) {
+ AstNode *field_node = node->data.err_set_decl.decls.at(i);
+ assert(field_node->type == NodeTypeSymbol);
+ print_indent(ar);
+ print_symbol(ar, field_node->data.symbol_expr.symbol);
+ fprintf(ar->f, ",\n");
+ }
+
+ ar->indent -= ar->indent_size;
+ print_indent(ar);
+ fprintf(ar->f, "}");
+ break;
+ }
case NodeTypeFnDecl:
case NodeTypeParamDecl:
- case NodeTypeErrorValueDecl:
case NodeTypeTestDecl:
case NodeTypeStructField:
case NodeTypeUse: