diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2023-05-22 06:54:16 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-05-22 06:54:16 +0200 |
| commit | b0415dbec7dbacd62fd77812270fddb7d98235f7 (patch) | |
| tree | b1e88a4a06fed626152d20129dab8176ff6e8e88 | |
| parent | 3869b7b12df0320d869479768c540db1a220f7a4 (diff) | |
| parent | e9a5a9d7d5502ac6847328a12c9f319f3bb5a903 (diff) | |
| download | rust-b0415dbec7dbacd62fd77812270fddb7d98235f7.tar.gz rust-b0415dbec7dbacd62fd77812270fddb7d98235f7.zip | |
Rollup merge of #111810 - compiler-errors:less-macro, r=thomcc
Don't use inner macro in `marker_impls` Just recurse instead of having to define an inner macro to avoid the problem with expansion binders being misnumbered between the `$meta` and `$T` variables. cc `@Veykril` this should fix rust-lang/rust-analyzer#14862 since we've gotten rid of the inner macro.
| -rw-r--r-- | library/core/src/marker.rs | 26 |
1 files changed, 8 insertions, 18 deletions
diff --git a/library/core/src/marker.rs b/library/core/src/marker.rs index 2bb688b921c..8dab8d1a692 100644 --- a/library/core/src/marker.rs +++ b/library/core/src/marker.rs @@ -43,27 +43,17 @@ use crate::hash::Hasher; /// ``` #[unstable(feature = "internal_impls_macro", issue = "none")] macro marker_impls { - ( $(#[$($meta:tt)*])* $Trait:ident for $( $({$($bounds:tt)*})? $T:ty ),+ $(,)?) => { - // This inner macro is needed because... idk macros are weird. - // It allows repeating `meta` on all impls. - #[unstable(feature = "internal_impls_macro", issue = "none")] - macro _impl { - ( $$({$$($$bounds_:tt)*})? $$T_:ty ) => { - $(#[$($meta)*])* impl<$$($$($$bounds_)*)?> $Trait for $$T_ {} - } - } - $( _impl! { $({$($bounds)*})? $T } )+ + ( $(#[$($meta:tt)*])* $Trait:ident for $({$($bounds:tt)*})? $T:ty $(, $($rest:tt)*)? ) => { + $(#[$($meta)*])* impl< $($($bounds)*)? > $Trait for $T {} + marker_impls! { $(#[$($meta)*])* $Trait for $($($rest)*)? } }, - ( $(#[$($meta:tt)*])* unsafe $Trait:ident for $( $({$($bounds:tt)*})? $T:ty ),+ $(,)?) => { - #[unstable(feature = "internal_impls_macro", issue = "none")] - macro _impl { - ( $$({$$($$bounds_:tt)*})? $$T_:ty ) => { - $(#[$($meta)*])* unsafe impl<$$($$($$bounds_)*)?> $Trait for $$T_ {} - } - } + ( $(#[$($meta:tt)*])* $Trait:ident for ) => {}, - $( _impl! { $({$($bounds)*})? $T } )+ + ( $(#[$($meta:tt)*])* unsafe $Trait:ident for $({$($bounds:tt)*})? $T:ty $(, $($rest:tt)*)? ) => { + $(#[$($meta)*])* unsafe impl< $($($bounds)*)? > $Trait for $T {} + marker_impls! { $(#[$($meta)*])* unsafe $Trait for $($($rest)*)? } }, + ( $(#[$($meta:tt)*])* unsafe $Trait:ident for ) => {}, } /// Types that can be transferred across thread boundaries. |
