module NodeHash : InferStdlib.IStd.Caml.Hashtbl.S with type NodeHash.key = Node.tHash table with nodes as keys.
procedure descriptions
val append_locals : t ‑> InferIR.ProcAttributes.var_data list ‑> unitappend a list of new local variables to the existing list of local variables
val compute_distance_to_exit_node : t ‑> unitCompute 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.tCreate 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) ‑> 'accumfold over all nodes and their instructions
val find_map_instrs : t ‑> f:(InferIR.Sil.instr ‑> 'a option) ‑> 'a optionval from_proc_attributes : InferIR.ProcAttributes.t ‑> tUse Cfg.create_proc_desc if you are adding a proc desc to a cfg
val get_captured : t ‑> (InferIR.Mangled.t * InferIR.Typ.t) listReturn name and type of block's captured variables
val get_formals : t ‑> (InferIR.Mangled.t * InferIR.Typ.t) listReturn name and type of formal parameters
val get_locals : t ‑> InferIR.ProcAttributes.var_data listReturn name and type and attributes of local variables
val get_nodes_num : t ‑> intval get_proc_name : t ‑> InferIR.Typ.Procname.tval get_ret_var : t ‑> InferIR.Pvar.tval is_java_synchronized : t ‑> boolReturn true if the procedure signature has the Java synchronized keyword
val iter_instrs : (Node.t ‑> InferIR.Sil.instr ‑> unit) ‑> t ‑> unititerate over all nodes and their instructions
val replace_instrs : t ‑> f:(InferIR.Sil.instr ‑> InferIR.Sil.instr) ‑> unitMap and replace the instructions to be executed
val signal_did_preanalysis : t ‑> unitindicate that we have performed preanalysis on the CFG assoociated with t
val pp_signature : Format.formatter ‑> t ‑> unitval pp_local : Format.formatter ‑> InferIR.ProcAttributes.var_data ‑> unitval is_specialized : t ‑> boolval is_captured_var : t ‑> InferIR.Pvar.t ‑> booltrue if pvar is a captured variable of a cpp lambda or obcj block
val has_modify_in_block_attr : t ‑> InferIR.Pvar.t ‑> boolval specialize_types : t ‑> InferIR.Typ.Procname.t ‑> (InferIR.Exp.t * InferIR.Typ.t) list ‑> tCreates 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 ‑> tCreates 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.tchecks whether a cfg for the given procdesc is connected or not