diff options
Diffstat (limited to 'src/grammar/expressions/atom.rs')
-rw-r--r-- | src/grammar/expressions/atom.rs | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/grammar/expressions/atom.rs b/src/grammar/expressions/atom.rs index 95c811730..ad654df9e 100644 --- a/src/grammar/expressions/atom.rs +++ b/src/grammar/expressions/atom.rs | |||
@@ -33,13 +33,13 @@ pub(super) const ATOM_EXPR_FIRST: TokenSet = | |||
33 | IDENT, SELF_KW, SUPER_KW, COLONCOLON ], | 33 | IDENT, SELF_KW, SUPER_KW, COLONCOLON ], |
34 | ]; | 34 | ]; |
35 | 35 | ||
36 | pub(super) fn atom_expr(p: &mut Parser) -> Option<CompletedMarker> { | 36 | pub(super) fn atom_expr(p: &mut Parser, r: Restrictions) -> Option<CompletedMarker> { |
37 | match literal(p) { | 37 | match literal(p) { |
38 | Some(m) => return Some(m), | 38 | Some(m) => return Some(m), |
39 | None => (), | 39 | None => (), |
40 | } | 40 | } |
41 | if paths::is_path_start(p) { | 41 | if paths::is_path_start(p) { |
42 | return Some(path_expr(p)); | 42 | return Some(path_expr(p, r)); |
43 | } | 43 | } |
44 | let la = p.nth(1); | 44 | let la = p.nth(1); |
45 | let done = match p.current() { | 45 | let done = match p.current() { |
@@ -91,7 +91,8 @@ fn lambda_expr(p: &mut Parser) -> CompletedMarker { | |||
91 | // fn foo() { | 91 | // fn foo() { |
92 | // if true {}; | 92 | // if true {}; |
93 | // if true {} else {}; | 93 | // if true {} else {}; |
94 | // if true {} else if false {} else {} | 94 | // if true {} else if false {} else {}; |
95 | // if S {}; | ||
95 | // } | 96 | // } |
96 | fn if_expr(p: &mut Parser) -> CompletedMarker { | 97 | fn if_expr(p: &mut Parser) -> CompletedMarker { |
97 | assert!(p.at(IF_KW)); | 98 | assert!(p.at(IF_KW)); |
@@ -112,18 +113,19 @@ fn if_expr(p: &mut Parser) -> CompletedMarker { | |||
112 | fn if_head(p: &mut Parser) { | 113 | fn if_head(p: &mut Parser) { |
113 | assert!(p.at(IF_KW)); | 114 | assert!(p.at(IF_KW)); |
114 | p.bump(); | 115 | p.bump(); |
115 | expr(p); | 116 | expr_no_struct(p); |
116 | } | 117 | } |
117 | 118 | ||
118 | // test match_expr | 119 | // test match_expr |
119 | // fn foo() { | 120 | // fn foo() { |
120 | // match () { }; | 121 | // match () { }; |
122 | // match S {}; | ||
121 | // } | 123 | // } |
122 | fn match_expr(p: &mut Parser) -> CompletedMarker { | 124 | fn match_expr(p: &mut Parser) -> CompletedMarker { |
123 | assert!(p.at(MATCH_KW)); | 125 | assert!(p.at(MATCH_KW)); |
124 | let m = p.start(); | 126 | let m = p.start(); |
125 | p.bump(); | 127 | p.bump(); |
126 | expr(p); | 128 | expr_no_struct(p); |
127 | p.eat(L_CURLY); | 129 | p.eat(L_CURLY); |
128 | while !p.at(EOF) && !p.at(R_CURLY) { | 130 | while !p.at(EOF) && !p.at(R_CURLY) { |
129 | match_arm(p); | 131 | match_arm(p); |