@@ -7,7 +7,7 @@ use rustc_ast::ast::{self, AttrStyle};
77use rustc_ast:: token:: { self , CommentKind , Delimiter , Token , TokenKind } ;
88use rustc_ast:: tokenstream:: TokenStream ;
99use rustc_ast:: util:: unicode:: contains_text_flow_control_chars;
10- use rustc_errors:: { error_code, Applicability , Diagnostic , DiagnosticBuilder , StashKey } ;
10+ use rustc_errors:: { error_code, Applicability , DiagCtxt , Diagnostic , DiagnosticBuilder , StashKey } ;
1111use rustc_lexer:: unescape:: { self , EscapeError , Mode } ;
1212use rustc_lexer:: { Base , DocStyle , RawStrError } ;
1313use rustc_lexer:: { Cursor , LiteralKind } ;
@@ -108,6 +108,10 @@ struct StringReader<'a> {
108108}
109109
110110impl < ' a > StringReader < ' a > {
111+ pub fn dcx ( & self ) -> & ' a DiagCtxt {
112+ & self . sess . dcx
113+ }
114+
111115 fn mk_sp ( & self , lo : BytePos , hi : BytePos ) -> Span {
112116 self . override_span . unwrap_or_else ( || Span :: with_root_ctxt ( lo, hi) )
113117 }
@@ -174,7 +178,7 @@ impl<'a> StringReader<'a> {
174178 let span = self . mk_sp ( start, self . pos ) ;
175179 self . sess . symbol_gallery . insert ( sym, span) ;
176180 if !sym. can_be_raw ( ) {
177- self . sess . emit_err ( errors:: CannotBeRawIdent { span, ident : sym } ) ;
181+ self . dcx ( ) . emit_err ( errors:: CannotBeRawIdent { span, ident : sym } ) ;
178182 }
179183 self . sess . raw_identifier_spans . push ( span) ;
180184 token:: Ident ( sym, true )
@@ -245,7 +249,7 @@ impl<'a> StringReader<'a> {
245249 let lifetime_name = self . str_from ( start) ;
246250 if starts_with_number {
247251 let span = self . mk_sp ( start, self . pos ) ;
248- let mut diag = self . sess . struct_err ( "lifetimes cannot start with a number" ) ;
252+ let mut diag = self . dcx ( ) . struct_err ( "lifetimes cannot start with a number" ) ;
249253 diag. set_span ( span) ;
250254 diag. stash ( span, StashKey :: LifetimeIsChar ) ;
251255 }
@@ -306,7 +310,7 @@ impl<'a> StringReader<'a> {
306310 // fancier error recovery to it, as there will be less overall work to do this
307311 // way.
308312 let ( token, sugg) = unicode_chars:: check_for_substitution ( self , start, c, repeats+1 ) ;
309- self . sess . emit_err ( errors:: UnknownTokenStart {
313+ self . dcx ( ) . emit_err ( errors:: UnknownTokenStart {
310314 span : self . mk_sp ( start, self . pos + Pos :: from_usize ( repeats * c. len_utf8 ( ) ) ) ,
311315 escaped : escaped_char ( c) ,
312316 sugg,
@@ -382,7 +386,7 @@ impl<'a> StringReader<'a> {
382386 content_start + BytePos ( idx as u32 + 1 ) ,
383387 ) ;
384388 let block = matches ! ( comment_kind, CommentKind :: Block ) ;
385- self . sess . emit_err ( errors:: CrDocComment { span, block } ) ;
389+ self . dcx ( ) . emit_err ( errors:: CrDocComment { span, block } ) ;
386390 }
387391 }
388392
@@ -481,7 +485,7 @@ impl<'a> StringReader<'a> {
481485 rustc_lexer:: LiteralKind :: Int { base, empty_int } => {
482486 if empty_int {
483487 let span = self . mk_sp ( start, end) ;
484- self . sess . emit_err ( errors:: NoDigitsLiteral { span } ) ;
488+ self . dcx ( ) . emit_err ( errors:: NoDigitsLiteral { span } ) ;
485489 ( token:: Integer , sym:: integer ( 0 ) )
486490 } else {
487491 if matches ! ( base, Base :: Binary | Base :: Octal ) {
@@ -493,7 +497,7 @@ impl<'a> StringReader<'a> {
493497 start + BytePos :: from_usize ( 2 + idx + c. len_utf8 ( ) ) ,
494498 ) ;
495499 if c != '_' && c. to_digit ( base) . is_none ( ) {
496- self . sess . emit_err ( errors:: InvalidDigitLiteral { span, base } ) ;
500+ self . dcx ( ) . emit_err ( errors:: InvalidDigitLiteral { span, base } ) ;
497501 }
498502 }
499503 }
@@ -503,7 +507,7 @@ impl<'a> StringReader<'a> {
503507 rustc_lexer:: LiteralKind :: Float { base, empty_exponent } => {
504508 if empty_exponent {
505509 let span = self . mk_sp ( start, self . pos ) ;
506- self . sess . emit_err ( errors:: EmptyExponentFloat { span } ) ;
510+ self . dcx ( ) . emit_err ( errors:: EmptyExponentFloat { span } ) ;
507511 }
508512 let base = match base {
509513 Base :: Hexadecimal => Some ( "hexadecimal" ) ,
@@ -513,7 +517,7 @@ impl<'a> StringReader<'a> {
513517 } ;
514518 if let Some ( base) = base {
515519 let span = self . mk_sp ( start, end) ;
516- self . sess . emit_err ( errors:: FloatLiteralUnsupportedBase { span, base } ) ;
520+ self . dcx ( ) . emit_err ( errors:: FloatLiteralUnsupportedBase { span, base } ) ;
517521 }
518522 ( token:: Float , self . symbol_from_to ( start, end) )
519523 }
@@ -676,7 +680,7 @@ impl<'a> StringReader<'a> {
676680 } else {
677681 None
678682 } ;
679- self . sess . emit_err ( errors:: UnknownPrefix { span : prefix_span, prefix, sugg } ) ;
683+ self . dcx ( ) . emit_err ( errors:: UnknownPrefix { span : prefix_span, prefix, sugg } ) ;
680684 } else {
681685 // Before Rust 2021, only emit a lint for migration.
682686 self . sess . buffer_lint_with_diagnostic (
@@ -690,7 +694,7 @@ impl<'a> StringReader<'a> {
690694 }
691695
692696 fn report_too_many_hashes ( & self , start : BytePos , num : u32 ) -> ! {
693- self . sess . emit_fatal ( errors:: TooManyHashes { span : self . mk_sp ( start, self . pos ) , num } ) ;
697+ self . dcx ( ) . emit_fatal ( errors:: TooManyHashes { span : self . mk_sp ( start, self . pos ) , num } ) ;
694698 }
695699
696700 fn cook_common (
0 commit comments