3 type node
= node1
* string (* For debugging. Used by print_graph *)
4 and node1
= node2
* nodeinfo
6 labels
: int list
; (* Labels. Trick used for CTL engine *)
7 bclabels
: int list
; (* parent of a break or continue node *)
15 | FunHeader
of definition
(* but empty body *)
18 | SeqStart
of statement
* int * info
19 | SeqEnd
of int * info
21 | ExprStatement
of statement
* (expression
option) wrap
23 | IfHeader
of statement
* expression wrap
25 | WhileHeader
of statement
* expression wrap
26 | DoHeader
of statement
* info
27 | DoWhileTail
of expression wrap
28 | ForHeader
of statement
*
29 (declOrExpr
* exprStatement wrap
* exprStatement wrap
)
31 | SwitchHeader
of statement
* expression wrap
32 | MacroIterHeader
of statement
* (string * argument wrap2 list
) wrap
34 | EndStatement
of info
option
36 | Return
of statement
* unit wrap
37 | ReturnExpr
of statement
* expression wrap
40 (* ------------------------ *)
41 | IfdefHeader
of ifdef_directive
42 | IfdefElse
of ifdef_directive
43 | IfdefEndif
of ifdef_directive
45 (* ------------------------ *)
46 | DefineHeader
of string wrap
* define_kind
48 | DefineExpr
of expression
49 | DefineType
of fullType
50 | DefineDoWhileZeroHeader
of unit wrap
56 | MacroTop
of string * argument wrap2 list
* il
58 (* ------------------------ *)
59 | Case
of statement
* expression wrap
60 | Default
of statement
* unit wrap
62 | Continue
of statement
* unit wrap
63 | Break
of statement
* unit wrap
65 (* no counter part in cocci *)
66 | CaseRange
of statement
* (expression
* expression
) wrap
67 | Label
of statement
* name
* unit wrap
68 | Goto
of statement
* name
* unit wrap
71 | Asm
of statement
* asmbody wrap
72 | MacroStmt
of statement
* unit wrap
75 (* ------------------------ *)
81 (* ------------------------ *)
93 type cflow
= (node
, edge
) Ograph_extended.ograph_mutable
95 val unwrap
: node
-> node2
96 val rewrap
: node
-> node2
-> node
98 val extract_labels
: node
-> int list
99 val extract_bclabels
: node
-> int list
100 val extract_fullstatement
: node
-> Ast_c.statement
option
101 val extract_is_loop
: node
-> bool
102 val extract_is_fake
: node
-> bool
104 val mk_node
: node2
-> int list
-> int list
-> string -> node
105 val mk_fake_node
: node2
-> int list
-> int list
-> string -> node
107 val first_node
: cflow
-> Ograph_extended.nodei
108 val find_node
: (node2
-> bool) -> cflow
-> Ograph_extended.nodei
109 (* remove an intermediate node and redirect the connexion *)
110 val remove_one_node
: Ograph_extended.nodei
-> cflow
-> unit