aboutsummaryrefslogtreecommitdiff
path: root/src/grammar/expressions.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2018-07-31 22:19:04 +0100
committerAleksey Kladov <[email protected]>2018-07-31 22:19:04 +0100
commit2bbd4c510d2da5c78f566b28e90548102bb107dc (patch)
treee830242471940c556d3feb5e0cf20fdd8aaec8bc /src/grammar/expressions.rs
parenta750135a0ac5a42035a1baa808e0af8ae562cd72 (diff)
not expr
Diffstat (limited to 'src/grammar/expressions.rs')
-rw-r--r--src/grammar/expressions.rs24
1 files changed, 19 insertions, 5 deletions
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) {
103} 103}
104 104
105fn prefix_expr(p: &mut Parser) -> Option<CompletedMarker> { 105fn prefix_expr(p: &mut Parser) -> Option<CompletedMarker> {
106 match p.current() { 106 let done = match p.current() {
107 AMPERSAND => Some(ref_expr(p)), 107 AMPERSAND => ref_expr(p),
108 STAR => Some(deref_expr(p)), 108 STAR => deref_expr(p),
109 _ => atom_expr(p), 109 EXCL => not_expr(p),
110 } 110 _ => return atom_expr(p),
111 };
112 Some(done)
111} 113}
112 114
113// test ref_expr 115// test ref_expr
@@ -136,6 +138,18 @@ fn deref_expr(p: &mut Parser) -> CompletedMarker {
136 m.complete(p, DEREF_EXPR) 138 m.complete(p, DEREF_EXPR)
137} 139}
138 140
141// test not_expr
142// fn foo() {
143// !!true;
144// }
145fn not_expr(p: &mut Parser) -> CompletedMarker {
146 assert!(p.at(EXCL));
147 let m = p.start();
148 p.bump();
149 expr(p);
150 m.complete(p, NOT_EXPR)
151}
152
139fn atom_expr(p: &mut Parser) -> Option<CompletedMarker> { 153fn atom_expr(p: &mut Parser) -> Option<CompletedMarker> {
140 match literal(p) { 154 match literal(p) {
141 Some(m) => return Some(m), 155 Some(m) => return Some(m),