Module InferModules.StarvationDomain
module Lock : sig ... endAbstraction of a path that represents a lock, special-casing equality and comparisons to work over type, base variable modulo this and access list
module Event : sig ... endRepresents the existence of a program path from the current method to the eventual acquisition of a lock or a blocking call. Equality/comparison disregards the call trace but includes location.
module EventDomain : ExplicitTrace.FiniteSet with type FiniteSet.elt = Event.tmodule Order : sig ... endRepresents the existence of a program path to the
firstlock being taken in the current method or, transitively, a callee *in the same class*, and, which continues (to potentially another class) until theeventuallyevent, schematically -->first-->eventually. It is guaranteed that during the second part of the trace (first-->eventually) the lockfirstis not released.
module OrderDomain : ExplicitTrace.FiniteSet with type FiniteSet.elt = Order.tmodule LockState : AbstractDomain.WithTopmodule UIThreadExplanationDomain : sig ... endmodule UIThreadDomain : AbstractDomain.WithBottom with type t = UIThreadExplanationDomain.t AbstractDomain.Types.bottom_liftedmodule GuardToLockMap : AbstractDomain.WithToptype t={events : EventDomain.t;guard_map : GuardToLockMap.t;lock_state : LockState.t;order : OrderDomain.t;ui : UIThreadDomain.t;}
include AbstractDomain.WithBottom with type t := t
include AbstractDomain.S
include AbstractDomain.NoJoin
include InferStdlib.PrettyPrintable.PrintableType
val pp : InferStdlib.PrettyPrintable.F.formatter -> t -> unit
val bottom : tThe bottom value of the domain.
val is_bottom : t -> boolReturn true if this is the bottom value
val acquire : InferIR.Tenv.t -> t -> InferBase.Location.t -> Lock.t list -> tsimultaneously acquire a number of locks, no-op if list is empty
val blocking_call : InferIR.Typ.Procname.t -> Event.severity_t -> InferBase.Location.t -> t -> tval strict_mode_call : InferIR.Typ.Procname.t -> InferBase.Location.t -> t -> tval set_on_ui_thread : t -> InferBase.Location.t -> string -> tset the property "runs on UI thread" to true by attaching the given explanation string as to why this method is thought to do so
val add_guard : InferIR.Tenv.t -> t -> InferIR.HilExp.t -> Lock.t -> acquire_now:bool -> InferBase.Location.t -> tInstall a mapping from the guard expression to the lock provided, and optionally lock it.
val lock_guard : InferIR.Tenv.t -> t -> InferIR.HilExp.t -> InferBase.Location.t -> tAcquire the lock the guard was constructed with.
val remove_guard : t -> InferIR.HilExp.t -> tDestroy the guard and release its lock.
val unlock_guard : t -> InferIR.HilExp.t -> tRelease the lock the guard was constructed with.
type summary= t
val pp_summary : F.formatter -> summary -> unitval integrate_summary : InferIR.Tenv.t -> t -> InferIR.Typ.Procname.t -> InferBase.Location.t -> summary -> t