diff options
| author | Laurenz <laurmaedje@gmail.com> | 2022-03-15 15:27:36 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2022-03-15 15:27:36 +0100 |
| commit | 77d153d315a2a5909840ebcd47491e4cef14428b (patch) | |
| tree | 0886afd2ac4b03facb7c33a4e59924e30f55fd41 /src/parse/mod.rs | |
| parent | ae0a56cdffa515ed6bb7cb566c025cc66ff00f33 (diff) | |
Add `in` and `not in` operators
Diffstat (limited to 'src/parse/mod.rs')
| -rw-r--r-- | src/parse/mod.rs | 15 |
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(); |
