Add check for null body in if, for and while
parent
39bc82561a
commit
6c160b8856
|
@ -890,6 +890,11 @@ static AstNode *ast_parse_if_statement(ParseContext *pc) {
|
|||
body = ast_parse_assign_expr(pc);
|
||||
}
|
||||
|
||||
if (body == nullptr) {
|
||||
Token *tok = eat_token(pc);
|
||||
ast_error(pc, tok, "expected if body, found '%s'", token_name(tok->id));
|
||||
}
|
||||
|
||||
Token *err_payload = nullptr;
|
||||
AstNode *else_body = nullptr;
|
||||
if (eat_token_if(pc, TokenIdKeywordElse) != nullptr) {
|
||||
|
@ -994,6 +999,11 @@ static AstNode *ast_parse_for_statement(ParseContext *pc) {
|
|||
body = ast_parse_assign_expr(pc);
|
||||
}
|
||||
|
||||
if (body == nullptr) {
|
||||
Token *tok = eat_token(pc);
|
||||
ast_error(pc, tok, "expected loop body, found '%s'", token_name(tok->id));
|
||||
}
|
||||
|
||||
AstNode *else_body = nullptr;
|
||||
if (eat_token_if(pc, TokenIdKeywordElse) != nullptr) {
|
||||
else_body = ast_expect(pc, ast_parse_statement);
|
||||
|
@ -1023,6 +1033,11 @@ static AstNode *ast_parse_while_statement(ParseContext *pc) {
|
|||
body = ast_parse_assign_expr(pc);
|
||||
}
|
||||
|
||||
if (body == nullptr) {
|
||||
Token *tok = eat_token(pc);
|
||||
ast_error(pc, tok, "expected loop body, found '%s'", token_name(tok->id));
|
||||
}
|
||||
|
||||
Token *err_payload = nullptr;
|
||||
AstNode *else_body = nullptr;
|
||||
if (eat_token_if(pc, TokenIdKeywordElse) != nullptr) {
|
||||
|
|
|
@ -230,6 +230,33 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
|
|||
"tmp.zig:10:25: error: expression value is ignored",
|
||||
);
|
||||
|
||||
cases.add(
|
||||
"empty while loop body",
|
||||
\\export fn a() void {
|
||||
\\ while(true);
|
||||
\\}
|
||||
,
|
||||
"tmp.zig:2:16: error: expected loop body, found ';'",
|
||||
);
|
||||
|
||||
cases.add(
|
||||
"empty for loop body",
|
||||
\\export fn a() void {
|
||||
\\ for(undefined) |x|;
|
||||
\\}
|
||||
,
|
||||
"tmp.zig:2:23: error: expected loop body, found ';'",
|
||||
);
|
||||
|
||||
cases.add(
|
||||
"empty if body",
|
||||
\\export fn a() void {
|
||||
\\ if(true);
|
||||
\\}
|
||||
,
|
||||
"tmp.zig:2:13: error: expected if body, found ';'",
|
||||
);
|
||||
|
||||
cases.add(
|
||||
"import outside package path",
|
||||
\\comptime{
|
||||
|
|
Loading…
Reference in New Issue