@@ -4,41 +4,19 @@ use rustc_ast_pretty::pprust::token_to_string;
4
4
use rustc_errors:: { Applicability , PErr } ;
5
5
use rustc_span:: symbol:: kw;
6
6
7
- use super :: diagnostics:: {
8
- TokenTreeDiagInfo , report_suspicious_mismatch_block, same_indentation_level,
9
- } ;
10
- use super :: { StringReader , UnmatchedDelim } ;
7
+ use super :: diagnostics:: { report_suspicious_mismatch_block, same_indentation_level} ;
8
+ use super :: { Lexer , UnmatchedDelim } ;
11
9
use crate :: Parser ;
12
10
13
- pub ( super ) struct TokenTreesReader < ' psess , ' src > {
14
- string_reader : StringReader < ' psess , ' src > ,
15
- /// The "next" token, which has been obtained from the `StringReader` but
16
- /// not yet handled by the `TokenTreesReader`.
17
- token : Token ,
18
- diag_info : TokenTreeDiagInfo ,
19
- }
20
-
21
- impl < ' psess , ' src > TokenTreesReader < ' psess , ' src > {
22
- pub ( super ) fn lex_all_token_trees (
23
- string_reader : StringReader < ' psess , ' src > ,
24
- ) -> ( TokenStream , Result < ( ) , Vec < PErr < ' psess > > > , Vec < UnmatchedDelim > ) {
25
- let mut tt_reader = TokenTreesReader {
26
- string_reader,
27
- token : Token :: dummy ( ) ,
28
- diag_info : TokenTreeDiagInfo :: default ( ) ,
29
- } ;
30
- let ( _open_spacing, stream, res) = tt_reader. lex_token_trees ( /* is_delimited */ false ) ;
31
- ( stream, res, tt_reader. diag_info . unmatched_delims )
32
- }
33
-
11
+ impl < ' psess , ' src > Lexer < ' psess , ' src > {
34
12
// Lex into a token stream. The `Spacing` in the result is that of the
35
13
// opening delimiter.
36
- fn lex_token_trees (
14
+ pub ( super ) fn lex_token_trees (
37
15
& mut self ,
38
16
is_delimited : bool ,
39
17
) -> ( Spacing , TokenStream , Result < ( ) , Vec < PErr < ' psess > > > ) {
40
18
// Move past the opening delimiter.
41
- let ( _ , open_spacing) = self . bump ( false ) ;
19
+ let open_spacing = self . bump ( false ) . 1 ;
42
20
43
21
let mut buf = Vec :: new ( ) ;
44
22
loop {
@@ -72,7 +50,7 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
72
50
73
51
fn eof_err ( & mut self ) -> PErr < ' psess > {
74
52
let msg = "this file contains an unclosed delimiter" ;
75
- let mut err = self . string_reader . dcx ( ) . struct_span_err ( self . token . span , msg) ;
53
+ let mut err = self . dcx ( ) . struct_span_err ( self . token . span , msg) ;
76
54
77
55
let unclosed_delimiter_show_limit = 5 ;
78
56
let len = usize:: min ( unclosed_delimiter_show_limit, self . diag_info . open_braces . len ( ) ) ;
@@ -102,7 +80,7 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
102
80
report_suspicious_mismatch_block (
103
81
& mut err,
104
82
& self . diag_info ,
105
- self . string_reader . psess . source_map ( ) ,
83
+ self . psess . source_map ( ) ,
106
84
* delim,
107
85
)
108
86
}
@@ -128,7 +106,7 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
128
106
129
107
// Expand to cover the entire delimited token tree.
130
108
let delim_span = DelimSpan :: from_pair ( pre_span, self . token . span ) ;
131
- let sm = self . string_reader . psess . source_map ( ) ;
109
+ let sm = self . psess . source_map ( ) ;
132
110
133
111
let close_spacing = match self . token . kind {
134
112
// Correct delimiter.
@@ -220,7 +198,7 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
220
198
// Will glue adjacent single-char tokens together if `glue` is set.
221
199
fn bump ( & mut self , glue : bool ) -> ( Token , Spacing ) {
222
200
let ( this_spacing, next_tok) = loop {
223
- let ( next_tok, is_next_tok_preceded_by_whitespace) = self . string_reader . next_token ( ) ;
201
+ let ( next_tok, is_next_tok_preceded_by_whitespace) = self . next_token_from_cursor ( ) ;
224
202
225
203
if is_next_tok_preceded_by_whitespace {
226
204
break ( Spacing :: Alone , next_tok) ;
@@ -248,7 +226,7 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
248
226
) -> Vec < PErr < ' psess > > {
249
227
// If there are unclosed delims, see if there are diff markers and if so, point them
250
228
// out instead of complaining about the unclosed delims.
251
- let mut parser = Parser :: new ( self . string_reader . psess , tts, None ) ;
229
+ let mut parser = Parser :: new ( self . psess , tts, None ) ;
252
230
let mut diff_errs = vec ! [ ] ;
253
231
// Suggest removing a `{` we think appears in an `if`/`while` condition.
254
232
// We want to suggest removing a `{` only if we think we're in an `if`/`while` condition,
@@ -306,14 +284,9 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
306
284
// An unexpected closing delimiter (i.e., there is no matching opening delimiter).
307
285
let token_str = token_to_string ( & self . token ) ;
308
286
let msg = format ! ( "unexpected closing delimiter: `{token_str}`" ) ;
309
- let mut err = self . string_reader . dcx ( ) . struct_span_err ( self . token . span , msg) ;
287
+ let mut err = self . dcx ( ) . struct_span_err ( self . token . span , msg) ;
310
288
311
- report_suspicious_mismatch_block (
312
- & mut err,
313
- & self . diag_info ,
314
- self . string_reader . psess . source_map ( ) ,
315
- delim,
316
- ) ;
289
+ report_suspicious_mismatch_block ( & mut err, & self . diag_info , self . psess . source_map ( ) , delim) ;
317
290
err. span_label ( self . token . span , "unexpected closing delimiter" ) ;
318
291
err
319
292
}
0 commit comments