diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2016-04-28 18:03:44 -0700 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2016-04-28 18:03:44 -0700 |
| commit | d908afe1050caca4dd33333adcd4844738c10e56 (patch) | |
| tree | 1813c1f48e3c8ea5bac47fb0cbb373f1c95993ff /src/parser.cpp | |
| parent | 46b0b84b90119a1eb70a30f78baa8239cafb2524 (diff) | |
| download | zig-d908afe1050caca4dd33333adcd4844738c10e56.tar.gz zig-d908afe1050caca4dd33333adcd4844738c10e56.zip | |
add array multiplication operator
Diffstat (limited to 'src/parser.cpp')
| -rw-r--r-- | src/parser.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/parser.cpp b/src/parser.cpp index 603bb990b9..62f83fd080 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -1297,6 +1297,7 @@ static PrefixOp tok_to_prefix_op(Token *token) { case TokenIdPercentPercent: return PrefixOpUnwrapError; case TokenIdDoubleQuestion: return PrefixOpUnwrapMaybe; case TokenIdBoolAnd: return PrefixOpAddressOf; + case TokenIdStarStar: return PrefixOpDereference; default: return PrefixOpInvalid; } } @@ -1332,6 +1333,14 @@ static AstNode *ast_parse_prefix_op_expr(ParseContext *pc, int *token_index, boo parent_node->data.prefix_op_expr.prefix_op = PrefixOpAddressOf; node->column += 1; + } else if (token->id == TokenIdStarStar) { + // pretend that we got 2 star tokens + + parent_node = ast_create_node(pc, NodeTypePrefixOpExpr, token); + parent_node->data.prefix_op_expr.primary_expr = node; + parent_node->data.prefix_op_expr.prefix_op = PrefixOpDereference; + + node->column += 1; } if (prefix_op == PrefixOpAddressOf) { @@ -1355,6 +1364,7 @@ static AstNode *ast_parse_prefix_op_expr(ParseContext *pc, int *token_index, boo static BinOpType tok_to_mult_op(Token *token) { switch (token->id) { case TokenIdStar: return BinOpTypeMult; + case TokenIdStarStar: return BinOpTypeArrayMult; case TokenIdSlash: return BinOpTypeDiv; case TokenIdPercent: return BinOpTypeMod; default: return BinOpTypeInvalid; @@ -1362,7 +1372,7 @@ static BinOpType tok_to_mult_op(Token *token) { } /* -MultiplyOperator : token(Star) | token(Slash) | token(Percent) +MultiplyOperator = "*" | "/" | "%" | "**" */ static BinOpType ast_parse_mult_op(ParseContext *pc, int *token_index, bool mandatory) { Token *token = &pc->tokens->at(*token_index); |
