From 2bbd4c510d2da5c78f566b28e90548102bb107dc Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 1 Aug 2018 00:19:04 +0300 Subject: not expr --- src/grammar/expressions.rs | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) (limited to 'src/grammar/expressions.rs') diff --git a/src/grammar/expressions.rs b/src/grammar/expressions.rs index ed9236b02..c638e8b99 100644 --- a/src/grammar/expressions.rs +++ b/src/grammar/expressions.rs @@ -103,11 +103,13 @@ fn let_stmt(p: &mut Parser) { } fn prefix_expr(p: &mut Parser) -> Option { - match p.current() { - AMPERSAND => Some(ref_expr(p)), - STAR => Some(deref_expr(p)), - _ => atom_expr(p), - } + let done = match p.current() { + AMPERSAND => ref_expr(p), + STAR => deref_expr(p), + EXCL => not_expr(p), + _ => return atom_expr(p), + }; + Some(done) } // test ref_expr @@ -136,6 +138,18 @@ fn deref_expr(p: &mut Parser) -> CompletedMarker { m.complete(p, DEREF_EXPR) } +// test not_expr +// fn foo() { +// !!true; +// } +fn not_expr(p: &mut Parser) -> CompletedMarker { + assert!(p.at(EXCL)); + let m = p.start(); + p.bump(); + expr(p); + m.complete(p, NOT_EXPR) +} + fn atom_expr(p: &mut Parser) -> Option { match literal(p) { Some(m) => return Some(m), -- cgit v1.2.3