1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 06:57:44 +00:00

LibCpp: Parse "arrow" operator

This commit is contained in:
Itamar 2021-04-02 11:15:51 +03:00 committed by Andreas Kling
parent 44833f1621
commit ec2c54ee2e
3 changed files with 8 additions and 1 deletions

View file

@ -215,6 +215,9 @@ void BinaryExpression::dump(size_t indent) const
case BinaryOp::LogicalAnd: case BinaryOp::LogicalAnd:
op_string = "&&"; op_string = "&&";
break; break;
case BinaryOp::Arrow:
op_string = "->";
break;
} }
m_lhs->dump(indent + 1); m_lhs->dump(indent + 1);

View file

@ -422,6 +422,7 @@ enum class BinaryOp {
NotEqual, NotEqual,
LogicalOr, LogicalOr,
LogicalAnd, LogicalAnd,
Arrow,
}; };
class BinaryExpression : public Expression { class BinaryExpression : public Expression {

View file

@ -425,7 +425,8 @@ bool Parser::match_secondary_expression()
|| type == Token::Type::AndAnd || type == Token::Type::AndAnd
|| type == Token::Type::PipePipe || type == Token::Type::PipePipe
|| type == Token::Type::ExclamationMarkEquals || type == Token::Type::ExclamationMarkEquals
|| type == Token::Type::PipePipe; || type == Token::Type::PipePipe
|| type == Token::Type::Arrow;
} }
NonnullRefPtr<Expression> Parser::parse_primary_expression(ASTNode& parent) NonnullRefPtr<Expression> Parser::parse_primary_expression(ASTNode& parent)
@ -577,6 +578,8 @@ NonnullRefPtr<Expression> Parser::parse_secondary_expression(ASTNode& parent, No
return parse_binary_expression(parent, lhs, BinaryOp::BitwiseOr); return parse_binary_expression(parent, lhs, BinaryOp::BitwiseOr);
case Token::Type::PipePipe: case Token::Type::PipePipe:
return parse_binary_expression(parent, lhs, BinaryOp::LogicalOr); return parse_binary_expression(parent, lhs, BinaryOp::LogicalOr);
case Token::Type::Arrow:
return parse_binary_expression(parent, lhs, BinaryOp::Arrow);
case Token::Type::Equals: case Token::Type::Equals:
return parse_assignment_expression(parent, lhs, AssignmentOp::Assignment); return parse_assignment_expression(parent, lhs, AssignmentOp::Assignment);
case Token::Type::Dot: { case Token::Type::Dot: {