You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix macro matching for NoDelim delimited sequences.
PR rust-lang#95159 unintentionally changed the behaviour of declarative macro
matching for `NoDelim` delimited sequences.
- Before rust-lang#95159, delimiters were implicit in `mbe::Delimited`. When
doing macro matching, normal delimiters were generated out of thin air
as necessary, but `NoDelim` delimiters were not. This was done within
`TokenTree::{get_tt,len}`.
- After rust-lang#95159, the delimiters were explicit. There was an unintentional
change whereby `NoDelim` delimiters were represented explicitly just
like normal delimeters.
- rust-lang#95555 introduced a new matcher representation (`MatcherLoc`) and the
`NoDelim` delimiters were made explicit within it, just like
`mbe::Delimited`.
- rust-lang#95797 then changed `mbe::Delimited` back to having implicit
delimiters, but because matching is now being done on `MatcherLoc`,
the behavioural change persisted.
The fix is simple: remove the explicit `NoDelim` delimiters in the
`MatcherLoc` representation. This gives back the original behaviour.
As for why this took so long to be found: it seems that `NoDelim`
sequences are unusual. It took a macro that generates another macro
(from the `yarte_lexer` crate, found via a crater run) to uncover this.
Fixesrust-lang#96305.
0 commit comments