Module Absint.InterproceduralAnalysis

type 'payload t = {
  1. proc_desc : IR.Procdesc.t;
    (*

    the procedure to analyze

    *)
  2. tenv : IR.Tenv.t;
    (*

    IR.Tenv.t corresponding to the current procedure

    *)
  3. err_log : Errlog.t;
    (*

    the issue log for the current procedure (internally a mutable data structure)

    *)
  4. exe_env : Exe_env.t;
    (*

    Exe_env.t for the current analysis

    *)
  5. analyze_dependency : ?specialization:IR.Specialization.t -> IR.Procname.t -> 'payload AnalysisResult.t;
    (*

    On-demand analysis of callees or other dependencies of the analysis of the current procedure. Uses Ondemand.analyze_procedure. If specialization is provided, the summary will be improved with a specialized version.

    *)
  6. add_errlog : IR.Procname.t -> Errlog.t -> unit;
    (*

    Summary.OnDisk.add_errlog: add to the issue log of a foreign procedure (otherwise just use err_log above)

    *)
  7. update_stats : ?add_symops:int -> ?failure_kind:IBase.Exception.failure_kind -> unit -> unit;
    (*

    update the Summary.Stats.t of the summary of the current procedure

    *)
}

Analysis data for interprocedural analysis. This is the data for one procedure under analysis, and callbacks to analyze dependencies of it as well as do bookkeeping regarding the current procedure. Basically anything that needs to access the Summary.t of the current procedure should go here.

val for_procedure : IR.Procdesc.t -> Errlog.t -> 'a t -> 'a t
type 'payload file_t = {
  1. source_file : IBase.SourceFile.t;
    (*

    the source file under analysis

    *)
  2. procedures : IR.Procname.t list;
    (*

    list of procedures declared in the source file

    *)
  3. file_exe_env : Exe_env.t;
    (*

    Exe_env.t for the current analysis

    *)
  4. analyze_file_dependency : IR.Procname.t -> 'payload AnalysisResult.t;
    (*

    On-demand analysis of dependencies needed for the file analysis, e.g. the proc names in procedures

    *)
}

Analysis data for the analysis of a source file.

val bind_payload_opt : 'payload1 t -> f:('payload1 -> 'payload2 option) -> 'payload2 t