about summary refs log tree commit diff
path: root/compiler/rustc_data_structures/src
diff options
context:
space:
mode:
authorbjorn3 <bjorn3@users.noreply.github.com>2021-05-31 14:51:31 +0200
committerbjorn3 <bjorn3@users.noreply.github.com>2021-06-08 19:24:15 +0200
commit8f397bc8a0d8f2569d9aec7ad787b484c4b147e4 (patch)
treedc6f27758179056b4cb3a1f1d905367d898d65d3 /compiler/rustc_data_structures/src
parenta50d72158e08e02cfc051b863017bdbd2c45b637 (diff)
downloadrust-8f397bc8a0d8f2569d9aec7ad787b484c4b147e4.tar.gz
rust-8f397bc8a0d8f2569d9aec7ad787b484c4b147e4.zip
Simplify box_region macros
Diffstat (limited to 'compiler/rustc_data_structures/src')
-rw-r--r--compiler/rustc_data_structures/src/box_region.rs43
1 files changed, 17 insertions, 26 deletions
diff --git a/compiler/rustc_data_structures/src/box_region.rs b/compiler/rustc_data_structures/src/box_region.rs
index eb6f4e8213e..2f212b03e08 100644
--- a/compiler/rustc_data_structures/src/box_region.rs
+++ b/compiler/rustc_data_structures/src/box_region.rs
@@ -82,37 +82,35 @@ pub enum YieldType<I, A> {
 #[macro_export]
 #[allow_internal_unstable(fn_traits)]
 macro_rules! declare_box_region_type {
-    (impl $v:vis
-     $name: ident,
-     $yield_type:ty,
-     for($($lifetimes:tt)*),
-     ($($args:ty),*) -> ($reti:ty, $retc:ty)
-    ) => {
+    ($v:vis $name: ident, ($($args:ty),*) -> ($reti:ty, $retc:ty)) => {
         $v struct $name($crate::box_region::PinnedGenerator<
             $reti,
-            for<$($lifetimes)*> fn(($($args,)*)),
+            fn(($($args,)*)),
             $retc
         >);
 
         impl $name {
-            fn new<T: ::std::ops::Generator<$crate::box_region::Action, Yield = $yield_type, Return = $retc> + 'static>(
-                generator: T
-            ) -> ($reti, Self) {
+            fn new<T>(generator: T) -> ($reti, Self)
+            where T: ::std::ops::Generator<
+                $crate::box_region::Action,
+                Yield = $crate::box_region::YieldType<$reti, fn(($($args,)*))>,
+                Return = $retc,
+            > + 'static {
                 let (initial, pinned) = $crate::box_region::PinnedGenerator::new(generator);
                 (initial, $name(pinned))
             }
 
-            $v fn access<F: for<$($lifetimes)*> FnOnce($($args,)*) -> R, R>(&mut self, f: F) -> R {
+            $v fn access<F: FnOnce($($args,)*) -> R, R>(&mut self, f: F) -> R {
                 // Turn the FnOnce closure into *mut dyn FnMut()
                 // so we can pass it in to the generator
                 let mut r = None;
                 let mut f = Some(f);
-                let mut_f: &mut dyn for<$($lifetimes)*> FnMut(($($args,)*)) =
+                let mut_f: &mut dyn FnMut(($($args,)*)) =
                     &mut |args| {
                         let f = f.take().unwrap();
                         r = Some(FnOnce::call_once(f, args));
                 };
-                let mut_f = mut_f as *mut dyn for<$($lifetimes)*> FnMut(($($args,)*));
+                let mut_f = mut_f as *mut dyn FnMut(($($args,)*));
 
                 // Get the generator to call our closure
                 unsafe {
@@ -127,36 +125,29 @@ macro_rules! declare_box_region_type {
                 self.0.complete()
             }
 
-            fn initial_yield(value: $reti) -> $yield_type {
+            fn initial_yield(
+                value: $reti,
+            ) -> $crate::box_region::YieldType<$reti, fn(($($args,)*))> {
                 $crate::box_region::YieldType::Initial(value)
             }
         }
     };
-
-    ($v:vis $name: ident, for($($lifetimes:tt)*), ($($args:ty),*) -> ($reti:ty, $retc:ty)) => {
-        declare_box_region_type!(
-            impl $v $name,
-            $crate::box_region::YieldType<$reti, for<$($lifetimes)*> fn(($($args,)*))>,
-            for($($lifetimes)*),
-            ($($args),*) -> ($reti, $retc)
-        );
-    };
 }
 
 #[macro_export]
 #[allow_internal_unstable(fn_traits)]
 macro_rules! box_region_allow_access {
-    (for($($lifetimes:tt)*), ($($args:ty),*), ($($exprs:expr),*), $action:ident) => {
+    (($($args:ty),*), ($($exprs:expr),*), $action:ident) => {
         loop {
             match $action {
                 $crate::box_region::Action::Access(accessor) => {
-                    let accessor: &mut dyn for<$($lifetimes)*> FnMut($($args),*) = unsafe {
+                    let accessor: &mut dyn FnMut($($args),*) = unsafe {
                         ::std::mem::transmute(accessor.get())
                     };
                     (*accessor)(($($exprs),*));
                     unsafe {
                         let marker = $crate::box_region::Marker::<
-                            for<$($lifetimes)*> fn(($($args,)*))
+                            fn(($($args,)*))
                         >::new();
                         $action = yield $crate::box_region::YieldType::Accessor(marker);
                     };