11use crate :: marker:: Destruct ;
2+ #[ cfg( not( bootstrap) ) ]
3+ use crate :: marker:: Tuple ;
24
35/// Struct representing a closure with mutably borrowed data.
46///
@@ -44,6 +46,7 @@ impl<'a, CapturedData: ?Sized, Function> ConstFnMutClosure<&'a mut CapturedData,
4446
4547macro_rules! impl_fn_mut_tuple {
4648 ( $( $var: ident) * ) => {
49+ #[ cfg( bootstrap) ]
4750 #[ allow( unused_parens) ]
4851 impl <' a, $( $var, ) * ClosureArguments , Function , ClosureReturnValue > const
4952 FnOnce <ClosureArguments > for ConstFnMutClosure <( $( & ' a mut $var) ,* ) , Function >
@@ -56,6 +59,7 @@ macro_rules! impl_fn_mut_tuple {
5659 self . call_mut( args)
5760 }
5861 }
62+ #[ cfg( bootstrap) ]
5963 #[ allow( unused_parens) ]
6064 impl <' a, $( $var, ) * ClosureArguments , Function , ClosureReturnValue > const
6165 FnMut <ClosureArguments > for ConstFnMutClosure <( $( & ' a mut $var) ,* ) , Function >
@@ -68,6 +72,32 @@ macro_rules! impl_fn_mut_tuple {
6872 ( self . func) ( ( $( $var) ,* ) , args)
6973 }
7074 }
75+ #[ cfg( not( bootstrap) ) ]
76+ #[ allow( unused_parens) ]
77+ impl <' a, $( $var, ) * ClosureArguments : Tuple , Function , ClosureReturnValue > const
78+ FnOnce <ClosureArguments > for ConstFnMutClosure <( $( & ' a mut $var) ,* ) , Function >
79+ where
80+ Function : ~const Fn ( ( $( & mut $var) ,* ) , ClosureArguments ) -> ClosureReturnValue + ~const Destruct ,
81+ {
82+ type Output = ClosureReturnValue ;
83+
84+ extern "rust-call" fn call_once( mut self , args: ClosureArguments ) -> Self :: Output {
85+ self . call_mut( args)
86+ }
87+ }
88+ #[ cfg( not( bootstrap) ) ]
89+ #[ allow( unused_parens) ]
90+ impl <' a, $( $var, ) * ClosureArguments : Tuple , Function , ClosureReturnValue > const
91+ FnMut <ClosureArguments > for ConstFnMutClosure <( $( & ' a mut $var) ,* ) , Function >
92+ where
93+ Function : ~const Fn ( ( $( & mut $var) ,* ) , ClosureArguments ) -> ClosureReturnValue ,
94+ {
95+ extern "rust-call" fn call_mut( & mut self , args: ClosureArguments ) -> Self :: Output {
96+ #[ allow( non_snake_case) ]
97+ let ( $( $var) ,* ) = & mut self . data;
98+ ( self . func) ( ( $( $var) ,* ) , args)
99+ }
100+ }
71101 } ;
72102}
73103impl_fn_mut_tuple ! ( A ) ;
0 commit comments