summaryrefslogtreecommitdiff
path: root/src/parse
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-03-15 15:27:36 +0100
committerLaurenz <laurmaedje@gmail.com>2022-03-15 15:27:36 +0100
commit77d153d315a2a5909840ebcd47491e4cef14428b (patch)
tree0886afd2ac4b03facb7c33a4e59924e30f55fd41 /src/parse
parentae0a56cdffa515ed6bb7cb566c025cc66ff00f33 (diff)
Add `in` and `not in` operators
Diffstat (limited to 'src/parse')
-rw-r--r--src/parse/mod.rs15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/parse/mod.rs b/src/parse/mod.rs
index f07fefce..5eaba8b0 100644
--- a/src/parse/mod.rs
+++ b/src/parse/mod.rs
@@ -376,9 +376,18 @@ fn expr_prec(p: &mut Parser, atomic: bool, min_prec: usize) -> ParseResult {
with_expr(p, marker)?;
}
- let op = match p.peek().and_then(BinOp::from_token) {
- Some(binop) => binop,
- None => break,
+ let op = if p.eat_if(&NodeKind::Not) {
+ if p.at(&NodeKind::In) {
+ BinOp::NotIn
+ } else {
+ p.expected("keyword `in`");
+ return Err(ParseError);
+ }
+ } else {
+ match p.peek().and_then(BinOp::from_token) {
+ Some(binop) => binop,
+ None => break,
+ }
};
let mut prec = op.precedence();