stage2: handle parser notes in a more general way

This commit is contained in:
Veikka Tuominen
2022-07-12 10:49:37 +03:00
parent 5d22204d2d
commit 2a3f3766a4
3 changed files with 33 additions and 60 deletions

View File

@@ -3324,26 +3324,21 @@ pub fn astGenFile(mod: *Module, file: *File) !void {
.parent_decl_node = 0,
.lazy = .{ .byte_abs = byte_abs },
}, err_msg, "invalid byte: '{'}'", .{std.zig.fmtEscapes(source[byte_abs..][0..1])});
} else if (parse_err.tag == .decl_between_fields) {
try mod.errNoteNonLazy(.{
.file_scope = file,
.parent_decl_node = 0,
.lazy = .{ .byte_abs = token_starts[file.tree.errors[1].token] },
}, err_msg, "field before declarations here", .{});
try mod.errNoteNonLazy(.{
.file_scope = file,
.parent_decl_node = 0,
.lazy = .{ .byte_abs = token_starts[file.tree.errors[2].token] },
}, err_msg, "field after declarations here", .{});
} else if (parse_err.tag == .c_style_container) {
const note = file.tree.errors[1];
try mod.errNoteNonLazy(.{
.file_scope = file,
.parent_decl_node = 0,
.lazy = .{ .byte_abs = token_starts[note.token] },
}, err_msg, "to declare a container do 'const {s} = {s}'", .{
file.tree.tokenSlice(note.token), note.extra.expected_tag.symbol(),
});
}
for (file.tree.errors[1..]) |note| {
if (!note.is_note) break;
try file.tree.renderError(note, msg.writer());
err_msg.notes = try mod.gpa.realloc(err_msg.notes, err_msg.notes.len + 1);
err_msg.notes[err_msg.notes.len - 1] = .{
.src_loc = .{
.file_scope = file,
.parent_decl_node = 0,
.lazy = .{ .byte_abs = token_starts[note.token] },
},
.msg = msg.toOwnedSlice(),
};
}
{