module NodeHash : InferStdlib.IStd.Caml.Hashtbl.S with type NodeHash.key = Node.t
Hash table with nodes as keys.
procedure descriptions
val append_locals : t ‑> InferIR.ProcAttributes.var_data list ‑> unit
append a list of new local variables to the existing list of local variables
val compute_distance_to_exit_node : t ‑> unit
Compute the distance of each node to the exit node, if not computed already
val create_node : t ‑> InferBase.Location.t ‑> Node.nodekind ‑> InferIR.Sil.instr list ‑> Node.t
Create a new cfg node with the given location, kind, list of instructions, and add it to the procdesc.
val fold_instrs : t ‑> init:'accum ‑> f:('accum ‑> Node.t ‑> InferIR.Sil.instr ‑> 'accum) ‑> 'accum
fold over all nodes and their instructions
val find_map_instrs : t ‑> f:(InferIR.Sil.instr ‑> 'a option) ‑> 'a option
val from_proc_attributes : InferIR.ProcAttributes.t ‑> t
Use Cfg.create_proc_desc
if you are adding a proc desc to a cfg
val get_captured : t ‑> (InferIR.Mangled.t * InferIR.Typ.t) list
Return name and type of block's captured variables
val get_formals : t ‑> (InferIR.Mangled.t * InferIR.Typ.t) list
Return name and type of formal parameters
val get_locals : t ‑> InferIR.ProcAttributes.var_data list
Return name and type and attributes of local variables
val get_nodes_num : t ‑> int
val get_proc_name : t ‑> InferIR.Typ.Procname.t
val get_ret_var : t ‑> InferIR.Pvar.t
val is_java_synchronized : t ‑> bool
Return true
if the procedure signature has the Java synchronized keyword
val iter_instrs : (Node.t ‑> InferIR.Sil.instr ‑> unit) ‑> t ‑> unit
iterate over all nodes and their instructions
val replace_instrs : t ‑> f:(InferIR.Sil.instr ‑> InferIR.Sil.instr) ‑> unit
Map and replace the instructions to be executed
val signal_did_preanalysis : t ‑> unit
indicate that we have performed preanalysis on the CFG assoociated with t
val pp_signature : Format.formatter ‑> t ‑> unit
val pp_local : Format.formatter ‑> InferIR.ProcAttributes.var_data ‑> unit
val is_specialized : t ‑> bool
val is_captured_var : t ‑> InferIR.Pvar.t ‑> bool
true if pvar is a captured variable of a cpp lambda or obcj block
val has_modify_in_block_attr : t ‑> InferIR.Pvar.t ‑> bool
val specialize_types : t ‑> InferIR.Typ.Procname.t ‑> (InferIR.Exp.t * InferIR.Typ.t) list ‑> t
Creates a copy of a procedure description and a list of type substitutions of the form (name, typ) where name is a parameter. The resulting procdesc is isomorphic but all the type of the parameters are replaced in the instructions according to the list. The virtual calls are also replaced to match the parameter types
val specialize_with_block_args : t ‑> InferIR.Typ.Procname.t ‑> InferIR.Exp.closure option list ‑> t
Creates a copy of a procedure description given a list of possible closures that are passed as arguments to the method. The resulting procdesc is isomorphic but a) the block parameters are replaces with the closures b) the parameters of the method are extended with parameters for the captured variables in the closures
val is_connected : t ‑> (unit, [ `Join | `Other ]) InferStdlib.IStd.Result.t
checks whether a cfg for the given procdesc is connected or not