From cbb49f26d9b9029c38afe6951bb7c42823e3ac8b Mon Sep 17 00:00:00 2001 From: Itamar Date: Sat, 27 Mar 2021 19:20:20 +0300 Subject: [PATCH] LibCpp: Support parsing binary "==" Operator --- Userland/Libraries/LibCpp/AST.cpp | 3 +++ Userland/Libraries/LibCpp/AST.h | 1 + Userland/Libraries/LibCpp/Parser.cpp | 5 ++++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibCpp/AST.cpp b/Userland/Libraries/LibCpp/AST.cpp index a928a53afc..4cef2dd177 100644 --- a/Userland/Libraries/LibCpp/AST.cpp +++ b/Userland/Libraries/LibCpp/AST.cpp @@ -203,6 +203,9 @@ void BinaryExpression::dump(size_t indent) const case BinaryOp::RightShift: op_string = ">>"; break; + case BinaryOp::EqualsEquals: + op_string = "=="; + break; } m_lhs->dump(indent + 1); diff --git a/Userland/Libraries/LibCpp/AST.h b/Userland/Libraries/LibCpp/AST.h index 1d749e348b..0941b3b993 100644 --- a/Userland/Libraries/LibCpp/AST.h +++ b/Userland/Libraries/LibCpp/AST.h @@ -371,6 +371,7 @@ enum class BinaryOp { BitwiseXor, LeftShift, RightShift, + EqualsEquals }; class BinaryExpression : public Expression { diff --git a/Userland/Libraries/LibCpp/Parser.cpp b/Userland/Libraries/LibCpp/Parser.cpp index 42ca7f04dd..b8838335f5 100644 --- a/Userland/Libraries/LibCpp/Parser.cpp +++ b/Userland/Libraries/LibCpp/Parser.cpp @@ -309,7 +309,7 @@ NonnullRefPtr Parser::parse_variable_declaration(ASTNode& p initial_value = parse_expression(var); } - if(expect_semicolon) + if (expect_semicolon) consume(Token::Type::Semicolon); var->set_end(position()); @@ -372,6 +372,7 @@ bool Parser::match_secondary_expression() || type == Token::Type::LessLessEquals || type == Token::Type::GreaterGreater || type == Token::Type::GreaterGreaterEquals + || type == Token::Type::EqualsEquals || type == Token::Type::AndAnd || type == Token::Type::PipePipe; } @@ -494,6 +495,8 @@ NonnullRefPtr Parser::parse_secondary_expression(ASTNode& parent, No return parse_binary_expression(parent, lhs, BinaryOp::Addition); case Token::Type::Less: return parse_binary_expression(parent, lhs, BinaryOp::LessThan); + case Token::Type::EqualsEquals: + return parse_binary_expression(parent, lhs, BinaryOp::EqualsEquals); case Token::Type::Equals: return parse_assignment_expression(parent, lhs, AssignmentOp::Assignment); case Token::Type::Dot: {