@@ -62,7 +62,10 @@ pub(super) fn parse(
6262 match tree {
6363 TokenTree :: MetaVar ( start_sp, ident) if parsing_patterns => {
6464 let span = match trees. next ( ) {
65- Some ( & tokenstream:: TokenTree :: Token ( Token { kind : token:: Colon , span } , _) ) => {
65+ Some ( & tokenstream:: TokenTree :: Token (
66+ Token { kind : token:: Colon , span : colon_span } ,
67+ _,
68+ ) ) => {
6669 match trees. next ( ) {
6770 Some ( tokenstream:: TokenTree :: Token ( token, _) ) => match token. ident ( ) {
6871 Some ( ( fragment, _) ) => {
@@ -126,10 +129,12 @@ pub(super) fn parse(
126129 }
127130 _ => token. span ,
128131 } ,
129- tree => tree. map_or ( span, tokenstream:: TokenTree :: span) ,
132+ Some ( tree) => tree. span ( ) ,
133+ None => colon_span,
130134 }
131135 }
132- tree => tree. map_or ( start_sp, tokenstream:: TokenTree :: span) ,
136+ Some ( tree) => tree. span ( ) ,
137+ None => start_sp,
133138 } ;
134139
135140 result. push ( TokenTree :: MetaVarDecl ( span, ident, None ) ) ;
@@ -176,7 +181,7 @@ fn parse_tree<'a>(
176181 // Depending on what `tree` is, we could be parsing different parts of a macro
177182 match tree {
178183 // `tree` is a `$` token. Look at the next token in `trees`
179- & tokenstream:: TokenTree :: Token ( Token { kind : token:: Dollar , span } , _) => {
184+ & tokenstream:: TokenTree :: Token ( Token { kind : token:: Dollar , span : dollar_span } , _) => {
180185 // FIXME: Handle `Invisible`-delimited groups in a more systematic way
181186 // during parsing.
182187 let mut next = outer_trees. next ( ) ;
@@ -209,7 +214,7 @@ fn parse_tree<'a>(
209214 err. emit ( ) ;
210215 // Returns early the same read `$` to avoid spanning
211216 // unrelated diagnostics that could be performed afterwards
212- return TokenTree :: token ( token:: Dollar , span ) ;
217+ return TokenTree :: token ( token:: Dollar , dollar_span ) ;
213218 }
214219 Ok ( elem) => {
215220 maybe_emit_macro_metavar_expr_feature (
@@ -251,7 +256,7 @@ fn parse_tree<'a>(
251256 // special metavariable that names the crate of the invocation.
252257 Some ( tokenstream:: TokenTree :: Token ( token, _) ) if token. is_ident ( ) => {
253258 let ( ident, is_raw) = token. ident ( ) . unwrap ( ) ;
254- let span = ident. span . with_lo ( span . lo ( ) ) ;
259+ let span = ident. span . with_lo ( dollar_span . lo ( ) ) ;
255260 if ident. name == kw:: Crate && matches ! ( is_raw, IdentIsRaw :: No ) {
256261 TokenTree :: token ( token:: Ident ( kw:: DollarCrate , is_raw) , span)
257262 } else {
@@ -260,16 +265,19 @@ fn parse_tree<'a>(
260265 }
261266
262267 // `tree` is followed by another `$`. This is an escaped `$`.
263- Some ( & tokenstream:: TokenTree :: Token ( Token { kind : token:: Dollar , span } , _) ) => {
268+ Some ( & tokenstream:: TokenTree :: Token (
269+ Token { kind : token:: Dollar , span : dollar_span2 } ,
270+ _,
271+ ) ) => {
264272 if parsing_patterns {
265273 span_dollar_dollar_or_metavar_in_the_lhs_err (
266274 sess,
267- & Token { kind : token:: Dollar , span } ,
275+ & Token { kind : token:: Dollar , span : dollar_span2 } ,
268276 ) ;
269277 } else {
270- maybe_emit_macro_metavar_expr_feature ( features, sess, span ) ;
278+ maybe_emit_macro_metavar_expr_feature ( features, sess, dollar_span2 ) ;
271279 }
272- TokenTree :: token ( token:: Dollar , span )
280+ TokenTree :: token ( token:: Dollar , dollar_span2 )
273281 }
274282
275283 // `tree` is followed by some other token. This is an error.
@@ -281,7 +289,7 @@ fn parse_tree<'a>(
281289 }
282290
283291 // There are no more tokens. Just return the `$` we already have.
284- None => TokenTree :: token ( token:: Dollar , span ) ,
292+ None => TokenTree :: token ( token:: Dollar , dollar_span ) ,
285293 }
286294 }
287295
0 commit comments