Release coccinelle-0.1.2
[bpt/coccinelle.git] / parsing_c / control_flow_c.mli
CommitLineData
34e49164
C
1open Ast_c
2
3type node = node1 * string (* For debugging. Used by print_graph *)
4 and node1 = node2 * nodeinfo
5 and nodeinfo = {
6 labels: int list; (* Labels. Trick used for CTL engine *)
7 bclabels: int list; (* parent of a break or continue node *)
8 is_loop: bool;
9 is_fake: bool;
10 }
11 and node2 =
12 | TopNode
13 | EndNode
14
485bce71 15 | FunHeader of definition (* but empty body *)
34e49164
C
16 | Decl of declaration
17
18 | SeqStart of statement * int * info
19 | SeqEnd of int * info
20
21 | ExprStatement of statement * (expression option) wrap
22
23 | IfHeader of statement * expression wrap
24 | Else of info
25 | WhileHeader of statement * expression wrap
26 | DoHeader of statement * info
27 | DoWhileTail of expression wrap
28 | ForHeader of statement *
29 (exprStatement wrap * exprStatement wrap * exprStatement wrap)
30 wrap
31 | SwitchHeader of statement * expression wrap
32 | MacroIterHeader of statement * (string * argument wrap2 list) wrap
33
34 | EndStatement of info option
35
36 | Return of statement * unit wrap
37 | ReturnExpr of statement * expression wrap
38
39
485bce71
C
40 (* ------------------------ *)
41 | IfdefHeader of ifdef_directive
42 | IfdefElse of ifdef_directive
43 | IfdefEndif of ifdef_directive
44
34e49164
C
45 (* ------------------------ *)
46 | DefineHeader of string wrap * define_kind
47
48 | DefineExpr of expression
49 | DefineType of fullType
50 | DefineDoWhileZeroHeader of unit wrap
51
485bce71
C
52 | DefineTodo
53
54 | Include of includ
34e49164
C
55
56 | MacroTop of string * argument wrap2 list * il
57
58 (* ------------------------ *)
59 | Case of statement * expression wrap
60 | Default of statement * unit wrap
61
62 | Continue of statement * unit wrap
63 | Break of statement * unit wrap
64
65 (* no counter part in cocci *)
66 | CaseRange of statement * (expression * expression) wrap
67 | Label of statement * string wrap
68 | Goto of statement * string wrap
69
70
71 | Asm of statement * asmbody wrap
72 | MacroStmt of statement * unit wrap
73
34e49164
C
74
75 (* ------------------------ *)
76 | Enter
77 | Exit
78 | Fake
79 | CaseNode of int
80
81 (* ------------------------ *)
82 (* for ctl: *)
83 | TrueNode
84 | FalseNode
85 | InLoopNode
86 | AfterNode
87 | FallThroughNode
88 | ErrorExit
89
90type edge = Direct
91
92type cflow = (node, edge) Ograph_extended.ograph_mutable
93
94val unwrap : node -> node2
95val rewrap : node -> node2 -> node
96
97val extract_labels : node -> int list
98val extract_bclabels : node -> int list
99val extract_fullstatement : node -> Ast_c.statement option
100val extract_is_loop : node -> bool
101val extract_is_fake : node -> bool
102
103val mk_node: node2 -> int list -> int list -> string -> node
104val mk_fake_node: node2 -> int list -> int list -> string -> node
105
106val first_node : cflow -> Ograph_extended.nodei
107val find_node : (node2 -> bool) -> cflow -> Ograph_extended.nodei
108(* remove an intermediate node and redirect the connexion *)
109val remove_one_node : Ograph_extended.nodei -> cflow -> unit