@@ -866,34 +866,64 @@ pub trait FnOnce<Args,Result> {
866
866
extern "rust-call" fn call_once ( self , args : Args ) -> Result ;
867
867
}
868
868
869
- macro_rules! def_fn_mut(
869
+ impl < F , A , R > FnMut < A , R > for F
870
+ where F : Fn < A , R >
871
+ {
872
+ extern "rust-call" fn call_mut ( & mut self , args : A ) -> R {
873
+ self . call ( args)
874
+ }
875
+ }
876
+
877
+ impl < F , A , R > FnOnce < A , R > for F
878
+ where F : FnMut < A , R >
879
+ {
880
+ extern "rust-call" fn call_once ( mut self , args : A ) -> R {
881
+ self . call_mut ( args)
882
+ }
883
+ }
884
+
885
+
886
+ impl < Result > Fn < ( ) , Result > for extern "Rust" fn ( ) -> Result {
887
+ #[ allow( non_snake_case) ]
888
+ extern "rust-call" fn call ( & self , _args : ( ) ) -> Result {
889
+ ( * self ) ( )
890
+ }
891
+ }
892
+
893
+ impl < Result , A0 > Fn < ( A0 , ) , Result > for extern "Rust" fn ( A0 ) -> Result {
894
+ #[ allow( non_snake_case) ]
895
+ extern "rust-call" fn call ( & self , args : ( A0 , ) ) -> Result {
896
+ let ( a0, ) = args;
897
+ ( * self ) ( a0)
898
+ }
899
+ }
900
+
901
+ macro_rules! def_fn(
870
902
( $( $args: ident) * ) => (
871
903
impl <Result $( , $args) * >
872
- FnMut <( $( $args, ) * ) , Result >
904
+ Fn <( $( $args, ) * ) , Result >
873
905
for extern "Rust" fn ( $( $args: $args, ) * ) -> Result {
874
906
#[ allow( non_snake_case) ]
875
- extern "rust-call" fn call_mut ( & mut self , args: ( $( $args, ) * ) ) -> Result {
907
+ extern "rust-call" fn call ( & self , args: ( $( $args, ) * ) ) -> Result {
876
908
let ( $( $args, ) * ) = args;
877
909
( * self ) ( $( $args, ) * )
878
910
}
879
911
}
880
912
)
881
913
)
882
914
883
- def_fn_mut ! ( )
884
- def_fn_mut ! ( A0 )
885
- def_fn_mut ! ( A0 A1 )
886
- def_fn_mut ! ( A0 A1 A2 )
887
- def_fn_mut ! ( A0 A1 A2 A3 )
888
- def_fn_mut ! ( A0 A1 A2 A3 A4 )
889
- def_fn_mut ! ( A0 A1 A2 A3 A4 A5 )
890
- def_fn_mut ! ( A0 A1 A2 A3 A4 A5 A6 )
891
- def_fn_mut ! ( A0 A1 A2 A3 A4 A5 A6 A7 )
892
- def_fn_mut ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 )
893
- def_fn_mut ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 )
894
- def_fn_mut ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 )
895
- def_fn_mut ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 )
896
- def_fn_mut ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 )
897
- def_fn_mut ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 )
898
- def_fn_mut ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 )
899
- def_fn_mut ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 )
915
+ def_fn ! ( A0 A1 )
916
+ def_fn ! ( A0 A1 A2 )
917
+ def_fn ! ( A0 A1 A2 A3 )
918
+ def_fn ! ( A0 A1 A2 A3 A4 )
919
+ def_fn ! ( A0 A1 A2 A3 A4 A5 )
920
+ def_fn ! ( A0 A1 A2 A3 A4 A5 A6 )
921
+ def_fn ! ( A0 A1 A2 A3 A4 A5 A6 A7 )
922
+ def_fn ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 )
923
+ def_fn ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 )
924
+ def_fn ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 )
925
+ def_fn ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 )
926
+ def_fn ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 )
927
+ def_fn ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 )
928
+ def_fn ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 )
929
+ def_fn ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 )
0 commit comments