Module Backend.CallbackOfChecker

Conversions from checkers taking "functional" Absint.InterproceduralAnalysis.t et al. payloads to Callbacks.proc_callback_t and friends.

val mk_interprocedural_field_t : (Payloads.t, 'payload option IStdlib.IStd.Lazy.t) IStdlib.IStd.Field.t -> Callbacks.proc_callback_args -> ?tenv:IR.Tenv.t -> unit -> 'payload Absint.InterproceduralAnalysis.t * Summary.Stats.t IStdlib.IStd.ref
val interprocedural : f_analyze_dep:('payloads_orig -> 'payloads option) -> get_payload:(Payloads.t -> 'payloads_orig) -> set_payload: (Payloads.t -> 'payload_checker IStdlib.IStd.Lazy.t -> Payloads.t) -> ('payloads Absint.InterproceduralAnalysis.t -> 'payload_checker) -> Callbacks.proc_callback_t

the general form of interprocedural checkers: can read and update several payloads, and massage analysis results (mostly used to join option types)

val interprocedural_with_field : (Payloads.t, 'payload option IStdlib.IStd.Lazy.t) IStdlib.IStd.Field.t -> ('payload Absint.InterproceduralAnalysis.t -> 'payload option) -> Callbacks.proc_callback_t

interprocedural_with_field field checker expects checker to compute a payload (option) suitable for field, given an inter-procedural analysis of callees that computes the same payload type

val interprocedural_with_field_and_specialization : (Payloads.t, 'payload option IStdlib.IStd.Lazy.t) IStdlib.IStd.Field.t -> (?specialization:('payload * IR.Specialization.t) -> 'payload Absint.InterproceduralAnalysis.t -> 'payload option) -> Callbacks.proc_callback_with_specialization_t

same as interprocedural_with_field but allowing specialization

val make_is_already_specialized_test : (Payloads.t, 'payload option IStdlib.IStd.Lazy.t) IStdlib.IStd.Field.t -> (IR.Specialization.t -> 'payload -> bool) -> IR.Specialization.t -> Summary.t -> bool
val interprocedural_with_field_dependency : dep_field:(Payloads.t, 'payload_dep IStdlib.IStd.Lazy.t) IStdlib.IStd.Field.t -> (Payloads.t, 'payload IStdlib.IStd.Lazy.t) IStdlib.IStd.Field.t -> (('payload * 'payload_dep) Absint.InterproceduralAnalysis.t -> 'payload_dep -> 'payload) -> Callbacks.proc_callback_args -> Summary.t

An inter-procedural analysis that depends on the summary payload found by another one for a procedure to analyse the same procedure. The checker will be passed that payload dependency as an argument for the procedure being analysed. The InterproceduralAnalysis argument allows retrieving both the dependency payload and the "current" one on other procedures.

val interprocedural_file : (Payloads.t, 'payload option IStdlib.IStd.Lazy.t) IStdlib.IStd.Field.t -> ('payload Absint.InterproceduralAnalysis.file_t -> Absint.IssueLog.t) -> Callbacks.file_callback_t

interprocedural_file field checker expects checker to compute an Absint.IssueLog.t from the file-level analysis, given an inter-procedural analysis of dependencies that computes the payload type corresponding to field

runs a simple intra-procedural analysis (one that doesn't need the results of the analysis on any transitive dependencies to analyze a given procedure)

val intraprocedural_with_field_dependency : (Payloads.t, 'payload IStdlib.IStd.Lazy.t) IStdlib.IStd.Field.t -> (Absint.IntraproceduralAnalysis.t -> 'payload -> unit) -> Callbacks.proc_callback_t

an intra-procedural analysis that depends on the summary payload found by another