@@ -211,6 +211,13 @@ static intnat caml_bcodcount;
211
211
212
212
/* The interpreter itself */
213
213
214
+ typedef value (* primitive_arity_1 )(value );
215
+ typedef value (* primitive_arity_2 )(value , value );
216
+ typedef value (* primitive_arity_3 )(value , value , value );
217
+ typedef value (* primitive_arity_4 )(value , value , value , value );
218
+ typedef value (* primitive_arity_5 )(value , value , value , value , value );
219
+ typedef value (* primitive_arity_n )(value * , int );
220
+
214
221
value caml_interprete (code_t prog , asize_t prog_size )
215
222
{
216
223
#ifdef PC_REG
@@ -959,34 +966,34 @@ value caml_interprete(code_t prog, asize_t prog_size)
959
966
960
967
Instruct (C_CALL1 ):
961
968
Setup_for_c_call ;
962
- accu = Primitive (* pc )(accu );
969
+ accu = (( primitive_arity_1 ) Primitive (* pc ) )(accu );
963
970
Restore_after_c_call ;
964
971
pc ++ ;
965
972
Next ;
966
973
Instruct (C_CALL2 ):
967
974
Setup_for_c_call ;
968
- accu = Primitive (* pc )(accu , sp [2 ]);
975
+ accu = (( primitive_arity_2 ) Primitive (* pc ) )(accu , sp [2 ]);
969
976
Restore_after_c_call ;
970
977
sp += 1 ;
971
978
pc ++ ;
972
979
Next ;
973
980
Instruct (C_CALL3 ):
974
981
Setup_for_c_call ;
975
- accu = Primitive (* pc )(accu , sp [2 ], sp [3 ]);
982
+ accu = (( primitive_arity_3 ) Primitive (* pc ) )(accu , sp [2 ], sp [3 ]);
976
983
Restore_after_c_call ;
977
984
sp += 2 ;
978
985
pc ++ ;
979
986
Next ;
980
987
Instruct (C_CALL4 ):
981
988
Setup_for_c_call ;
982
- accu = Primitive (* pc )(accu , sp [2 ], sp [3 ], sp [4 ]);
989
+ accu = (( primitive_arity_4 ) Primitive (* pc ) )(accu , sp [2 ], sp [3 ], sp [4 ]);
983
990
Restore_after_c_call ;
984
991
sp += 3 ;
985
992
pc ++ ;
986
993
Next ;
987
994
Instruct (C_CALL5 ):
988
995
Setup_for_c_call ;
989
- accu = Primitive (* pc )(accu , sp [2 ], sp [3 ], sp [4 ], sp [5 ]);
996
+ accu = (( primitive_arity_5 ) Primitive (* pc ) )(accu , sp [2 ], sp [3 ], sp [4 ], sp [5 ]);
990
997
Restore_after_c_call ;
991
998
sp += 4 ;
992
999
pc ++ ;
@@ -995,7 +1002,7 @@ value caml_interprete(code_t prog, asize_t prog_size)
995
1002
int nargs = * pc ++ ;
996
1003
* -- sp = accu ;
997
1004
Setup_for_c_call ;
998
- accu = Primitive (* pc )(sp + 2 , nargs );
1005
+ accu = (( primitive_arity_n ) Primitive (* pc ) )(sp + 2 , nargs );
999
1006
Restore_after_c_call ;
1000
1007
sp += nargs ;
1001
1008
pc ++ ;
0 commit comments