diff options
| author | Michael Goulet <michael@errs.io> | 2024-08-26 11:11:13 -0400 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2024-09-06 10:32:48 -0400 |
| commit | 9aaf873396186ea0c980cbea7d3449a355ccfeea (patch) | |
| tree | b2fac45d063823e935f66b6979f6ca21d82ba859 /compiler/rustc_lexer/src/lib.rs | |
| parent | 59d4114b2d1aaac9a6dfe770997f2e79ccfd28ab (diff) | |
| download | rust-9aaf873396186ea0c980cbea7d3449a355ccfeea.tar.gz rust-9aaf873396186ea0c980cbea7d3449a355ccfeea.zip | |
Reserve prefix lifetimes too
Diffstat (limited to 'compiler/rustc_lexer/src/lib.rs')
| -rw-r--r-- | compiler/rustc_lexer/src/lib.rs | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/compiler/rustc_lexer/src/lib.rs b/compiler/rustc_lexer/src/lib.rs index 31fdd2d7cec..be3e151ea61 100644 --- a/compiler/rustc_lexer/src/lib.rs +++ b/compiler/rustc_lexer/src/lib.rs @@ -91,6 +91,12 @@ pub enum TokenKind { /// tokens. UnknownPrefix, + /// An unknown prefix in a lifetime, like `'foo#`. + /// + /// Note that like above, only the `'` and prefix are included in the token + /// and not the separator. + UnknownPrefixLifetime, + /// Similar to the above, but *always* an error on every edition. This is used /// for emoji identifier recovery, as those are not meant to be ever accepted. InvalidPrefix, @@ -688,15 +694,17 @@ impl Cursor<'_> { self.bump(); self.eat_while(is_id_continue); - // Check if after skipping literal contents we've met a closing - // single quote (which means that user attempted to create a - // string with single quotes). - if self.first() == '\'' { - self.bump(); - let kind = Char { terminated: true }; - Literal { kind, suffix_start: self.pos_within_token() } - } else { - Lifetime { starts_with_number } + match self.first() { + // Check if after skipping literal contents we've met a closing + // single quote (which means that user attempted to create a + // string with single quotes). + '\'' => { + self.bump(); + let kind = Char { terminated: true }; + Literal { kind, suffix_start: self.pos_within_token() } + } + '#' if !starts_with_number => UnknownPrefixLifetime, + _ => Lifetime { starts_with_number }, } } |
