@@ -13,7 +13,7 @@ use rustc_parse::parser::ParseNtResult;
13
13
use rustc_session:: parse:: { ParseSess , SymbolGallery } ;
14
14
use rustc_span:: hygiene:: { LocalExpnId , Transparency } ;
15
15
use rustc_span:: {
16
- Ident , MacroRulesNormalizedIdent , Span , Symbol , SyntaxContext , sym, with_metavar_spans_mut ,
16
+ Ident , MacroRulesNormalizedIdent , Span , Symbol , SyntaxContext , sym, with_metavar_spans ,
17
17
} ;
18
18
use smallvec:: { SmallVec , smallvec} ;
19
19
@@ -283,13 +283,17 @@ pub(super) fn transcribe<'a>(
283
283
}
284
284
MatchedSingle ( ParseNtResult :: Ident ( ident, is_raw) ) => {
285
285
marker. visit_span ( & mut sp) ;
286
- with_metavar_spans_mut ( |mspans| mspans. insert ( ident. span , sp) ) ;
286
+ with_metavar_spans ( |mspans| {
287
+ mspans. write ( ) . insert ( ident. span , ( sp, false ) )
288
+ } ) ;
287
289
let kind = token:: NtIdent ( * ident, * is_raw) ;
288
290
TokenTree :: token_alone ( kind, sp)
289
291
}
290
292
MatchedSingle ( ParseNtResult :: Lifetime ( ident, is_raw) ) => {
291
293
marker. visit_span ( & mut sp) ;
292
- with_metavar_spans_mut ( |mspans| mspans. insert ( ident. span , sp) ) ;
294
+ with_metavar_spans ( |mspans| {
295
+ mspans. write ( ) . insert ( ident. span , ( sp, false ) )
296
+ } ) ;
293
297
let kind = token:: NtLifetime ( * ident, * is_raw) ;
294
298
TokenTree :: token_alone ( kind, sp)
295
299
}
@@ -299,7 +303,9 @@ pub(super) fn transcribe<'a>(
299
303
// `Interpolated` is currently used for such groups in rustc parser.
300
304
marker. visit_span ( & mut sp) ;
301
305
let use_span = nt. use_span ( ) ;
302
- with_metavar_spans_mut ( |mspans| mspans. insert ( use_span, sp) ) ;
306
+ with_metavar_spans ( |mspans| {
307
+ mspans. write ( ) . insert ( use_span, ( sp, false ) )
308
+ } ) ;
303
309
TokenTree :: token_alone ( token:: Interpolated ( Lrc :: clone ( nt) ) , sp)
304
310
}
305
311
MatchedSeq ( ..) => {
@@ -415,16 +421,17 @@ fn maybe_use_metavar_location(
415
421
return orig_tt. clone ( ) ;
416
422
}
417
423
418
- let insert = |mspans : & mut UnordMap < _ , _ > , s, ms| match mspans. try_insert ( s, ms ) {
424
+ let insert = |mspans : & mut UnordMap < _ , _ > , s, ms| match mspans. try_insert ( s, ( ms , false ) ) {
419
425
Ok ( _) => true ,
420
- Err ( err) => * err. entry . get ( ) == ms, // Tried to insert the same span, still success
426
+ Err ( err) => err. entry . get ( ) . 0 == ms, // Tried to insert the same span, still success
421
427
} ;
422
428
marker. visit_span ( & mut metavar_span) ;
423
429
let no_collision = match orig_tt {
424
430
TokenTree :: Token ( token, ..) => {
425
- with_metavar_spans_mut ( |mspans| insert ( mspans, token. span , metavar_span) )
431
+ with_metavar_spans ( |mspans| insert ( & mut mspans. write ( ) , token. span , metavar_span) )
426
432
}
427
- TokenTree :: Delimited ( dspan, ..) => with_metavar_spans_mut ( |mspans| {
433
+ TokenTree :: Delimited ( dspan, ..) => with_metavar_spans ( |mspans| {
434
+ let mspans = & mut mspans. write ( ) ;
428
435
insert ( mspans, dspan. open , metavar_span)
429
436
&& insert ( mspans, dspan. close , metavar_span)
430
437
&& insert ( mspans, dspan. entire ( ) , metavar_span)
@@ -439,13 +446,14 @@ fn maybe_use_metavar_location(
439
446
match orig_tt {
440
447
TokenTree :: Token ( Token { kind, span } , spacing) => {
441
448
let span = metavar_span. with_ctxt ( span. ctxt ( ) ) ;
442
- with_metavar_spans_mut ( |mspans| insert ( mspans, span, metavar_span) ) ;
449
+ with_metavar_spans ( |mspans| insert ( & mut mspans. write ( ) , span, metavar_span) ) ;
443
450
TokenTree :: Token ( Token { kind : kind. clone ( ) , span } , * spacing)
444
451
}
445
452
TokenTree :: Delimited ( dspan, dspacing, delimiter, tts) => {
446
453
let open = metavar_span. with_ctxt ( dspan. open . ctxt ( ) ) ;
447
454
let close = metavar_span. with_ctxt ( dspan. close . ctxt ( ) ) ;
448
- with_metavar_spans_mut ( |mspans| {
455
+ with_metavar_spans ( |mspans| {
456
+ let mspans = & mut mspans. write ( ) ;
449
457
insert ( mspans, open, metavar_span) && insert ( mspans, close, metavar_span)
450
458
} ) ;
451
459
let dspan = DelimSpan :: from_pair ( open, close) ;
0 commit comments