diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2021-01-14 10:52:12 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2021-01-14 10:52:12 +0000 |
commit | d76143da19fcfcd210acc930e68acd6c43db9088 (patch) | |
tree | 0a1aab6dbe05e7a16caad5f58a787fd39abda6b8 /crates/parser | |
parent | d635806ea5090426cd4a5a57601a7f823277e84c (diff) | |
parent | 8d62576a9b47922ce58ac757e6e4944d45b223a6 (diff) |
Merge #7211
7211: Fixed expr meta var after path colons in mbe r=matklad a=edwin0cheng
Fixes #7207
Added `L_DOLLAR` in `ITEM_RECOVERY_SET` , but I don't know whether it is a good idea.
r? @matklad
Co-authored-by: Edwin Cheng <[email protected]>
Diffstat (limited to 'crates/parser')
-rw-r--r-- | crates/parser/src/parser.rs | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/crates/parser/src/parser.rs b/crates/parser/src/parser.rs index d2487acc3..81e26e009 100644 --- a/crates/parser/src/parser.rs +++ b/crates/parser/src/parser.rs | |||
@@ -7,7 +7,7 @@ use drop_bomb::DropBomb; | |||
7 | use crate::{ | 7 | use crate::{ |
8 | event::Event, | 8 | event::Event, |
9 | ParseError, | 9 | ParseError, |
10 | SyntaxKind::{self, EOF, ERROR, TOMBSTONE}, | 10 | SyntaxKind::{self, EOF, ERROR, L_DOLLAR, R_DOLLAR, TOMBSTONE}, |
11 | TokenSet, TokenSource, T, | 11 | TokenSet, TokenSource, T, |
12 | }; | 12 | }; |
13 | 13 | ||
@@ -215,13 +215,23 @@ impl<'t> Parser<'t> { | |||
215 | 215 | ||
216 | /// Create an error node and consume the next token. | 216 | /// Create an error node and consume the next token. |
217 | pub(crate) fn err_and_bump(&mut self, message: &str) { | 217 | pub(crate) fn err_and_bump(&mut self, message: &str) { |
218 | self.err_recover(message, TokenSet::EMPTY); | 218 | match self.current() { |
219 | L_DOLLAR | R_DOLLAR => { | ||
220 | let m = self.start(); | ||
221 | self.error(message); | ||
222 | self.bump_any(); | ||
223 | m.complete(self, ERROR); | ||
224 | } | ||
225 | _ => { | ||
226 | self.err_recover(message, TokenSet::EMPTY); | ||
227 | } | ||
228 | } | ||
219 | } | 229 | } |
220 | 230 | ||
221 | /// Create an error node and consume the next token. | 231 | /// Create an error node and consume the next token. |
222 | pub(crate) fn err_recover(&mut self, message: &str, recovery: TokenSet) { | 232 | pub(crate) fn err_recover(&mut self, message: &str, recovery: TokenSet) { |
223 | match self.current() { | 233 | match self.current() { |
224 | T!['{'] | T!['}'] => { | 234 | T!['{'] | T!['}'] | L_DOLLAR | R_DOLLAR => { |
225 | self.error(message); | 235 | self.error(message); |
226 | return; | 236 | return; |
227 | } | 237 | } |