mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 05:44:20 +00:00
parser: fix "previous field here" pointing to wrong field
This commit is contained in:
parent
2e1c16d649
commit
2f0204aca3
2 changed files with 12 additions and 10 deletions
|
|
@ -91,9 +91,6 @@ const Parser = struct {
|
|||
extra_data: std.ArrayListUnmanaged(Node.Index),
|
||||
scratch: std.ArrayListUnmanaged(Node.Index),
|
||||
|
||||
/// Used for the error note of decl_between_fields error.
|
||||
last_field: TokenIndex = undefined,
|
||||
|
||||
const SmallSpan = union(enum) {
|
||||
zero_or_one: Node.Index,
|
||||
multi: Node.SubRange,
|
||||
|
|
@ -252,6 +249,8 @@ const Parser = struct {
|
|||
err,
|
||||
} = .none;
|
||||
|
||||
var last_field: TokenIndex = undefined;
|
||||
|
||||
// Skip container doc comments.
|
||||
while (p.eatToken(.container_doc_comment)) |_| {}
|
||||
|
||||
|
|
@ -274,7 +273,7 @@ const Parser = struct {
|
|||
.identifier => {
|
||||
p.tok_i += 1;
|
||||
const identifier = p.tok_i;
|
||||
defer p.last_field = identifier;
|
||||
defer last_field = identifier;
|
||||
const container_field = try p.expectContainerFieldRecoverable();
|
||||
if (container_field != 0) {
|
||||
switch (field_state) {
|
||||
|
|
@ -288,7 +287,7 @@ const Parser = struct {
|
|||
try p.warnMsg(.{
|
||||
.tag = .previous_field,
|
||||
.is_note = true,
|
||||
.token = p.last_field,
|
||||
.token = last_field,
|
||||
});
|
||||
try p.warnMsg(.{
|
||||
.tag = .next_field,
|
||||
|
|
@ -389,7 +388,7 @@ const Parser = struct {
|
|||
},
|
||||
.identifier => {
|
||||
const identifier = p.tok_i;
|
||||
defer p.last_field = identifier;
|
||||
defer last_field = identifier;
|
||||
const container_field = try p.expectContainerFieldRecoverable();
|
||||
if (container_field != 0) {
|
||||
switch (field_state) {
|
||||
|
|
@ -402,7 +401,7 @@ const Parser = struct {
|
|||
});
|
||||
try p.warnMsg(.{
|
||||
.tag = .previous_field,
|
||||
.token = p.last_field,
|
||||
.token = last_field,
|
||||
});
|
||||
try p.warnMsg(.{
|
||||
.tag = .next_field,
|
||||
|
|
|
|||
|
|
@ -866,7 +866,10 @@ pub fn addCases(ctx: *TestContext) !void {
|
|||
\\ const foo = 2;
|
||||
\\ const bar = 2;
|
||||
\\ const baz = 2;
|
||||
\\ a: usize,
|
||||
\\ a: struct {
|
||||
\\ a: u32,
|
||||
\\ b: u32,
|
||||
\\ },
|
||||
\\ const foo1 = 2;
|
||||
\\ const bar1 = 2;
|
||||
\\ const baz1 = 2;
|
||||
|
|
@ -876,9 +879,9 @@ pub fn addCases(ctx: *TestContext) !void {
|
|||
\\ _ = S;
|
||||
\\}
|
||||
, &[_][]const u8{
|
||||
"tmp.zig:6:5: error: declarations are not allowed between container fields",
|
||||
"tmp.zig:9:5: error: declarations are not allowed between container fields",
|
||||
"tmp.zig:5:5: note: field before declarations here",
|
||||
"tmp.zig:9:5: note: field after declarations here",
|
||||
"tmp.zig:12:5: note: field after declarations here",
|
||||
});
|
||||
|
||||
ctx.objErrStage1("non-extern function with var args",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue