diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2018-08-04 15:19:03 -0400 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2018-08-04 15:19:03 -0400 |
| commit | b48948d6e805cdee7f33243098af9a862c152df1 (patch) | |
| tree | 8b1b4b37670f7444e8fe12748a8db99ac7498cce /src/parser.cpp | |
| parent | f804310d9f953c9d78a4271ba8d75133341840e6 (diff) | |
| parent | 9bd8b01650f9cf21e601117951711b21aa5fd216 (diff) | |
| download | zig-b48948d6e805cdee7f33243098af9a862c152df1.tar.gz zig-b48948d6e805cdee7f33243098af9a862c152df1.zip | |
Merge branch 'master' into llvm7
Diffstat (limited to 'src/parser.cpp')
| -rw-r--r-- | src/parser.cpp | 25 |
1 files changed, 9 insertions, 16 deletions
diff --git a/src/parser.cpp b/src/parser.cpp index a93d8de830..453ab7ce2c 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -648,12 +648,11 @@ static AstNode *ast_parse_asm_expr(ParseContext *pc, size_t *token_index, bool m } /* -SuspendExpression(body) = "suspend" option(("|" Symbol "|" body)) +SuspendExpression(body) = "suspend" option( body ) */ static AstNode *ast_parse_suspend_block(ParseContext *pc, size_t *token_index, bool mandatory) { - size_t orig_token_index = *token_index; - Token *suspend_token = &pc->tokens->at(*token_index); + if (suspend_token->id == TokenIdKeywordSuspend) { *token_index += 1; } else if (mandatory) { @@ -663,23 +662,18 @@ static AstNode *ast_parse_suspend_block(ParseContext *pc, size_t *token_index, b return nullptr; } - Token *bar_token = &pc->tokens->at(*token_index); - if (bar_token->id == TokenIdBinOr) { - *token_index += 1; + Token *lbrace = &pc->tokens->at(*token_index); + if (lbrace->id == TokenIdLBrace) { + AstNode *node = ast_create_node(pc, NodeTypeSuspend, suspend_token); + node->data.suspend.block = ast_parse_block(pc, token_index, true); + return node; } else if (mandatory) { - ast_expect_token(pc, suspend_token, TokenIdBinOr); + ast_expect_token(pc, lbrace, TokenIdLBrace); zig_unreachable(); } else { - *token_index = orig_token_index; + *token_index -= 1; return nullptr; } - - AstNode *node = ast_create_node(pc, NodeTypeSuspend, suspend_token); - node->data.suspend.promise_symbol = ast_parse_symbol(pc, token_index); - ast_eat_token(pc, token_index, TokenIdBinOr); - node->data.suspend.block = ast_parse_block(pc, token_index, true); - - return node; } /* @@ -3134,7 +3128,6 @@ void ast_visit_node_children(AstNode *node, void (*visit)(AstNode **, void *cont visit_field(&node->data.await_expr.expr, visit, context); break; case NodeTypeSuspend: - visit_field(&node->data.suspend.promise_symbol, visit, context); visit_field(&node->data.suspend.block, visit, context); break; } |
