@@ -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 {
@@ -80,7 +58,7 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
8058
8159 fn eof_err ( & mut self ) -> PErr < ' psess > {
8260 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) ;
8462
8563 let unclosed_delimiter_show_limit = 5 ;
8664 let len = usize:: min ( unclosed_delimiter_show_limit, self . diag_info . open_braces . len ( ) ) ;
@@ -110,7 +88,7 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
11088 report_suspicious_mismatch_block (
11189 & mut err,
11290 & self . diag_info ,
113- self . string_reader . psess . source_map ( ) ,
91+ self . psess . source_map ( ) ,
11492 * delim,
11593 )
11694 }
@@ -136,7 +114,7 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
136114
137115 // Expand to cover the entire delimited token tree.
138116 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 ( ) ;
140118
141119 let close_spacing = match self . token . kind {
142120 // Correct delimiter.
@@ -228,7 +206,7 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
228206 // Will glue adjacent single-char tokens together if `glue` is set.
229207 fn bump ( & mut self , glue : bool ) -> ( Token , Spacing ) {
230208 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 ( ) ;
232210
233211 if is_next_tok_preceded_by_whitespace {
234212 break ( Spacing :: Alone , next_tok) ;
@@ -256,7 +234,7 @@ impl<'psess, 'src> TokenTreesReader<'psess, 'src> {
256234 ) -> Vec < PErr < ' psess > > {
257235 // If there are unclosed delims, see if there are diff markers and if so, point them
258236 // 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 ) ;
260238 let mut diff_errs = vec ! [ ] ;
261239 // Suggest removing a `{` we think appears in an `if`/`while` condition.
262240 // 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> {
314292 // An unexpected closing delimiter (i.e., there is no matching opening delimiter).
315293 let token_str = token_to_string ( & self . token ) ;
316294 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) ;
318296
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) ;
325298 err. span_label ( self . token . span , "unexpected closing delimiter" ) ;
326299 err
327300 }
0 commit comments