diff options
Diffstat (limited to 'compiler/rustc_parse/src/lexer/mod.rs')
| -rw-r--r-- | compiler/rustc_parse/src/lexer/mod.rs | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/compiler/rustc_parse/src/lexer/mod.rs b/compiler/rustc_parse/src/lexer/mod.rs index 59bc0eeb1c5..a0c4d83a63f 100644 --- a/compiler/rustc_parse/src/lexer/mod.rs +++ b/compiler/rustc_parse/src/lexer/mod.rs @@ -8,7 +8,7 @@ use rustc_ast::token::{self, CommentKind, Delimiter, Token, TokenKind}; use rustc_ast::tokenstream::TokenStream; use rustc_ast::util::unicode::contains_text_flow_control_chars; use rustc_errors::{ - error_code, Applicability, Diagnostic, DiagnosticBuilder, FatalAbort, StashKey, + error_code, Applicability, DiagCtxt, Diagnostic, DiagnosticBuilder, FatalAbort, StashKey, }; use rustc_lexer::unescape::{self, EscapeError, Mode}; use rustc_lexer::{Base, DocStyle, RawStrError}; @@ -110,6 +110,10 @@ struct StringReader<'a> { } impl<'a> StringReader<'a> { + pub fn dcx(&self) -> &'a DiagCtxt { + &self.sess.dcx + } + fn mk_sp(&self, lo: BytePos, hi: BytePos) -> Span { self.override_span.unwrap_or_else(|| Span::with_root_ctxt(lo, hi)) } @@ -176,7 +180,7 @@ impl<'a> StringReader<'a> { let span = self.mk_sp(start, self.pos); self.sess.symbol_gallery.insert(sym, span); if !sym.can_be_raw() { - self.sess.emit_err(errors::CannotBeRawIdent { span, ident: sym }); + self.dcx().emit_err(errors::CannotBeRawIdent { span, ident: sym }); } self.sess.raw_identifier_spans.push(span); token::Ident(sym, true) @@ -247,7 +251,7 @@ impl<'a> StringReader<'a> { let lifetime_name = self.str_from(start); if starts_with_number { let span = self.mk_sp(start, self.pos); - let mut diag = self.sess.struct_err("lifetimes cannot start with a number"); + let mut diag = self.dcx().struct_err("lifetimes cannot start with a number"); diag.set_span(span); diag.stash(span, StashKey::LifetimeIsChar); } @@ -308,7 +312,7 @@ impl<'a> StringReader<'a> { // fancier error recovery to it, as there will be less overall work to do this // way. let (token, sugg) = unicode_chars::check_for_substitution(self, start, c, repeats+1); - self.sess.emit_err(errors::UnknownTokenStart { + self.dcx().emit_err(errors::UnknownTokenStart { span: self.mk_sp(start, self.pos + Pos::from_usize(repeats * c.len_utf8())), escaped: escaped_char(c), sugg, @@ -384,7 +388,7 @@ impl<'a> StringReader<'a> { content_start + BytePos(idx as u32 + 1), ); let block = matches!(comment_kind, CommentKind::Block); - self.sess.emit_err(errors::CrDocComment { span, block }); + self.dcx().emit_err(errors::CrDocComment { span, block }); } } @@ -483,7 +487,7 @@ impl<'a> StringReader<'a> { rustc_lexer::LiteralKind::Int { base, empty_int } => { if empty_int { let span = self.mk_sp(start, end); - self.sess.emit_err(errors::NoDigitsLiteral { span }); + self.dcx().emit_err(errors::NoDigitsLiteral { span }); (token::Integer, sym::integer(0)) } else { if matches!(base, Base::Binary | Base::Octal) { @@ -495,7 +499,7 @@ impl<'a> StringReader<'a> { start + BytePos::from_usize(2 + idx + c.len_utf8()), ); if c != '_' && c.to_digit(base).is_none() { - self.sess.emit_err(errors::InvalidDigitLiteral { span, base }); + self.dcx().emit_err(errors::InvalidDigitLiteral { span, base }); } } } @@ -505,7 +509,7 @@ impl<'a> StringReader<'a> { rustc_lexer::LiteralKind::Float { base, empty_exponent } => { if empty_exponent { let span = self.mk_sp(start, self.pos); - self.sess.emit_err(errors::EmptyExponentFloat { span }); + self.dcx().emit_err(errors::EmptyExponentFloat { span }); } let base = match base { Base::Hexadecimal => Some("hexadecimal"), @@ -515,7 +519,7 @@ impl<'a> StringReader<'a> { }; if let Some(base) = base { let span = self.mk_sp(start, end); - self.sess.emit_err(errors::FloatLiteralUnsupportedBase { span, base }); + self.dcx().emit_err(errors::FloatLiteralUnsupportedBase { span, base }); } (token::Float, self.symbol_from_to(start, end)) } @@ -678,7 +682,7 @@ impl<'a> StringReader<'a> { } else { None }; - self.sess.emit_err(errors::UnknownPrefix { span: prefix_span, prefix, sugg }); + self.dcx().emit_err(errors::UnknownPrefix { span: prefix_span, prefix, sugg }); } else { // Before Rust 2021, only emit a lint for migration. self.sess.buffer_lint_with_diagnostic( @@ -692,7 +696,7 @@ impl<'a> StringReader<'a> { } fn report_too_many_hashes(&self, start: BytePos, num: u32) -> ! { - self.sess.emit_fatal(errors::TooManyHashes { span: self.mk_sp(start, self.pos), num }); + self.dcx().emit_fatal(errors::TooManyHashes { span: self.mk_sp(start, self.pos), num }); } fn cook_common( |
