1use super::{TraversalResult, TreeTraversalMode};
2use crate::{ast::nodes::*, parser::lexer::SourcePosition};
3
4pub trait AstConverting {
11 fn push_source_position(&mut self, start: &SourcePosition, end: &SourcePosition);
13
14 fn pop_source_position(&mut self);
16
17 fn emit_byte_str(
19 &mut self,
20 mode: TreeTraversalMode,
21 node: &NodeByteStr,
22 ) -> Result<TraversalResult, String>;
23
24 fn emit_type_name_identifier(
26 &mut self,
27 mode: TreeTraversalMode,
28 node: &NodeTypeNameIdentifier,
29 ) -> Result<TraversalResult, String>;
30
31 fn emit_imported_name(
33 &mut self,
34 mode: TreeTraversalMode,
35 node: &NodeImportedName,
36 ) -> Result<TraversalResult, String>;
37
38 fn emit_import_declarations(
40 &mut self,
41 mode: TreeTraversalMode,
42 node: &NodeImportDeclarations,
43 ) -> Result<TraversalResult, String>;
44
45 fn emit_meta_identifier(
47 &mut self,
48 mode: TreeTraversalMode,
49 node: &NodeMetaIdentifier,
50 ) -> Result<TraversalResult, String>;
51
52 fn emit_variable_identifier(
54 &mut self,
55 mode: TreeTraversalMode,
56 node: &NodeVariableIdentifier,
57 ) -> Result<TraversalResult, String>;
58
59 fn emit_builtin_arguments(
61 &mut self,
62 mode: TreeTraversalMode,
63 node: &NodeBuiltinArguments,
64 ) -> Result<TraversalResult, String>;
65
66 fn emit_type_map_key(
68 &mut self,
69 mode: TreeTraversalMode,
70 node: &NodeTypeMapKey,
71 ) -> Result<TraversalResult, String>;
72
73 fn emit_type_map_value(
75 &mut self,
76 mode: TreeTraversalMode,
77 node: &NodeTypeMapValue,
78 ) -> Result<TraversalResult, String>;
79
80 fn emit_type_argument(
82 &mut self,
83 mode: TreeTraversalMode,
84 node: &NodeTypeArgument,
85 ) -> Result<TraversalResult, String>;
86
87 fn emit_scilla_type(
89 &mut self,
90 mode: TreeTraversalMode,
91 node: &NodeScillaType,
92 ) -> Result<TraversalResult, String>;
93
94 fn emit_type_map_entry(
96 &mut self,
97 mode: TreeTraversalMode,
98 node: &NodeTypeMapEntry,
99 ) -> Result<TraversalResult, String>;
100
101 fn emit_address_type_field(
103 &mut self,
104 mode: TreeTraversalMode,
105 node: &NodeAddressTypeField,
106 ) -> Result<TraversalResult, String>;
107
108 fn emit_address_type(
110 &mut self,
111 mode: TreeTraversalMode,
112 node: &NodeAddressType,
113 ) -> Result<TraversalResult, String>;
114
115 fn emit_full_expression(
117 &mut self,
118 mode: TreeTraversalMode,
119 node: &NodeFullExpression,
120 ) -> Result<TraversalResult, String>;
121
122 fn emit_message_entry(
124 &mut self,
125 mode: TreeTraversalMode,
126 node: &NodeMessageEntry,
127 ) -> Result<TraversalResult, String>;
128
129 fn emit_pattern_match_expression_clause(
131 &mut self,
132 mode: TreeTraversalMode,
133 node: &NodePatternMatchExpressionClause,
134 ) -> Result<TraversalResult, String>;
135
136 fn emit_atomic_expression(
138 &mut self,
139 mode: TreeTraversalMode,
140 node: &NodeAtomicExpression,
141 ) -> Result<TraversalResult, String>;
142
143 fn emit_contract_type_arguments(
145 &mut self,
146 mode: TreeTraversalMode,
147 node: &NodeContractTypeArguments,
148 ) -> Result<TraversalResult, String>;
149
150 fn emit_value_literal(
152 &mut self,
153 mode: TreeTraversalMode,
154 node: &NodeValueLiteral,
155 ) -> Result<TraversalResult, String>;
156
157 fn emit_map_access(
159 &mut self,
160 mode: TreeTraversalMode,
161 node: &NodeMapAccess,
162 ) -> Result<TraversalResult, String>;
163
164 fn emit_pattern(
166 &mut self,
167 mode: TreeTraversalMode,
168 node: &NodePattern,
169 ) -> Result<TraversalResult, String>;
170
171 fn emit_argument_pattern(
173 &mut self,
174 mode: TreeTraversalMode,
175 node: &NodeArgumentPattern,
176 ) -> Result<TraversalResult, String>;
177
178 fn emit_pattern_match_clause(
180 &mut self,
181 mode: TreeTraversalMode,
182 node: &NodePatternMatchClause,
183 ) -> Result<TraversalResult, String>;
184
185 fn emit_blockchain_fetch_arguments(
187 &mut self,
188 mode: TreeTraversalMode,
189 node: &NodeBlockchainFetchArguments,
190 ) -> Result<TraversalResult, String>;
191
192 fn emit_statement(
194 &mut self,
195 mode: TreeTraversalMode,
196 node: &NodeStatement,
197 ) -> Result<TraversalResult, String>;
198
199 fn emit_remote_fetch_statement(
201 &mut self,
202 mode: TreeTraversalMode,
203 node: &NodeRemoteFetchStatement,
204 ) -> Result<TraversalResult, String>;
205
206 fn emit_component_id(
208 &mut self,
209 mode: TreeTraversalMode,
210 node: &NodeComponentId,
211 ) -> Result<TraversalResult, String>;
212
213 fn emit_component_parameters(
215 &mut self,
216 mode: TreeTraversalMode,
217 node: &NodeComponentParameters,
218 ) -> Result<TraversalResult, String>;
219
220 fn emit_parameter_pair(
222 &mut self,
223 mode: TreeTraversalMode,
224 node: &NodeParameterPair,
225 ) -> Result<TraversalResult, String>;
226
227 fn emit_component_body(
229 &mut self,
230 mode: TreeTraversalMode,
231 node: &NodeComponentBody,
232 ) -> Result<TraversalResult, String>;
233
234 fn emit_statement_block(
236 &mut self,
237 mode: TreeTraversalMode,
238 node: &NodeStatementBlock,
239 ) -> Result<TraversalResult, String>;
240
241 fn emit_typed_identifier(
243 &mut self,
244 mode: TreeTraversalMode,
245 node: &NodeTypedIdentifier,
246 ) -> Result<TraversalResult, String>;
247
248 fn emit_type_annotation(
250 &mut self,
251 mode: TreeTraversalMode,
252 node: &NodeTypeAnnotation,
253 ) -> Result<TraversalResult, String>;
254
255 fn emit_program(
257 &mut self,
258 mode: TreeTraversalMode,
259 node: &NodeProgram,
260 ) -> Result<TraversalResult, String>;
261
262 fn emit_library_definition(
264 &mut self,
265 mode: TreeTraversalMode,
266 node: &NodeLibraryDefinition,
267 ) -> Result<TraversalResult, String>;
268
269 fn emit_library_single_definition(
271 &mut self,
272 mode: TreeTraversalMode,
273 node: &NodeLibrarySingleDefinition,
274 ) -> Result<TraversalResult, String>;
275
276 fn emit_contract_definition(
278 &mut self,
279 mode: TreeTraversalMode,
280 node: &NodeContractDefinition,
281 ) -> Result<TraversalResult, String>;
282
283 fn emit_contract_field(
285 &mut self,
286 mode: TreeTraversalMode,
287 node: &NodeContractField,
288 ) -> Result<TraversalResult, String>;
289
290 fn emit_with_constraint(
292 &mut self,
293 mode: TreeTraversalMode,
294 node: &NodeWithConstraint,
295 ) -> Result<TraversalResult, String>;
296
297 fn emit_component_definition(
299 &mut self,
300 mode: TreeTraversalMode,
301 node: &NodeComponentDefinition,
302 ) -> Result<TraversalResult, String>;
303
304 fn emit_procedure_definition(
306 &mut self,
307 mode: TreeTraversalMode,
308 node: &NodeProcedureDefinition,
309 ) -> Result<TraversalResult, String>;
310
311 fn emit_transition_definition(
313 &mut self,
314 mode: TreeTraversalMode,
315 node: &NodeTransitionDefinition,
316 ) -> Result<TraversalResult, String>;
317
318 fn emit_type_alternative_clause(
320 &mut self,
321 mode: TreeTraversalMode,
322 node: &NodeTypeAlternativeClause,
323 ) -> Result<TraversalResult, String>;
324
325 fn emit_type_map_value_arguments(
327 &mut self,
328 mode: TreeTraversalMode,
329 node: &NodeTypeMapValueArguments,
330 ) -> Result<TraversalResult, String>;
331
332 fn emit_type_map_value_allowing_type_arguments(
334 &mut self,
335 mode: TreeTraversalMode,
336 node: &NodeTypeMapValueAllowingTypeArguments,
337 ) -> Result<TraversalResult, String>;
338}