authorgravatar for thejoshwolfe@gmail.comJosh Wolfe <thejoshwolfe@gmail.com> 2017-04-02 13:01:23-07:00
committergravatar for thejoshwolfe@gmail.comJosh Wolfe <thejoshwolfe@gmail.com> 2017-04-02 13:01:23-07:00
loge3c796258c766d5de857ce37eeb3bdc5bb353e68
tree9d48e59fec35568758c903d3197e7604e19ec0c8
parent136a9a9d6b657e29680ca53f158f46eb5b92e9e7

allow implicit semicolon after defer {}


1 files changed, 12 insertions(+), 12 deletions(-)

src/parser.cpp+12-12
...@@ -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}
18581858
1859static bool block_expr_has_block_body(AstNode *node) {1859static 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 }