@@ -7,7 +7,7 @@ use rustc_ast::ast::{self, AttrStyle};
7
7
use rustc_ast:: token:: { self , CommentKind , Delimiter , Token , TokenKind } ;
8
8
use rustc_ast:: tokenstream:: TokenStream ;
9
9
use 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 } ;
11
11
use rustc_lexer:: unescape:: { self , EscapeError , Mode } ;
12
12
use rustc_lexer:: { Base , DocStyle , RawStrError } ;
13
13
use rustc_lexer:: { Cursor , LiteralKind } ;
@@ -108,6 +108,10 @@ struct StringReader<'a> {
108
108
}
109
109
110
110
impl < ' a > StringReader < ' a > {
111
+ pub fn dcx ( & self ) -> & ' a DiagCtxt {
112
+ & self . sess . dcx
113
+ }
114
+
111
115
fn mk_sp ( & self , lo : BytePos , hi : BytePos ) -> Span {
112
116
self . override_span . unwrap_or_else ( || Span :: with_root_ctxt ( lo, hi) )
113
117
}
@@ -174,7 +178,7 @@ impl<'a> StringReader<'a> {
174
178
let span = self . mk_sp ( start, self . pos ) ;
175
179
self . sess . symbol_gallery . insert ( sym, span) ;
176
180
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 } ) ;
178
182
}
179
183
self . sess . raw_identifier_spans . push ( span) ;
180
184
token:: Ident ( sym, true )
@@ -245,7 +249,7 @@ impl<'a> StringReader<'a> {
245
249
let lifetime_name = self . str_from ( start) ;
246
250
if starts_with_number {
247
251
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" ) ;
249
253
diag. set_span ( span) ;
250
254
diag. stash ( span, StashKey :: LifetimeIsChar ) ;
251
255
}
@@ -306,7 +310,7 @@ impl<'a> StringReader<'a> {
306
310
// fancier error recovery to it, as there will be less overall work to do this
307
311
// way.
308
312
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 {
310
314
span : self . mk_sp ( start, self . pos + Pos :: from_usize ( repeats * c. len_utf8 ( ) ) ) ,
311
315
escaped : escaped_char ( c) ,
312
316
sugg,
@@ -382,7 +386,7 @@ impl<'a> StringReader<'a> {
382
386
content_start + BytePos ( idx as u32 + 1 ) ,
383
387
) ;
384
388
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 } ) ;
386
390
}
387
391
}
388
392
@@ -481,7 +485,7 @@ impl<'a> StringReader<'a> {
481
485
rustc_lexer:: LiteralKind :: Int { base, empty_int } => {
482
486
if empty_int {
483
487
let span = self . mk_sp ( start, end) ;
484
- self . sess . emit_err ( errors:: NoDigitsLiteral { span } ) ;
488
+ self . dcx ( ) . emit_err ( errors:: NoDigitsLiteral { span } ) ;
485
489
( token:: Integer , sym:: integer ( 0 ) )
486
490
} else {
487
491
if matches ! ( base, Base :: Binary | Base :: Octal ) {
@@ -493,7 +497,7 @@ impl<'a> StringReader<'a> {
493
497
start + BytePos :: from_usize ( 2 + idx + c. len_utf8 ( ) ) ,
494
498
) ;
495
499
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 } ) ;
497
501
}
498
502
}
499
503
}
@@ -503,7 +507,7 @@ impl<'a> StringReader<'a> {
503
507
rustc_lexer:: LiteralKind :: Float { base, empty_exponent } => {
504
508
if empty_exponent {
505
509
let span = self . mk_sp ( start, self . pos ) ;
506
- self . sess . emit_err ( errors:: EmptyExponentFloat { span } ) ;
510
+ self . dcx ( ) . emit_err ( errors:: EmptyExponentFloat { span } ) ;
507
511
}
508
512
let base = match base {
509
513
Base :: Hexadecimal => Some ( "hexadecimal" ) ,
@@ -513,7 +517,7 @@ impl<'a> StringReader<'a> {
513
517
} ;
514
518
if let Some ( base) = base {
515
519
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 } ) ;
517
521
}
518
522
( token:: Float , self . symbol_from_to ( start, end) )
519
523
}
@@ -676,7 +680,7 @@ impl<'a> StringReader<'a> {
676
680
} else {
677
681
None
678
682
} ;
679
- self . sess . emit_err ( errors:: UnknownPrefix { span : prefix_span, prefix, sugg } ) ;
683
+ self . dcx ( ) . emit_err ( errors:: UnknownPrefix { span : prefix_span, prefix, sugg } ) ;
680
684
} else {
681
685
// Before Rust 2021, only emit a lint for migration.
682
686
self . sess . buffer_lint_with_diagnostic (
@@ -690,7 +694,7 @@ impl<'a> StringReader<'a> {
690
694
}
691
695
692
696
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 } ) ;
694
698
}
695
699
696
700
fn cook_common (
0 commit comments