Absint.ProcCfgControl-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 ... endmodule InstrNode : sig ... endmodule type Node = sig ... endmodule type S = sig ... endmodule DefaultNode :
Node with type t = IR.Procdesc.Node.t and type id = IR.Procdesc.Node.idmodule Normal :
S
with type t = IR.Procdesc.t
and module Node = DefaultNode
and type instrs_dir = IR.Instrs.not_reversedForward 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_reversedmodule Exceptional : ExceptionalSForward CFG with exceptional control-flow
module ExceptionalNoSinkToExitEdge : ExceptionalSForward 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.reversedWrapper that reverses the direction of the CFG
module OneInstrPerNode (Base : S with module Node = DefaultNode) : sig ... endmodule NormalOneInstrPerNode : sig ... endmodule MakeOcamlGraph (Base : S) : sig ... end