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