Cfg.AstSourceExtends the simple Universal language with Control Flow Graphs.
module LocSet : sig ... endmodule LocMap : sig ... endmodule LocHash : sig ... endmodule TagLocSet : sig ... endmodule TagLocMap : sig ... endmodule TagLocHash : sig ... endmodule RangeSet : sig ... endmodule RangeMap : sig ... endmodule RangeHash : sig ... endmodule CFG : sig ... endEdges are labelled with a statement. Nodes have no information in the graph structure. Abstract invariant information will be kept in maps separately from the CFG. This way, CFG can be kept immutable.
Fresh node with some source location information. NOTE: Do not mix mk_fresh_node_id and mk_node_id as it can break uniqueness.
Fresh node without any source location information.
Fresh range with possible some source range information. NOTE: Do not mix mk_fresh_edge_id and mk_edge_id as it can break uniqueness.
Fresh range without any source range information.
Associate a flow to each CFG node. We can store abstract information for the whole graph in a single abstract state, using node flows. We also associate a flow to cache the post-image of each CFG edge.
Flow for true and false branch of tests.
type Mopsa.stmt_kind += | S_cfg of cfg| S_test of Mopsa.exprtest nodes, with a true and a false branch
*)| S_skipempty node
*)