package dune-private-libs

  1. Overview
  2. Docs
Private libraries of Dune

Install

dune-project
 Dependency

Authors

Maintainers

Sources

dune-2.5.1.tbz
sha256=8f77d3a87f208e0d7cccaa1c48c4bb1bb87d62d07c3f25e9b8ba298e028ce52b
sha512=f209f12ced10c1abf8782bdb0143f4cec77795f7174d2cc75130afb1e01550b01f2f77b9e3ec4888efdad83d2f9878d179b39126f824f4e522f3ef4da34bf27e

doc/src/dune-private-libs.stdune/exn_with_backtrace.ml.html

Source file exn_with_backtrace.ml

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
type t =
  { exn : exn
  ; backtrace : Printexc.raw_backtrace
  }

let capture exn = { exn; backtrace = Printexc.get_raw_backtrace () }

let try_with f =
  match f () with
  | r -> Result.Ok r
  | exception exn -> Error (capture exn)

let reraise { exn; backtrace } = Exn.raise_with_backtrace exn backtrace

let pp_uncaught fmt { exn; backtrace } =
  Exn.pp_uncaught
    ~backtrace:(Printexc.raw_backtrace_to_string backtrace)
    fmt exn

let map { exn; backtrace } ~f = { exn = f exn; backtrace }

let map_and_reraise t ~f = reraise (map ~f t)

let to_dyn { exn; backtrace } =
  let open Dyn.Encoder in
  record
    [ ("exn", string (Printexc.to_string exn))
    ; ("backtrace", string (Printexc.raw_backtrace_to_string backtrace))
    ]