Add remaining binary operations to AST

This commit is contained in:
Marcus Klaas de Vries 2019-01-07 19:03:25 +01:00
parent e2592cf090
commit 3238c06a5a
4 changed files with 73 additions and 1 deletions

View file

@ -538,6 +538,7 @@ fn is_boolean_operator(op: BinaryOp) -> bool {
| BinaryOp::GreaterEqualTest
| BinaryOp::LesserTest
| BinaryOp::GreaterTest => true,
_ => false,
}
}

View file

@ -504,7 +504,52 @@ pub enum BinOp {
LesserTest,
/// The `>` operator for comparison
GreaterTest,
// TODO: lots of others
/// The `+` operator for addition
Addition,
/// The `*` operator for multiplication
Multiplication,
/// The `-` operator for subtraction
Subtraction,
/// The `/` operator for division
Division,
/// The `%` operator for remainder after division
Remainder,
/// The `<<` operator for left shift
LeftShift,
/// The `>>` operator for right shift
RightShift,
/// The `^` operator for bitwise XOR
BitwiseXor,
/// The `|` operator for bitwise OR
BitwiseOr,
/// The `&` operator for bitwise AND
BitwiseAnd,
/// The `..` operator for right-open ranges
RangeRightOpen,
/// The `..=` operator for right-closed ranges
RangeRightClosed,
/// The `=` operator for assignment
Assignment,
/// The `+=` operator for assignment after additon
AddAssign,
/// The `/=` operator for assignment after division
DivAssign,
/// The `*=` operator for assignment after multiplication
MulAssign,
/// The `%=` operator for assignment after remainders
RemAssign,
/// The `>>=` operator for assignment after shifting right
ShrAssign,
/// The `<<=` operator for assignment after shifting left
ShlAssign,
/// The `-=` operator for assignment after subtraction
SubAssign,
/// The `|=` operator for assignment after bitwise OR
BitOrAssign,
/// The `&=` operator for assignment after bitwise AND
BitAndAssign,
/// The `^=` operator for assignment after bitwise XOR
BitXorAssin,
}
impl<'a> BinExpr<'a> {
@ -519,6 +564,29 @@ impl<'a> BinExpr<'a> {
GTEQ => Some(BinOp::GreaterEqualTest),
L_ANGLE => Some(BinOp::LesserTest),
R_ANGLE => Some(BinOp::GreaterTest),
PLUS => Some(BinOp::Addition),
STAR => Some(BinOp::Multiplication),
MINUS => Some(BinOp::Subtraction),
SLASH => Some(BinOp::Division),
PERCENT => Some(BinOp::Remainder),
SHL => Some(BinOp::LeftShift),
SHR => Some(BinOp::RightShift),
CARET => Some(BinOp::BitwiseXor),
PIPE => Some(BinOp::BitwiseOr),
AMP => Some(BinOp::BitwiseAnd),
DOTDOT => Some(BinOp::RangeRightOpen),
DOTDOTEQ => Some(BinOp::RangeRightClosed),
EQ => Some(BinOp::Assignment),
PLUSEQ => Some(BinOp::AddAssign),
SLASHEQ => Some(BinOp::DivAssign),
STAREQ => Some(BinOp::MulAssign),
PERCENTEQ => Some(BinOp::RemAssign),
SHREQ => Some(BinOp::ShrAssign),
SHLEQ => Some(BinOp::ShlAssign),
MINUSEQ => Some(BinOp::SubAssign),
PIPEEQ => Some(BinOp::BitOrAssign),
AMPEQ => Some(BinOp::BitAndAssign),
CARETEQ => Some(BinOp::BitXorAssin),
_ => None,
})
.next()

View file

@ -49,6 +49,7 @@ Grammar(
["^=", "CARETEQ"],
["/=", "SLASHEQ"],
["*=", "STAREQ"],
["%=", "PERCENTEQ"],
["&&", "AMPAMP"],
["||", "PIPEPIPE"],
["<<", "SHL"],

View file

@ -58,6 +58,7 @@ pub enum SyntaxKind {
CARETEQ,
SLASHEQ,
STAREQ,
PERCENTEQ,
AMPAMP,
PIPEPIPE,
SHL,
@ -319,6 +320,7 @@ impl SyntaxKind {
CARETEQ => &SyntaxInfo { name: "CARETEQ" },
SLASHEQ => &SyntaxInfo { name: "SLASHEQ" },
STAREQ => &SyntaxInfo { name: "STAREQ" },
PERCENTEQ => &SyntaxInfo { name: "PERCENTEQ" },
AMPAMP => &SyntaxInfo { name: "AMPAMP" },
PIPEPIPE => &SyntaxInfo { name: "PIPEPIPE" },
SHL => &SyntaxInfo { name: "SHL" },