From 208258820108b1e921d456e99d48844ebbe91040 Mon Sep 17 00:00:00 2001 From: Josh Wolfe Date: Sat, 12 Dec 2015 17:33:45 -0700 Subject: fix short circuit expressions --- src/parser.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/parser.cpp') diff --git a/src/parser.cpp b/src/parser.cpp index 7b20bd7811..8b7ae50ae4 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -572,6 +572,7 @@ static void ast_invalid_token_error(ParseContext *pc, Token *token) { static AstNode *ast_parse_expression(ParseContext *pc, int *token_index, bool mandatory); static AstNode *ast_parse_block(ParseContext *pc, int *token_index, bool mandatory); static AstNode *ast_parse_if_expr(ParseContext *pc, int *token_index, bool mandatory); +static AstNode *ast_parse_block_expr(ParseContext *pc, int *token_index, bool mandatory); static void ast_expect_token(ParseContext *pc, Token *token, TokenId token_id) { if (token->id != token_id) { @@ -809,7 +810,7 @@ static AstNode *ast_parse_grouped_expr(ParseContext *pc, int *token_index, bool } /* -PrimaryExpression : token(Number) | token(String) | token(Unreachable) | GroupedExpression | token(Symbol) | Goto +PrimaryExpression : token(Number) | token(String) | KeywordLiteral | GroupedExpression | token(Symbol) | Goto | BlockExpression */ static AstNode *ast_parse_primary_expr(ParseContext *pc, int *token_index, bool mandatory) { Token *token = &pc->tokens->at(*token_index); @@ -864,6 +865,11 @@ static AstNode *ast_parse_primary_expr(ParseContext *pc, int *token_index, bool return grouped_expr_node; } + AstNode *block_expr_node = ast_parse_block_expr(pc, token_index, false); + if (block_expr_node) { + return block_expr_node; + } + if (!mandatory) return nullptr; -- cgit v1.2.3