1
1
use crate :: marker:: Destruct ;
2
+ #[ cfg( not( bootstrap) ) ]
3
+ use crate :: marker:: Tuple ;
2
4
3
5
/// Struct representing a closure with mutably borrowed data.
4
6
///
@@ -44,6 +46,7 @@ impl<'a, CapturedData: ?Sized, Function> ConstFnMutClosure<&'a mut CapturedData,
44
46
45
47
macro_rules! impl_fn_mut_tuple {
46
48
( $( $var: ident) * ) => {
49
+ #[ cfg( bootstrap) ]
47
50
#[ allow( unused_parens) ]
48
51
impl <' a, $( $var, ) * ClosureArguments , Function , ClosureReturnValue > const
49
52
FnOnce <ClosureArguments > for ConstFnMutClosure <( $( & ' a mut $var) ,* ) , Function >
@@ -56,6 +59,7 @@ macro_rules! impl_fn_mut_tuple {
56
59
self . call_mut( args)
57
60
}
58
61
}
62
+ #[ cfg( bootstrap) ]
59
63
#[ allow( unused_parens) ]
60
64
impl <' a, $( $var, ) * ClosureArguments , Function , ClosureReturnValue > const
61
65
FnMut <ClosureArguments > for ConstFnMutClosure <( $( & ' a mut $var) ,* ) , Function >
@@ -68,6 +72,32 @@ macro_rules! impl_fn_mut_tuple {
68
72
( self . func) ( ( $( $var) ,* ) , args)
69
73
}
70
74
}
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
+ }
71
101
} ;
72
102
}
73
103
impl_fn_mut_tuple ! ( A ) ;
0 commit comments