aboutsummaryrefslogtreecommitdiff
path: root/src/parser.cpp
diff options
context:
space:
mode:
authorJosh Wolfe <thejoshwolfe@gmail.com>2015-12-06 23:49:20 -0700
committerJosh Wolfe <thejoshwolfe@gmail.com>2015-12-06 23:49:20 -0700
commit94e61287e708f61d2a9d814bfe7910d13e067ada (patch)
treede3ef329d7dcc726263cf9dd7cfb61acac4a0500 /src/parser.cpp
parent66e3aa09104781f460da1ea721b083d18eec351b (diff)
downloadzig-94e61287e708f61d2a9d814bfe7910d13e067ada.tar.gz
zig-94e61287e708f61d2a9d814bfe7910d13e067ada.zip
let is now a statement, not an expression
Diffstat (limited to 'src/parser.cpp')
-rw-r--r--src/parser.cpp24
1 files changed, 12 insertions, 12 deletions
diff --git a/src/parser.cpp b/src/parser.cpp
index 39b0d61838..fc47c7ad64 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -1214,7 +1214,7 @@ static AstNode *ast_parse_ass_expr(ParseContext *pc, int *token_index, bool mand
}
/*
-NonBlockExpression : ReturnExpression | VariableDeclaration | AssignmentExpression
+NonBlockExpression : ReturnExpression | AssignmentExpression
*/
static AstNode *ast_parse_non_block_expr(ParseContext *pc, int *token_index, bool mandatory) {
Token *token = &pc->tokens->at(*token_index);
@@ -1223,11 +1223,6 @@ static AstNode *ast_parse_non_block_expr(ParseContext *pc, int *token_index, boo
if (return_expr)
return return_expr;
- AstNode *variable_declaration_expr = ast_parse_variable_declaration_expr(pc, token_index, false);
- if (variable_declaration_expr)
- return variable_declaration_expr;
-
-
AstNode *ass_expr = ast_parse_ass_expr(pc, token_index, false);
if (ass_expr)
return ass_expr;
@@ -1288,8 +1283,8 @@ static AstNode *ast_parse_label(ParseContext *pc, int *token_index, bool mandato
}
/*
-Statement : Label | NonBlockExpression token(Semicolon) | BlockExpression
Block : token(LBrace) list(option(Statement), token(Semicolon)) token(RBrace)
+Statement : Label | VariableDeclaration token(Semicolon) | NonBlockExpression token(Semicolon) | BlockExpression
*/
static AstNode *ast_parse_block(ParseContext *pc, int *token_index, bool mandatory) {
Token *last_token = &pc->tokens->at(*token_index);
@@ -1316,12 +1311,17 @@ static AstNode *ast_parse_block(ParseContext *pc, int *token_index, bool mandato
if (statement_node) {
semicolon_expected = false;
} else {
- statement_node = ast_parse_block_expr(pc, token_index, false);
- semicolon_expected = !statement_node;
- if (!statement_node) {
- statement_node = ast_parse_non_block_expr(pc, token_index, false);
+ statement_node = ast_parse_variable_declaration_expr(pc, token_index, false);
+ if (statement_node) {
+ semicolon_expected = true;
+ } else {
+ statement_node = ast_parse_block_expr(pc, token_index, false);
+ semicolon_expected = !statement_node;
if (!statement_node) {
- statement_node = ast_create_node(pc, NodeTypeVoid, last_token);
+ statement_node = ast_parse_non_block_expr(pc, token_index, false);
+ if (!statement_node) {
+ statement_node = ast_create_node(pc, NodeTypeVoid, last_token);
+ }
}
}
}