remove coroutine keyword
[hiphop-php.git] / hphp / hack / src / parser / flatten_smart_constructors.rs
blobf867c35f5ddf789391661ec87cae9567faf5c28f
1 /**
2  * Copyright (c) 2016, Facebook, Inc.
3  * All rights reserved.
4  *
5  * This source code is licensed under the MIT license found in the
6  * LICENSE file in the "hack" directory of this source tree. An additional
7  * directory.
8  *
9  **
10  *
11  * THIS FILE IS @generated; DO NOT EDIT IT
12  * To regenerate this file, run
13  *
14  *   buck run //hphp/hack/src:generate_full_fidelity
15  *
16  **
17  *
18  */
19 use smart_constructors::SmartConstructors;
21 pub trait FlattenOp {
22     type S;
23     fn is_zero(s: &Self::S) -> bool;
24     fn zero() -> Self::S;
25     fn flatten(&self, lst: Vec<Self::S>) -> Self::S;
28 pub trait FlattenSmartConstructors<'src, State>
29 : SmartConstructors<'src, State> + FlattenOp<S=<Self as SmartConstructors<'src, State>>::R>
31     fn make_missing(&mut self, _: usize) -> Self::R {
32        Self::zero()
33     }
35     fn make_token(&mut self, _: Self::Token) -> Self::R {
36         Self::zero()
37     }
39     fn make_list(&mut self, _: Vec<Self::R>, _: usize) -> Self::R {
40         Self::zero()
41     }
43     fn make_end_of_file(&mut self, arg0: Self::R) -> Self::R {
44         if Self::is_zero(&arg0) {
45           Self::zero()
46         } else {
47           self.flatten(vec!(arg0))
48         }
49     }
51     fn make_script(&mut self, arg0: Self::R) -> Self::R {
52         if Self::is_zero(&arg0) {
53           Self::zero()
54         } else {
55           self.flatten(vec!(arg0))
56         }
57     }
59     fn make_qualified_name(&mut self, arg0: Self::R) -> Self::R {
60         if Self::is_zero(&arg0) {
61           Self::zero()
62         } else {
63           self.flatten(vec!(arg0))
64         }
65     }
67     fn make_simple_type_specifier(&mut self, arg0: Self::R) -> Self::R {
68         if Self::is_zero(&arg0) {
69           Self::zero()
70         } else {
71           self.flatten(vec!(arg0))
72         }
73     }
75     fn make_literal_expression(&mut self, arg0: Self::R) -> Self::R {
76         if Self::is_zero(&arg0) {
77           Self::zero()
78         } else {
79           self.flatten(vec!(arg0))
80         }
81     }
83     fn make_prefixed_string_expression(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
84         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
85           Self::zero()
86         } else {
87           self.flatten(vec!(arg0, arg1))
88         }
89     }
91     fn make_variable_expression(&mut self, arg0: Self::R) -> Self::R {
92         if Self::is_zero(&arg0) {
93           Self::zero()
94         } else {
95           self.flatten(vec!(arg0))
96         }
97     }
99     fn make_pipe_variable_expression(&mut self, arg0: Self::R) -> Self::R {
100         if Self::is_zero(&arg0) {
101           Self::zero()
102         } else {
103           self.flatten(vec!(arg0))
104         }
105     }
107     fn make_file_attribute_specification(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
108         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
109           Self::zero()
110         } else {
111           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
112         }
113     }
115     fn make_enum_declaration(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R, arg6: Self::R, arg7: Self::R, arg8: Self::R) -> Self::R {
116         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) && Self::is_zero(&arg6) && Self::is_zero(&arg7) && Self::is_zero(&arg8) {
117           Self::zero()
118         } else {
119           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8))
120         }
121     }
123     fn make_enumerator(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
124         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
125           Self::zero()
126         } else {
127           self.flatten(vec!(arg0, arg1, arg2, arg3))
128         }
129     }
131     fn make_record_declaration(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R, arg6: Self::R, arg7: Self::R, arg8: Self::R) -> Self::R {
132         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) && Self::is_zero(&arg6) && Self::is_zero(&arg7) && Self::is_zero(&arg8) {
133           Self::zero()
134         } else {
135           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8))
136         }
137     }
139     fn make_record_field(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
140         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
141           Self::zero()
142         } else {
143           self.flatten(vec!(arg0, arg1, arg2, arg3))
144         }
145     }
147     fn make_alias_declaration(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R, arg6: Self::R, arg7: Self::R) -> Self::R {
148         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) && Self::is_zero(&arg6) && Self::is_zero(&arg7) {
149           Self::zero()
150         } else {
151           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7))
152         }
153     }
155     fn make_property_declaration(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
156         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
157           Self::zero()
158         } else {
159           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
160         }
161     }
163     fn make_property_declarator(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
164         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
165           Self::zero()
166         } else {
167           self.flatten(vec!(arg0, arg1))
168         }
169     }
171     fn make_namespace_declaration(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
172         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
173           Self::zero()
174         } else {
175           self.flatten(vec!(arg0, arg1))
176         }
177     }
179     fn make_namespace_declaration_header(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
180         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
181           Self::zero()
182         } else {
183           self.flatten(vec!(arg0, arg1))
184         }
185     }
187     fn make_namespace_body(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
188         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
189           Self::zero()
190         } else {
191           self.flatten(vec!(arg0, arg1, arg2))
192         }
193     }
195     fn make_namespace_empty_body(&mut self, arg0: Self::R) -> Self::R {
196         if Self::is_zero(&arg0) {
197           Self::zero()
198         } else {
199           self.flatten(vec!(arg0))
200         }
201     }
203     fn make_namespace_use_declaration(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
204         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
205           Self::zero()
206         } else {
207           self.flatten(vec!(arg0, arg1, arg2, arg3))
208         }
209     }
211     fn make_namespace_group_use_declaration(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R, arg6: Self::R) -> Self::R {
212         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) && Self::is_zero(&arg6) {
213           Self::zero()
214         } else {
215           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5, arg6))
216         }
217     }
219     fn make_namespace_use_clause(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
220         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
221           Self::zero()
222         } else {
223           self.flatten(vec!(arg0, arg1, arg2, arg3))
224         }
225     }
227     fn make_function_declaration(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
228         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
229           Self::zero()
230         } else {
231           self.flatten(vec!(arg0, arg1, arg2))
232         }
233     }
235     fn make_function_declaration_header(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R, arg6: Self::R, arg7: Self::R, arg8: Self::R, arg9: Self::R) -> Self::R {
236         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) && Self::is_zero(&arg6) && Self::is_zero(&arg7) && Self::is_zero(&arg8) && Self::is_zero(&arg9) {
237           Self::zero()
238         } else {
239           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9))
240         }
241     }
243     fn make_where_clause(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
244         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
245           Self::zero()
246         } else {
247           self.flatten(vec!(arg0, arg1))
248         }
249     }
251     fn make_where_constraint(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
252         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
253           Self::zero()
254         } else {
255           self.flatten(vec!(arg0, arg1, arg2))
256         }
257     }
259     fn make_methodish_declaration(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
260         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
261           Self::zero()
262         } else {
263           self.flatten(vec!(arg0, arg1, arg2, arg3))
264         }
265     }
267     fn make_methodish_trait_resolution(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
268         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
269           Self::zero()
270         } else {
271           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
272         }
273     }
275     fn make_classish_declaration(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R, arg6: Self::R, arg7: Self::R, arg8: Self::R, arg9: Self::R, arg10: Self::R, arg11: Self::R) -> Self::R {
276         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) && Self::is_zero(&arg6) && Self::is_zero(&arg7) && Self::is_zero(&arg8) && Self::is_zero(&arg9) && Self::is_zero(&arg10) && Self::is_zero(&arg11) {
277           Self::zero()
278         } else {
279           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11))
280         }
281     }
283     fn make_classish_body(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
284         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
285           Self::zero()
286         } else {
287           self.flatten(vec!(arg0, arg1, arg2))
288         }
289     }
291     fn make_trait_use_precedence_item(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
292         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
293           Self::zero()
294         } else {
295           self.flatten(vec!(arg0, arg1, arg2))
296         }
297     }
299     fn make_trait_use_alias_item(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
300         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
301           Self::zero()
302         } else {
303           self.flatten(vec!(arg0, arg1, arg2, arg3))
304         }
305     }
307     fn make_trait_use_conflict_resolution(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
308         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
309           Self::zero()
310         } else {
311           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
312         }
313     }
315     fn make_trait_use(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
316         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
317           Self::zero()
318         } else {
319           self.flatten(vec!(arg0, arg1, arg2))
320         }
321     }
323     fn make_require_clause(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
324         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
325           Self::zero()
326         } else {
327           self.flatten(vec!(arg0, arg1, arg2, arg3))
328         }
329     }
331     fn make_const_declaration(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
332         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
333           Self::zero()
334         } else {
335           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
336         }
337     }
339     fn make_constant_declarator(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
340         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
341           Self::zero()
342         } else {
343           self.flatten(vec!(arg0, arg1))
344         }
345     }
347     fn make_type_const_declaration(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R, arg6: Self::R, arg7: Self::R, arg8: Self::R, arg9: Self::R) -> Self::R {
348         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) && Self::is_zero(&arg6) && Self::is_zero(&arg7) && Self::is_zero(&arg8) && Self::is_zero(&arg9) {
349           Self::zero()
350         } else {
351           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9))
352         }
353     }
355     fn make_decorated_expression(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
356         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
357           Self::zero()
358         } else {
359           self.flatten(vec!(arg0, arg1))
360         }
361     }
363     fn make_parameter_declaration(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R) -> Self::R {
364         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) {
365           Self::zero()
366         } else {
367           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5))
368         }
369     }
371     fn make_variadic_parameter(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
372         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
373           Self::zero()
374         } else {
375           self.flatten(vec!(arg0, arg1, arg2))
376         }
377     }
379     fn make_old_attribute_specification(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
380         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
381           Self::zero()
382         } else {
383           self.flatten(vec!(arg0, arg1, arg2))
384         }
385     }
387     fn make_attribute_specification(&mut self, arg0: Self::R) -> Self::R {
388         if Self::is_zero(&arg0) {
389           Self::zero()
390         } else {
391           self.flatten(vec!(arg0))
392         }
393     }
395     fn make_attribute(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
396         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
397           Self::zero()
398         } else {
399           self.flatten(vec!(arg0, arg1))
400         }
401     }
403     fn make_inclusion_expression(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
404         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
405           Self::zero()
406         } else {
407           self.flatten(vec!(arg0, arg1))
408         }
409     }
411     fn make_inclusion_directive(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
412         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
413           Self::zero()
414         } else {
415           self.flatten(vec!(arg0, arg1))
416         }
417     }
419     fn make_compound_statement(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
420         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
421           Self::zero()
422         } else {
423           self.flatten(vec!(arg0, arg1, arg2))
424         }
425     }
427     fn make_expression_statement(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
428         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
429           Self::zero()
430         } else {
431           self.flatten(vec!(arg0, arg1))
432         }
433     }
435     fn make_markup_section(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
436         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
437           Self::zero()
438         } else {
439           self.flatten(vec!(arg0, arg1))
440         }
441     }
443     fn make_markup_suffix(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
444         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
445           Self::zero()
446         } else {
447           self.flatten(vec!(arg0, arg1))
448         }
449     }
451     fn make_unset_statement(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
452         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
453           Self::zero()
454         } else {
455           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
456         }
457     }
459     fn make_using_statement_block_scoped(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R) -> Self::R {
460         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) {
461           Self::zero()
462         } else {
463           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5))
464         }
465     }
467     fn make_using_statement_function_scoped(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
468         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
469           Self::zero()
470         } else {
471           self.flatten(vec!(arg0, arg1, arg2, arg3))
472         }
473     }
475     fn make_while_statement(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
476         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
477           Self::zero()
478         } else {
479           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
480         }
481     }
483     fn make_if_statement(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R, arg6: Self::R) -> Self::R {
484         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) && Self::is_zero(&arg6) {
485           Self::zero()
486         } else {
487           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5, arg6))
488         }
489     }
491     fn make_elseif_clause(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
492         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
493           Self::zero()
494         } else {
495           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
496         }
497     }
499     fn make_else_clause(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
500         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
501           Self::zero()
502         } else {
503           self.flatten(vec!(arg0, arg1))
504         }
505     }
507     fn make_try_statement(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
508         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
509           Self::zero()
510         } else {
511           self.flatten(vec!(arg0, arg1, arg2, arg3))
512         }
513     }
515     fn make_catch_clause(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R) -> Self::R {
516         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) {
517           Self::zero()
518         } else {
519           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5))
520         }
521     }
523     fn make_finally_clause(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
524         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
525           Self::zero()
526         } else {
527           self.flatten(vec!(arg0, arg1))
528         }
529     }
531     fn make_do_statement(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R, arg6: Self::R) -> Self::R {
532         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) && Self::is_zero(&arg6) {
533           Self::zero()
534         } else {
535           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5, arg6))
536         }
537     }
539     fn make_for_statement(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R, arg6: Self::R, arg7: Self::R, arg8: Self::R) -> Self::R {
540         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) && Self::is_zero(&arg6) && Self::is_zero(&arg7) && Self::is_zero(&arg8) {
541           Self::zero()
542         } else {
543           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8))
544         }
545     }
547     fn make_foreach_statement(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R, arg6: Self::R, arg7: Self::R, arg8: Self::R, arg9: Self::R) -> Self::R {
548         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) && Self::is_zero(&arg6) && Self::is_zero(&arg7) && Self::is_zero(&arg8) && Self::is_zero(&arg9) {
549           Self::zero()
550         } else {
551           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9))
552         }
553     }
555     fn make_switch_statement(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R, arg6: Self::R) -> Self::R {
556         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) && Self::is_zero(&arg6) {
557           Self::zero()
558         } else {
559           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5, arg6))
560         }
561     }
563     fn make_switch_section(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
564         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
565           Self::zero()
566         } else {
567           self.flatten(vec!(arg0, arg1, arg2))
568         }
569     }
571     fn make_switch_fallthrough(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
572         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
573           Self::zero()
574         } else {
575           self.flatten(vec!(arg0, arg1))
576         }
577     }
579     fn make_case_label(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
580         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
581           Self::zero()
582         } else {
583           self.flatten(vec!(arg0, arg1, arg2))
584         }
585     }
587     fn make_default_label(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
588         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
589           Self::zero()
590         } else {
591           self.flatten(vec!(arg0, arg1))
592         }
593     }
595     fn make_return_statement(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
596         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
597           Self::zero()
598         } else {
599           self.flatten(vec!(arg0, arg1, arg2))
600         }
601     }
603     fn make_goto_label(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
604         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
605           Self::zero()
606         } else {
607           self.flatten(vec!(arg0, arg1))
608         }
609     }
611     fn make_goto_statement(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
612         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
613           Self::zero()
614         } else {
615           self.flatten(vec!(arg0, arg1, arg2))
616         }
617     }
619     fn make_throw_statement(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
620         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
621           Self::zero()
622         } else {
623           self.flatten(vec!(arg0, arg1, arg2))
624         }
625     }
627     fn make_break_statement(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
628         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
629           Self::zero()
630         } else {
631           self.flatten(vec!(arg0, arg1))
632         }
633     }
635     fn make_continue_statement(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
636         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
637           Self::zero()
638         } else {
639           self.flatten(vec!(arg0, arg1))
640         }
641     }
643     fn make_echo_statement(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
644         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
645           Self::zero()
646         } else {
647           self.flatten(vec!(arg0, arg1, arg2))
648         }
649     }
651     fn make_concurrent_statement(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
652         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
653           Self::zero()
654         } else {
655           self.flatten(vec!(arg0, arg1))
656         }
657     }
659     fn make_simple_initializer(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
660         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
661           Self::zero()
662         } else {
663           self.flatten(vec!(arg0, arg1))
664         }
665     }
667     fn make_anonymous_class(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R, arg6: Self::R, arg7: Self::R, arg8: Self::R) -> Self::R {
668         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) && Self::is_zero(&arg6) && Self::is_zero(&arg7) && Self::is_zero(&arg8) {
669           Self::zero()
670         } else {
671           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8))
672         }
673     }
675     fn make_anonymous_function(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R, arg6: Self::R, arg7: Self::R, arg8: Self::R, arg9: Self::R, arg10: Self::R) -> Self::R {
676         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) && Self::is_zero(&arg6) && Self::is_zero(&arg7) && Self::is_zero(&arg8) && Self::is_zero(&arg9) && Self::is_zero(&arg10) {
677           Self::zero()
678         } else {
679           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10))
680         }
681     }
683     fn make_anonymous_function_use_clause(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
684         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
685           Self::zero()
686         } else {
687           self.flatten(vec!(arg0, arg1, arg2, arg3))
688         }
689     }
691     fn make_lambda_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
692         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
693           Self::zero()
694         } else {
695           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
696         }
697     }
699     fn make_lambda_signature(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
700         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
701           Self::zero()
702         } else {
703           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
704         }
705     }
707     fn make_cast_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
708         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
709           Self::zero()
710         } else {
711           self.flatten(vec!(arg0, arg1, arg2, arg3))
712         }
713     }
715     fn make_scope_resolution_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
716         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
717           Self::zero()
718         } else {
719           self.flatten(vec!(arg0, arg1, arg2))
720         }
721     }
723     fn make_member_selection_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
724         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
725           Self::zero()
726         } else {
727           self.flatten(vec!(arg0, arg1, arg2))
728         }
729     }
731     fn make_safe_member_selection_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
732         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
733           Self::zero()
734         } else {
735           self.flatten(vec!(arg0, arg1, arg2))
736         }
737     }
739     fn make_embedded_member_selection_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
740         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
741           Self::zero()
742         } else {
743           self.flatten(vec!(arg0, arg1, arg2))
744         }
745     }
747     fn make_yield_expression(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
748         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
749           Self::zero()
750         } else {
751           self.flatten(vec!(arg0, arg1))
752         }
753     }
755     fn make_prefix_unary_expression(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
756         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
757           Self::zero()
758         } else {
759           self.flatten(vec!(arg0, arg1))
760         }
761     }
763     fn make_postfix_unary_expression(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
764         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
765           Self::zero()
766         } else {
767           self.flatten(vec!(arg0, arg1))
768         }
769     }
771     fn make_binary_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
772         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
773           Self::zero()
774         } else {
775           self.flatten(vec!(arg0, arg1, arg2))
776         }
777     }
779     fn make_is_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
780         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
781           Self::zero()
782         } else {
783           self.flatten(vec!(arg0, arg1, arg2))
784         }
785     }
787     fn make_as_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
788         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
789           Self::zero()
790         } else {
791           self.flatten(vec!(arg0, arg1, arg2))
792         }
793     }
795     fn make_nullable_as_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
796         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
797           Self::zero()
798         } else {
799           self.flatten(vec!(arg0, arg1, arg2))
800         }
801     }
803     fn make_conditional_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
804         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
805           Self::zero()
806         } else {
807           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
808         }
809     }
811     fn make_eval_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
812         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
813           Self::zero()
814         } else {
815           self.flatten(vec!(arg0, arg1, arg2, arg3))
816         }
817     }
819     fn make_define_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
820         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
821           Self::zero()
822         } else {
823           self.flatten(vec!(arg0, arg1, arg2, arg3))
824         }
825     }
827     fn make_isset_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
828         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
829           Self::zero()
830         } else {
831           self.flatten(vec!(arg0, arg1, arg2, arg3))
832         }
833     }
835     fn make_function_call_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
836         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
837           Self::zero()
838         } else {
839           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
840         }
841     }
843     fn make_function_pointer_expression(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
844         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
845           Self::zero()
846         } else {
847           self.flatten(vec!(arg0, arg1))
848         }
849     }
851     fn make_parenthesized_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
852         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
853           Self::zero()
854         } else {
855           self.flatten(vec!(arg0, arg1, arg2))
856         }
857     }
859     fn make_braced_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
860         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
861           Self::zero()
862         } else {
863           self.flatten(vec!(arg0, arg1, arg2))
864         }
865     }
867     fn make_embedded_braced_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
868         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
869           Self::zero()
870         } else {
871           self.flatten(vec!(arg0, arg1, arg2))
872         }
873     }
875     fn make_list_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
876         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
877           Self::zero()
878         } else {
879           self.flatten(vec!(arg0, arg1, arg2, arg3))
880         }
881     }
883     fn make_collection_literal_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
884         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
885           Self::zero()
886         } else {
887           self.flatten(vec!(arg0, arg1, arg2, arg3))
888         }
889     }
891     fn make_object_creation_expression(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
892         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
893           Self::zero()
894         } else {
895           self.flatten(vec!(arg0, arg1))
896         }
897     }
899     fn make_constructor_call(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
900         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
901           Self::zero()
902         } else {
903           self.flatten(vec!(arg0, arg1, arg2, arg3))
904         }
905     }
907     fn make_record_creation_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
908         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
909           Self::zero()
910         } else {
911           self.flatten(vec!(arg0, arg1, arg2, arg3))
912         }
913     }
915     fn make_array_intrinsic_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
916         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
917           Self::zero()
918         } else {
919           self.flatten(vec!(arg0, arg1, arg2, arg3))
920         }
921     }
923     fn make_darray_intrinsic_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
924         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
925           Self::zero()
926         } else {
927           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
928         }
929     }
931     fn make_dictionary_intrinsic_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
932         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
933           Self::zero()
934         } else {
935           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
936         }
937     }
939     fn make_keyset_intrinsic_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
940         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
941           Self::zero()
942         } else {
943           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
944         }
945     }
947     fn make_varray_intrinsic_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
948         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
949           Self::zero()
950         } else {
951           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
952         }
953     }
955     fn make_vector_intrinsic_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
956         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
957           Self::zero()
958         } else {
959           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
960         }
961     }
963     fn make_element_initializer(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
964         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
965           Self::zero()
966         } else {
967           self.flatten(vec!(arg0, arg1, arg2))
968         }
969     }
971     fn make_subscript_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
972         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
973           Self::zero()
974         } else {
975           self.flatten(vec!(arg0, arg1, arg2, arg3))
976         }
977     }
979     fn make_embedded_subscript_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
980         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
981           Self::zero()
982         } else {
983           self.flatten(vec!(arg0, arg1, arg2, arg3))
984         }
985     }
987     fn make_awaitable_creation_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
988         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
989           Self::zero()
990         } else {
991           self.flatten(vec!(arg0, arg1, arg2))
992         }
993     }
995     fn make_xhp_children_declaration(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
996         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
997           Self::zero()
998         } else {
999           self.flatten(vec!(arg0, arg1, arg2))
1000         }
1001     }
1003     fn make_xhp_children_parenthesized_list(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
1004         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
1005           Self::zero()
1006         } else {
1007           self.flatten(vec!(arg0, arg1, arg2))
1008         }
1009     }
1011     fn make_xhp_category_declaration(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
1012         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
1013           Self::zero()
1014         } else {
1015           self.flatten(vec!(arg0, arg1, arg2))
1016         }
1017     }
1019     fn make_xhp_enum_type(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
1020         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
1021           Self::zero()
1022         } else {
1023           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
1024         }
1025     }
1027     fn make_xhp_lateinit(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
1028         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
1029           Self::zero()
1030         } else {
1031           self.flatten(vec!(arg0, arg1))
1032         }
1033     }
1035     fn make_xhp_required(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
1036         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
1037           Self::zero()
1038         } else {
1039           self.flatten(vec!(arg0, arg1))
1040         }
1041     }
1043     fn make_xhp_class_attribute_declaration(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
1044         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
1045           Self::zero()
1046         } else {
1047           self.flatten(vec!(arg0, arg1, arg2))
1048         }
1049     }
1051     fn make_xhp_class_attribute(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
1052         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
1053           Self::zero()
1054         } else {
1055           self.flatten(vec!(arg0, arg1, arg2, arg3))
1056         }
1057     }
1059     fn make_xhp_simple_class_attribute(&mut self, arg0: Self::R) -> Self::R {
1060         if Self::is_zero(&arg0) {
1061           Self::zero()
1062         } else {
1063           self.flatten(vec!(arg0))
1064         }
1065     }
1067     fn make_xhp_simple_attribute(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
1068         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
1069           Self::zero()
1070         } else {
1071           self.flatten(vec!(arg0, arg1, arg2))
1072         }
1073     }
1075     fn make_xhp_spread_attribute(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
1076         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
1077           Self::zero()
1078         } else {
1079           self.flatten(vec!(arg0, arg1, arg2, arg3))
1080         }
1081     }
1083     fn make_xhp_open(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
1084         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
1085           Self::zero()
1086         } else {
1087           self.flatten(vec!(arg0, arg1, arg2, arg3))
1088         }
1089     }
1091     fn make_xhp_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
1092         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
1093           Self::zero()
1094         } else {
1095           self.flatten(vec!(arg0, arg1, arg2))
1096         }
1097     }
1099     fn make_xhp_close(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
1100         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
1101           Self::zero()
1102         } else {
1103           self.flatten(vec!(arg0, arg1, arg2))
1104         }
1105     }
1107     fn make_type_constant(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
1108         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
1109           Self::zero()
1110         } else {
1111           self.flatten(vec!(arg0, arg1, arg2))
1112         }
1113     }
1115     fn make_pu_access(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
1116         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
1117           Self::zero()
1118         } else {
1119           self.flatten(vec!(arg0, arg1, arg2))
1120         }
1121     }
1123     fn make_vector_type_specifier(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
1124         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
1125           Self::zero()
1126         } else {
1127           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
1128         }
1129     }
1131     fn make_keyset_type_specifier(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
1132         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
1133           Self::zero()
1134         } else {
1135           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
1136         }
1137     }
1139     fn make_tuple_type_explicit_specifier(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
1140         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
1141           Self::zero()
1142         } else {
1143           self.flatten(vec!(arg0, arg1, arg2, arg3))
1144         }
1145     }
1147     fn make_varray_type_specifier(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
1148         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
1149           Self::zero()
1150         } else {
1151           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
1152         }
1153     }
1155     fn make_vector_array_type_specifier(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
1156         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
1157           Self::zero()
1158         } else {
1159           self.flatten(vec!(arg0, arg1, arg2, arg3))
1160         }
1161     }
1163     fn make_type_parameter(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R) -> Self::R {
1164         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) {
1165           Self::zero()
1166         } else {
1167           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5))
1168         }
1169     }
1171     fn make_type_constraint(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
1172         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
1173           Self::zero()
1174         } else {
1175           self.flatten(vec!(arg0, arg1))
1176         }
1177     }
1179     fn make_darray_type_specifier(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R, arg6: Self::R) -> Self::R {
1180         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) && Self::is_zero(&arg6) {
1181           Self::zero()
1182         } else {
1183           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5, arg6))
1184         }
1185     }
1187     fn make_map_array_type_specifier(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R) -> Self::R {
1188         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) {
1189           Self::zero()
1190         } else {
1191           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5))
1192         }
1193     }
1195     fn make_dictionary_type_specifier(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
1196         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
1197           Self::zero()
1198         } else {
1199           self.flatten(vec!(arg0, arg1, arg2, arg3))
1200         }
1201     }
1203     fn make_closure_type_specifier(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R, arg6: Self::R, arg7: Self::R) -> Self::R {
1204         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) && Self::is_zero(&arg6) && Self::is_zero(&arg7) {
1205           Self::zero()
1206         } else {
1207           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7))
1208         }
1209     }
1211     fn make_closure_parameter_type_specifier(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
1212         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
1213           Self::zero()
1214         } else {
1215           self.flatten(vec!(arg0, arg1))
1216         }
1217     }
1219     fn make_classname_type_specifier(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
1220         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
1221           Self::zero()
1222         } else {
1223           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
1224         }
1225     }
1227     fn make_field_specifier(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
1228         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
1229           Self::zero()
1230         } else {
1231           self.flatten(vec!(arg0, arg1, arg2, arg3))
1232         }
1233     }
1235     fn make_field_initializer(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
1236         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
1237           Self::zero()
1238         } else {
1239           self.flatten(vec!(arg0, arg1, arg2))
1240         }
1241     }
1243     fn make_shape_type_specifier(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
1244         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
1245           Self::zero()
1246         } else {
1247           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
1248         }
1249     }
1251     fn make_shape_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
1252         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
1253           Self::zero()
1254         } else {
1255           self.flatten(vec!(arg0, arg1, arg2, arg3))
1256         }
1257     }
1259     fn make_tuple_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
1260         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
1261           Self::zero()
1262         } else {
1263           self.flatten(vec!(arg0, arg1, arg2, arg3))
1264         }
1265     }
1267     fn make_generic_type_specifier(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
1268         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
1269           Self::zero()
1270         } else {
1271           self.flatten(vec!(arg0, arg1))
1272         }
1273     }
1275     fn make_nullable_type_specifier(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
1276         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
1277           Self::zero()
1278         } else {
1279           self.flatten(vec!(arg0, arg1))
1280         }
1281     }
1283     fn make_like_type_specifier(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
1284         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
1285           Self::zero()
1286         } else {
1287           self.flatten(vec!(arg0, arg1))
1288         }
1289     }
1291     fn make_soft_type_specifier(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
1292         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
1293           Self::zero()
1294         } else {
1295           self.flatten(vec!(arg0, arg1))
1296         }
1297     }
1299     fn make_attributized_specifier(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
1300         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
1301           Self::zero()
1302         } else {
1303           self.flatten(vec!(arg0, arg1))
1304         }
1305     }
1307     fn make_reified_type_argument(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
1308         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
1309           Self::zero()
1310         } else {
1311           self.flatten(vec!(arg0, arg1))
1312         }
1313     }
1315     fn make_type_arguments(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
1316         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
1317           Self::zero()
1318         } else {
1319           self.flatten(vec!(arg0, arg1, arg2))
1320         }
1321     }
1323     fn make_type_parameters(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
1324         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
1325           Self::zero()
1326         } else {
1327           self.flatten(vec!(arg0, arg1, arg2))
1328         }
1329     }
1331     fn make_tuple_type_specifier(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
1332         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
1333           Self::zero()
1334         } else {
1335           self.flatten(vec!(arg0, arg1, arg2))
1336         }
1337     }
1339     fn make_union_type_specifier(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
1340         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
1341           Self::zero()
1342         } else {
1343           self.flatten(vec!(arg0, arg1, arg2))
1344         }
1345     }
1347     fn make_intersection_type_specifier(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R) -> Self::R {
1348         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) {
1349           Self::zero()
1350         } else {
1351           self.flatten(vec!(arg0, arg1, arg2))
1352         }
1353     }
1355     fn make_error(&mut self, arg0: Self::R) -> Self::R {
1356         if Self::is_zero(&arg0) {
1357           Self::zero()
1358         } else {
1359           self.flatten(vec!(arg0))
1360         }
1361     }
1363     fn make_list_item(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
1364         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
1365           Self::zero()
1366         } else {
1367           self.flatten(vec!(arg0, arg1))
1368         }
1369     }
1371     fn make_pocket_atom_expression(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
1372         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
1373           Self::zero()
1374         } else {
1375           self.flatten(vec!(arg0, arg1))
1376         }
1377     }
1379     fn make_pocket_identifier_expression(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R) -> Self::R {
1380         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) {
1381           Self::zero()
1382         } else {
1383           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4))
1384         }
1385     }
1387     fn make_pocket_atom_mapping_declaration(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R) -> Self::R {
1388         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) {
1389           Self::zero()
1390         } else {
1391           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5))
1392         }
1393     }
1395     fn make_pocket_enum_declaration(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R, arg4: Self::R, arg5: Self::R, arg6: Self::R) -> Self::R {
1396         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) && Self::is_zero(&arg4) && Self::is_zero(&arg5) && Self::is_zero(&arg6) {
1397           Self::zero()
1398         } else {
1399           self.flatten(vec!(arg0, arg1, arg2, arg3, arg4, arg5, arg6))
1400         }
1401     }
1403     fn make_pocket_field_type_expr_declaration(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
1404         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
1405           Self::zero()
1406         } else {
1407           self.flatten(vec!(arg0, arg1, arg2, arg3))
1408         }
1409     }
1411     fn make_pocket_field_type_declaration(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
1412         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
1413           Self::zero()
1414         } else {
1415           self.flatten(vec!(arg0, arg1, arg2, arg3))
1416         }
1417     }
1419     fn make_pocket_mapping_id_declaration(&mut self, arg0: Self::R, arg1: Self::R) -> Self::R {
1420         if Self::is_zero(&arg0) && Self::is_zero(&arg1) {
1421           Self::zero()
1422         } else {
1423           self.flatten(vec!(arg0, arg1))
1424         }
1425     }
1427     fn make_pocket_mapping_type_declaration(&mut self, arg0: Self::R, arg1: Self::R, arg2: Self::R, arg3: Self::R) -> Self::R {
1428         if Self::is_zero(&arg0) && Self::is_zero(&arg1) && Self::is_zero(&arg2) && Self::is_zero(&arg3) {
1429           Self::zero()
1430         } else {
1431           self.flatten(vec!(arg0, arg1, arg2, arg3))
1432         }
1433     }