@@ -832,3 +832,53 @@ impl<F,A,R> FnOnce<A,R> for F
832
832
self . call_mut ( args)
833
833
}
834
834
}
835
+
836
+ #[ cfg( stage0) ]
837
+ mod fn_impls {
838
+ use super :: Fn ;
839
+
840
+ impl < Result > Fn < ( ) , Result > for extern "Rust" fn ( ) -> Result {
841
+ #[ allow( non_snake_case) ]
842
+ extern "rust-call" fn call ( & self , _args : ( ) ) -> Result {
843
+ ( * self ) ( )
844
+ }
845
+ }
846
+
847
+ impl < Result , A0 > Fn < ( A0 , ) , Result > for extern "Rust" fn ( A0 ) -> Result {
848
+ #[ allow( non_snake_case) ]
849
+ extern "rust-call" fn call ( & self , args : ( A0 , ) ) -> Result {
850
+ let ( a0, ) = args;
851
+ ( * self ) ( a0)
852
+ }
853
+ }
854
+
855
+ macro_rules! def_fn(
856
+ ( $( $args: ident) * ) => (
857
+ impl <Result $( , $args) * >
858
+ Fn <( $( $args, ) * ) , Result >
859
+ for extern "Rust" fn ( $( $args: $args, ) * ) -> Result {
860
+ #[ allow( non_snake_case) ]
861
+ extern "rust-call" fn call( & self , args: ( $( $args, ) * ) ) -> Result {
862
+ let ( $( $args, ) * ) = args;
863
+ ( * self ) ( $( $args, ) * )
864
+ }
865
+ }
866
+ )
867
+ )
868
+
869
+ def_fn ! ( A0 A1 )
870
+ def_fn ! ( A0 A1 A2 )
871
+ def_fn ! ( A0 A1 A2 A3 )
872
+ def_fn ! ( A0 A1 A2 A3 A4 )
873
+ def_fn ! ( A0 A1 A2 A3 A4 A5 )
874
+ def_fn ! ( A0 A1 A2 A3 A4 A5 A6 )
875
+ def_fn ! ( A0 A1 A2 A3 A4 A5 A6 A7 )
876
+ def_fn ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 )
877
+ def_fn ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 )
878
+ def_fn ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 )
879
+ def_fn ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 )
880
+ def_fn ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 )
881
+ def_fn ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 )
882
+ def_fn ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 )
883
+ def_fn ! ( A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 )
884
+ }
0 commit comments