#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum BinaryOperator {
Equal,
NotEqual,
StrictEqual,
StrictNotEqual,
LessThan,
LessThanOrEqual,
GreaterThan,
GreaterThanOrEqual,
LeftShift,
RightShift,
UnsignedRightShift,
Add,
Subtract,
Multiply,
Divide,
Remainder,
Exponentiation,
BitwiseOr,
BitwiseXor,
BitwiseAnd,
In,
InstanceOf,
}
impl std::fmt::Display for BinaryOperator {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
Self::Equal => "==",
Self::NotEqual => "!=",
Self::StrictEqual => "===",
Self::StrictNotEqual => "!==",
Self::LessThan => "<",
Self::LessThanOrEqual => "<=",
Self::GreaterThan => ">",
Self::GreaterThanOrEqual => ">=",
Self::LeftShift => "<<",
Self::RightShift => ">>",
Self::UnsignedRightShift => ">>>",
Self::Add => "+",
Self::Subtract => "-",
Self::Multiply => "*",
Self::Divide => "/",
Self::Remainder => "%",
Self::Exponentiation => "**",
Self::BitwiseOr => "|",
Self::BitwiseXor => "^",
Self::BitwiseAnd => "&",
Self::In => "in",
Self::InstanceOf => "instanceof",
})
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum LogicalOperator {
And,
Or,
NullishCoalescing,
}
impl std::fmt::Display for LogicalOperator {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
Self::And => "&&",
Self::Or => "||",
Self::NullishCoalescing => "??",
})
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum UnaryOperator {
Minus,
Plus,
LogicalNot,
BitwiseNot,
TypeOf,
Void,
Delete,
}
impl std::fmt::Display for UnaryOperator {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
Self::Minus => "-",
Self::Plus => "+",
Self::LogicalNot => "!",
Self::BitwiseNot => "~",
Self::TypeOf => "typeof",
Self::Void => "void",
Self::Delete => "delete",
})
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum UpdateOperator {
Increment,
Decrement,
}
impl std::fmt::Display for UpdateOperator {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
Self::Increment => "++",
Self::Decrement => "--",
})
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum AssignmentOperator {
Assign,
AddAssign,
SubtractAssign,
MultiplyAssign,
DivideAssign,
RemainderAssign,
ExponentiationAssign,
LeftShiftAssign,
RightShiftAssign,
UnsignedRightShiftAssign,
BitwiseOrAssign,
BitwiseXorAssign,
BitwiseAndAssign,
LogicalOrAssign,
LogicalAndAssign,
NullishCoalescingAssign,
}
impl std::fmt::Display for AssignmentOperator {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
Self::Assign => "=",
Self::AddAssign => "+=",
Self::SubtractAssign => "-=",
Self::MultiplyAssign => "*=",
Self::DivideAssign => "/=",
Self::RemainderAssign => "%=",
Self::ExponentiationAssign => "**=",
Self::LeftShiftAssign => "<<=",
Self::RightShiftAssign => ">>=",
Self::UnsignedRightShiftAssign => ">>>=",
Self::BitwiseOrAssign => "|=",
Self::BitwiseXorAssign => "^=",
Self::BitwiseAndAssign => "&=",
Self::LogicalOrAssign => "||=",
Self::LogicalAndAssign => "&&=",
Self::NullishCoalescingAssign => "??=",
})
}
}