mirror of
https://github.com/ziglang/zig.git
synced 2025-12-17 03:33:06 +00:00
fix missing compile error on while/for missing block
This commit is contained in:
parent
69ff89fd12
commit
e07b467c7c
@ -13,7 +13,6 @@ pub const Tree = struct {
|
|||||||
token_ids: []const Token.Id,
|
token_ids: []const Token.Id,
|
||||||
token_locs: []const Token.Loc,
|
token_locs: []const Token.Loc,
|
||||||
errors: []const Error,
|
errors: []const Error,
|
||||||
/// undefined on parse error (when errors field is not empty)
|
|
||||||
root_node: *Node.Root,
|
root_node: *Node.Root,
|
||||||
|
|
||||||
arena: std.heap.ArenaAllocator.State,
|
arena: std.heap.ArenaAllocator.State,
|
||||||
|
|||||||
@ -878,8 +878,9 @@ const Parser = struct {
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (try p.parseAssignExpr()) |assign_expr| {
|
for_prefix.body = try p.expectNode(parseAssignExpr, .{
|
||||||
for_prefix.body = assign_expr;
|
.ExpectedBlockOrAssignment = .{ .token = p.tok_i },
|
||||||
|
});
|
||||||
|
|
||||||
if (p.eatToken(.Semicolon) != null) return node;
|
if (p.eatToken(.Semicolon) != null) return node;
|
||||||
|
|
||||||
@ -905,9 +906,6 @@ const Parser = struct {
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// WhileStatement
|
/// WhileStatement
|
||||||
/// <- WhilePrefix BlockExpr ( KEYWORD_else Payload? Statement )?
|
/// <- WhilePrefix BlockExpr ( KEYWORD_else Payload? Statement )?
|
||||||
/// / WhilePrefix AssignExpr ( SEMICOLON / KEYWORD_else Payload? Statement )
|
/// / WhilePrefix AssignExpr ( SEMICOLON / KEYWORD_else Payload? Statement )
|
||||||
@ -939,8 +937,10 @@ const Parser = struct {
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (try p.parseAssignExpr()) |assign_expr_node| {
|
|
||||||
while_prefix.body = assign_expr_node;
|
while_prefix.body = try p.expectNode(parseAssignExpr, .{
|
||||||
|
.ExpectedBlockOrAssignment = .{ .token = p.tok_i },
|
||||||
|
});
|
||||||
|
|
||||||
if (p.eatToken(.Semicolon) != null) return node;
|
if (p.eatToken(.Semicolon) != null) return node;
|
||||||
|
|
||||||
@ -968,9 +968,6 @@ const Parser = struct {
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// BlockExprStatement
|
/// BlockExprStatement
|
||||||
/// <- BlockExpr
|
/// <- BlockExpr
|
||||||
/// / AssignExpr SEMICOLON
|
/// / AssignExpr SEMICOLON
|
||||||
|
|||||||
@ -210,6 +210,19 @@ test "recovery: invalid comptime" {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test "recovery: missing block after for/while loops" {
|
||||||
|
try testError(
|
||||||
|
\\test "" { while (foo) }
|
||||||
|
, &[_]Error{
|
||||||
|
.ExpectedBlockOrAssignment,
|
||||||
|
});
|
||||||
|
try testError(
|
||||||
|
\\test "" { for (foo) |bar| }
|
||||||
|
, &[_]Error{
|
||||||
|
.ExpectedBlockOrAssignment,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
test "zig fmt: if statment" {
|
test "zig fmt: if statment" {
|
||||||
try testCanonical(
|
try testCanonical(
|
||||||
\\test "" {
|
\\test "" {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user