diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2016-10-16 02:19:01 -0400 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2016-10-16 02:19:01 -0400 |
| commit | ac6d1674e3384bacd6893191feaf814a23d24b08 (patch) | |
| tree | 644fc69b51f3800aa3f1a693bf04ef1f8fdb9afd /src/parser.cpp | |
| parent | ce3c52471dd8a86e429ea037f4344b243723eb74 (diff) | |
| download | zig-ac6d1674e3384bacd6893191feaf814a23d24b08.tar.gz zig-ac6d1674e3384bacd6893191feaf814a23d24b08.zip | |
IR working for if statements
Diffstat (limited to 'src/parser.cpp')
| -rw-r--r-- | src/parser.cpp | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/src/parser.cpp b/src/parser.cpp index cbd96e20ea..82ca4d0eee 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -1912,14 +1912,11 @@ static AstNode *ast_parse_label(ParseContext *pc, size_t *token_index, bool mand return node; } -//static AstNode *ast_create_void_expr(ParseContext *pc, Token *token) { -// AstNode *node = ast_create_node(pc, NodeTypeContainerInitExpr, token); -// node->data.container_init_expr.type = ast_create_node(pc, NodeTypeSymbol, token); -// node->data.container_init_expr.kind = ContainerInitKindArray; -// node->data.container_init_expr.type->data.symbol_expr.symbol = pc->void_buf; -// normalize_parent_ptrs(node); -// return node; -//} +static AstNode *ast_create_void_expr(ParseContext *pc, Token *token) { + AstNode *node = ast_create_node(pc, NodeTypeBlock, token); + normalize_parent_ptrs(node); + return node; +} /* Block : token(LBrace) list(option(Statement), token(Semicolon)) token(RBrace) @@ -1961,12 +1958,13 @@ static AstNode *ast_parse_block(ParseContext *pc, size_t *token_index, bool mand semicolon_expected = !statement_node; if (!statement_node) { statement_node = ast_parse_non_block_expr(pc, token_index, false); + if (!statement_node) { + statement_node = ast_create_void_expr(pc, last_token); + } } } } - if (statement_node) { - node->data.block.statements.append(statement_node); - } + node->data.block.statements.append(statement_node); last_token = &pc->tokens->at(*token_index); if (last_token->id == TokenIdRBrace) { |
