@@ -4,41 +4,19 @@ use rustc_ast_pretty::pprust::token_to_string;
44use rustc_errors:: { Applicability , PErr } ;
55use rustc_span:: symbol:: kw;
66
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 } ;
119use crate :: Parser ;
1210
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 > {
3412 // Lex into a token stream. The `Spacing` in the result is that of the
3513 // opening delimiter.
36- fn lex_token_trees (
14+ pub ( super ) fn lex_token_trees (
3715 & mut self ,
3816 is_delimited : bool ,
3917 ) -> ( Spacing , TokenStream , Result < ( ) , Vec < PErr < ' psess > > > ) {
4018 // Move past the opening delimiter.
41- let ( _ , open_spacing) = self . bump ( false ) ;
19+ let open_spacing = self . bump ( false ) . 1 ;
4220
4321 let mut buf = Vec :: new ( ) ;
4422 loop {
@@ -72,7 +50,7 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
7250
7351 fn eof_err ( & mut self ) -> PErr < ' psess > {
7452 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) ;
7654
7755 let unclosed_delimiter_show_limit = 5 ;
7856 let len = usize:: min ( unclosed_delimiter_show_limit, self . diag_info . open_braces . len ( ) ) ;
@@ -102,7 +80,7 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
10280 report_suspicious_mismatch_block (
10381 & mut err,
10482 & self . diag_info ,
105- self . string_reader . psess . source_map ( ) ,
83+ self . psess . source_map ( ) ,
10684 * delim,
10785 )
10886 }
@@ -128,7 +106,7 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
128106
129107 // Expand to cover the entire delimited token tree.
130108 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 ( ) ;
132110
133111 let close_spacing = match self . token . kind {
134112 // Correct delimiter.
@@ -220,7 +198,7 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
220198 // Will glue adjacent single-char tokens together if `glue` is set.
221199 fn bump ( & mut self , glue : bool ) -> ( Token , Spacing ) {
222200 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 ( ) ;
224202
225203 if is_next_tok_preceded_by_whitespace {
226204 break ( Spacing :: Alone , next_tok) ;
@@ -248,7 +226,7 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
248226 ) -> Vec < PErr < ' psess > > {
249227 // If there are unclosed delims, see if there are diff markers and if so, point them
250228 // 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 ) ;
252230 let mut diff_errs = vec ! [ ] ;
253231 // Suggest removing a `{` we think appears in an `if`/`while` condition.
254232 // 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> {
306284 // An unexpected closing delimiter (i.e., there is no matching opening delimiter).
307285 let token_str = token_to_string ( & self . token ) ;
308286 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) ;
310288
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) ;
317290 err. span_label ( self . token . span , "unexpected closing delimiter" ) ;
318291 err
319292 }
0 commit comments