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