Absint.ProcCfg
Control-flow graph for a single procedure (as opposed to cfg.ml, which represents a cfg for a file). Defines useful wrappers that allows us to do tricks like turn a forward cfg to into a backward one, or view a cfg as having a single instruction per block
module type NodeCommonS = sig ... end
module InstrNode : sig ... end
module type Node = sig ... end
module type S = sig ... end
module DefaultNode :
Node with type t = IR.Procdesc.Node.t and type id = IR.Procdesc.Node.id
module Normal :
S
with type t = IR.Procdesc.t
and module Node = DefaultNode
and type instrs_dir = IR.Instrs.not_reversed
Forward CFG with no exceptional control-flow
module type ExceptionalS =
S
with type t = IR.Procdesc.t * DefaultNode.t list IR.Procdesc.IdMap.t
and module Node = DefaultNode
and type instrs_dir = IR.Instrs.not_reversed
module Exceptional : ExceptionalS
Forward CFG with exceptional control-flow
module ExceptionalNoSinkToExitEdge : ExceptionalS
Forward CFG with exceptional control-flow, but no edge from exceptions sink to exit node.
module Backward
(Base : S with type instrs_dir = IR.Instrs.not_reversed) :
S
with type t = Base.t
and module Node = Base.Node
and type instrs_dir = IR.Instrs.reversed
Wrapper that reverses the direction of the CFG
module OneInstrPerNode (Base : S with module Node = DefaultNode) : sig ... end
module NormalOneInstrPerNode : sig ... end
module MakeOcamlGraph (Base : S) : sig ... end