Pulselib.PulseTracemodule CallEvent = PulseCallEventmodule ValueHistory = PulseValueHistorymodule CellId = PulseValueHistory.CellIdtype 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
}include Ppx_compare_lib.Comparable.S with type t := tval compare : t Base__Ppx_compare_lib.compareinclude Ppx_compare_lib.Equal.S with type t := tval equal : t Base__Ppx_compare_lib.equalmodule Set : sig ... endval pp : pp_immediate:(F.formatter -> unit) -> F.formatter -> t -> unitval get_outer_location : t -> IBase.Location.tskip 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.tinitial step in the history if not empty, or else same as get_outer_location
val add_call :
CallEvent.t ->
IBase.Location.t ->
ValueHistory.t CellId.Map.t ->
default_caller_history:ValueHistory.t ->
t ->
tval add_to_errlog :
?include_value_history:bool ->
?include_taint_events:bool ->
nesting:int ->
pp_immediate:(F.formatter -> unit) ->
t ->
Absint.Errlog.loc_trace_elem list ->
Absint.Errlog.loc_trace_elem listval synchronous_add_to_errlog :
nesting:int ->
pp_immediate:(F.formatter -> unit) ->
t list ->
Absint.Errlog.loc_trace_elem list ->
Absint.Errlog.loc_trace_elem listsynchronous_add_to_errlog adds a list of the traces to the errlog in the given order while grouping traces that take place at the same location to reduce deduplication and ensure events happening together are identifiable as such. E.g. if two traces start with a ViaCall and they happen at the same location, then that call will only appear once and the rest of those traces will then be added synchronously as well
val find_map_last_main : t -> f:(ValueHistory.event -> 'a option) -> 'a optionfind_map applied to history events in reverse order; does not look into contextual events
val exists_main : t -> f:(ValueHistory.event -> bool) -> boolwhether the trace contains an event satisfying f; does not look into contextual events
val get_trace_until : t -> f:(ValueHistory.event -> bool) -> t optionbuild a sub-trace leading to the first element of the trace satisfying f