@@ -8,7 +8,7 @@ use rustc_ast::token::{self, CommentKind, Delimiter, Token, TokenKind};
88use rustc_ast:: tokenstream:: TokenStream ;
99use rustc_ast:: util:: unicode:: contains_text_flow_control_chars;
1010use rustc_errors:: {
11- error_code, Applicability , Diagnostic , DiagnosticBuilder , FatalAbort , StashKey ,
11+ error_code, Applicability , DiagCtxt , Diagnostic , DiagnosticBuilder , FatalAbort , StashKey ,
1212} ;
1313use rustc_lexer:: unescape:: { self , EscapeError , Mode } ;
1414use rustc_lexer:: { Base , DocStyle , RawStrError } ;
@@ -110,6 +110,10 @@ struct StringReader<'a> {
110110}
111111
112112impl < ' a > StringReader < ' a > {
113+ pub fn dcx ( & self ) -> & ' a DiagCtxt {
114+ & self . sess . dcx
115+ }
116+
113117 fn mk_sp ( & self , lo : BytePos , hi : BytePos ) -> Span {
114118 self . override_span . unwrap_or_else ( || Span :: with_root_ctxt ( lo, hi) )
115119 }
@@ -176,7 +180,7 @@ impl<'a> StringReader<'a> {
176180 let span = self . mk_sp ( start, self . pos ) ;
177181 self . sess . symbol_gallery . insert ( sym, span) ;
178182 if !sym. can_be_raw ( ) {
179- self . sess . emit_err ( errors:: CannotBeRawIdent { span, ident : sym } ) ;
183+ self . dcx ( ) . emit_err ( errors:: CannotBeRawIdent { span, ident : sym } ) ;
180184 }
181185 self . sess . raw_identifier_spans . push ( span) ;
182186 token:: Ident ( sym, true )
@@ -247,7 +251,7 @@ impl<'a> StringReader<'a> {
247251 let lifetime_name = self . str_from ( start) ;
248252 if starts_with_number {
249253 let span = self . mk_sp ( start, self . pos ) ;
250- let mut diag = self . sess . struct_err ( "lifetimes cannot start with a number" ) ;
254+ let mut diag = self . dcx ( ) . struct_err ( "lifetimes cannot start with a number" ) ;
251255 diag. set_span ( span) ;
252256 diag. stash ( span, StashKey :: LifetimeIsChar ) ;
253257 }
@@ -308,7 +312,7 @@ impl<'a> StringReader<'a> {
308312 // fancier error recovery to it, as there will be less overall work to do this
309313 // way.
310314 let ( token, sugg) = unicode_chars:: check_for_substitution ( self , start, c, repeats+1 ) ;
311- self . sess . emit_err ( errors:: UnknownTokenStart {
315+ self . dcx ( ) . emit_err ( errors:: UnknownTokenStart {
312316 span : self . mk_sp ( start, self . pos + Pos :: from_usize ( repeats * c. len_utf8 ( ) ) ) ,
313317 escaped : escaped_char ( c) ,
314318 sugg,
@@ -384,7 +388,7 @@ impl<'a> StringReader<'a> {
384388 content_start + BytePos ( idx as u32 + 1 ) ,
385389 ) ;
386390 let block = matches ! ( comment_kind, CommentKind :: Block ) ;
387- self . sess . emit_err ( errors:: CrDocComment { span, block } ) ;
391+ self . dcx ( ) . emit_err ( errors:: CrDocComment { span, block } ) ;
388392 }
389393 }
390394
@@ -483,7 +487,7 @@ impl<'a> StringReader<'a> {
483487 rustc_lexer:: LiteralKind :: Int { base, empty_int } => {
484488 if empty_int {
485489 let span = self . mk_sp ( start, end) ;
486- self . sess . emit_err ( errors:: NoDigitsLiteral { span } ) ;
490+ self . dcx ( ) . emit_err ( errors:: NoDigitsLiteral { span } ) ;
487491 ( token:: Integer , sym:: integer ( 0 ) )
488492 } else {
489493 if matches ! ( base, Base :: Binary | Base :: Octal ) {
@@ -495,7 +499,7 @@ impl<'a> StringReader<'a> {
495499 start + BytePos :: from_usize ( 2 + idx + c. len_utf8 ( ) ) ,
496500 ) ;
497501 if c != '_' && c. to_digit ( base) . is_none ( ) {
498- self . sess . emit_err ( errors:: InvalidDigitLiteral { span, base } ) ;
502+ self . dcx ( ) . emit_err ( errors:: InvalidDigitLiteral { span, base } ) ;
499503 }
500504 }
501505 }
@@ -505,7 +509,7 @@ impl<'a> StringReader<'a> {
505509 rustc_lexer:: LiteralKind :: Float { base, empty_exponent } => {
506510 if empty_exponent {
507511 let span = self . mk_sp ( start, self . pos ) ;
508- self . sess . emit_err ( errors:: EmptyExponentFloat { span } ) ;
512+ self . dcx ( ) . emit_err ( errors:: EmptyExponentFloat { span } ) ;
509513 }
510514 let base = match base {
511515 Base :: Hexadecimal => Some ( "hexadecimal" ) ,
@@ -515,7 +519,7 @@ impl<'a> StringReader<'a> {
515519 } ;
516520 if let Some ( base) = base {
517521 let span = self . mk_sp ( start, end) ;
518- self . sess . emit_err ( errors:: FloatLiteralUnsupportedBase { span, base } ) ;
522+ self . dcx ( ) . emit_err ( errors:: FloatLiteralUnsupportedBase { span, base } ) ;
519523 }
520524 ( token:: Float , self . symbol_from_to ( start, end) )
521525 }
@@ -678,7 +682,7 @@ impl<'a> StringReader<'a> {
678682 } else {
679683 None
680684 } ;
681- self . sess . emit_err ( errors:: UnknownPrefix { span : prefix_span, prefix, sugg } ) ;
685+ self . dcx ( ) . emit_err ( errors:: UnknownPrefix { span : prefix_span, prefix, sugg } ) ;
682686 } else {
683687 // Before Rust 2021, only emit a lint for migration.
684688 self . sess . buffer_lint_with_diagnostic (
@@ -692,7 +696,7 @@ impl<'a> StringReader<'a> {
692696 }
693697
694698 fn report_too_many_hashes ( & self , start : BytePos , num : u32 ) -> ! {
695- self . sess . emit_fatal ( errors:: TooManyHashes { span : self . mk_sp ( start, self . pos ) , num } ) ;
699+ self . dcx ( ) . emit_fatal ( errors:: TooManyHashes { span : self . mk_sp ( start, self . pos ) , num } ) ;
696700 }
697701
698702 fn cook_common (
0 commit comments