mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 02:37:35 +00:00
LibCpp: Parse Bitwise & Logical Or & And operators
This commit is contained in:
parent
8962581c9c
commit
575d6a8ee1
3 changed files with 27 additions and 2 deletions
|
@ -209,6 +209,12 @@ void BinaryExpression::dump(size_t indent) const
|
||||||
case BinaryOp::NotEqual:
|
case BinaryOp::NotEqual:
|
||||||
op_string = "!=";
|
op_string = "!=";
|
||||||
break;
|
break;
|
||||||
|
case BinaryOp::LogicalOr:
|
||||||
|
op_string = "||";
|
||||||
|
break;
|
||||||
|
case BinaryOp::LogicalAnd:
|
||||||
|
op_string = "&&";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_lhs->dump(indent + 1);
|
m_lhs->dump(indent + 1);
|
||||||
|
@ -319,6 +325,9 @@ void UnaryExpression::dump(size_t indent) const
|
||||||
case UnaryOp::PlusPlus:
|
case UnaryOp::PlusPlus:
|
||||||
op_string = "++";
|
op_string = "++";
|
||||||
break;
|
break;
|
||||||
|
case UnaryOp::Address:
|
||||||
|
op_string = "&";
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
op_string = "<invalid>";
|
op_string = "<invalid>";
|
||||||
}
|
}
|
||||||
|
|
|
@ -420,6 +420,8 @@ enum class BinaryOp {
|
||||||
RightShift,
|
RightShift,
|
||||||
EqualsEquals,
|
EqualsEquals,
|
||||||
NotEqual,
|
NotEqual,
|
||||||
|
LogicalOr,
|
||||||
|
LogicalAnd,
|
||||||
};
|
};
|
||||||
|
|
||||||
class BinaryExpression : public Expression {
|
class BinaryExpression : public Expression {
|
||||||
|
@ -582,6 +584,7 @@ enum class UnaryOp {
|
||||||
Plus,
|
Plus,
|
||||||
Minus,
|
Minus,
|
||||||
PlusPlus,
|
PlusPlus,
|
||||||
|
Address,
|
||||||
};
|
};
|
||||||
|
|
||||||
class UnaryExpression : public Expression {
|
class UnaryExpression : public Expression {
|
||||||
|
|
|
@ -421,7 +421,8 @@ bool Parser::match_secondary_expression()
|
||||||
|| 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;
|
|| type == Token::Type::ExclamationMarkEquals
|
||||||
|
|| type == Token::Type::PipePipe;
|
||||||
}
|
}
|
||||||
|
|
||||||
NonnullRefPtr<Expression> Parser::parse_primary_expression(ASTNode& parent)
|
NonnullRefPtr<Expression> Parser::parse_primary_expression(ASTNode& parent)
|
||||||
|
@ -481,7 +482,8 @@ bool Parser::match_unary_expression()
|
||||||
|| type == Token::Type::ExclamationMark
|
|| type == Token::Type::ExclamationMark
|
||||||
|| type == Token::Type::Tilde
|
|| type == Token::Type::Tilde
|
||||||
|| type == Token::Type::Plus
|
|| type == Token::Type::Plus
|
||||||
|| type == Token::Type::Minus;
|
|| type == Token::Type::Minus
|
||||||
|
|| type == Token::Type::And;
|
||||||
}
|
}
|
||||||
|
|
||||||
NonnullRefPtr<UnaryExpression> Parser::parse_unary_expression(ASTNode& parent)
|
NonnullRefPtr<UnaryExpression> Parser::parse_unary_expression(ASTNode& parent)
|
||||||
|
@ -505,6 +507,9 @@ NonnullRefPtr<UnaryExpression> Parser::parse_unary_expression(ASTNode& parent)
|
||||||
case Token::Type::PlusPlus:
|
case Token::Type::PlusPlus:
|
||||||
op = UnaryOp::PlusPlus;
|
op = UnaryOp::PlusPlus;
|
||||||
break;
|
break;
|
||||||
|
case Token::Type::And:
|
||||||
|
op = UnaryOp::Address;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -555,6 +560,14 @@ NonnullRefPtr<Expression> Parser::parse_secondary_expression(ASTNode& parent, No
|
||||||
return parse_binary_expression(parent, lhs, BinaryOp::EqualsEquals);
|
return parse_binary_expression(parent, lhs, BinaryOp::EqualsEquals);
|
||||||
case Token::Type::ExclamationMarkEquals:
|
case Token::Type::ExclamationMarkEquals:
|
||||||
return parse_binary_expression(parent, lhs, BinaryOp::NotEqual);
|
return parse_binary_expression(parent, lhs, BinaryOp::NotEqual);
|
||||||
|
case Token::Type::And:
|
||||||
|
return parse_binary_expression(parent, lhs, BinaryOp::BitwiseAnd);
|
||||||
|
case Token::Type::AndAnd:
|
||||||
|
return parse_binary_expression(parent, lhs, BinaryOp::LogicalAnd);
|
||||||
|
case Token::Type::Pipe:
|
||||||
|
return parse_binary_expression(parent, lhs, BinaryOp::BitwiseOr);
|
||||||
|
case Token::Type::PipePipe:
|
||||||
|
return parse_binary_expression(parent, lhs, BinaryOp::LogicalOr);
|
||||||
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: {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue