@@ -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 {
@@ -80,7 +58,7 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
80
58
81
59
fn eof_err ( & mut self ) -> PErr < ' psess > {
82
60
let msg = "this file contains an unclosed delimiter" ;
83
- let mut err = self . string_reader . dcx ( ) . struct_span_err ( self . token . span , msg) ;
61
+ let mut err = self . dcx ( ) . struct_span_err ( self . token . span , msg) ;
84
62
85
63
let unclosed_delimiter_show_limit = 5 ;
86
64
let len = usize:: min ( unclosed_delimiter_show_limit, self . diag_info . open_braces . len ( ) ) ;
@@ -110,7 +88,7 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
110
88
report_suspicious_mismatch_block (
111
89
& mut err,
112
90
& self . diag_info ,
113
- self . string_reader . psess . source_map ( ) ,
91
+ self . psess . source_map ( ) ,
114
92
* delim,
115
93
)
116
94
}
@@ -136,7 +114,7 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
136
114
137
115
// Expand to cover the entire delimited token tree.
138
116
let delim_span = DelimSpan :: from_pair ( pre_span, self . token . span ) ;
139
- let sm = self . string_reader . psess . source_map ( ) ;
117
+ let sm = self . psess . source_map ( ) ;
140
118
141
119
let close_spacing = match self . token . kind {
142
120
// Correct delimiter.
@@ -228,7 +206,7 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
228
206
// Will glue adjacent single-char tokens together if `glue` is set.
229
207
fn bump ( & mut self , glue : bool ) -> ( Token , Spacing ) {
230
208
let ( this_spacing, next_tok) = loop {
231
- let ( next_tok, is_next_tok_preceded_by_whitespace) = self . string_reader . next_token ( ) ;
209
+ let ( next_tok, is_next_tok_preceded_by_whitespace) = self . next_token_from_cursor ( ) ;
232
210
233
211
if is_next_tok_preceded_by_whitespace {
234
212
break ( Spacing :: Alone , next_tok) ;
@@ -256,7 +234,7 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
256
234
) -> Vec < PErr < ' psess > > {
257
235
// If there are unclosed delims, see if there are diff markers and if so, point them
258
236
// out instead of complaining about the unclosed delims.
259
- let mut parser = Parser :: new ( self . string_reader . psess , tts, None ) ;
237
+ let mut parser = Parser :: new ( self . psess , tts, None ) ;
260
238
let mut diff_errs = vec ! [ ] ;
261
239
// Suggest removing a `{` we think appears in an `if`/`while` condition.
262
240
// We want to suggest removing a `{` only if we think we're in an `if`/`while` condition,
@@ -314,14 +292,9 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
314
292
// An unexpected closing delimiter (i.e., there is no matching opening delimiter).
315
293
let token_str = token_to_string ( & self . token ) ;
316
294
let msg = format ! ( "unexpected closing delimiter: `{token_str}`" ) ;
317
- let mut err = self . string_reader . dcx ( ) . struct_span_err ( self . token . span , msg) ;
295
+ let mut err = self . dcx ( ) . struct_span_err ( self . token . span , msg) ;
318
296
319
- report_suspicious_mismatch_block (
320
- & mut err,
321
- & self . diag_info ,
322
- self . string_reader . psess . source_map ( ) ,
323
- delim,
324
- ) ;
297
+ report_suspicious_mismatch_block ( & mut err, & self . diag_info , self . psess . source_map ( ) , delim) ;
325
298
err. span_label ( self . token . span , "unexpected closing delimiter" ) ;
326
299
err
327
300
}
0 commit comments