Add remaining binary operations to AST
This commit is contained in:
parent
e2592cf090
commit
3238c06a5a
4 changed files with 73 additions and 1 deletions
|
@ -538,6 +538,7 @@ fn is_boolean_operator(op: BinaryOp) -> bool {
|
||||||
| BinaryOp::GreaterEqualTest
|
| BinaryOp::GreaterEqualTest
|
||||||
| BinaryOp::LesserTest
|
| BinaryOp::LesserTest
|
||||||
| BinaryOp::GreaterTest => true,
|
| BinaryOp::GreaterTest => true,
|
||||||
|
_ => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -504,7 +504,52 @@ pub enum BinOp {
|
||||||
LesserTest,
|
LesserTest,
|
||||||
/// The `>` operator for comparison
|
/// The `>` operator for comparison
|
||||||
GreaterTest,
|
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> {
|
impl<'a> BinExpr<'a> {
|
||||||
|
@ -519,6 +564,29 @@ impl<'a> BinExpr<'a> {
|
||||||
GTEQ => Some(BinOp::GreaterEqualTest),
|
GTEQ => Some(BinOp::GreaterEqualTest),
|
||||||
L_ANGLE => Some(BinOp::LesserTest),
|
L_ANGLE => Some(BinOp::LesserTest),
|
||||||
R_ANGLE => Some(BinOp::GreaterTest),
|
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,
|
_ => None,
|
||||||
})
|
})
|
||||||
.next()
|
.next()
|
||||||
|
|
|
@ -49,6 +49,7 @@ Grammar(
|
||||||
["^=", "CARETEQ"],
|
["^=", "CARETEQ"],
|
||||||
["/=", "SLASHEQ"],
|
["/=", "SLASHEQ"],
|
||||||
["*=", "STAREQ"],
|
["*=", "STAREQ"],
|
||||||
|
["%=", "PERCENTEQ"],
|
||||||
["&&", "AMPAMP"],
|
["&&", "AMPAMP"],
|
||||||
["||", "PIPEPIPE"],
|
["||", "PIPEPIPE"],
|
||||||
["<<", "SHL"],
|
["<<", "SHL"],
|
||||||
|
|
|
@ -58,6 +58,7 @@ pub enum SyntaxKind {
|
||||||
CARETEQ,
|
CARETEQ,
|
||||||
SLASHEQ,
|
SLASHEQ,
|
||||||
STAREQ,
|
STAREQ,
|
||||||
|
PERCENTEQ,
|
||||||
AMPAMP,
|
AMPAMP,
|
||||||
PIPEPIPE,
|
PIPEPIPE,
|
||||||
SHL,
|
SHL,
|
||||||
|
@ -319,6 +320,7 @@ impl SyntaxKind {
|
||||||
CARETEQ => &SyntaxInfo { name: "CARETEQ" },
|
CARETEQ => &SyntaxInfo { name: "CARETEQ" },
|
||||||
SLASHEQ => &SyntaxInfo { name: "SLASHEQ" },
|
SLASHEQ => &SyntaxInfo { name: "SLASHEQ" },
|
||||||
STAREQ => &SyntaxInfo { name: "STAREQ" },
|
STAREQ => &SyntaxInfo { name: "STAREQ" },
|
||||||
|
PERCENTEQ => &SyntaxInfo { name: "PERCENTEQ" },
|
||||||
AMPAMP => &SyntaxInfo { name: "AMPAMP" },
|
AMPAMP => &SyntaxInfo { name: "AMPAMP" },
|
||||||
PIPEPIPE => &SyntaxInfo { name: "PIPEPIPE" },
|
PIPEPIPE => &SyntaxInfo { name: "PIPEPIPE" },
|
||||||
SHL => &SyntaxInfo { name: "SHL" },
|
SHL => &SyntaxInfo { name: "SHL" },
|
||||||
|
|
Loading…
Reference in a new issue