about summary refs log tree commit diff
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
parenta50d72158e08e02cfc051b863017bdbd2c45b637 (diff)
downloadrust-8f397bc8a0d8f2569d9aec7ad787b484c4b147e4.tar.gz
rust-8f397bc8a0d8f2569d9aec7ad787b484c4b147e4.zip
Simplify box_region macros
-rw-r--r--compiler/rustc_data_structures/src/box_region.rs43
-rw-r--r--compiler/rustc_interface/src/passes.rs3
2 files changed, 18 insertions, 28 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);
                     };
diff --git a/compiler/rustc_interface/src/passes.rs b/compiler/rustc_interface/src/passes.rs
index aa7af609fb5..478b2ef4d8f 100644
--- a/compiler/rustc_interface/src/passes.rs
+++ b/compiler/rustc_interface/src/passes.rs
@@ -87,7 +87,6 @@ fn count_nodes(krate: &ast::Crate) -> usize {
 
 declare_box_region_type!(
     pub BoxedResolver,
-    for(),
     (&mut Resolver<'_>) -> (Result<ast::Crate>, ResolverOutputs)
 );
 
@@ -133,7 +132,7 @@ pub fn configure_and_expand(
                 resolver
             }
         };
-        box_region_allow_access!(for(), (&mut Resolver<'_>), (&mut resolver), action);
+        box_region_allow_access!((&mut Resolver<'_>), (&mut resolver), action);
         resolver.into_outputs()
     });
     result.map(|k| (k, resolver))