Module PulseTransitiveInfo.Callees

for each call site, we remember which resolution was performed

include Absint.AbstractDomain.WithBottom
include Absint.AbstractDomain.S
include Absint.AbstractDomain.Comparable
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val bottom : t

The bottom value of the domain.

val is_bottom : t -> bool

Return true if this is the bottom value

val pp : Stdlib.Format.formatter -> t -> unit
type call_kind =
  1. | Static
  2. | Virtual
  3. | Closure

NOTE: only Closure is recorded for now

type resolution =
  1. | ResolvedUsingDynamicType
    (*

    the most precise resolution

    *)
  2. | ResolvedUsingStaticType
    (*

    may not be exact

    *)
  3. | Unresolved
    (*

    the worst resolution because we don't have enough type information or the capture was incomplete

    *)
val record : caller:IR.Procdesc.t -> IBase.Location.t -> call_kind -> resolution -> t -> t
val to_jsonbug_transitive_callees : t -> ATDGenerated.Jsonbug_t.transitive_callee list