From fe4122bbae30bec0c80212635e1d330f76bc52b3 Mon Sep 17 00:00:00 2001 From: Itamar Date: Wed, 31 Mar 2021 18:19:17 +0300 Subject: [PATCH] LibCpp: Support parsing '!=" operator --- Userland/Libraries/LibCpp/AST.cpp | 3 +++ Userland/Libraries/LibCpp/AST.h | 3 ++- Userland/Libraries/LibCpp/Parser.cpp | 5 ++++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibCpp/AST.cpp b/Userland/Libraries/LibCpp/AST.cpp index 713a785780..65e78567b8 100644 --- a/Userland/Libraries/LibCpp/AST.cpp +++ b/Userland/Libraries/LibCpp/AST.cpp @@ -206,6 +206,9 @@ void BinaryExpression::dump(size_t indent) const case BinaryOp::EqualsEquals: op_string = "=="; break; + case BinaryOp::NotEqual: + op_string = "!="; + break; } m_lhs->dump(indent + 1); diff --git a/Userland/Libraries/LibCpp/AST.h b/Userland/Libraries/LibCpp/AST.h index 9634d40ebc..2fd1353451 100644 --- a/Userland/Libraries/LibCpp/AST.h +++ b/Userland/Libraries/LibCpp/AST.h @@ -418,7 +418,8 @@ enum class BinaryOp { BitwiseXor, LeftShift, RightShift, - EqualsEquals + EqualsEquals, + NotEqual, }; class BinaryExpression : public Expression { diff --git a/Userland/Libraries/LibCpp/Parser.cpp b/Userland/Libraries/LibCpp/Parser.cpp index 5c4ccaa749..224d876506 100644 --- a/Userland/Libraries/LibCpp/Parser.cpp +++ b/Userland/Libraries/LibCpp/Parser.cpp @@ -420,7 +420,8 @@ bool Parser::match_secondary_expression() || type == Token::Type::GreaterGreaterEquals || type == Token::Type::EqualsEquals || type == Token::Type::AndAnd - || type == Token::Type::PipePipe; + || type == Token::Type::PipePipe + || type == Token::Type::ExclamationMarkEquals; } NonnullRefPtr Parser::parse_primary_expression(ASTNode& parent) @@ -549,6 +550,8 @@ NonnullRefPtr Parser::parse_secondary_expression(ASTNode& parent, No return parse_binary_expression(parent, lhs, BinaryOp::LessThan); case Token::Type::EqualsEquals: return parse_binary_expression(parent, lhs, BinaryOp::EqualsEquals); + case Token::Type::ExclamationMarkEquals: + return parse_binary_expression(parent, lhs, BinaryOp::NotEqual); case Token::Type::Equals: return parse_assignment_expression(parent, lhs, AssignmentOp::Assignment); case Token::Type::Dot: {