@@ -2,15 +2,15 @@ use syntax_pos::Span;
2
2
3
3
use crate :: print:: pprust:: token_to_string;
4
4
use crate :: parse:: lexer:: { StringReader , UnmatchedBrace } ;
5
- use crate :: parse:: { token, PResult } ;
5
+ use crate :: parse:: token:: { self , Token } ;
6
+ use crate :: parse:: PResult ;
6
7
use crate :: tokenstream:: { DelimSpan , IsJoint :: * , TokenStream , TokenTree , TreeAndJoint } ;
7
8
8
9
impl < ' a > StringReader < ' a > {
9
10
crate fn into_token_trees ( self ) -> ( PResult < ' a , TokenStream > , Vec < UnmatchedBrace > ) {
10
11
let mut tt_reader = TokenTreesReader {
11
12
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 } ,
14
14
open_braces : Vec :: new ( ) ,
15
15
unmatched_braces : Vec :: new ( ) ,
16
16
matching_delim_spans : Vec :: new ( ) ,
@@ -23,8 +23,7 @@ impl<'a> StringReader<'a> {
23
23
24
24
struct TokenTreesReader < ' a > {
25
25
string_reader : StringReader < ' a > ,
26
- token : token:: TokenKind ,
27
- span : Span ,
26
+ token : Token ,
28
27
/// Stack of open delimiters and their spans. Used for error message.
29
28
open_braces : Vec < ( token:: DelimToken , Span ) > ,
30
29
unmatched_braces : Vec < UnmatchedBrace > ,
@@ -52,7 +51,7 @@ impl<'a> TokenTreesReader<'a> {
52
51
fn parse_token_trees_until_close_delim ( & mut self ) -> TokenStream {
53
52
let mut tts = vec ! [ ] ;
54
53
loop {
55
- if let token:: CloseDelim ( ..) = self . token {
54
+ if let token:: CloseDelim ( ..) = self . token . kind {
56
55
return TokenStream :: new ( tts) ;
57
56
}
58
57
@@ -68,11 +67,11 @@ impl<'a> TokenTreesReader<'a> {
68
67
69
68
fn parse_token_tree ( & mut self ) -> PResult < ' a , TreeAndJoint > {
70
69
let sm = self . string_reader . sess . source_map ( ) ;
71
- match self . token {
70
+ match self . token . kind {
72
71
token:: Eof => {
73
72
let msg = "this file contains an un-closed delimiter" ;
74
73
let mut err = self . string_reader . sess . span_diagnostic
75
- . struct_span_err ( self . span , msg) ;
74
+ . struct_span_err ( self . token . span , msg) ;
76
75
for & ( _, sp) in & self . open_braces {
77
76
err. span_label ( sp, "un-closed delimiter" ) ;
78
77
}
@@ -102,10 +101,10 @@ impl<'a> TokenTreesReader<'a> {
102
101
} ,
103
102
token:: OpenDelim ( delim) => {
104
103
// The span for beginning of the delimited section
105
- let pre_span = self . span ;
104
+ let pre_span = self . token . span ;
106
105
107
106
// Parse the open delimiter.
108
- self . open_braces . push ( ( delim, self . span ) ) ;
107
+ self . open_braces . push ( ( delim, self . token . span ) ) ;
109
108
self . real_token ( ) ;
110
109
111
110
// Parse the token trees within the delimiters.
@@ -114,9 +113,9 @@ impl<'a> TokenTreesReader<'a> {
114
113
let tts = self . parse_token_trees_until_close_delim ( ) ;
115
114
116
115
// 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 ) ;
118
117
119
- match self . token {
118
+ match self . token . kind {
120
119
// Correct delimiter.
121
120
token:: CloseDelim ( d) if d == delim => {
122
121
let ( open_brace, open_brace_span) = self . open_braces . pop ( ) . unwrap ( ) ;
@@ -126,7 +125,7 @@ impl<'a> TokenTreesReader<'a> {
126
125
self . matching_delim_spans . clear ( ) ;
127
126
} else {
128
127
self . matching_delim_spans . push (
129
- ( open_brace, open_brace_span, self . span ) ,
128
+ ( open_brace, open_brace_span, self . token . span ) ,
130
129
) ;
131
130
}
132
131
// Parse the close delimiter.
@@ -136,16 +135,16 @@ impl<'a> TokenTreesReader<'a> {
136
135
token:: CloseDelim ( other) => {
137
136
let mut unclosed_delimiter = None ;
138
137
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 ) {
140
139
// 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 ) ;
142
141
// This is a conservative error: only report the last unclosed
143
142
// delimiter. The previous unclosed delimiters could actually be
144
143
// closed! The parser just hasn't gotten to them yet.
145
144
if let Some ( & ( _, sp) ) = self . open_braces . last ( ) {
146
145
unclosed_delimiter = Some ( sp) ;
147
146
} ;
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 ) {
149
148
for ( brace, brace_span) in & self . open_braces {
150
149
if let Some ( padding) = sm. span_to_margin ( * brace_span) {
151
150
// high likelihood of these two corresponding
@@ -159,7 +158,7 @@ impl<'a> TokenTreesReader<'a> {
159
158
self . unmatched_braces . push ( UnmatchedBrace {
160
159
expected_delim : tok,
161
160
found_delim : other,
162
- found_span : self . span ,
161
+ found_span : self . token . span ,
163
162
unclosed_span : unclosed_delimiter,
164
163
candidate_span : candidate,
165
164
} ) ;
@@ -198,12 +197,12 @@ impl<'a> TokenTreesReader<'a> {
198
197
let token_str = token_to_string ( & self . token ) ;
199
198
let msg = format ! ( "unexpected close delimiter: `{}`" , token_str) ;
200
199
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" ) ;
203
202
Err ( err)
204
203
} ,
205
204
_ => {
206
- let tt = TokenTree :: token ( self . span , self . token . clone ( ) ) ;
205
+ let tt = TokenTree :: Token ( self . token . clone ( ) ) ;
207
206
// Note that testing for joint-ness here is done via the raw
208
207
// source span as the joint-ness is a property of the raw source
209
208
// rather than wanting to take `override_span` into account.
@@ -219,8 +218,6 @@ impl<'a> TokenTreesReader<'a> {
219
218
}
220
219
221
220
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 ( ) ;
225
222
}
226
223
}
0 commit comments