Module Pulselib.PulseTopl
type value= PulseAbstractValue.ttype event=|ArrayWrite of{aw_array : value;aw_index : value;}|Call of{return : value option;arguments : value list;procname : IR.Procname.t;}type state
val start : unit -> stateReturn the initial state of
Topl.automaton ().
val small_step : IBase.Location.t -> PulsePathCondition.t -> event -> state -> stateval large_step : call_location:IBase.Location.t -> callee_proc_name:IR.Procname.t -> substitution:(value * PulseValueHistory.t) Pulselib.PulseAbstractValue.Map.t -> condition:PulsePathCondition.t -> callee_prepost:state -> state -> statelarge_step ~substitution ~condition state ~callee_prepostupdatesstateaccording tocallee_prepost. The abstract values inconditionandstateare in one scope, and those incallee_prepostin another scope: thesubstitutionmaps from the callee scope to the condition&state scope.
val filter_for_summary : PulsePathCondition.t -> state -> stateRemove from state those parts that are inconsistent with the path condition. (We do a cheap check to not introduce inconsistent Topl states, but they mey become inconsistent because the program path condition is updated later.)
val simplify : keep:Pulselib.PulseAbstractValue.Set.t -> state -> stateKeep only a subset of abstract values. This is used for extracting summaries.
val report_errors : IR.Procdesc.t -> Absint.Errlog.t -> state -> unitCalls
Reporting.log_issuewith error traces, if any.
val pp_state : Stdlib.Format.formatter -> state -> unit