package ppxlib

  1. Overview
  2. Docs
Standard library for ppx rewriters

Install

dune-project
 Dependency

Authors

Maintainers

Sources

ppxlib-0.28.0.tbz
sha256=d87ae5f9a081206308ca964809b50a66aeb8e83d254801e8b9675448b60cf377
sha512=03270d43e91485e63c7dc115a71933ffd8cb2910c273d605d2800fa69f523dcd4de1fbe31fd6c2f6979675c681343bcf4e35be06934565bf28edf4ea03f5da8e

doc/src/ppxlib/caller_id.ml.html

Source file caller_id.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
open! Import
module Printexc = Caml.Printexc

(* Small helper to find out who is the caller of a function *)

type t = Printexc.location option

let get ~skip =
  let skip = __FILE__ :: skip in
  let stack = Printexc.get_callstack 16 in
  let len = Printexc.raw_backtrace_length stack in
  let rec loop pos =
    if pos = len then None
    else
      match
        Printexc.get_raw_backtrace_slot stack pos
        |> Printexc.convert_raw_backtrace_slot |> Printexc.Slot.location
      with
      | None -> None
      | Some loc ->
          if List.mem ~set:skip loc.filename then loop (pos + 1) else Some loc
  in
  loop 0