aboutsummaryrefslogtreecommitdiff
path: root/src/Module.zig
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-02-18 13:53:47 +0200
committerGitHub <noreply@github.com>2022-02-18 13:53:47 +0200
commit53241f288e40a9e97a5425cb0e1ac7dbbc9de852 (patch)
treed63dda15c2615440408100e213e8c97dfd7c4d52 /src/Module.zig
parent56e9575e827208b3df5c90472826f52bfc8342c0 (diff)
parent6b65590715d0871c11635fc49cb1fc471a60ea59 (diff)
downloadzig-53241f288e40a9e97a5425cb0e1ac7dbbc9de852.tar.gz
zig-53241f288e40a9e97a5425cb0e1ac7dbbc9de852.zip
Merge pull request #10913 from Vexu/err
further parser error improvements
Diffstat (limited to 'src/Module.zig')
-rw-r--r--src/Module.zig19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/Module.zig b/src/Module.zig
index e973c42a7d..524e8402cd 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,14 +3006,25 @@ 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,
.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", .{});
}
{