| ... | @@ -1856,7 +1856,7 @@ static AstNode *ast_parse_switch_expr(ParseContext *pc, size_t *token_index, boo | ... | @@ -1856,7 +1856,7 @@ static AstNode *ast_parse_switch_expr(ParseContext *pc, size_t *token_index, boo |
| 1856 | } | 1856 | } |
| 1857 | } | 1857 | } |
| 1858 | | 1858 | |
| 1859 | static bool block_expr_has_block_body(AstNode *node) { | 1859 | static bool statement_has_block_body(AstNode *node) { |
| 1860 | switch (node->type) { | 1860 | switch (node->type) { |
| 1861 | case NodeTypeIfBoolExpr: | 1861 | case NodeTypeIfBoolExpr: |
| 1862 | if (node->data.if_bool_expr.else_node) | 1862 | if (node->data.if_bool_expr.else_node) |
| ... | @@ -1879,6 +1879,8 @@ static bool block_expr_has_block_body(AstNode *node) { | ... | @@ -1879,6 +1879,8 @@ static bool block_expr_has_block_body(AstNode *node) { |
| 1879 | return true; | 1879 | return true; |
| 1880 | case NodeTypeCompTime: | 1880 | case NodeTypeCompTime: |
| 1881 | return node->data.comptime_expr.expr->type == NodeTypeBlock; | 1881 | return node->data.comptime_expr.expr->type == NodeTypeBlock; |
| | 1882 | case NodeTypeDefer: |
| | 1883 | return node->data.defer.expr->type == NodeTypeBlock; |
| 1882 | default: | 1884 | default: |
| 1883 | zig_unreachable(); | 1885 | zig_unreachable(); |
| 1884 | } | 1886 | } |
| ... | @@ -2123,18 +2125,16 @@ static AstNode *ast_parse_block(ParseContext *pc, size_t *token_index, bool mand | ... | @@ -2123,18 +2125,16 @@ static AstNode *ast_parse_block(ParseContext *pc, size_t *token_index, bool mand |
| 2123 | statement_node = ast_parse_variable_declaration_expr(pc, token_index, false, VisibModPrivate); | 2125 | statement_node = ast_parse_variable_declaration_expr(pc, token_index, false, VisibModPrivate); |
| 2124 | if (!statement_node) { | 2126 | if (!statement_node) { |
| 2125 | statement_node = ast_parse_defer_expr(pc, token_index); | 2127 | statement_node = ast_parse_defer_expr(pc, token_index); |
| 2126 | if (!statement_node) { | 2128 | if (!statement_node) |
| 2127 | statement_node = ast_parse_block_expr(pc, token_index, false); | 2129 | statement_node = ast_parse_block_expr(pc, token_index, false); |
| 2128 | if (statement_node) { | 2130 | if (statement_node) { |
| 2129 | if (block_expr_has_block_body(statement_node)) { | 2131 | if (statement_has_block_body(statement_node)) |
| 2130 | semicolon_expected = false; | 2132 | semicolon_expected = false; |
| 2131 | } | 2133 | } else { |
| 2132 | } else { | 2134 | statement_node = ast_parse_expression(pc, token_index, false); |
| 2133 | statement_node = ast_parse_expression(pc, token_index, false); | 2135 | if (!statement_node) { |
| 2134 | if (!statement_node) { | 2136 | // final semicolon means add a void statement. |
| 2135 | // final semicolon means add a void statement. | 2137 | need_implicit_final_void_statement = true; |
| 2136 | need_implicit_final_void_statement = true; | | |
| 2137 | } | | |
| 2138 | } | 2138 | } |
| 2139 | } | 2139 | } |
| 2140 | } | 2140 | } |