permit multiline comments and strings in macros
[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 *)
ae4735db 4 and node1 = node2 * nodeinfo
34e49164
C
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 =
ae4735db 12 | TopNode
34e49164
C
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
ae4735db 28 | ForHeader of statement *
755320b0 29 (declOrExpr * exprStatement wrap * exprStatement wrap)
34e49164
C
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 55
ae4735db 56 | MacroTop of string * argument wrap2 list * il
34e49164
C
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
b1b2de81
C
67 | Label of statement * name * unit wrap
68 | Goto of statement * name * unit wrap
34e49164
C
69
70
71 | Asm of statement * asmbody wrap
72 | MacroStmt of statement * unit wrap
73
34e49164
C
74
75 (* ------------------------ *)
ae4735db 76 | Enter
34e49164
C
77 | Exit
78 | Fake
ae4735db 79 | CaseNode of int
34e49164
C
80
81 (* ------------------------ *)
82 (* for ctl: *)
83 | TrueNode
84 | FalseNode
85 | InLoopNode
86 | AfterNode
87 | FallThroughNode
951c7801 88 | LoopFallThroughNode
34e49164
C
89 | ErrorExit
90
91type edge = Direct
92
93type cflow = (node, edge) Ograph_extended.ograph_mutable
94
95val unwrap : node -> node2
96val rewrap : node -> node2 -> node
97
98val extract_labels : node -> int list
99val extract_bclabels : node -> int list
100val extract_fullstatement : node -> Ast_c.statement option
101val extract_is_loop : node -> bool
102val extract_is_fake : node -> bool
103
104val mk_node: node2 -> int list -> int list -> string -> node
105val mk_fake_node: node2 -> int list -> int list -> string -> node
106
107val first_node : cflow -> Ograph_extended.nodei
108val find_node : (node2 -> bool) -> cflow -> Ograph_extended.nodei
109(* remove an intermediate node and redirect the connexion *)
110val remove_one_node : Ograph_extended.nodei -> cflow -> unit