aboutsummaryrefslogtreecommitdiff
path: root/src/parser.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2015-12-15 21:48:41 -0700
committerAndrew Kelley <superjoe30@gmail.com>2015-12-15 21:48:41 -0700
commit4d45d14b557365bfb5b9059347ec144784d481b7 (patch)
treee5d59f94eeaf9847bb3a112ff74bdbd25f4362b8 /src/parser.cpp
parentaa56f016f73063371431b8b2587538c79af97bd9 (diff)
downloadzig-4d45d14b557365bfb5b9059347ec144784d481b7.tar.gz
zig-4d45d14b557365bfb5b9059347ec144784d481b7.zip
use realpath to avoid duplicate imports
Diffstat (limited to 'src/parser.cpp')
-rw-r--r--src/parser.cpp53
1 files changed, 28 insertions, 25 deletions
diff --git a/src/parser.cpp b/src/parser.cpp
index 3231cc0d2f..65f9c7e6da 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -1113,38 +1113,41 @@ static AstNode *ast_parse_suffix_op_expr(ParseContext *pc, int *token_index, boo
return nullptr;
}
- Token *token = &pc->tokens->at(*token_index);
- if (token->id == TokenIdLParen) {
- *token_index += 1;
+ while (true) {
+ Token *token = &pc->tokens->at(*token_index);
+ if (token->id == TokenIdLParen) {
+ *token_index += 1;
- AstNode *node = ast_create_node(pc, NodeTypeFnCallExpr, token);
- node->data.fn_call_expr.fn_ref_expr = primary_expr;
- ast_parse_fn_call_param_list(pc, token_index, &node->data.fn_call_expr.params);
- return node;
- } else if (token->id == TokenIdLBracket) {
- *token_index += 1;
+ AstNode *node = ast_create_node(pc, NodeTypeFnCallExpr, token);
+ node->data.fn_call_expr.fn_ref_expr = primary_expr;
+ ast_parse_fn_call_param_list(pc, token_index, &node->data.fn_call_expr.params);
- AstNode *node = ast_create_node(pc, NodeTypeArrayAccessExpr, token);
- node->data.array_access_expr.array_ref_expr = primary_expr;
- node->data.array_access_expr.subscript = ast_parse_expression(pc, token_index, true);
+ primary_expr = node;
+ } else if (token->id == TokenIdLBracket) {
+ *token_index += 1;
- Token *r_bracket = &pc->tokens->at(*token_index);
- *token_index += 1;
- ast_expect_token(pc, r_bracket, TokenIdRBracket);
+ AstNode *node = ast_create_node(pc, NodeTypeArrayAccessExpr, token);
+ node->data.array_access_expr.array_ref_expr = primary_expr;
+ node->data.array_access_expr.subscript = ast_parse_expression(pc, token_index, true);
- return node;
- } else if (token->id == TokenIdDot) {
- *token_index += 1;
+ Token *r_bracket = &pc->tokens->at(*token_index);
+ *token_index += 1;
+ ast_expect_token(pc, r_bracket, TokenIdRBracket);
- Token *name_token = ast_eat_token(pc, token_index, TokenIdSymbol);
+ primary_expr = node;
+ } else if (token->id == TokenIdDot) {
+ *token_index += 1;
- AstNode *node = ast_create_node(pc, NodeTypeFieldAccessExpr, token);
- node->data.field_access_expr.struct_expr = primary_expr;
- ast_buf_from_token(pc, name_token, &node->data.field_access_expr.field_name);
+ Token *name_token = ast_eat_token(pc, token_index, TokenIdSymbol);
- return node;
- } else {
- return primary_expr;
+ AstNode *node = ast_create_node(pc, NodeTypeFieldAccessExpr, token);
+ node->data.field_access_expr.struct_expr = primary_expr;
+ ast_buf_from_token(pc, name_token, &node->data.field_access_expr.field_name);
+
+ primary_expr = node;
+ } else {
+ return primary_expr;
+ }
}
}