diff options
author | Aleksey Kladov <[email protected]> | 2018-08-04 15:17:20 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2018-08-04 15:17:20 +0100 |
commit | e4b84fbf36d04e54f68f914f724c8e804233d3aa (patch) | |
tree | 3e38d49ae28b0600c8c17de9488e7de77d8f9cec /src | |
parent | 82efdff34bf24680bef58eca399ec3f20748a96a (diff) |
Assignment expression
Diffstat (limited to 'src')
-rw-r--r-- | src/algo/walk.rs | 1 | ||||
-rw-r--r-- | src/grammar/expressions/mod.rs | 14 |
2 files changed, 9 insertions, 6 deletions
diff --git a/src/algo/walk.rs b/src/algo/walk.rs index ad0f2d8fb..a50ec2a09 100644 --- a/src/algo/walk.rs +++ b/src/algo/walk.rs | |||
@@ -6,6 +6,7 @@ pub fn preorder<'a>(root: SyntaxNodeRef<'a>) -> impl Iterator<Item = SyntaxNodeR | |||
6 | WalkEvent::Exit(_) => None, | 6 | WalkEvent::Exit(_) => None, |
7 | }) | 7 | }) |
8 | } | 8 | } |
9 | |||
9 | #[derive(Debug, Copy, Clone)] | 10 | #[derive(Debug, Copy, Clone)] |
10 | pub enum WalkEvent<'a> { | 11 | pub enum WalkEvent<'a> { |
11 | Enter(SyntaxNodeRef<'a>), | 12 | Enter(SyntaxNodeRef<'a>), |
diff --git a/src/grammar/expressions/mod.rs b/src/grammar/expressions/mod.rs index cedbc235f..6831aef66 100644 --- a/src/grammar/expressions/mod.rs +++ b/src/grammar/expressions/mod.rs | |||
@@ -35,13 +35,15 @@ struct Restrictions { | |||
35 | 35 | ||
36 | // test expr_binding_power | 36 | // test expr_binding_power |
37 | // fn foo() { | 37 | // fn foo() { |
38 | // 1 + 2 * 3 == 1 * 2 + 3 | 38 | // 1 + 2 * 3 == 1 * 2 + 3; |
39 | // *x = 1 + 1; | ||
39 | // } | 40 | // } |
40 | fn bp_of(op: SyntaxKind) -> u8 { | 41 | fn bp_of(op: SyntaxKind) -> u8 { |
41 | match op { | 42 | match op { |
42 | EQEQ | NEQ => 1, | 43 | EQ => 1, |
43 | MINUS | PLUS => 2, | 44 | EQEQ | NEQ => 2, |
44 | STAR | SLASH => 3, | 45 | MINUS | PLUS => 3, |
46 | STAR | SLASH => 4, | ||
45 | _ => 0 | 47 | _ => 0 |
46 | } | 48 | } |
47 | } | 49 | } |
@@ -106,7 +108,7 @@ fn unary_expr(p: &mut Parser, r: Restrictions) -> Option<CompletedMarker> { | |||
106 | return Some(postfix_expr(p, lhs)) | 108 | return Some(postfix_expr(p, lhs)) |
107 | } | 109 | } |
108 | }; | 110 | }; |
109 | expr(p); | 111 | unary_expr(p, r); |
110 | Some(m.complete(p, kind)) | 112 | Some(m.complete(p, kind)) |
111 | } | 113 | } |
112 | 114 | ||
@@ -247,7 +249,7 @@ fn struct_lit(p: &mut Parser) { | |||
247 | 249 | ||
248 | fn bin_expr(p: &mut Parser, r: Restrictions, lhs: CompletedMarker, bp: u8) -> CompletedMarker { | 250 | fn bin_expr(p: &mut Parser, r: Restrictions, lhs: CompletedMarker, bp: u8) -> CompletedMarker { |
249 | assert!(match p.current() { | 251 | assert!(match p.current() { |
250 | MINUS | PLUS | STAR | SLASH | EQEQ | NEQ => true, | 252 | MINUS | PLUS | STAR | SLASH | EQEQ | NEQ | EQ => true, |
251 | _ => false, | 253 | _ => false, |
252 | }); | 254 | }); |
253 | let m = lhs.precede(p); | 255 | let m = lhs.precede(p); |