From 77d153d315a2a5909840ebcd47491e4cef14428b Mon Sep 17 00:00:00 2001 From: Laurenz Date: Tue, 15 Mar 2022 15:27:36 +0100 Subject: Add `in` and `not in` operators --- src/parse/mod.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'src/parse') 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(); -- cgit v1.2.3