2 * Copyright 2012, INRIA
3 * Julia Lawall, Gilles Muller
4 * Copyright 2010-2011, INRIA, University of Copenhagen
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.
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.
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.
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/>.
22 * The authors reserve the right to distribute this or future versions of
23 * Coccinelle under other licenses.
27 module Ast0
= Ast0_cocci
28 module Ast
= Ast_cocci
30 type ('a
,'n
) inout
= 'a
-> ('n
* 'a
)
32 type '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
}
50 (* ----------------------------------------------------------------------- *)
53 type ('a
,'n
) combiner_inout
= 'a
-> 'n
55 type '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
}
78 type ('mc
,'n
) cmcode
= 'n
-> 'mc
Ast0.mcode
-> 'n
79 type ('mc
,'n
) flat_cmcode
= 'mc
Ast0.mcode
-> 'n
80 type ('cd
,'n
) ccode
= 'n combiner_rec_functions
-> ('cd
-> 'n
) -> 'cd
-> 'n
82 type 'n combiner_functions
=
83 {combiner_meta_mcode
: (Ast.meta_name
,'n
) cmcode
;
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
}
111 (* ----------------------------------------------------------------------- *)
114 type 'a rebuilder_inout
= 'a
-> 'a
116 type 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
}
139 type 'mc rmcode
= 'mc
Ast0.mcode rebuilder_inout
141 rebuilder_rec_functions
-> ('cd rebuilder_inout
) -> 'cd rebuilder_inout
143 type rebuilder_functions
=
144 {rebuilder_meta_mcode
: Ast_cocci.meta_name rmcode
;
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
}
172 (* ----------------------------------------------------------------------- *)
173 (* combiner_rebuilder *)
175 type ('mc
,'a
) rcmcode
= 'a
-> 'mc
Ast0.mcode
-> ('a
* 'mc
Ast0.mcode
)
176 type ('cd
,'a
) rccode
=
177 'a all_functions
-> ('cd
-> ('a
* 'cd
)) -> 'cd
-> ('a
* 'cd
)
179 type 'n combiner_rebuilder_functions
=
180 {combiner_rebuilder_meta_mcode
: (Ast_cocci.meta_name
,'n
) rcmcode
;
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
}