From 35e989235b29c5d921c8cf053a1d2f92fa0ce57a Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Wed, 16 Feb 2022 13:19:43 +0200 Subject: [PATCH] parser: get rid of "invalid token" error --- lib/std/zig/Ast.zig | 6 ------ lib/std/zig/parse.zig | 11 ++++++----- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/lib/std/zig/Ast.zig b/lib/std/zig/Ast.zig index 64549d3cf6..3282497db4 100644 --- a/lib/std/zig/Ast.zig +++ b/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, diff --git a/lib/std/zig/parse.zig b/lib/std/zig/parse.zig index bc3c2a35b3..313b876278 100644 --- a/lib/std/zig/parse.zig +++ b/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",