diff --git a/lib/std/zig/Ast.zig b/lib/std/zig/Ast.zig index cecdc3adeb..64549d3cf6 100644 --- a/lib/std/zig/Ast.zig +++ b/lib/std/zig/Ast.zig @@ -66,20 +66,11 @@ pub fn renderToArrayList(tree: Ast, buffer: *std.ArrayList(u8)) RenderError!void /// Returns an extra offset for column and byte offset of errors that /// should point after the token in the error message. -pub fn errorOffset(tree: Ast, error_tag: Error.Tag, token: TokenIndex) u32 { - return switch (error_tag) { - .expected_semi_after_decl, - .expected_semi_after_stmt, - .expected_comma_after_field, - .expected_comma_after_arg, - .expected_comma_after_param, - .expected_comma_after_initializer, - .expected_comma_after_switch_prong, - .expected_semi_or_else, - .expected_semi_or_lbrace, - => @intCast(u32, tree.tokenSlice(token).len), - else => 0, - }; +pub fn errorOffset(tree: Ast, parse_error: Error) u32 { + return if (parse_error.token_is_prev) + @intCast(u32, tree.tokenSlice(parse_error.token).len) + else + 0; } pub fn tokenLocation(self: Ast, start_offset: ByteOffset, token_index: TokenIndex) Location { @@ -162,22 +153,22 @@ pub fn renderError(tree: Ast, parse_error: Error, stream: anytype) !void { }, .expected_block => { return stream.print("expected block or field, found '{s}'", .{ - token_tags[parse_error.token].symbol(), + token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), }); }, .expected_block_or_assignment => { return stream.print("expected block or assignment, found '{s}'", .{ - token_tags[parse_error.token].symbol(), + token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), }); }, .expected_block_or_expr => { return stream.print("expected block or expression, found '{s}'", .{ - token_tags[parse_error.token].symbol(), + token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), }); }, .expected_block_or_field => { return stream.print("expected block or field, found '{s}'", .{ - token_tags[parse_error.token].symbol(), + token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), }); }, .expected_container_members => { @@ -187,42 +178,42 @@ pub fn renderError(tree: Ast, parse_error: Error, stream: anytype) !void { }, .expected_expr => { return stream.print("expected expression, found '{s}'", .{ - token_tags[parse_error.token].symbol(), + token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), }); }, .expected_expr_or_assignment => { return stream.print("expected expression or assignment, found '{s}'", .{ - token_tags[parse_error.token].symbol(), + token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), }); }, .expected_fn => { return stream.print("expected function, found '{s}'", .{ - token_tags[parse_error.token].symbol(), + token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), }); }, .expected_inlinable => { return stream.print("expected 'while' or 'for', found '{s}'", .{ - token_tags[parse_error.token].symbol(), + token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), }); }, .expected_labelable => { return stream.print("expected 'while', 'for', 'inline', 'suspend', or '{{', found '{s}'", .{ - token_tags[parse_error.token].symbol(), + token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), }); }, .expected_param_list => { return stream.print("expected parameter list, found '{s}'", .{ - token_tags[parse_error.token].symbol(), + token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), }); }, .expected_prefix_expr => { return stream.print("expected prefix expression, found '{s}'", .{ - token_tags[parse_error.token].symbol(), + token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), }); }, .expected_primary_type_expr => { return stream.print("expected primary type expression, found '{s}'", .{ - token_tags[parse_error.token].symbol(), + token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), }); }, .expected_pub_item => { @@ -230,7 +221,7 @@ pub fn renderError(tree: Ast, parse_error: Error, stream: anytype) !void { }, .expected_return_type => { return stream.print("expected return type expression, found '{s}'", .{ - token_tags[parse_error.token].symbol(), + token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), }); }, .expected_semi_or_else => { @@ -244,39 +235,34 @@ pub fn renderError(tree: Ast, parse_error: Error, stream: anytype) !void { token_tags[parse_error.token].symbol(), }); }, - .expected_string_literal => { - return stream.print("expected string literal, found '{s}'", .{ - token_tags[parse_error.token].symbol(), - }); - }, .expected_suffix_op => { return stream.print("expected pointer dereference, optional unwrap, or field access, found '{s}'", .{ - token_tags[parse_error.token].symbol(), + token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), }); }, .expected_type_expr => { return stream.print("expected type expression, found '{s}'", .{ - token_tags[parse_error.token].symbol(), + token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), }); }, .expected_var_decl => { return stream.print("expected variable declaration, found '{s}'", .{ - token_tags[parse_error.token].symbol(), + token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), }); }, .expected_var_decl_or_fn => { return stream.print("expected variable declaration or function, found '{s}'", .{ - token_tags[parse_error.token].symbol(), + token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), }); }, .expected_loop_payload => { return stream.print("expected loop payload, found '{s}'", .{ - token_tags[parse_error.token].symbol(), + token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), }); }, .expected_container => { return stream.print("expected a struct, enum or union, found '{s}'", .{ - token_tags[parse_error.token].symbol(), + token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)].symbol(), }); }, .extern_fn_body => { @@ -341,9 +327,12 @@ pub fn renderError(tree: Ast, parse_error: Error, stream: anytype) !void { .expected_comma_after_switch_prong => { return stream.writeAll("expected ',' after switch prong"); }, + .expected_initializer => { + return stream.writeAll("expected field initializer"); + }, .expected_token => { - const found_tag = token_tags[parse_error.token]; + const found_tag = token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)]; const expected_symbol = parse_error.extra.expected_tag.symbol(); switch (found_tag) { .invalid => return stream.print("expected '{s}', found invalid bytes", .{ @@ -2483,6 +2472,7 @@ pub const full = struct { pub const Error = struct { tag: Tag, + token_is_prev: bool = false, token: TokenIndex, extra: union { none: void, @@ -2511,7 +2501,6 @@ pub const Error = struct { expected_semi_or_else, expected_semi_or_lbrace, expected_statement, - expected_string_literal, expected_suffix_op, expected_type_expr, expected_var_decl, @@ -2539,6 +2528,7 @@ pub const Error = struct { expected_comma_after_param, expected_comma_after_initializer, expected_comma_after_switch_prong, + expected_initializer, /// `expected_tag` is populated. expected_token, diff --git a/lib/std/zig/parse.zig b/lib/std/zig/parse.zig index 9050ba1bc4..bc3c2a35b3 100644 --- a/lib/std/zig/parse.zig +++ b/lib/std/zig/parse.zig @@ -147,11 +147,6 @@ const Parser = struct { return result; } - fn warn(p: *Parser, tag: Ast.Error.Tag) error{OutOfMemory}!void { - @setCold(true); - try p.warnMsg(.{ .tag = tag, .token = p.tok_i }); - } - fn warnExpected(p: *Parser, expected_token: Token.Tag) error{OutOfMemory}!void { @setCold(true); try p.warnMsg(.{ @@ -161,13 +156,53 @@ const Parser = struct { }); } - fn warnExpectedAfter(p: *Parser, error_tag: AstError.Tag) error{OutOfMemory}!void { + fn warn(p: *Parser, error_tag: AstError.Tag) error{OutOfMemory}!void { @setCold(true); - try p.warnMsg(.{ .tag = error_tag, .token = p.tok_i - 1 }); + try p.warnMsg(.{ .tag = error_tag, .token = p.tok_i }); } fn warnMsg(p: *Parser, msg: Ast.Error) error{OutOfMemory}!void { @setCold(true); + switch (msg.tag) { + .expected_semi_after_decl, + .expected_semi_after_stmt, + .expected_comma_after_field, + .expected_comma_after_arg, + .expected_comma_after_param, + .expected_comma_after_initializer, + .expected_comma_after_switch_prong, + .expected_semi_or_else, + .expected_semi_or_lbrace, + .expected_token, + .expected_block, + .expected_block_or_assignment, + .expected_block_or_expr, + .expected_block_or_field, + .expected_container_members, + .expected_expr, + .expected_expr_or_assignment, + .expected_fn, + .expected_inlinable, + .expected_labelable, + .expected_param_list, + .expected_prefix_expr, + .expected_primary_type_expr, + .expected_pub_item, + .expected_return_type, + .expected_suffix_op, + .expected_type_expr, + .expected_var_decl, + .expected_var_decl_or_fn, + .expected_loop_payload, + .expected_container, + => if (msg.token != 0 and !p.tokensOnSameLine(msg.token - 1, msg.token)) { + var copy = msg; + copy.token_is_prev = true; + copy.token -= 1; + return p.errors.append(p.gpa, copy); + }, + else => {}, + } try p.errors.append(p.gpa, msg); } @@ -264,7 +299,7 @@ const Parser = struct { } // There is not allowed to be a decl after a field with no comma. // Report error but recover parser. - try p.warnExpectedAfter(.expected_comma_after_field); + try p.warn(.expected_comma_after_field); p.findNextContainerMember(); } }, @@ -367,7 +402,7 @@ const Parser = struct { } // There is not allowed to be a decl after a field with no comma. // Report error but recover parser. - try p.warnExpectedAfter(.expected_comma_after_field); + try p.warn(.expected_comma_after_field); p.findNextContainerMember(); } }, @@ -585,7 +620,7 @@ const Parser = struct { // Since parseBlock only return error.ParseError on // a missing '}' we can assume this function was // supposed to end here. - try p.warnExpectedAfter(.expected_semi_or_lbrace); + try p.warn(.expected_semi_or_lbrace); return null_node; }, } @@ -996,7 +1031,7 @@ const Parser = struct { }; _ = p.eatToken(.keyword_else) orelse { if (else_required) { - try p.warnExpectedAfter(.expected_semi_or_else); + try p.warn(.expected_semi_or_else); } return p.addNode(.{ .tag = .if_simple, @@ -1091,7 +1126,7 @@ const Parser = struct { }; _ = p.eatToken(.keyword_else) orelse { if (else_required) { - try p.warnExpectedAfter(.expected_semi_or_else); + try p.warn(.expected_semi_or_else); } return p.addNode(.{ .tag = .for_simple, @@ -1166,7 +1201,7 @@ const Parser = struct { }; _ = p.eatToken(.keyword_else) orelse { if (else_required) { - try p.warnExpectedAfter(.expected_semi_or_else); + try p.warn(.expected_semi_or_else); } if (cont_expr == 0) { return p.addNode(.{ @@ -2050,7 +2085,7 @@ const Parser = struct { }, .colon, .r_paren, .r_bracket => return p.failExpected(.r_brace), // Likely just a missing comma; give error but continue parsing. - else => try p.warnExpectedAfter(.expected_comma_after_initializer), + else => try p.warn(.expected_comma_after_initializer), } if (p.eatToken(.r_brace)) |_| break; const next = try p.expectFieldInit(); @@ -2091,7 +2126,7 @@ const Parser = struct { }, .colon, .r_paren, .r_bracket => return p.failExpected(.r_brace), // Likely just a missing comma; give error but continue parsing. - else => try p.warnExpectedAfter(.expected_comma_after_initializer), + else => try p.warn(.expected_comma_after_initializer), } } const comma = (p.token_tags[p.tok_i - 2] == .comma); @@ -2170,7 +2205,7 @@ const Parser = struct { }, .colon, .r_brace, .r_bracket => return p.failExpected(.r_paren), // Likely just a missing comma; give error but continue parsing. - else => try p.warnExpectedAfter(.expected_comma_after_arg), + else => try p.warn(.expected_comma_after_arg), } } const comma = (p.token_tags[p.tok_i - 2] == .comma); @@ -2226,7 +2261,7 @@ const Parser = struct { }, .colon, .r_brace, .r_bracket => return p.failExpected(.r_paren), // Likely just a missing comma; give error but continue parsing. - else => try p.warnExpectedAfter(.expected_comma_after_arg), + else => try p.warn(.expected_comma_after_arg), } } const comma = (p.token_tags[p.tok_i - 2] == .comma); @@ -2467,7 +2502,7 @@ const Parser = struct { }, .colon, .r_paren, .r_bracket => return p.failExpected(.r_brace), // Likely just a missing comma; give error but continue parsing. - else => try p.warnExpectedAfter(.expected_comma_after_initializer), + else => try p.warn(.expected_comma_after_initializer), } if (p.eatToken(.r_brace)) |_| break; const next = try p.expectFieldInit(); @@ -2519,7 +2554,7 @@ const Parser = struct { }, .colon, .r_paren, .r_bracket => return p.failExpected(.r_brace), // Likely just a missing comma; give error but continue parsing. - else => try p.warnExpectedAfter(.expected_comma_after_initializer), + else => try p.warn(.expected_comma_after_initializer), } } const comma = (p.token_tags[p.tok_i - 2] == .comma); @@ -2580,7 +2615,7 @@ const Parser = struct { }, .colon, .r_paren, .r_bracket => return p.failExpected(.r_brace), // Likely just a missing comma; give error but continue parsing. - else => try p.warnExpectedAfter(.expected_comma_after_field), + else => try p.warn(.expected_comma_after_field), } } return p.addNode(.{ @@ -2879,7 +2914,7 @@ const Parser = struct { p.tok_i += 2; return identifier; } - return 0; + return null_node; } /// FieldInit <- DOT IDENTIFIER EQUAL Expr @@ -2896,9 +2931,12 @@ const Parser = struct { } fn expectFieldInit(p: *Parser) !Node.Index { - _ = try p.expectToken(.period); - _ = try p.expectToken(.identifier); - _ = try p.expectToken(.equal); + if (p.token_tags[p.tok_i] != .period or + p.token_tags[p.tok_i + 1] != .identifier or + p.token_tags[p.tok_i + 2] != .equal) + return p.fail(.expected_initializer); + + p.tok_i += 3; return p.expectExpr(); } @@ -3413,7 +3451,7 @@ const Parser = struct { // All possible delimiters. .colon, .r_paren, .r_brace, .r_bracket => break, // Likely just a missing comma; give error but continue parsing. - else => try p.warnExpectedAfter(.expected_comma_after_switch_prong), + else => try p.warn(.expected_comma_after_switch_prong), } } return p.listToSpan(p.scratch.items[scratch_top..]); @@ -3442,7 +3480,7 @@ const Parser = struct { }, .colon, .r_brace, .r_bracket => return p.failExpected(.r_paren), // Likely just a missing comma; give error but continue parsing. - else => try p.warnExpectedAfter(.expected_comma_after_param), + else => try p.warn(.expected_comma_after_param), } } if (varargs == .nonfinal) { @@ -3486,7 +3524,7 @@ const Parser = struct { break; }, // Likely just a missing comma; give error but continue parsing. - else => try p.warnExpectedAfter(.expected_comma_after_arg), + else => try p.warn(.expected_comma_after_arg), } } const comma = (p.token_tags[p.tok_i - 2] == .comma); @@ -3530,57 +3568,6 @@ const Parser = struct { } } - // string literal or multiline string literal - fn parseStringLiteral(p: *Parser) !Node.Index { - switch (p.token_tags[p.tok_i]) { - .string_literal => { - const main_token = p.nextToken(); - return p.addNode(.{ - .tag = .string_literal, - .main_token = main_token, - .data = .{ - .lhs = undefined, - .rhs = undefined, - }, - }); - }, - .multiline_string_literal_line => { - const first_line = p.nextToken(); - while (p.token_tags[p.tok_i] == .multiline_string_literal_line) { - p.tok_i += 1; - } - return p.addNode(.{ - .tag = .multiline_string_literal, - .main_token = first_line, - .data = .{ - .lhs = first_line, - .rhs = p.tok_i - 1, - }, - }); - }, - else => return null_node, - } - } - - fn expectStringLiteral(p: *Parser) !Node.Index { - const node = try p.parseStringLiteral(); - if (node == 0) { - return p.fail(.expected_string_literal); - } - return node; - } - - fn expectIntegerLiteral(p: *Parser) !Node.Index { - return p.addNode(.{ - .tag = .integer_literal, - .main_token = try p.expectToken(.integer_literal), - .data = .{ - .lhs = undefined, - .rhs = undefined, - }, - }); - } - /// KEYWORD_if LPAREN Expr RPAREN PtrPayload? Body (KEYWORD_else Payload? Body)? fn parseIf(p: *Parser, bodyParseFn: fn (p: *Parser) Error!Node.Index) !Node.Index { const if_token = p.eatToken(.keyword_if) orelse return null_node; @@ -3649,25 +3636,14 @@ const Parser = struct { } fn expectToken(p: *Parser, tag: Token.Tag) Error!TokenIndex { - const token = p.nextToken(); - if (p.token_tags[token] != tag) { - p.tok_i -= 1; // Go back so that we can recover properly. + if (p.token_tags[p.tok_i] != tag) { return p.failMsg(.{ .tag = .expected_token, - .token = token, + .token = p.tok_i, .extra = .{ .expected_tag = tag }, }); } - return token; - } - - fn expectTokenRecoverable(p: *Parser, tag: Token.Tag) !?TokenIndex { - if (p.token_tags[p.tok_i] != tag) { - try p.warnExpected(tag); - return null; - } else { - return p.nextToken(); - } + return p.nextToken(); } fn expectSemicolon(p: *Parser, error_tag: AstError.Tag, recoverable: bool) Error!void { @@ -3675,7 +3651,7 @@ const Parser = struct { _ = p.nextToken(); return; } - try p.warnExpectedAfter(error_tag); + try p.warn(error_tag); if (!recoverable) return error.ParseError; } diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig index 5eca272b62..e5932ddfc3 100644 --- a/lib/std/zig/parser_test.zig +++ b/lib/std/zig/parser_test.zig @@ -5057,7 +5057,9 @@ test "recovery: block statements" { \\ inline; \\} , &[_]Error{ - .invalid_token, + .expected_expr, + .expected_semi_after_stmt, + .expected_statement, .expected_inlinable, }); } @@ -5076,7 +5078,7 @@ test "recovery: missing comma" { , &[_]Error{ .expected_comma_after_switch_prong, .expected_comma_after_switch_prong, - .invalid_token, + .expected_expr, }); } diff --git a/lib/std/zig/tokenizer.zig b/lib/std/zig/tokenizer.zig index b6e1ced061..76b14df877 100644 --- a/lib/std/zig/tokenizer.zig +++ b/lib/std/zig/tokenizer.zig @@ -322,7 +322,18 @@ pub const Token = struct { } pub fn symbol(tag: Tag) []const u8 { - return tag.lexeme() orelse @tagName(tag); + return tag.lexeme() orelse switch (tag) { + .invalid => "invalid bytes", + .identifier => "an identifier", + .string_literal, .multiline_string_literal_line => "a string literal", + .char_literal => "a character literal", + .eof => "EOF", + .builtin => "a builtin function", + .integer_literal => "an integer literal", + .float_literal => "a floating point literal", + .doc_comment, .container_doc_comment => "a document comment", + else => unreachable, + }; } }; }; diff --git a/src/Module.zig b/src/Module.zig index 4ffd6925b6..280c58ade8 100644 --- a/src/Module.zig +++ b/src/Module.zig @@ -2995,7 +2995,7 @@ pub fn astGenFile(mod: *Module, file: *File) !void { const token_starts = file.tree.tokens.items(.start); const token_tags = file.tree.tokens.items(.tag); - const extra_offset = file.tree.errorOffset(parse_err.tag, parse_err.token); + const extra_offset = file.tree.errorOffset(parse_err); try file.tree.renderError(parse_err, msg.writer()); const err_msg = try gpa.create(ErrorMsg); err_msg.* = .{ @@ -3006,9 +3006,9 @@ pub fn astGenFile(mod: *Module, file: *File) !void { }, .msg = msg.toOwnedSlice(), }; - if (token_tags[parse_err.token] == .invalid) { - const bad_off = @intCast(u32, file.tree.tokenSlice(parse_err.token).len); - const byte_abs = token_starts[parse_err.token] + bad_off; + if (token_tags[parse_err.token + @boolToInt(parse_err.token_is_prev)] == .invalid) { + const bad_off = @intCast(u32, file.tree.tokenSlice(parse_err.token + @boolToInt(parse_err.token_is_prev)).len); + const byte_abs = token_starts[parse_err.token + @boolToInt(parse_err.token_is_prev)] + bad_off; try mod.errNoteNonLazy(.{ .file_scope = file, .parent_decl_node = 0, diff --git a/src/main.zig b/src/main.zig index 05afc2b166..3d33268718 100644 --- a/src/main.zig +++ b/src/main.zig @@ -4063,9 +4063,9 @@ fn printErrMsgToStdErr( var notes_buffer: [1]Compilation.AllErrors.Message = undefined; var notes_len: usize = 0; - if (token_tags[parse_error.token] == .invalid) { - const bad_off = @intCast(u32, tree.tokenSlice(parse_error.token).len); - const byte_offset = @intCast(u32, start_loc.line_start) + bad_off; + if (token_tags[parse_error.token + @boolToInt(parse_error.token_is_prev)] == .invalid) { + const bad_off = @intCast(u32, tree.tokenSlice(parse_error.token + @boolToInt(parse_error.token_is_prev)).len); + const byte_offset = @intCast(u32, start_loc.line_start) + @intCast(u32, start_loc.column) + bad_off; notes_buffer[notes_len] = .{ .src = .{ .src_path = path, @@ -4081,7 +4081,7 @@ fn printErrMsgToStdErr( notes_len += 1; } - const extra_offset = tree.errorOffset(parse_error.tag, parse_error.token); + const extra_offset = tree.errorOffset(parse_error); const message: Compilation.AllErrors.Message = .{ .src = .{ .src_path = path, diff --git a/test/compile_errors.zig b/test/compile_errors.zig index 79c17b4336..faed747a61 100644 --- a/test/compile_errors.zig +++ b/test/compile_errors.zig @@ -1540,7 +1540,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ std.debug.assert(bad_float < 1.0); \\} , &[_][]const u8{ - "tmp.zig:5:29: error: invalid token: '.'", + "tmp.zig:5:29: error: expected expression, found '.'", }); ctx.objErrStage1("invalid exponent in float literal - 1", @@ -1549,7 +1549,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = bad; \\} , &[_][]const u8{ - "tmp.zig:2:21: error: expected expression, found 'invalid'", + "tmp.zig:2:21: error: expected expression, found 'invalid bytes'", "tmp.zig:2:28: note: invalid byte: 'a'", }); @@ -1559,7 +1559,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = bad; \\} , &[_][]const u8{ - "tmp.zig:2:21: error: expected expression, found 'invalid'", + "tmp.zig:2:21: error: expected expression, found 'invalid bytes'", "tmp.zig:2:29: note: invalid byte: 'F'", }); @@ -1569,7 +1569,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = bad; \\} , &[_][]const u8{ - "tmp.zig:2:21: error: expected expression, found 'invalid'", + "tmp.zig:2:21: error: expected expression, found 'invalid bytes'", "tmp.zig:2:23: note: invalid byte: '_'", }); @@ -1579,7 +1579,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = bad; \\} , &[_][]const u8{ - "tmp.zig:2:21: error: expected expression, found 'invalid'", + "tmp.zig:2:21: error: expected expression, found 'invalid bytes'", "tmp.zig:2:23: note: invalid byte: '.'", }); @@ -1589,7 +1589,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = bad; \\} , &[_][]const u8{ - "tmp.zig:2:21: error: expected expression, found 'invalid'", + "tmp.zig:2:21: error: expected expression, found 'invalid bytes'", "tmp.zig:2:25: note: invalid byte: ';'", }); @@ -1599,7 +1599,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = bad; \\} , &[_][]const u8{ - "tmp.zig:2:21: error: expected expression, found 'invalid'", + "tmp.zig:2:21: error: expected expression, found 'invalid bytes'", "tmp.zig:2:25: note: invalid byte: '_'", }); @@ -1609,7 +1609,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = bad; \\} , &[_][]const u8{ - "tmp.zig:2:21: error: expected expression, found 'invalid'", + "tmp.zig:2:21: error: expected expression, found 'invalid bytes'", "tmp.zig:2:26: note: invalid byte: '_'", }); @@ -1619,7 +1619,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = bad; \\} , &[_][]const u8{ - "tmp.zig:2:21: error: expected expression, found 'invalid'", + "tmp.zig:2:21: error: expected expression, found 'invalid bytes'", "tmp.zig:2:26: note: invalid byte: '_'", }); @@ -1629,7 +1629,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = bad; \\} , &[_][]const u8{ - "tmp.zig:2:21: error: expected expression, found 'invalid'", + "tmp.zig:2:21: error: expected expression, found 'invalid bytes'", "tmp.zig:2:28: note: invalid byte: ';'", }); @@ -1639,7 +1639,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = bad; \\} , &[_][]const u8{ - "tmp.zig:2:21: error: expected expression, found 'invalid'", + "tmp.zig:2:21: error: expected expression, found 'invalid bytes'", "tmp.zig:2:23: note: invalid byte: '_'", }); @@ -1649,7 +1649,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = bad; \\} , &[_][]const u8{ - "tmp.zig:2:21: error: expected expression, found 'invalid'", + "tmp.zig:2:21: error: expected expression, found 'invalid bytes'", "tmp.zig:2:25: note: invalid byte: '_'", }); @@ -1659,7 +1659,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = bad; \\} , &[_][]const u8{ - "tmp.zig:2:21: error: expected expression, found 'invalid'", + "tmp.zig:2:21: error: expected expression, found 'invalid bytes'", "tmp.zig:2:28: note: invalid byte: '_'", }); @@ -1669,7 +1669,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = bad; \\} , &[_][]const u8{ - "tmp.zig:2:21: error: expected expression, found 'invalid'", + "tmp.zig:2:21: error: expected expression, found 'invalid bytes'", "tmp.zig:2:23: note: invalid byte: 'x'", }); @@ -1679,7 +1679,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = bad; \\} , &[_][]const u8{ - "tmp.zig:2:21: error: expected expression, found 'invalid'", + "tmp.zig:2:21: error: expected expression, found 'invalid bytes'", "tmp.zig:2:23: note: invalid byte: '_'", }); @@ -1689,7 +1689,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = bad; \\} , &[_][]const u8{ - "tmp.zig:2:21: error: expected expression, found 'invalid'", + "tmp.zig:2:21: error: expected expression, found 'invalid bytes'", "tmp.zig:2:27: note: invalid byte: 'p'", }); @@ -1699,7 +1699,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = bad; \\} , &[_][]const u8{ - "tmp.zig:2:21: error: expected expression, found 'invalid'", + "tmp.zig:2:21: error: expected expression, found 'invalid bytes'", "tmp.zig:2:26: note: invalid byte: ';'", }); @@ -1709,7 +1709,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = bad; \\} , &[_][]const u8{ - "tmp.zig:2:21: error: expected expression, found 'invalid'", + "tmp.zig:2:21: error: expected expression, found 'invalid bytes'", "tmp.zig:2:28: note: invalid byte: ';'", }); @@ -1719,7 +1719,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = bad; \\} , &[_][]const u8{ - "tmp.zig:2:21: error: expected expression, found 'invalid'", + "tmp.zig:2:21: error: expected expression, found 'invalid bytes'", "tmp.zig:2:28: note: invalid byte: ';'", }); @@ -1729,7 +1729,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = bad; \\} , &[_][]const u8{ - "tmp.zig:2:21: error: expected expression, found 'invalid'", + "tmp.zig:2:21: error: expected expression, found 'invalid bytes'", "tmp.zig:2:28: note: invalid byte: ';'", }); @@ -2171,7 +2171,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = x; \\} , &[_][]const u8{ - "tmp.zig:3:6: error: expected ',' after field", + "tmp.zig:3:7: error: expected ',' after field", }); ctx.objErrStage1("bad alignment type", @@ -5733,7 +5733,7 @@ pub fn addCases(ctx: *TestContext) !void { \\const foo = "a \\b"; , &[_][]const u8{ - "tmp.zig:1:13: error: expected expression, found 'invalid'", + "tmp.zig:1:13: error: expected expression, found 'invalid bytes'", "tmp.zig:1:15: note: invalid byte: '\\n'", }); @@ -7638,7 +7638,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ const a = '\U1234'; \\} , &[_][]const u8{ - "tmp.zig:2:15: error: expected expression, found 'invalid'", + "tmp.zig:2:15: error: expected expression, found 'invalid bytes'", "tmp.zig:2:18: note: invalid byte: '1'", }); @@ -7654,7 +7654,7 @@ pub fn addCases(ctx: *TestContext) !void { "fn foo() bool {\r\n" ++ " return true;\r\n" ++ "}\r\n", &[_][]const u8{ - "tmp.zig:1:1: error: expected test, comptime, var decl, or container field, found 'invalid'", + "tmp.zig:1:1: error: expected test, comptime, var decl, or container field, found 'invalid bytes'", "tmp.zig:1:1: note: invalid byte: '\\xff'", }); diff --git a/test/stage2/cbe.zig b/test/stage2/cbe.zig index 949a7eb6b7..ae810a31ca 100644 --- a/test/stage2/cbe.zig +++ b/test/stage2/cbe.zig @@ -693,7 +693,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = E1.a; \\} , &.{ - ":3:6: error: expected ',' after field", + ":3:7: error: expected ',' after field", }); // Redundant non-exhaustive enum mark.