Skip to content

Commit a454c64

Browse files
committed
[WIP] light + improve
1 parent 9545601 commit a454c64

File tree

2 files changed

+19
-14
lines changed

2 files changed

+19
-14
lines changed

compiler/rustc_expand/src/mbe/transcribe.rs

+18-13
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,23 @@ fn maybe_use_metavar_location(
347347
metavar_span: Span,
348348
orig_tt: &TokenTree,
349349
) -> TokenTree {
350-
let insert = |mspans: &mut FxHashMap<_, _>, s, ms| mspans.try_insert(s, ms).is_ok();
350+
let undelimited_seq = matches!(
351+
stack.last(),
352+
Some(Frame::Sequence {
353+
tts: [_],
354+
sep: None,
355+
kleene_op: KleeneOp::ZeroOrMore | KleeneOp::OneOrMore,
356+
..
357+
})
358+
);
359+
if undelimited_seq {
360+
return orig_tt.clone();
361+
}
362+
363+
let insert = |mspans: &mut FxHashMap<_, _>, s, ms| match mspans.try_insert(s, ms) {
364+
Ok(_) => true,
365+
Err(err) => *err.entry.get() == ms,
366+
};
351367
let no_collision = match orig_tt {
352368
TokenTree::Token(token, ..) => {
353369
with_metavar_spans(|mspans| insert(mspans, token.span, metavar_span))
@@ -358,18 +374,7 @@ fn maybe_use_metavar_location(
358374
&& insert(mspans, dspan.entire(), metavar_span)
359375
}),
360376
};
361-
let undelimited_seq = || {
362-
matches!(
363-
stack.last(),
364-
Some(Frame::Sequence {
365-
tts: [_],
366-
sep: None,
367-
kleene_op: KleeneOp::ZeroOrMore | KleeneOp::OneOrMore,
368-
..
369-
})
370-
)
371-
};
372-
if no_collision || undelimited_seq() || cx.source_map().is_imported(metavar_span) {
377+
if no_collision || cx.source_map().is_imported(metavar_span) {
373378
return orig_tt.clone();
374379
}
375380

tests/ui/impl-trait/impl-trait-in-macro.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ error[E0308]: mismatched types
22
--> $DIR/impl-trait-in-macro.rs:9:9
33
|
44
LL | ($($tr:tt)*) => { impl $($tr)* };
5-
| ----------
5+
| ----
66
| |
77
| expected type parameter
88
| found type parameter

0 commit comments

Comments
 (0)