| ... | @@ -890,6 +890,11 @@ static AstNode *ast_parse_if_statement(ParseContext *pc) { | ... | @@ -890,6 +890,11 @@ static AstNode *ast_parse_if_statement(ParseContext *pc) { |
| 890 | body = ast_parse_assign_expr(pc); | 890 | body = ast_parse_assign_expr(pc); |
| 891 | } | 891 | } |
| 892 | | 892 | |
| | 893 | if (body == nullptr) { |
| | 894 | 	Token *tok = eat_token(pc); |
| | 895 | ast_error(pc, tok, "expected if body, found '%s'", token_name(tok->id)); |
| | 896 | } |
| | 897 | |
| 893 | Token *err_payload = nullptr; | 898 | Token *err_payload = nullptr; |
| 894 | AstNode *else_body = nullptr; | 899 | AstNode *else_body = nullptr; |
| 895 | if (eat_token_if(pc, TokenIdKeywordElse) != nullptr) { | 900 | if (eat_token_if(pc, TokenIdKeywordElse) != nullptr) { |
| ... | @@ -994,6 +999,11 @@ static AstNode *ast_parse_for_statement(ParseContext *pc) { | ... | @@ -994,6 +999,11 @@ static AstNode *ast_parse_for_statement(ParseContext *pc) { |
| 994 | body = ast_parse_assign_expr(pc); | 999 | body = ast_parse_assign_expr(pc); |
| 995 | } | 1000 | } |
| 996 | | 1001 | |
| | 1002 | if (body == nullptr) { |
| | 1003 | 	Token *tok = eat_token(pc); |
| | 1004 | ast_error(pc, tok, "expected loop body, found '%s'", token_name(tok->id)); |
| | 1005 | } |
| | 1006 | |
| 997 | AstNode *else_body = nullptr; | 1007 | AstNode *else_body = nullptr; |
| 998 | if (eat_token_if(pc, TokenIdKeywordElse) != nullptr) { | 1008 | if (eat_token_if(pc, TokenIdKeywordElse) != nullptr) { |
| 999 | else_body = ast_expect(pc, ast_parse_statement); | 1009 | else_body = ast_expect(pc, ast_parse_statement); |
| ... | @@ -1023,6 +1033,11 @@ static AstNode *ast_parse_while_statement(ParseContext *pc) { | ... | @@ -1023,6 +1033,11 @@ static AstNode *ast_parse_while_statement(ParseContext *pc) { |
| 1023 | body = ast_parse_assign_expr(pc); | 1033 | body = ast_parse_assign_expr(pc); |
| 1024 | } | 1034 | } |
| 1025 | | 1035 | |
| | 1036 | if (body == nullptr) { |
| | 1037 | 	Token *tok = eat_token(pc); |
| | 1038 | ast_error(pc, tok, "expected loop body, found '%s'", token_name(tok->id)); |
| | 1039 | } |
| | 1040 | |
| 1026 | Token *err_payload = nullptr; | 1041 | Token *err_payload = nullptr; |
| 1027 | AstNode *else_body = nullptr; | 1042 | AstNode *else_body = nullptr; |
| 1028 | if (eat_token_if(pc, TokenIdKeywordElse) != nullptr) { | 1043 | if (eat_token_if(pc, TokenIdKeywordElse) != nullptr) { |