1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
(* TEST_BELOW
(* Blank lines added here to preserve locations. *)
*)
open Effect
open Effect.Deep
type _ t += E : unit t
| Inc : unit t
let blorp () =
perform Inc;
perform E;
42
let baz () =
try_with blorp ()
{ effc = fun (type a) (e : a t) ->
match e with
| Inc -> Some (fun (k : (a, _) continuation) ->
1 + continue k ())
| _ -> None }
let f () =
match_with baz ()
{ retc = (fun x -> Printf.printf "%d\n" x);
exnc = (fun e -> raise e);
effc = fun (type a) (e : a t) ->
match e with
| E -> Some (fun (k : (a, _) continuation) ->
Deep.get_callstack k 100 |>
Printexc.raw_backtrace_to_string |>
print_string;
continue k ())
| _ -> None }
let () = f ()
(* TEST
flags = "-g";
{
bytecode;
}{
no-flambda;
native;
}{
reference = "${test_source_directory}/backtrace_effects_nested.flambda.reference";
flambda;
native;
}
*)
|