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