authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-02-08 22:30:08-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-02-08 22:30:08-05:00
logee982ae162901078458003fad169ddb1cf4d1d06
treec9268c8f9a0a06efb28ff9daaaa055f527d0d3bd
parent0efe441dfd422d4bfe501d5fbfbf15bd5951b494

syntax: parse `?error!i32` as `?(error!i32)`


4 files changed, 9 insertions(+), 9 deletions(-)

TODO-6
...@@ -2,15 +2,9 @@ comptime calling fn with inferred error set should give empty error set but stil...@@ -2,15 +2,9 @@ comptime calling fn with inferred error set should give empty error set but stil
22
3comptime err to int of empty err set and of size 1 err set3comptime err to int of empty err set and of size 1 err set
44
5comptime test for err
6
75
8undefined in infer error 6undefined in infer error
97
10syntax - ?a!b should be ?(a!b) but it's (?a)!b
11
12syntax - (error{}!void) as the return type8syntax - (error{}!void) as the return type
139
1410
15passing a fn()error{}!T to a fn()error!T should be a compile error, they're not compatible
16
doc/langref.html.in+1-1
...@@ -5743,7 +5743,7 @@ CurlySuffixExpression = TypeExpr option(ContainerInitExpression)...@@ -5743,7 +5743,7 @@ CurlySuffixExpression = TypeExpr option(ContainerInitExpression)
57435743
5744MultiplyOperator = "||" | "*" | "/" | "%" | "**" | "*%"5744MultiplyOperator = "||" | "*" | "/" | "%" | "**" | "*%"
57455745
5746PrefixOpExpression = PrefixOp PrefixOpExpression | SuffixOpExpression5746PrefixOpExpression = PrefixOp ErrorSetExpr | SuffixOpExpression
57475747
5748SuffixOpExpression = PrimaryExpression option(FnCallExpression | ArrayAccessExpression | FieldAccessExpression | SliceExpression)5748SuffixOpExpression = PrimaryExpression option(FnCallExpression | ArrayAccessExpression | FieldAccessExpression | SliceExpression)
57495749
src/parser.cpp+2-2
...@@ -1041,7 +1041,7 @@ static AstNode *ast_parse_addr_of(ParseContext *pc, size_t *token_index) {...@@ -1041,7 +1041,7 @@ static AstNode *ast_parse_addr_of(ParseContext *pc, size_t *token_index) {
1041}1041}
10421042
1043/*1043/*
1044PrefixOpExpression : PrefixOp PrefixOpExpression | SuffixOpExpression1044PrefixOpExpression = PrefixOp ErrorSetExpr | SuffixOpExpression
1045PrefixOp = "!" | "-" | "~" | "*" | ("&" option("align" "(" Expression option(":" Integer ":" Integer) ")" ) option("const") option("volatile")) | "?" | "??" | "-%" | "try"1045PrefixOp = "!" | "-" | "~" | "*" | ("&" option("align" "(" Expression option(":" Integer ":" Integer) ")" ) option("const") option("volatile")) | "?" | "??" | "-%" | "try"
1046*/1046*/
1047static AstNode *ast_parse_prefix_op_expr(ParseContext *pc, size_t *token_index, bool mandatory) {1047static AstNode *ast_parse_prefix_op_expr(ParseContext *pc, size_t *token_index, bool mandatory) {
...@@ -1072,7 +1072,7 @@ static AstNode *ast_parse_prefix_op_expr(ParseContext *pc, size_t *token_index,...@@ -1072,7 +1072,7 @@ static AstNode *ast_parse_prefix_op_expr(ParseContext *pc, size_t *token_index,
1072 node->column += 1;1072 node->column += 1;
1073 }1073 }
10741074
1075 AstNode *prefix_op_expr = ast_parse_prefix_op_expr(pc, token_index, true);1075 AstNode *prefix_op_expr = ast_parse_error_set_expr(pc, token_index, true);
1076 node->data.prefix_op_expr.primary_expr = prefix_op_expr;1076 node->data.prefix_op_expr.primary_expr = prefix_op_expr;
1077 node->data.prefix_op_expr.prefix_op = prefix_op;1077 node->data.prefix_op_expr.prefix_op = prefix_op;
10781078
test/cases/error.zig+6
...@@ -134,3 +134,9 @@ const EmptyErrorSet = error {};...@@ -134,3 +134,9 @@ const EmptyErrorSet = error {};
134fn testComptimeTestErrorEmptySet(x: EmptyErrorSet!i32) void {134fn testComptimeTestErrorEmptySet(x: EmptyErrorSet!i32) void {
135 if (x) |v| assert(v == 1234) else |err| @compileError("bad");135 if (x) |v| assert(v == 1234) else |err| @compileError("bad");
136}136}
137
138test "syntax: nullable operator in front of error union operator" {
139 comptime {
140 assert(?error!i32 == ?(error!i32));
141 }
142}