Coccinelle release-1.0.0-rc11
[bpt/coccinelle.git] / parsing_cocci / visitor_ast0_types.ml
CommitLineData
f537ebc4 1(*
17ba0788
C
2 * Copyright 2012, INRIA
3 * Julia Lawall, Gilles Muller
4 * Copyright 2010-2011, INRIA, University of Copenhagen
f537ebc4
C
5 * Julia Lawall, Rene Rydhof Hansen, Gilles Muller, Nicolas Palix
6 * Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen
7 * Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix
8 * This file is part of Coccinelle.
9 *
10 * Coccinelle is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation, according to version 2 of the License.
13 *
14 * Coccinelle is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with Coccinelle. If not, see <http://www.gnu.org/licenses/>.
21 *
22 * The authors reserve the right to distribute this or future versions of
23 * Coccinelle under other licenses.
24 *)
25
26
b1b2de81
C
27module Ast0 = Ast0_cocci
28module Ast = Ast_cocci
29
30type ('a,'n) inout = 'a -> ('n * 'a)
31
32type 'n all_functions =
33 {ident : (Ast0.ident,'n) inout;
34 expression : (Ast0.expression,'n) inout;
35 typeC : (Ast0.typeC,'n) inout;
36 declaration : (Ast0.declaration,'n) inout;
37 initialiser : (Ast0.initialiser,'n) inout;
38 initialiser_list : (Ast0.initialiser_list,'n) inout;
39 parameter : (Ast0.parameterTypeDef,'n) inout;
40 parameter_list : (Ast0.parameter_list,'n) inout;
41 statement : (Ast0.statement,'n) inout;
42 case_line : (Ast0.case_line,'n) inout;
43 top_level : (Ast0.top_level,'n) inout;
44 expression_dots : (Ast0.expression Ast0.dots,'n) inout;
45 statement_dots : (Ast0.statement Ast0.dots,'n) inout;
46 declaration_dots : (Ast0.declaration Ast0.dots,'n) inout;
47 case_line_dots : (Ast0.case_line Ast0.dots,'n) inout;
48 anything : (Ast0.anything,'n) inout}
49
50(* ----------------------------------------------------------------------- *)
51(* combiner *)
52
53type ('a,'n) combiner_inout = 'a -> 'n
54
55type 'n combiner_rec_functions =
56 {combiner_rec_ident : (Ast0.ident,'n) combiner_inout;
57 combiner_rec_expression : (Ast0.expression,'n) combiner_inout;
58 combiner_rec_typeC : (Ast0.typeC,'n) combiner_inout;
59 combiner_rec_declaration : (Ast0.declaration,'n) combiner_inout;
60 combiner_rec_initialiser : (Ast0.initialiser,'n) combiner_inout;
61 combiner_rec_initialiser_list :
62 (Ast0.initialiser_list,'n) combiner_inout;
63 combiner_rec_parameter : (Ast0.parameterTypeDef,'n) combiner_inout;
64 combiner_rec_parameter_list : (Ast0.parameter_list,'n) combiner_inout;
65 combiner_rec_statement : (Ast0.statement,'n) combiner_inout;
66 combiner_rec_case_line : (Ast0.case_line,'n) combiner_inout;
67 combiner_rec_top_level : (Ast0.top_level,'n) combiner_inout;
68 combiner_rec_expression_dots :
69 (Ast0.expression Ast0.dots,'n) combiner_inout;
70 combiner_rec_statement_dots :
71 (Ast0.statement Ast0.dots,'n) combiner_inout;
72 combiner_rec_declaration_dots :
73 (Ast0.declaration Ast0.dots,'n) combiner_inout;
74 combiner_rec_case_line_dots :
75 (Ast0.case_line Ast0.dots,'n) combiner_inout;
76 combiner_rec_anything : (Ast0.anything,'n) combiner_inout}
77
78type ('mc,'n) cmcode = 'n -> 'mc Ast0.mcode -> 'n
79type ('mc,'n) flat_cmcode = 'mc Ast0.mcode -> 'n
80type ('cd,'n) ccode = 'n combiner_rec_functions -> ('cd -> 'n) -> 'cd -> 'n
81
82type 'n combiner_functions =
ae4735db 83 {combiner_meta_mcode : (Ast.meta_name,'n) cmcode;
b1b2de81
C
84 combiner_string_mcode : (string,'n) cmcode;
85 combiner_const_mcode : (Ast.constant,'n) cmcode;
86 combiner_assign_mcode : (Ast.assignOp,'n) cmcode;
87 combiner_fix_mcode : (Ast.fixOp,'n) cmcode;
88 combiner_unary_mcode : (Ast.unaryOp,'n) cmcode;
89 combiner_binary_mcode : (Ast.binaryOp,'n) cmcode;
90 combiner_cv_mcode : (Ast.const_vol,'n) cmcode;
91 combiner_sign_mcode : (Ast.sign,'n) cmcode;
92 combiner_struct_mcode : (Ast.structUnion,'n) cmcode;
93 combiner_storage_mcode : (Ast.storage,'n) cmcode;
94 combiner_inc_mcode : (Ast.inc_file,'n) cmcode;
95 combiner_dotsexprfn : (Ast0.expression Ast0.dots,'n) ccode;
96 combiner_dotsinitfn : (Ast0.initialiser Ast0.dots,'n) ccode;
97 combiner_dotsparamfn : (Ast0.parameterTypeDef Ast0.dots,'n) ccode;
98 combiner_dotsstmtfn : (Ast0.statement Ast0.dots,'n) ccode;
99 combiner_dotsdeclfn : (Ast0.declaration Ast0.dots,'n) ccode;
100 combiner_dotscasefn : (Ast0.case_line Ast0.dots,'n) ccode;
101 combiner_identfn : (Ast0.ident,'n) ccode;
102 combiner_exprfn : (Ast0.expression,'n) ccode;
103 combiner_tyfn : (Ast0.typeC,'n) ccode;
104 combiner_initfn : (Ast0.initialiser,'n) ccode;
105 combiner_paramfn : (Ast0.parameterTypeDef,'n) ccode;
106 combiner_declfn : (Ast0.declaration,'n) ccode;
107 combiner_stmtfn : (Ast0.statement,'n) ccode;
108 combiner_casefn : (Ast0.case_line,'n) ccode;
109 combiner_topfn : (Ast0.top_level,'n) ccode}
110
111(* ----------------------------------------------------------------------- *)
112(* rebuilder *)
113
114type 'a rebuilder_inout = 'a -> 'a
115
116type rebuilder_rec_functions =
117 {rebuilder_rec_ident : Ast0.ident rebuilder_inout;
118 rebuilder_rec_expression : Ast0.expression rebuilder_inout;
119 rebuilder_rec_typeC : Ast0.typeC rebuilder_inout;
120 rebuilder_rec_declaration : Ast0.declaration rebuilder_inout;
121 rebuilder_rec_initialiser : Ast0.initialiser rebuilder_inout;
122 rebuilder_rec_initialiser_list :
123 Ast0.initialiser_list rebuilder_inout;
124 rebuilder_rec_parameter : Ast0.parameterTypeDef rebuilder_inout;
125 rebuilder_rec_parameter_list : Ast0.parameter_list rebuilder_inout;
126 rebuilder_rec_statement : Ast0.statement rebuilder_inout;
127 rebuilder_rec_case_line : Ast0.case_line rebuilder_inout;
128 rebuilder_rec_top_level : Ast0.top_level rebuilder_inout;
129 rebuilder_rec_expression_dots :
130 Ast0.expression Ast0.dots rebuilder_inout;
131 rebuilder_rec_statement_dots :
132 Ast0.statement Ast0.dots rebuilder_inout;
133 rebuilder_rec_declaration_dots :
134 Ast0.declaration Ast0.dots rebuilder_inout;
135 rebuilder_rec_case_line_dots :
136 Ast0.case_line Ast0.dots rebuilder_inout;
137 rebuilder_rec_anything : Ast0.anything rebuilder_inout}
138
139type 'mc rmcode = 'mc Ast0.mcode rebuilder_inout
140type 'cd rcode =
141 rebuilder_rec_functions -> ('cd rebuilder_inout) -> 'cd rebuilder_inout
142
143type rebuilder_functions =
ae4735db 144 {rebuilder_meta_mcode : Ast_cocci.meta_name rmcode;
b1b2de81
C
145 rebuilder_string_mcode : string rmcode;
146 rebuilder_const_mcode : Ast.constant rmcode;
147 rebuilder_assign_mcode : Ast.assignOp rmcode;
148 rebuilder_fix_mcode : Ast.fixOp rmcode;
149 rebuilder_unary_mcode : Ast.unaryOp rmcode;
150 rebuilder_binary_mcode : Ast.binaryOp rmcode;
151 rebuilder_cv_mcode : Ast.const_vol rmcode;
152 rebuilder_sign_mcode : Ast.sign rmcode;
153 rebuilder_struct_mcode : Ast.structUnion rmcode;
154 rebuilder_storage_mcode : Ast.storage rmcode;
155 rebuilder_inc_mcode : Ast.inc_file rmcode;
156 rebuilder_dotsexprfn : Ast0.expression Ast0.dots rcode;
157 rebuilder_dotsinitfn : Ast0.initialiser Ast0.dots rcode;
158 rebuilder_dotsparamfn : Ast0.parameterTypeDef Ast0.dots rcode;
159 rebuilder_dotsstmtfn : Ast0.statement Ast0.dots rcode;
160 rebuilder_dotsdeclfn : Ast0.declaration Ast0.dots rcode;
161 rebuilder_dotscasefn : Ast0.case_line Ast0.dots rcode;
162 rebuilder_identfn : Ast0.ident rcode;
163 rebuilder_exprfn : Ast0.expression rcode;
164 rebuilder_tyfn : Ast0.typeC rcode;
165 rebuilder_initfn : Ast0.initialiser rcode;
166 rebuilder_paramfn : Ast0.parameterTypeDef rcode;
167 rebuilder_declfn : Ast0.declaration rcode;
168 rebuilder_stmtfn : Ast0.statement rcode;
169 rebuilder_casefn : Ast0.case_line rcode;
170 rebuilder_topfn : Ast0.top_level rcode}
171
172(* ----------------------------------------------------------------------- *)
173(* combiner_rebuilder *)
174
175type ('mc,'a) rcmcode = 'a -> 'mc Ast0.mcode -> ('a * 'mc Ast0.mcode)
176type ('cd,'a) rccode =
177 'a all_functions -> ('cd -> ('a * 'cd)) -> 'cd -> ('a * 'cd)
178
179type 'n combiner_rebuilder_functions =
ae4735db 180 {combiner_rebuilder_meta_mcode : (Ast_cocci.meta_name,'n) rcmcode;
b1b2de81
C
181 combiner_rebuilder_string_mcode : (string,'n) rcmcode;
182 combiner_rebuilder_const_mcode : (Ast.constant,'n) rcmcode;
183 combiner_rebuilder_assign_mcode : (Ast.assignOp,'n) rcmcode;
184 combiner_rebuilder_fix_mcode : (Ast.fixOp,'n) rcmcode;
185 combiner_rebuilder_unary_mcode : (Ast.unaryOp,'n) rcmcode;
186 combiner_rebuilder_binary_mcode : (Ast.binaryOp,'n) rcmcode;
187 combiner_rebuilder_cv_mcode : (Ast.const_vol,'n) rcmcode;
188 combiner_rebuilder_sign_mcode : (Ast.sign,'n) rcmcode;
189 combiner_rebuilder_struct_mcode : (Ast.structUnion,'n) rcmcode;
190 combiner_rebuilder_storage_mcode : (Ast.storage,'n) rcmcode;
191 combiner_rebuilder_inc_mcode : (Ast.inc_file,'n) rcmcode;
192 combiner_rebuilder_dotsexprfn : (Ast0.expression Ast0.dots,'n) rccode;
193 combiner_rebuilder_dotsinitfn : (Ast0.initialiser Ast0.dots,'n) rccode;
194 combiner_rebuilder_dotsparamfn :
195 (Ast0.parameterTypeDef Ast0.dots,'n) rccode;
196 combiner_rebuilder_dotsstmtfn : (Ast0.statement Ast0.dots,'n) rccode;
197 combiner_rebuilder_dotsdeclfn : (Ast0.declaration Ast0.dots,'n) rccode;
198 combiner_rebuilder_dotscasefn : (Ast0.case_line Ast0.dots,'n) rccode;
199 combiner_rebuilder_identfn : (Ast0.ident,'n) rccode;
200 combiner_rebuilder_exprfn : (Ast0.expression,'n) rccode;
201 combiner_rebuilder_tyfn : (Ast0.typeC,'n) rccode;
202 combiner_rebuilder_initfn : (Ast0.initialiser,'n) rccode;
203 combiner_rebuilder_paramfn : (Ast0.parameterTypeDef,'n) rccode;
204 combiner_rebuilder_declfn : (Ast0.declaration,'n) rccode;
205 combiner_rebuilder_stmtfn : (Ast0.statement,'n) rccode;
206 combiner_rebuilder_casefn : (Ast0.case_line,'n) rccode;
207 combiner_rebuilder_topfn : (Ast0.top_level,'n) rccode}