diff options
-rw-r--r-- | test/Moretest/callbackprim.c | 27 | ||||
-rw-r--r-- | test/Moretest/tcallback.ml | 4 |
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); |