summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--test/Moretest/callbackprim.c27
-rw-r--r--test/Moretest/tcallback.ml4
2 files changed, 16 insertions, 15 deletions
diff --git a/test/Moretest/callbackprim.c b/test/Moretest/callbackprim.c
index dc7d8ca39..50b5f7569 100644
--- a/test/Moretest/callbackprim.c
+++ b/test/Moretest/callbackprim.c
@@ -5,36 +5,33 @@
value mycallback1(value fun, value arg)
{
value res;
- Push_roots(r, 2);
- r[0] = fun;
- r[1] = arg;
res = callback(fun, arg);
- Pop_roots();
return res;
}
value mycallback2(value fun, value arg1, value arg2)
{
value res;
- Push_roots(r, 3);
- r[0] = fun;
- r[1] = arg1;
- r[2] = arg2;
res = callback2(fun, arg1, arg2);
- Pop_roots();
return res;
}
value mycallback3(value fun, value arg1, value arg2, value arg3)
{
value res;
- Push_roots(r, 4);
- r[0] = fun;
- r[1] = arg1;
- r[2] = arg2;
- r[3] = arg3;
res = callback3(fun, arg1, arg2, arg3);
- Pop_roots();
+ return res;
+}
+
+value mycallback4(value fun, value arg1, value arg2, value arg3, value arg4)
+{
+ value args[4];
+ value res;
+ args[0] = arg1;
+ args[1] = arg2;
+ args[2] = arg3;
+ args[3] = arg4;
+ res = callbackN(fun, 4, args);
return res;
}
diff --git a/test/Moretest/tcallback.ml b/test/Moretest/tcallback.ml
index 4a5bbb021..003bf5020 100644
--- a/test/Moretest/tcallback.ml
+++ b/test/Moretest/tcallback.ml
@@ -1,6 +1,7 @@
external mycallback1 : ('a -> 'b) -> 'a -> 'b = "mycallback1"
external mycallback2 : ('a -> 'b -> 'c) -> 'a -> 'b -> 'c = "mycallback2"
external mycallback3 : ('a -> 'b -> 'c -> 'd) -> 'a -> 'b -> 'c -> 'd = "mycallback3"
+external mycallback4 : ('a -> 'b -> 'c -> 'd -> 'e) -> 'a -> 'b -> 'c -> 'd -> 'e = "mycallback4"
let rec tak (x, y, z as tuple) =
if x > y then tak(tak (x-1, y, z), tak (y-1, z, x), tak (z-1, x, y))
@@ -10,6 +11,8 @@ let tak2 x (y, z) = tak (x, y, z)
let tak3 x y z = tak (x, y, z)
+let tak4 x y z u = tak (x, y, z + u)
+
let raise_exit () = (raise Exit : unit)
let trapexit () =
@@ -54,6 +57,7 @@ let _ =
print_int(mycallback1 tak (18, 12, 6)); print_newline();
print_int(mycallback2 tak2 18 (12, 6)); print_newline();
print_int(mycallback3 tak3 18 12 6); print_newline();
+ print_int(mycallback4 tak4 18 12 3 3); print_newline();
print_int(trapexit ()); print_newline();
print_string(tripwire ()); print_newline();
Sys.signal Sys.sigusr1 (Sys.Signal_handle sighandler);