|
|
@@ -395,11 +395,27 @@ postfix_expression:
|
|
|
$$ = arena->New<SimpleMemberAccessExpression>(context.source_loc(), $1,
|
|
|
$2);
|
|
|
}
|
|
|
+| postfix_expression ARROW identifier
|
|
|
+ {
|
|
|
+ auto deref = arena->New<OperatorExpression>(
|
|
|
+ context.source_loc(), Operator::Deref,
|
|
|
+ std::vector<Nonnull<Expression*>>({$1}));
|
|
|
+ $$ = arena->New<SimpleMemberAccessExpression>(context.source_loc(), deref,
|
|
|
+ $3);
|
|
|
+ }
|
|
|
| postfix_expression PERIOD LEFT_PARENTHESIS expression RIGHT_PARENTHESIS
|
|
|
{
|
|
|
$$ = arena->New<CompoundMemberAccessExpression>(context.source_loc(), $1,
|
|
|
$4);
|
|
|
}
|
|
|
+| postfix_expression ARROW LEFT_PARENTHESIS expression RIGHT_PARENTHESIS
|
|
|
+ {
|
|
|
+ auto deref = arena->New<OperatorExpression>(
|
|
|
+ context.source_loc(), Operator::Deref,
|
|
|
+ std::vector<Nonnull<Expression*>>({$1}));
|
|
|
+ $$ = arena->New<CompoundMemberAccessExpression>(context.source_loc(),
|
|
|
+ deref, $4);
|
|
|
+ }
|
|
|
| postfix_expression LEFT_SQUARE_BRACKET expression RIGHT_SQUARE_BRACKET
|
|
|
{ $$ = arena->New<IndexExpression>(context.source_loc(), $1, $3); }
|
|
|
| intrinsic_identifier tuple
|