@@ -2,15 +2,15 @@ use syntax_pos::Span;
22
33use crate :: print:: pprust:: token_to_string;
44use crate :: parse:: lexer:: { StringReader , UnmatchedBrace } ;
5- use crate :: parse:: { token, PResult } ;
5+ use crate :: parse:: token:: { self , Token } ;
6+ use crate :: parse:: PResult ;
67use crate :: tokenstream:: { DelimSpan , IsJoint :: * , TokenStream , TokenTree , TreeAndJoint } ;
78
89impl < ' a > StringReader < ' a > {
910 crate fn into_token_trees ( self ) -> ( PResult < ' a , TokenStream > , Vec < UnmatchedBrace > ) {
1011 let mut tt_reader = TokenTreesReader {
1112 string_reader : self ,
12- token : token:: Eof ,
13- span : syntax_pos:: DUMMY_SP ,
13+ token : token:: Token { kind : token:: Eof , span : syntax_pos:: DUMMY_SP } ,
1414 open_braces : Vec :: new ( ) ,
1515 unmatched_braces : Vec :: new ( ) ,
1616 matching_delim_spans : Vec :: new ( ) ,
@@ -23,8 +23,7 @@ impl<'a> StringReader<'a> {
2323
2424struct TokenTreesReader < ' a > {
2525 string_reader : StringReader < ' a > ,
26- token : token:: TokenKind ,
27- span : Span ,
26+ token : Token ,
2827 /// Stack of open delimiters and their spans. Used for error message.
2928 open_braces : Vec < ( token:: DelimToken , Span ) > ,
3029 unmatched_braces : Vec < UnmatchedBrace > ,
@@ -52,7 +51,7 @@ impl<'a> TokenTreesReader<'a> {
5251 fn parse_token_trees_until_close_delim ( & mut self ) -> TokenStream {
5352 let mut tts = vec ! [ ] ;
5453 loop {
55- if let token:: CloseDelim ( ..) = self . token {
54+ if let token:: CloseDelim ( ..) = self . token . kind {
5655 return TokenStream :: new ( tts) ;
5756 }
5857
@@ -68,11 +67,11 @@ impl<'a> TokenTreesReader<'a> {
6867
6968 fn parse_token_tree ( & mut self ) -> PResult < ' a , TreeAndJoint > {
7069 let sm = self . string_reader . sess . source_map ( ) ;
71- match self . token {
70+ match self . token . kind {
7271 token:: Eof => {
7372 let msg = "this file contains an un-closed delimiter" ;
7473 let mut err = self . string_reader . sess . span_diagnostic
75- . struct_span_err ( self . span , msg) ;
74+ . struct_span_err ( self . token . span , msg) ;
7675 for & ( _, sp) in & self . open_braces {
7776 err. span_label ( sp, "un-closed delimiter" ) ;
7877 }
@@ -102,10 +101,10 @@ impl<'a> TokenTreesReader<'a> {
102101 } ,
103102 token:: OpenDelim ( delim) => {
104103 // The span for beginning of the delimited section
105- let pre_span = self . span ;
104+ let pre_span = self . token . span ;
106105
107106 // Parse the open delimiter.
108- self . open_braces . push ( ( delim, self . span ) ) ;
107+ self . open_braces . push ( ( delim, self . token . span ) ) ;
109108 self . real_token ( ) ;
110109
111110 // Parse the token trees within the delimiters.
@@ -114,9 +113,9 @@ impl<'a> TokenTreesReader<'a> {
114113 let tts = self . parse_token_trees_until_close_delim ( ) ;
115114
116115 // Expand to cover the entire delimited token tree
117- let delim_span = DelimSpan :: from_pair ( pre_span, self . span ) ;
116+ let delim_span = DelimSpan :: from_pair ( pre_span, self . token . span ) ;
118117
119- match self . token {
118+ match self . token . kind {
120119 // Correct delimiter.
121120 token:: CloseDelim ( d) if d == delim => {
122121 let ( open_brace, open_brace_span) = self . open_braces . pop ( ) . unwrap ( ) ;
@@ -126,7 +125,7 @@ impl<'a> TokenTreesReader<'a> {
126125 self . matching_delim_spans . clear ( ) ;
127126 } else {
128127 self . matching_delim_spans . push (
129- ( open_brace, open_brace_span, self . span ) ,
128+ ( open_brace, open_brace_span, self . token . span ) ,
130129 ) ;
131130 }
132131 // Parse the close delimiter.
@@ -136,16 +135,16 @@ impl<'a> TokenTreesReader<'a> {
136135 token:: CloseDelim ( other) => {
137136 let mut unclosed_delimiter = None ;
138137 let mut candidate = None ;
139- if self . last_unclosed_found_span != Some ( self . span ) {
138+ if self . last_unclosed_found_span != Some ( self . token . span ) {
140139 // do not complain about the same unclosed delimiter multiple times
141- self . last_unclosed_found_span = Some ( self . span ) ;
140+ self . last_unclosed_found_span = Some ( self . token . span ) ;
142141 // This is a conservative error: only report the last unclosed
143142 // delimiter. The previous unclosed delimiters could actually be
144143 // closed! The parser just hasn't gotten to them yet.
145144 if let Some ( & ( _, sp) ) = self . open_braces . last ( ) {
146145 unclosed_delimiter = Some ( sp) ;
147146 } ;
148- if let Some ( current_padding) = sm. span_to_margin ( self . span ) {
147+ if let Some ( current_padding) = sm. span_to_margin ( self . token . span ) {
149148 for ( brace, brace_span) in & self . open_braces {
150149 if let Some ( padding) = sm. span_to_margin ( * brace_span) {
151150 // high likelihood of these two corresponding
@@ -159,7 +158,7 @@ impl<'a> TokenTreesReader<'a> {
159158 self . unmatched_braces . push ( UnmatchedBrace {
160159 expected_delim : tok,
161160 found_delim : other,
162- found_span : self . span ,
161+ found_span : self . token . span ,
163162 unclosed_span : unclosed_delimiter,
164163 candidate_span : candidate,
165164 } ) ;
@@ -198,12 +197,12 @@ impl<'a> TokenTreesReader<'a> {
198197 let token_str = token_to_string ( & self . token ) ;
199198 let msg = format ! ( "unexpected close delimiter: `{}`" , token_str) ;
200199 let mut err = self . string_reader . sess . span_diagnostic
201- . struct_span_err ( self . span , & msg) ;
202- err. span_label ( self . span , "unexpected close delimiter" ) ;
200+ . struct_span_err ( self . token . span , & msg) ;
201+ err. span_label ( self . token . span , "unexpected close delimiter" ) ;
203202 Err ( err)
204203 } ,
205204 _ => {
206- let tt = TokenTree :: token ( self . span , self . token . clone ( ) ) ;
205+ let tt = TokenTree :: Token ( self . token . clone ( ) ) ;
207206 // Note that testing for joint-ness here is done via the raw
208207 // source span as the joint-ness is a property of the raw source
209208 // rather than wanting to take `override_span` into account.
@@ -219,8 +218,6 @@ impl<'a> TokenTreesReader<'a> {
219218 }
220219
221220 fn real_token ( & mut self ) {
222- let t = self . string_reader . real_token ( ) ;
223- self . token = t. kind ;
224- self . span = t. span ;
221+ self . token = self . string_reader . real_token ( ) ;
225222 }
226223}
0 commit comments