Browse Source

LibCpp: Support parsing '!=" operator

Itamar 4 years ago
parent
commit
fe4122bbae

+ 3 - 0
Userland/Libraries/LibCpp/AST.cpp

@@ -206,6 +206,9 @@ void BinaryExpression::dump(size_t indent) const
     case BinaryOp::EqualsEquals:
     case BinaryOp::EqualsEquals:
         op_string = "==";
         op_string = "==";
         break;
         break;
+    case BinaryOp::NotEqual:
+        op_string = "!=";
+        break;
     }
     }
 
 
     m_lhs->dump(indent + 1);
     m_lhs->dump(indent + 1);

+ 2 - 1
Userland/Libraries/LibCpp/AST.h

@@ -418,7 +418,8 @@ enum class BinaryOp {
     BitwiseXor,
     BitwiseXor,
     LeftShift,
     LeftShift,
     RightShift,
     RightShift,
-    EqualsEquals
+    EqualsEquals,
+    NotEqual,
 };
 };
 
 
 class BinaryExpression : public Expression {
 class BinaryExpression : public Expression {

+ 4 - 1
Userland/Libraries/LibCpp/Parser.cpp

@@ -420,7 +420,8 @@ bool Parser::match_secondary_expression()
         || type == Token::Type::GreaterGreaterEquals
         || type == Token::Type::GreaterGreaterEquals
         || type == Token::Type::EqualsEquals
         || type == Token::Type::EqualsEquals
         || type == Token::Type::AndAnd
         || type == Token::Type::AndAnd
-        || type == Token::Type::PipePipe;
+        || type == Token::Type::PipePipe
+        || type == Token::Type::ExclamationMarkEquals;
 }
 }
 
 
 NonnullRefPtr<Expression> Parser::parse_primary_expression(ASTNode& parent)
 NonnullRefPtr<Expression> Parser::parse_primary_expression(ASTNode& parent)
@@ -549,6 +550,8 @@ NonnullRefPtr<Expression> Parser::parse_secondary_expression(ASTNode& parent, No
         return parse_binary_expression(parent, lhs, BinaryOp::LessThan);
         return parse_binary_expression(parent, lhs, BinaryOp::LessThan);
     case Token::Type::EqualsEquals:
     case Token::Type::EqualsEquals:
         return parse_binary_expression(parent, lhs, BinaryOp::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:
     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: {