diff options
Diffstat (limited to 'crates/ra_parser/src')
-rw-r--r-- | crates/ra_parser/src/grammar.rs | 24 | ||||
-rw-r--r-- | crates/ra_parser/src/grammar/expressions.rs | 8 |
2 files changed, 13 insertions, 19 deletions
diff --git a/crates/ra_parser/src/grammar.rs b/crates/ra_parser/src/grammar.rs index 15aab6c6f..f94702e97 100644 --- a/crates/ra_parser/src/grammar.rs +++ b/crates/ra_parser/src/grammar.rs | |||
@@ -182,21 +182,11 @@ fn name_ref(p: &mut Parser) { | |||
182 | } | 182 | } |
183 | 183 | ||
184 | fn error_block(p: &mut Parser, message: &str) { | 184 | fn error_block(p: &mut Parser, message: &str) { |
185 | go(p, Some(message)); | 185 | assert!(p.at(L_CURLY)); |
186 | fn go(p: &mut Parser, message: Option<&str>) { | 186 | let m = p.start(); |
187 | assert!(p.at(L_CURLY)); | 187 | p.error(message); |
188 | let m = p.start(); | 188 | p.bump(); |
189 | if let Some(message) = message { | 189 | expressions::expr_block_contents(p); |
190 | p.error(message); | 190 | p.eat(R_CURLY); |
191 | } | 191 | m.complete(p, ERROR); |
192 | p.bump(); | ||
193 | while !p.at(EOF) && !p.at(R_CURLY) { | ||
194 | match p.current() { | ||
195 | L_CURLY => go(p, None), | ||
196 | _ => p.bump(), | ||
197 | } | ||
198 | } | ||
199 | p.eat(R_CURLY); | ||
200 | m.complete(p, ERROR); | ||
201 | } | ||
202 | } | 192 | } |
diff --git a/crates/ra_parser/src/grammar/expressions.rs b/crates/ra_parser/src/grammar/expressions.rs index d5a4f4d7b..70c71a8e1 100644 --- a/crates/ra_parser/src/grammar/expressions.rs +++ b/crates/ra_parser/src/grammar/expressions.rs | |||
@@ -33,6 +33,12 @@ pub(crate) fn block(p: &mut Parser) { | |||
33 | } | 33 | } |
34 | let m = p.start(); | 34 | let m = p.start(); |
35 | p.bump(); | 35 | p.bump(); |
36 | expr_block_contents(p); | ||
37 | p.expect(R_CURLY); | ||
38 | m.complete(p, BLOCK); | ||
39 | } | ||
40 | |||
41 | pub(crate) fn expr_block_contents(p: &mut Parser) { | ||
36 | // This is checked by a validator | 42 | // This is checked by a validator |
37 | attributes::inner_attributes(p); | 43 | attributes::inner_attributes(p); |
38 | 44 | ||
@@ -101,8 +107,6 @@ pub(crate) fn block(p: &mut Parser) { | |||
101 | } | 107 | } |
102 | } | 108 | } |
103 | } | 109 | } |
104 | p.expect(R_CURLY); | ||
105 | m.complete(p, BLOCK); | ||
106 | 110 | ||
107 | // test let_stmt; | 111 | // test let_stmt; |
108 | // fn foo() { | 112 | // fn foo() { |