Commit 35e989235b

Veikka Tuominen <git@vexu.eu>
2022-02-16 12:19:43
parser: get rid of "invalid token" error
1 parent 9c36cf9
Changed files (2)
lib
lib/std/zig/Ast.zig
@@ -291,11 +291,6 @@ pub fn renderError(tree: Ast, parse_error: Error, stream: anytype) !void {
         .invalid_bit_range => {
             return stream.writeAll("bit range not allowed on slices and arrays");
         },
-        .invalid_token => {
-            return stream.print("invalid token: '{s}'", .{
-                token_tags[parse_error.token].symbol(),
-            });
-        },
         .same_line_doc_comment => {
             return stream.writeAll("same line documentation comment");
         },
@@ -2515,7 +2510,6 @@ pub const Error = struct {
         extra_volatile_qualifier,
         ptr_mod_on_array_child_type,
         invalid_bit_range,
-        invalid_token,
         same_line_doc_comment,
         unattached_doc_comment,
         varargs_nonfinal,
lib/std/zig/parse.zig
@@ -1437,7 +1437,8 @@ const Parser = struct {
             }
             const rhs = try p.parseExprPrecedence(info.prec + 1);
             if (rhs == 0) {
-                return p.fail(.invalid_token);
+                try p.warn(.expected_expr);
+                return node;
             }
 
             node = try p.addNode(.{
@@ -1916,7 +1917,7 @@ const Parser = struct {
 
     /// IfExpr <- IfPrefix Expr (KEYWORD_else Payload? Expr)?
     fn parseIfExpr(p: *Parser) !Node.Index {
-        return p.parseIf(parseExpr);
+        return p.parseIf(expectExpr);
     }
 
     /// Block <- LBRACE Statement* RBRACE
@@ -2384,7 +2385,7 @@ const Parser = struct {
 
             .builtin => return p.parseBuiltinCall(),
             .keyword_fn => return p.parseFnProto(),
-            .keyword_if => return p.parseIf(parseTypeExpr),
+            .keyword_if => return p.parseIf(expectTypeExpr),
             .keyword_switch => return p.expectSwitchExpr(),
 
             .keyword_extern,
@@ -3577,7 +3578,7 @@ const Parser = struct {
         _ = try p.parsePtrPayload();
 
         const then_expr = try bodyParseFn(p);
-        if (then_expr == 0) return p.fail(.invalid_token);
+        assert(then_expr != 0);
 
         _ = p.eatToken(.keyword_else) orelse return p.addNode(.{
             .tag = .if_simple,
@@ -3589,7 +3590,7 @@ const Parser = struct {
         });
         _ = try p.parsePayload();
         const else_expr = try bodyParseFn(p);
-        if (else_expr == 0) return p.fail(.invalid_token);
+        assert(then_expr != 0);
 
         return p.addNode(.{
             .tag = .@"if",