Module Pulselib.PulseTrace

module F = Stdlib.Format
module CallEvent = PulseCallEvent
module ValueHistory = PulseValueHistory
type t =
| Immediate of {
location : IBase.Location.t;
history : ValueHistory.t;
}
| ViaCall of {
f : CallEvent.t;
location : IBase.Location.t;

location of the call event

history : ValueHistory.t;

the call involves a value with this prior history

in_call : t;

last step of the trace is in a call to f made at location

}
val compare : t -> t -> int
val equal : t -> t -> bool
val pp : pp_immediate:(F.formatter -> unit) -> F.formatter -> t -> unit
val get_outer_location : t -> IBase.Location.t

skip histories and go straight to the where the action is: either the action itself or the call that leads to the action

val get_start_location : t -> IBase.Location.t

initial step in the history if not empty, or else same as get_outer_location

val add_to_errlog : ?⁠include_value_history:bool -> nesting:int -> pp_immediate:(F.formatter -> unit) -> t -> Absint.Errlog.loc_trace_elem list -> Absint.Errlog.loc_trace_elem list
val find_map : f:(ValueHistory.event -> 'a option) -> t -> 'a option

Like List.find_map, but applies to value histories.