• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2021-2024 Huawei Device Co., Ltd.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at
5#
6# http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14
15change_types:
16  - es2panda_arg:
17      name: '|arg_name|'
18      type:
19        name: ArenaVector
20        template_args:
21        - type: '|element_type|'
22      max_ptr_depth: 0
23    new_args:
24    - type: '|element_type|'
25      name: '|arg_name|'
26      increase_ptr_depth: 1
27      local_var_name: '|arg_name|'
28      namespace: ''
29    - type:
30        name: size_t
31      name: '|arg_name|Len'
32    return_args:
33    - type:
34        name: size_t
35        ptr_depth: 1
36      name: '|arg_name|Len'
37    cast:
38        expression: "\
39          ArenaVector<|new_args.0.namespace||es2panda_arg.type.template_args.0.type.name| |es2panda_arg.type.template_args.0.type.ptr_depth|> |arg_name|ArenaVector
40          {reinterpret_cast<Context *>(context)->allocator->Adapter()};\n
41          \tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
42          \t\tauto |es2panda_arg.type.template_args.0.type.ptr_depth||es2panda_arg.type.template_args.0.type.ref_depth||arg_name|Element1 = |arg_name|[i];\n
43          \t\t|template_nested_expression_1|\n
44          \t\t|arg_name|ArenaVector.push_back(|new_args.0.local_var_name|);\n
45          \t}"
46        var_name: '|arg_name|ArenaVector'
47        reverse_cast:
48          start: "\n
49            \tauto *ctx = reinterpret_cast<Context *>(context);\n
50            \tauto *ctxAllocator = ctx->allocator;\n
51            \tauto resultVector = "
52          end: ";\n
53            \t*|return_args.0.name| = resultVector|accessor|size();\n
54            \tauto res = ctxAllocator->New<|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|[]>(*|return_args.0.name|);\n
55            \tfor (size_t i = 0; i < *|return_args.0.name|; ++i) {\n
56            \tauto toPush = |reverse_template_nested_expression_1_start|(resultVector|accessor|at(i))|reverse_template_nested_expression_1_end|;\n
57            \t\tres[i] = reinterpret_cast<|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|>(toPush);\n
58            \t}"
59
60  - es2panda_arg:
61      name: '|arg_name|'
62      type:
63        name: ArenaVector
64        template_args:
65        - type: '|element_type|'
66      max_ptr_depth: 1
67      min_ptr_depth: 1
68    new_args:
69    - type: '|element_type|'
70      name: '|arg_name|'
71      increase_ptr_depth: 1
72      local_var_name: '|arg_name|'
73      namespace: ''
74    - type:
75        name: size_t
76      name: '|arg_name|Len'
77    return_args:
78    - type:
79        name: size_t
80        ptr_depth: 1
81      name: '|arg_name|Len'
82    cast:
83        expression: "\
84          auto *|arg_name|ArenaVector = reinterpret_cast<Context *>(context)->allocator->New<ArenaVector<
85          |new_args.0.namespace||es2panda_arg.type.template_args.0.type.name|
86          |es2panda_arg.type.template_args.0.type.ptr_depth|>>(reinterpret_cast<Context *>(context)->allocator->Adapter());\n
87          \tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
88          \t\tauto |es2panda_arg.type.template_args.0.type.ptr_depth||es2panda_arg.type.template_args.0.type.ref_depth||arg_name|Element1 = |arg_name|[i];\n
89          \t\t|template_nested_expression_1|\n
90          \t\t|arg_name|ArenaVector->push_back(|new_args.0.local_var_name|);\n
91          \t}"
92        var_name: '|arg_name|ArenaVector'
93        reverse_cast:
94          start: "\n
95            \tauto *ctx = reinterpret_cast<Context *>(context);\n
96            \tauto *ctxAllocator = ctx->allocator;\n
97            \tauto resultVector = "
98          end: ";\n
99            \t*|return_args.0.name| = resultVector|accessor|size();\n
100            \tauto res = ctxAllocator->New<|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|[]>(*|return_args.0.name|);\n
101            \tfor (size_t i = 0; i < *|return_args.0.name|; ++i) {\n
102            \tauto toPush = |reverse_template_nested_expression_1_start|(resultVector|accessor|at(i))|reverse_template_nested_expression_1_end|;\n
103            \t\tres[i] = reinterpret_cast<|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|>(toPush);\n
104            \t}"
105
106  - es2panda_arg:
107      name: '|arg_name|'
108      type:
109        name: vector
110        template_args:
111        - type: '|element_type|'
112      max_ptr_depth: 0
113    new_args:
114    - type: '|element_type|'
115      name: '|arg_name|'
116      increase_ptr_depth: 1
117      local_var_name: '|arg_name|'
118      namespace: ''
119    - type:
120        name: size_t
121      name: '|arg_name|Len'
122    return_args:
123    - type:
124        name: size_t
125        ptr_depth: 1
126      name: '|arg_name|Len'
127    cast:
128        expression: "\
129          \t\tstd::vector<|new_args.0.namespace||es2panda_arg.type.template_args.0.type.name| |es2panda_arg.type.template_args.0.type.ptr_depth|> |arg_name|Vector;\n
130          \t\tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
131          \t\tauto |es2panda_arg.type.template_args.0.type.ptr_depth||es2panda_arg.type.template_args.0.type.ref_depth||arg_name|Element1 = |arg_name|[i];\n
132          \t\t|template_nested_expression_1|\n
133          \t\t\t|arg_name|Vector.push_back(|new_args.0.local_var_name|);\n
134          \t\t}"
135        var_name: '|arg_name|Vector'
136        reverse_cast:
137          start: "\n
138            auto *ctx = reinterpret_cast<Context *>(context);\n
139            auto *ctxAllocator = ctx->allocator;\n
140            auto resultVector = "
141          end: ";\n
142            \t/* WARNING! This section has not been tested! */\n
143            \t*|return_args.0.name| = resultVector|accessor|size();\n
144            \tauto res = ctxAllocator->New<|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|[]>(*|return_args.0.name|);\n
145            \tfor (size_t i = 0; i < *|return_args.0.name|; ++i) {\n
146            \tauto toPush = |reverse_template_nested_expression_1_start|(resultVector|accessor|at(i))|reverse_template_nested_expression_1_end|;\n
147            \t\tres[i] = (|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|)(toPush);\n
148            \t}"
149
150  - es2panda_arg:
151      name: '|arg_name|'
152      type:
153        name: vector
154        template_args:
155        - type: '|element_type|'
156      max_ptr_depth: 1
157      min_ptr_depth: 1
158    new_args:
159    - type: '|element_type|'
160      name: '|arg_name|'
161      increase_ptr_depth: 1
162      local_var_name: '|arg_name|'
163      namespace: ''
164    - type:
165        name: size_t
166      name: '|arg_name|Len'
167    return_args:
168    - type:
169        name: size_t
170        ptr_depth: 1
171      name: '|arg_name|Len'
172    cast:
173        expression: "\
174          \t\tstd::vector<
175          |new_args.0.namespace||es2panda_arg.type.template_args.0.type.name| |es2panda_arg.type.template_args.0.type.ptr_depth|>
176          *|arg_name|Vector = reinterpret_cast<Context *>(context)->allocator->New<std::vector<
177          |new_args.0.namespace||es2panda_arg.type.template_args.0.type.name| |es2panda_arg.type.template_args.0.type.ptr_depth|>>();\n
178          \t\tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
179          \t\tauto |es2panda_arg.type.template_args.0.type.ptr_depth||es2panda_arg.type.template_args.0.type.ref_depth||arg_name|Element1 = |arg_name|[i];\n
180          \t\t|template_nested_expression_1|\n
181          \t\t\t|arg_name|Vector->push_back(|new_args.0.local_var_name|);\n
182          \t\t}"
183        var_name: '|arg_name|Vector'
184        reverse_cast:
185          start: "\n
186            auto *ctx = reinterpret_cast<Context *>(context);\n
187            auto *ctxAllocator = ctx->allocator;\n
188            auto *resultVector = "
189          end: ";\n
190            \t/* WARNING! This section has not been tested! */\n
191            \t*|return_args.0.name| = resultVector|accessor|size();\n
192            \tauto res = ctxAllocator->New<|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|[]>(*|return_args.0.name|);\n
193            \tfor (size_t i = 0; i < *|return_args.0.name|; ++i) {\n
194            \tauto toPush = |reverse_template_nested_expression_1_start|(resultVector|accessor|at(i))|reverse_template_nested_expression_1_end|;\n
195            \t\tres[i] = (|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|)(toPush);\n
196            \t}"
197
198  - es2panda_arg:
199      name: '|arg_name|'
200      type:
201        name: array
202        namespace: std
203        template_args:
204        - type: '|element_type|'
205      max_ptr_depth: 0
206    new_args:
207    - type: '|element_type|'
208      name: '|arg_name|'
209      increase_ptr_depth: 1
210      local_var_name: '|arg_name|'
211      namespace: ''
212    - type:
213        name: size_t
214      name: '|arg_name|Len'
215    return_args:
216    - type:
217        name: size_t
218        ptr_depth: 1
219      name: '|arg_name|Len'
220    cast:
221        expression: "\
222          \t\tstd::array<|new_args.0.namespace||es2panda_arg.type.template_args.0.type.name| |es2panda_arg.type.template_args.0.type.ptr_depth|> |arg_name|Array(|arg_name|Len);\n
223          \t\tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
224          \t\tauto |es2panda_arg.type.template_args.0.type.ptr_depth||es2panda_arg.type.template_args.0.type.ref_depth||arg_name|Element1 = |arg_name|[i];\n
225          \t\t|template_nested_expression_1|\n
226          \t\t|arg_name|Array[i] = |new_args.0.local_var_name|;\n
227          \t\t}"
228        var_name: '|arg_name|Array'
229        reverse_cast:
230          start: "\n
231            auto *ctx = reinterpret_cast<Context *>(context);\n
232            auto *ctxAllocator = ctx->allocator;\n
233            auto resultArray = "
234          end: ";\n
235            \t/* WARNING! This section has not been tested! */\n
236            \t*|return_args.0.name| = resultArray|accessor|size();\n
237            \tauto res = ctxAllocator->New<|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|[]>(*|return_args.0.name|);\n
238            \tfor (size_t i = 0; i < *|return_args.0.name|; ++i) {\n
239            \t\tauto toPush = |reverse_template_nested_expression_1_start|(resultArray|accessor|at(i))|reverse_template_nested_expression_1_end|;\n
240            \t\tres[i] = reinterpret_cast<|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|>(toPush);\n
241            \t}"
242
243
244  - es2panda_arg:
245      name: '|arg_name|'
246      type:
247        name: ArenaSet
248        template_args:
249        - type: '|element_type|'
250      max_ptr_depth: 0
251    new_args:
252    - type: '|element_type|'
253      name: '|arg_name|'
254      increase_ptr_depth: 1
255      local_var_name: '|arg_name|'
256      namespace: ''
257    - type:
258        name: size_t
259      name: '|arg_name|Len'
260    return_args:
261    - type:
262        name: size_t
263        ptr_depth: 1
264      name: '|arg_name|Len'
265    cast:
266        expression: "\
267          \tArenaSet<|new_args.0.namespace||es2panda_arg.type.template_args.0.type.name| |es2panda_arg.type.template_args.0.type.ptr_depth|> |arg_name|ArenaSet
268          {reinterpret_cast<Context *>(context)->allocator->Adapter()};\n
269          \t\tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
270          \t\tauto |es2panda_arg.type.template_args.0.type.ptr_depth||es2panda_arg.type.template_args.0.type.ref_depth||arg_name|Element1 = |arg_name|[i];\n
271          \t\t|template_nested_expression_1|\n
272          \t\t\t|arg_name|ArenaSet.insert(|new_args.0.local_var_name|);\n
273          \t\t}"
274        var_name: '|arg_name|ArenaSet'
275        reverse_cast:
276          start: "\n
277            \tauto *ctx = reinterpret_cast<Context *>(context);\n
278            \tauto *ctxAllocator = ctx->allocator;\n
279            \tauto resultSet = "
280          end: ";\n
281            \t*|return_args.0.name| = resultSet|accessor|size();\n
282            \tauto res = ctxAllocator->New<|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|[]>(*|return_args.0.name|);\n
283            \tsize_t i = 0;\n
284            \tfor (auto elem : resultSet) {\n
285            \t\tauto toPush = |reverse_template_nested_expression_1_start|(elem)|reverse_template_nested_expression_1_end|;\n
286            \t\tres[i] = reinterpret_cast<|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|>(toPush);\n
287            \t}"
288
289  - es2panda_arg:
290      name: '|arg_name|'
291      type:
292        name: unordered_set
293        namespace: 'std'
294        template_args:
295        - type: '|element_type|'
296      max_ptr_depth: 0
297    new_args:
298    - type: '|element_type|'
299      name: '|arg_name|'
300      increase_ptr_depth: 1
301      local_var_name: '|arg_name|'
302      namespace: ''
303    - type:
304        name: size_t
305      name: '|arg_name|Len'
306    return_args:
307    - type:
308        name: size_t
309        ptr_depth: 1
310      name: '|arg_name|Len'
311    cast:
312        expression: "\
313          \tstd::unordered_set<|new_args.0.namespace||es2panda_arg.type.template_args.0.type.name| |es2panda_arg.type.template_args.0.type.ptr_depth|> |arg_name|Set
314          {};\n
315          \t\tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
316          \t\tauto |es2panda_arg.type.template_args.0.type.ptr_depth||es2panda_arg.type.template_args.0.type.ref_depth||arg_name|Element1 = |arg_name|[i];\n
317          \t\t|template_nested_expression_1|\n
318          \t\t\t|arg_name|Set.insert(|new_args.0.local_var_name|);\n
319          \t\t}"
320        var_name: '|arg_name|Set'
321        reverse_cast:
322          start: "\n
323            \tauto *ctx = reinterpret_cast<Context *>(context);\n
324            \tauto *ctxAllocator = ctx->allocator;\n
325            \tauto resultSet = "
326          end: ";\n
327            \t*|return_args.0.name| = resultSet|accessor|size();\n
328            \tauto res = ctxAllocator->New<|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|[]>(*|return_args.0.name|);\n
329            \tsize_t i = 0;\n
330            \tfor (auto elem : resultSet) {\n
331            \t\tauto toPush = |reverse_template_nested_expression_1_start|(elem)|reverse_template_nested_expression_1_end|;\n
332            \t\tres[i] = reinterpret_cast<|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|>(toPush);\n
333            \t}"
334
335  - es2panda_arg:
336      name: '|arg_name|'
337      type:
338        name: unordered_set
339        namespace: 'std'
340        template_args:
341        - type: '|element_type|'
342      max_ptr_depth: 1
343      min_ptr_depth: 1
344    new_args:
345    - type: '|element_type|'
346      name: '|arg_name|'
347      increase_ptr_depth: 1
348      local_var_name: '|arg_name|'
349      namespace: ''
350    - type:
351        name: size_t
352      name: '|arg_name|Len'
353    return_args:
354    - type:
355        name: size_t
356        ptr_depth: 1
357      name: '|arg_name|Len'
358    cast:
359        expression: "\
360          \tauto *|arg_name|Set = reinterpret_cast<Context *>(context)->allocator->New<std::unordered_set<|new_args.0.namespace||es2panda_arg.type.template_args.0.type.name| |es2panda_arg.type.template_args.0.type.ptr_depth|>>();\n
361          \t\tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
362          \t\tauto |es2panda_arg.type.template_args.0.type.ptr_depth||es2panda_arg.type.template_args.0.type.ref_depth||arg_name|Element1 = |arg_name|[i];\n
363          \t\t|template_nested_expression_1|\n
364          \t\t\t|arg_name|Set->insert(|new_args.0.local_var_name|);\n
365          \t\t}"
366        var_name: '|arg_name|Set'
367        reverse_cast:
368          start: "\n
369            \tauto *ctx = reinterpret_cast<Context *>(context);\n
370            \tauto *ctxAllocator = ctx->allocator;\n
371            \tauto resultSet = "
372          end: ";\n
373            \t*|return_args.0.name| = resultSet|accessor|size();\n
374            \tauto res = ctxAllocator->New<|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|[]>(*|return_args.0.name|);\n
375            \tsize_t i = 0;\n
376            \tfor (auto elem : resultSet) {\n
377            \t\tauto toPush = |reverse_template_nested_expression_1_start|(elem)|reverse_template_nested_expression_1_end|;\n
378            \t\tres[i] = reinterpret_cast<|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|>(toPush);\n
379            \t}"
380
381
382  - es2panda_arg:
383      name: '|arg_name|'
384      type:
385        name: ArenaUnorderedMap
386        template_args:
387        - type: '|element_type_1|'
388        - type: '|element_type_2|'
389      max_ptr_depth: 0
390    new_args:
391    - type: '|element_type_1|'
392      name: '|arg_name|KeyArray'
393      local_var_name: '|arg_name|KeyArray'
394      increase_ptr_depth: 1
395    - type: '|element_type_2|'
396      name: '|arg_name|ValueArray'
397      local_var_name: '|arg_name|ValueArray'
398      increase_ptr_depth: 1
399    - type:
400        name: size_t
401      name: '|arg_name|Len'
402    return_args:
403    - type: '|element_type_2|'
404      name: 'arenaMapValueArray'
405      increase_ptr_depth: 2
406    - type:
407        name: size_t
408        ptr_depth: 1
409      name: '|arg_name|Len'
410    cast:
411        expression: "\
412          \tArenaUnorderedMap<|new_args.0.namespace||es2panda_arg.type.template_args.0.type.name| |es2panda_arg.type.template_args.0.type.ptr_depth|,
413          |new_args.1.namespace||es2panda_arg.type.template_args.1.type.name| |es2panda_arg.type.template_args.1.type.ptr_depth|> |arg_name|ArenaMap
414          {reinterpret_cast<Context *>(context)->allocator->Adapter()};\n
415          \tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
416          \t\tauto |es2panda_arg.type.template_args.0.type.ptr_depth||es2panda_arg.type.template_args.0.type.ref_depth||arg_name|Element1 = |arg_name|KeyArray[i];\n
417          \t\tauto |es2panda_arg.type.template_args.1.type.ptr_depth||es2panda_arg.type.template_args.1.type.ref_depth||arg_name|Element2 = |arg_name|ValueArray[i];\n
418          \t\t|template_nested_expression_1|\n
419          \t\t|template_nested_expression_2|\n
420          \t\t|arg_name|ArenaMap[|new_args.0.local_var_name|] = |new_args.1.local_var_name|;\n
421          \t}"
422        var_name: '|arg_name|ArenaMap'
423        reverse_cast:
424          start: "\n
425            \tauto *ctx = reinterpret_cast<Context *>(context);\n
426            \tauto *ctxAllocator = ctx->allocator;\n
427            \tauto resultMap = "
428          end: ";\n
429            \t*|return_args.1.name| = resultMap|accessor|size();\n
430            \tauto res = ctxAllocator->New<|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|[]>(*|return_args.1.name|);\n
431            \t*|return_args.0.name| = ctxAllocator->New<|new_args.1.type.const| |new_args.1.type.name| |new_args.1.type.ptr_depth - 1||new_args.1.type.ref_depth|[]>(*|return_args.1.name|);\n
432            \tsize_t i = 0;\n
433            \tfor (auto [key, value] : resultMap) {\n
434            \t\tres[i] = |reverse_template_nested_expression_1_start|(key)|reverse_template_nested_expression_1_end|;\n
435            \t\t(*|return_args.0.name|)[i] = |reverse_template_nested_expression_2_start|(value)|reverse_template_nested_expression_2_end|;\n
436            \t\t++i;\n
437            \t}"
438
439
440  - es2panda_arg:
441      name: '|arg_name|'
442      type:
443        name: ArenaUnorderedMap
444        template_args:
445        - type: '|element_type_1|'
446        - type: '|element_type_2|'
447      max_ptr_depth: 1
448      min_ptr_depth: 1
449    new_args:
450    - type: '|element_type_1|'
451      name: '|arg_name|KeyArray'
452      local_var_name: '|arg_name|KeyArray'
453      increase_ptr_depth: 1
454    - type: '|element_type_2|'
455      name: '|arg_name|ValueArray'
456      local_var_name: '|arg_name|ValueArray'
457      increase_ptr_depth: 1
458    - type:
459        name: size_t
460      name: '|arg_name|Len'
461    return_args:
462    - type: '|element_type_2|'
463      name: 'arenaMapValueArray'
464      increase_ptr_depth: 2
465    - type:
466        name: size_t
467        ptr_depth: 1
468      name: '|arg_name|Len'
469    cast:
470        expression: "\
471          \tauto *|arg_name|ArenaMap = reinterpret_cast<Context *>(context)->allocator->New<ArenaUnorderedMap<
472          |new_args.0.namespace||es2panda_arg.type.template_args.0.type.name| |es2panda_arg.type.template_args.0.type.ptr_depth|,
473          |new_args.1.namespace||es2panda_arg.type.template_args.1.type.name| |es2panda_arg.type.template_args.1.type.ptr_depth|>>
474          (reinterpret_cast<Context *>(context)->allocator->Adapter());\n
475          \tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
476          \t\tauto |es2panda_arg.type.template_args.0.type.ptr_depth||es2panda_arg.type.template_args.0.type.ref_depth||arg_name|Element1 = |arg_name|KeyArray[i];\n
477          \t\tauto |es2panda_arg.type.template_args.1.type.ptr_depth||es2panda_arg.type.template_args.1.type.ref_depth||arg_name|Element2 = |arg_name|ValueArray[i];\n
478          \t\t|template_nested_expression_1|\n
479          \t\t|template_nested_expression_2|\n
480          \t\t(*|arg_name|ArenaMap)[|new_args.0.local_var_name|] = |new_args.1.local_var_name|;\n
481          \t}"
482        var_name: '|arg_name|ArenaMap'
483        reverse_cast:
484          start: "\n
485            \tauto *ctx = reinterpret_cast<Context *>(context);\n
486            \tauto *ctxAllocator = ctx->allocator;\n
487            \tauto resultMap = "
488          end: ";\n
489            \t*|return_args.1.name| = resultMap|accessor|size();\n
490            \tauto res = ctxAllocator->New<|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|[]>(*|return_args.1.name|);\n
491            \t*|return_args.0.name| = ctxAllocator->New<|new_args.1.type.const| |new_args.1.type.name| |new_args.1.type.ptr_depth - 1||new_args.1.type.ref_depth|[]>(*|return_args.1.name|);\n
492            \tsize_t i = 0;\n
493            \tfor (auto [key, value] : (*resultMap)) {\n
494            \t\tres[i] = |reverse_template_nested_expression_1_start|(key)|reverse_template_nested_expression_1_end|;\n
495            \t\t(*|return_args.0.name|)[i] = |reverse_template_nested_expression_2_start|(value)|reverse_template_nested_expression_2_end|;\n
496            \t\t++i;\n
497            \t}"
498
499  - es2panda_arg:
500      name: '|arg_name|'
501      type:
502        name: ArenaMultiMap
503        template_args:
504        - type: '|element_type_1|'
505        - type: '|element_type_2|'
506      max_ptr_depth: 0
507    new_args:
508    - type: '|element_type_1|'
509      name: '|arg_name|KeyArray'
510      local_var_name: '|arg_name|KeyArray'
511      increase_ptr_depth: 1
512    - type: '|element_type_2|'
513      name: '|arg_name|ValueArray'
514      local_var_name: '|arg_name|ValueArray'
515      increase_ptr_depth: 1
516    - type:
517        name: size_t
518      name: '|arg_name|Len'
519    return_args:
520    - type: '|element_type_2|'
521      name: 'arenaMapValueArray'
522      increase_ptr_depth: 2
523    - type:
524        name: size_t
525        ptr_depth: 1
526      name: '|arg_name|Len'
527    cast:
528        expression: "\
529          \tArenaMultiMap<|new_args.0.namespace||es2panda_arg.type.template_args.0.type.name| |es2panda_arg.type.template_args.0.type.ptr_depth|,
530          |new_args.1.namespace||es2panda_arg.type.template_args.1.type.name| |es2panda_arg.type.template_args.1.type.ptr_depth|> |arg_name|ArenaMap
531          {reinterpret_cast<Context *>(context)->allocator->Adapter()};\n
532          \tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
533          \t\tauto |es2panda_arg.type.template_args.0.type.ptr_depth||es2panda_arg.type.template_args.0.type.ref_depth||arg_name|Element1 = |arg_name|KeyArray[i];\n
534          \t\tauto |es2panda_arg.type.template_args.1.type.ptr_depth||es2panda_arg.type.template_args.1.type.ref_depth||arg_name|Element2 = |arg_name|ValueArray[i];\n
535          \t\t|template_nested_expression_1|\n
536          \t\t|template_nested_expression_2|\n
537          \t\t|arg_name|ArenaMap.emplace(|new_args.0.local_var_name|, |new_args.1.local_var_name|);\n
538          \t}"
539        var_name: '|arg_name|ArenaMap'
540        reverse_cast:
541          start: "\n
542            \tauto *ctx = reinterpret_cast<Context *>(context);\n
543            \tauto *ctxAllocator = ctx->allocator;\n
544            \tauto resultMap = "
545          end: ";\n
546            \t*|return_args.1.name| = resultMap|accessor|size();\n
547            \tauto res = ctxAllocator->New<|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|[]>(*|return_args.1.name|);\n
548            \t*|return_args.0.name| = ctxAllocator->New<|new_args.1.type.const| |new_args.1.type.name| |new_args.1.type.ptr_depth - 1||new_args.1.type.ref_depth|[]>(*|return_args.1.name|);\n
549            \tsize_t i = 0;\n
550            \tfor (auto [key, value] : resultMap) {\n
551            \t\tres[i] = |reverse_template_nested_expression_1_start|(key)|reverse_template_nested_expression_1_end|;\n
552            \t\t(*|return_args.0.name|)[i] = |reverse_template_nested_expression_2_start|(value)|reverse_template_nested_expression_2_end|;\n
553            \t\t++i;\n
554            \t}"
555
556  - es2panda_arg:
557      name: '|arg_name|'
558      type:
559        name: pair
560        template_args:
561        - type: '|element_type_1|'
562        - type: '|element_type_2|'
563      max_ptr_depth: 0
564    new_args:
565    - type: '|element_type_1|'
566      name: '|arg_name|First'
567      local_var_name: '|arg_name|First'
568    - type: '|element_type_2|'
569      name: '|arg_name|Second'
570      local_var_name: '|arg_name|Second'
571    return_args:
572    - type: '|element_type_2|'
573      name: '|arg_name|Second'
574      increase_ptr_depth: 1
575    cast:
576        expression: " /* ERROR! NOT IMPLEMENTED EXPRESSION FOR STD::PAIR */ \n"
577        var_name: '|arg_name|ArenaSet'
578        reverse_cast:
579          start: "\n
580            \tauto *ctx = reinterpret_cast<Context *>(context);\n
581            \t[[maybe_unused]] auto *ctxAllocator = ctx->allocator;\n
582            \tauto resultPair = "
583          end: ";\n
584            \t*|arg_name|Second = |reverse_template_nested_expression_2_start|(const_cast<|new_args.1.namespace||es2panda_arg.type.template_args.1.type.name| |es2panda_arg.type.template_args.1.type.ptr_depth|>(resultPair|accessor|second))|reverse_template_nested_expression_2_end|;\n
585            \tauto res = |reverse_template_nested_expression_1_start|(resultPair|accessor|first)|reverse_template_nested_expression_1_end|;\n
586            "
587
588  - es2panda_arg:
589      name: '|arg_name|'
590      type:
591        name: ArenaMap
592        template_args:
593        - type: '|element_type_1|'
594        - type: '|element_type_2|'
595      max_ptr_depth: 0
596    new_args:
597    - type: '|element_type_1|'
598      name: '|arg_name|KeyArray'
599      local_var_name: '|arg_name|KeyArray'
600      increase_ptr_depth: 1
601    - type: '|element_type_2|'
602      name: '|arg_name|ValueArray'
603      local_var_name: '|arg_name|ValueArray'
604      increase_ptr_depth: 1
605    - type:
606        name: size_t
607      name: '|arg_name|Len'
608    return_args:
609    - type: '|element_type_2|'
610      name: 'arenaMapValueArray'
611      increase_ptr_depth: 2
612    - type:
613        name: size_t
614        ptr_depth: 1
615      name: '|arg_name|Len'
616    cast:
617        expression: "\
618          \tArenaMap<|new_args.0.namespace||es2panda_arg.type.template_args.0.type.name| |es2panda_arg.type.template_args.0.type.ptr_depth|,
619          |new_args.1.namespace||es2panda_arg.type.template_args.1.type.name| |es2panda_arg.type.template_args.1.type.ptr_depth|> |arg_name|ArenaMap
620          {reinterpret_cast<Context *>(context)->allocator->Adapter()};\n
621          \tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
622          \t\tauto |es2panda_arg.type.template_args.0.type.ptr_depth||es2panda_arg.type.template_args.0.type.ref_depth||arg_name|Element1 = |arg_name|KeyArray[i];\n
623          \t\tauto |es2panda_arg.type.template_args.1.type.ptr_depth||es2panda_arg.type.template_args.1.type.ref_depth||arg_name|Element2 = |arg_name|ValueArray[i];\n
624          \t\t|template_nested_expression_1|\n
625          \t\t|template_nested_expression_2|\n
626          \t\t|arg_name|ArenaMap[|new_args.0.local_var_name|] = |new_args.1.local_var_name|;\n
627          \t}"
628        var_name: '|arg_name|ArenaMap'
629        reverse_cast:
630          start: "\n
631            \tauto *ctx = reinterpret_cast<Context *>(context);\n
632            \tauto *ctxAllocator = ctx->allocator;\n
633            \tauto resultMap = "
634          end: ";\n
635            \t*|return_args.1.name| = resultMap|accessor|size();\n
636            \tauto res = ctxAllocator->New<|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|[]>(*|return_args.1.name|);\n
637            \t*|return_args.0.name| = ctxAllocator->New<|new_args.1.type.const| |new_args.1.type.name| |new_args.1.type.ptr_depth - 1||new_args.1.type.ref_depth|[]>(*|return_args.1.name|);\n
638            \tsize_t i = 0;\n
639            \tfor (auto [key, value] : resultMap) {\n
640            \t\tres[i] = |reverse_template_nested_expression_1_start|(key)|reverse_template_nested_expression_1_end|;\n
641            \t\t(*|return_args.0.name|)[i] = |reverse_template_nested_expression_2_start|(value)|reverse_template_nested_expression_2_end|;\n
642            \t\t++i;\n
643            \t}"
644
645  - es2panda_arg:
646      name: '|arg_name|'
647      type:
648        name: ArenaMap
649        template_args:
650        - type: '|element_type_1|'
651        - type: '|element_type_2|'
652      max_ptr_depth: 1
653      min_ptr_depth: 1
654    new_args:
655    - type: '|element_type_1|'
656      name: '|arg_name|KeyArray'
657      local_var_name: '|arg_name|KeyArray'
658      increase_ptr_depth: 1
659    - type: '|element_type_2|'
660      name: '|arg_name|ValueArray'
661      local_var_name: '|arg_name|ValueArray'
662      increase_ptr_depth: 1
663    - type:
664        name: size_t
665      name: '|arg_name|Len'
666    return_args:
667    - type: '|element_type_2|'
668      name: 'arenaMapValueArray'
669      increase_ptr_depth: 2
670    - type:
671        name: size_t
672        ptr_depth: 1
673      name: '|arg_name|Len'
674    cast:
675        expression: "\
676          \tauto *|arg_name|ArenaMap = reinterpret_cast<Context *>(context)->allocator->New<ArenaMap<|new_args.0.namespace|
677          |es2panda_arg.type.template_args.0.type.name||es2panda_arg.type.template_args.0.type.ptr_depth|,
678          |new_args.1.namespace||es2panda_arg.type.template_args.1.type.name|
679          |es2panda_arg.type.template_args.1.type.ptr_depth|>>(reinterpret_cast<Context *>(context)->allocator->Adapter());\n
680          \tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
681          \t\tauto |es2panda_arg.type.template_args.0.type.ptr_depth||es2panda_arg.type.template_args.0.type.ref_depth||arg_name|Element1 = |arg_name|KeyArray[i];\n
682          \t\tauto |es2panda_arg.type.template_args.1.type.ptr_depth||es2panda_arg.type.template_args.1.type.ref_depth||arg_name|Element2 = |arg_name|ValueArray[i];\n
683          \t\t|template_nested_expression_1|\n
684          \t\t|template_nested_expression_2|\n
685          \t\t(*|arg_name|ArenaMap)[|new_args.0.local_var_name|] = |new_args.1.local_var_name|;\n
686          \t}"
687        var_name: '|arg_name|ArenaMap'
688        reverse_cast:
689          start: "\n
690            \tauto *ctx = reinterpret_cast<Context *>(context);\n
691            \tauto *ctxAllocator = ctx->allocator;\n
692            \tauto resultMap = "
693          end: ";\n
694            \t*|return_args.1.name| = resultMap|accessor|size();\n
695            \tauto res = ctxAllocator->New<|new_args.0.type.const| |new_args.0.type.name| |new_args.0.type.ptr_depth - 1||new_args.0.type.ref_depth|[]>(*|return_args.1.name|);\n
696            \t*|return_args.0.name| = ctxAllocator->New<|new_args.1.type.const| |new_args.1.type.name| |new_args.1.type.ptr_depth - 1||new_args.1.type.ref_depth|[]>(*|return_args.1.name|);\n
697            \tsize_t i = 0;\n
698            \tfor (auto [key, value] : (*resultMap)) {\n
699            \t\tres[i] = |reverse_template_nested_expression_1_start|(key)|reverse_template_nested_expression_1_end|;\n
700            \t\t(*|return_args.0.name|)[i] = |reverse_template_nested_expression_2_start|(value)|reverse_template_nested_expression_2_end|;\n
701            \t\t++i;\n
702            \t}"
703
704  - es2panda_arg:
705      name: '|arg_name|'
706      type:
707        name: shared_ptr
708        namespace: std
709        template_args:
710        - type: '|element_type_1|'
711      max_ptr_depth: 0
712    new_args:
713    - type: '|element_type_1|'
714      name: '|arg_name|Ptr'
715      local_var_name: '|arg_name|Ptr'
716    cast:
717        reverse_cast:
718          start: "\n
719            \tauto resultPtr = "
720          end: ";\n
721            \tauto &resultRef = *resultPtr;\n
722            \tauto *res = |reverse_template_nested_expression_1_start|(resultRef)|reverse_template_nested_expression_1_end|;"
723
724  - es2panda_arg:
725      name: '|arg_name|'
726      type:
727        name: 'ArkTsConfig'
728      min_ptr_depth: 1
729    new_args:
730    - type:
731        name: 'es2panda_ArkTsConfig'
732        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
733      name: '|arg_name|'
734    cast:
735        expression: >-
736          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
737          reinterpret_cast<ArkTsConfig |es2panda_arg.type.ptr_depth|>(|arg_name|);
738        reverse_cast:
739          start: >-
740            reinterpret_cast<?const? es2panda_ArkTsConfig |es2panda_arg.type.ptr_depth|>
741        call_cast:
742          call_var: 'es2panda_ArkTsConfig *ast'
743          start: >-
744            (reinterpret_cast<?const? ArkTsConfig *>(ast))->
745        constructor_cast:
746          start: >-
747            ctxAllocator->New<ArkTsConfig>(
748          end: )
749        var_name: '|arg_name|E2p'
750
751  - es2panda_arg:
752      name: '|arg_name|'
753      type:
754        name: 'ArkTsConfig'
755      max_ptr_depth: 0
756    new_args:
757    - type:
758        name: 'es2panda_ArkTsConfig'
759        ptr_depth: 1
760      name: '|arg_name|'
761    cast:
762        reverse_cast:
763          start: >-
764            reinterpret_cast<?const? es2panda_ArkTsConfig *>(
765            reinterpret_cast<Context *>(context)->allocator->New<ArkTsConfig>(
766          end: ))
767        var_name: '|arg_name|E2p'
768
769  - es2panda_arg:
770      name: '|arg_name|'
771      type:
772        name: 'Typed'
773        ptr_depth: '|arg_ptr_depth|'
774        namespace: 'ir'
775      min_ptr_depth: 1
776    new_args:
777    - type:
778        name: 'es2panda_AstNode'
779        ptr_depth: '|arg_ptr_depth|'
780      name: '|arg_name|'
781      namespace: 'ir::'
782    cast:
783        expression: >-
784          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
785          reinterpret_cast<ir::Typed<AstNode> |es2panda_arg.type.ptr_depth|>(|arg_name|);
786        reverse_cast:
787          start: >-
788            reinterpret_cast<?const? es2panda_AstNode |es2panda_arg.type.ptr_depth|>
789        call_cast:
790          call_var: 'es2panda_AstNode *ast'
791          start: >-
792            (reinterpret_cast<?const? ir::Typed<ir::AstNode> *>(ast))->
793        constructor_cast:
794          start: >-
795            ctxAllocator->New<ir::Typed<AstNode>>(
796          end: )
797        var_name: '|arg_name|E2p'
798
799  - es2panda_arg:
800      name: '|arg_name|'
801      type: '|AstNode|'
802      min_ptr_depth: 1
803    new_args:
804    - type:
805        name: "es2panda_AstNode"
806        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
807      name: '|arg_name|'
808      namespace: 'ir::'
809    cast:
810        expression: >-
811          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
812          reinterpret_cast<ir::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
813        reverse_cast:
814          start: >-
815            reinterpret_cast<?const? es2panda_AstNode |es2panda_arg.type.ptr_depth|>
816        call_cast:
817          call_var: 'es2panda_AstNode *ast'
818          start: >-
819            (reinterpret_cast<?const? ir::|es2panda_arg.type.name| *>(ast))->
820        constructor_cast:
821          start: >-
822            ctxAllocator->New<ir::|es2panda_arg.type.name|>(
823          end: )
824        var_name: '|arg_name|E2p'
825
826  - es2panda_arg:
827      name: '|arg_name|'
828      type: '|AstNode|'
829      max_ptr_depth: 0
830    new_args:
831    - type:
832        name: "es2panda_AstNode"
833        ptr_depth: 1
834      name: '|arg_name|'
835      namespace: 'ir::'
836    cast:
837        expression: ""
838        var_name: '*reinterpret_cast<ir::|es2panda_arg.type.name| *>(|arg_name|)'
839
840  - es2panda_arg:
841      name: '|arg_name|'
842      type: '|AstNodeAdditionalChildren|'
843      min_ptr_depth: 1
844    new_args:
845    - type:
846        name: "es2panda_AstNode"
847        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
848      name: '|arg_name|'
849      namespace: 'ir::'
850    cast:
851        expression: >-
852          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
853          reinterpret_cast<ir::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
854        reverse_cast:
855          start : >-
856            reinterpret_cast<?const? es2panda_AstNode |es2panda_arg.type.ptr_depth|>
857        call_cast:
858          call_var: 'es2panda_AstNode *ast'
859          start: >-
860            (reinterpret_cast<?const? ir::|es2panda_arg.type.name| *>(ast))->
861        constructor_cast:
862          start: >-
863            ctxAllocator->New<ir::|es2panda_arg.type.name|>(
864          end: )
865        var_name: '|arg_name|E2p'
866
867  - es2panda_arg:
868      name: '|arg_name|'
869      type: '|AstNodeAdditionalChildren|'
870      max_ptr_depth: 0
871    new_args:
872    - type:
873        name: "es2panda_AstNode"
874        ptr_depth: 1
875      name: '|arg_name|'
876      namespace: 'ir::'
877    cast:
878        expression: ""
879        var_name: '*reinterpret_cast<ir::|es2panda_arg.type.name| *>(|arg_name|)'
880
881  - es2panda_arg:
882      name: '|arg_name|'
883      type: '|CodeGen|'
884      min_ptr_depth: 1
885    new_args:
886    - type:
887        name: "es2panda_CodeGen"
888        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
889      name: '|arg_name|'
890      namespace: 'compiler::'
891    cast:
892        expression: >-
893          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
894          reinterpret_cast<compiler::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
895        reverse_cast:
896          start : >-
897            reinterpret_cast<?const? es2panda_CodeGen |es2panda_arg.type.ptr_depth|>
898        call_cast:
899          call_var: 'es2panda_CodeGen *ast'
900          start: >-
901            (reinterpret_cast<?const? compiler::|es2panda_arg.type.name| *>(ast))->
902        constructor_cast:
903          start: >-
904            ctxAllocator->New<compiler::|es2panda_arg.type.name|>(
905          end: )
906        var_name: '|arg_name|E2p'
907
908  - es2panda_arg:
909      name: '|arg_name|'
910      type: '|AstType|'
911      min_ptr_depth: 1
912    new_args:
913    - type:
914        name: 'es2panda_Type'
915        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
916      name: '|arg_name|'
917      namespace: 'checker::'
918    cast:
919        expression: >-
920          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
921          reinterpret_cast<checker::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
922        reverse_cast:
923          start: >-
924            reinterpret_cast<?const? es2panda_Type |es2panda_arg.type.ptr_depth|>
925        call_cast:
926          call_var: 'es2panda_Type *ast'
927          start: >-
928            (reinterpret_cast<?const? checker::|es2panda_arg.type.name| *>(ast))->
929        constructor_cast:
930          start: >-
931            ctxAllocator->New<checker::|es2panda_arg.type.name|>(
932          end: )
933        var_name: '|arg_name|E2p'
934
935  - es2panda_arg:
936      name: '|arg_name|'
937      type: '|AstType|'
938      max_ptr_depth: 0
939    new_args:
940    - type:
941        name: 'es2panda_Type'
942        ptr_depth: 1
943      name: '|arg_name|'
944      namespace: 'checker::'
945    cast:
946        expression: >-
947          auto |arg_name|E2p =
948          *(reinterpret_cast<checker::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|));
949        var_name: '|arg_name|E2p'
950
951  - es2panda_arg:
952      name: '|arg_name|'
953      type: '|AstTypeAdditionalChildren|'
954      min_ptr_depth: 1
955    new_args:
956    - type:
957        name: "es2panda_Type"
958        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
959      name: '|arg_name|'
960      namespace: 'checker::'
961    cast:
962        expression: >-
963          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
964          reinterpret_cast<checker::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
965        reverse_cast:
966          start : >-
967            reinterpret_cast<?const? es2panda_Type |es2panda_arg.type.ptr_depth|>
968        call_cast:
969          call_var: 'es2panda_Type *ast'
970          start: >-
971            (reinterpret_cast<?const? checker::|es2panda_arg.type.name| *>(ast))->
972        constructor_cast:
973          start: >-
974            ctxAllocator->New<checker::|es2panda_arg.type.name|>(
975          end: )
976        var_name: '|arg_name|E2p'
977
978  - es2panda_arg:
979      name: '|arg_name|'
980      type: '|AstTypeAdditionalChildren|'
981      max_ptr_depth: 0
982    new_args:
983    - type:
984        name: "es2panda_Type"
985        ptr_depth: 1
986      name: '|arg_name|'
987      namespace: 'cheker::'
988    cast:
989        expression: ""
990        var_name: '*reinterpret_cast<checker::|es2panda_arg.type.name| *>(|arg_name|)'
991
992  - es2panda_arg:
993      name: '|arg_name|'
994      type:
995        name: TypeRelation
996        namespace: 'checker'
997      max_ptr_depth: 0
998    new_args:
999    - type:
1000        name: "es2panda_TypeRelation"
1001        ptr_depth: 1
1002      name: '|arg_name|'
1003      namespace: 'cheker::'
1004    cast:
1005        expression: ""
1006        var_name: '*reinterpret_cast<checker::TypeRelation *>(|arg_name|)'
1007
1008  - es2panda_arg:
1009      name: '|arg_name|'
1010      type:
1011        name: TypeRelation
1012        namespace: 'checker'
1013      min_ptr_depth: 1
1014    new_args:
1015    - type:
1016        name: "es2panda_TypeRelation"
1017        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1018      name: '|arg_name|'
1019      namespace: 'checker::'
1020    cast:
1021        expression: >-
1022          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1023          reinterpret_cast<checker::TypeRelation |es2panda_arg.type.ptr_depth|>(|arg_name|);
1024        reverse_cast:
1025          start : >-
1026            reinterpret_cast<?const? es2panda_TypeRelation |es2panda_arg.type.ptr_depth|>
1027        call_cast:
1028          call_var: 'es2panda_TypeRelation *ast'
1029          start: >-
1030            (reinterpret_cast<?const? checker::TypeRelation *>(ast))->
1031        constructor_cast:
1032          start: >-
1033            ctxAllocator->New<checker::TypeRelation>(
1034          end: )
1035        var_name: '|arg_name|E2p'
1036
1037  - es2panda_arg:
1038      name: '|arg_name|'
1039      type:
1040        name: IndexInfo
1041        namespace: 'checker'
1042      max_ptr_depth: 0
1043    new_args:
1044    - type:
1045        name: "es2panda_IndexInfo"
1046        ptr_depth: 1
1047      name: '|arg_name|'
1048      namespace: 'cheker::'
1049    cast:
1050        expression: ""
1051        var_name: '*reinterpret_cast<checker::IndexInfo *>(|arg_name|)'
1052
1053  - es2panda_arg:
1054      name: '|arg_name|'
1055      type:
1056        name: IndexInfo
1057        namespace: 'checker'
1058      min_ptr_depth: 1
1059    new_args:
1060    - type:
1061        name: "es2panda_IndexInfo"
1062        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1063      name: '|arg_name|'
1064      namespace: 'checker::'
1065    cast:
1066        expression: >-
1067          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1068          reinterpret_cast<checker::IndexInfo |es2panda_arg.type.ptr_depth|>(|arg_name|);
1069        reverse_cast:
1070          start : >-
1071            reinterpret_cast<?const? es2panda_IndexInfo |es2panda_arg.type.ptr_depth|>
1072        call_cast:
1073          call_var: 'es2panda_IndexInfo *ast'
1074          start: >-
1075            (reinterpret_cast<?const? checker::IndexInfo *>(ast))->
1076        constructor_cast:
1077          start: >-
1078            ctxAllocator->New<checker::IndexInfo>(
1079          end: )
1080        var_name: '|arg_name|E2p'
1081
1082  - es2panda_arg:
1083      name: '|arg_name|'
1084      type:
1085        name: GlobalTypesHolder
1086        namespace: 'checker'
1087      max_ptr_depth: 0
1088    new_args:
1089    - type:
1090        name: "es2panda_GlobalTypesHolder"
1091        ptr_depth: 1
1092      name: '|arg_name|'
1093      namespace: 'cheker::'
1094    cast:
1095        expression: ""
1096        var_name: '*reinterpret_cast<checker::GlobalTypesHolder *>(|arg_name|)'
1097
1098  - es2panda_arg:
1099      name: '|arg_name|'
1100      type:
1101        name: GlobalTypesHolder
1102        namespace: 'checker'
1103      min_ptr_depth: 1
1104    new_args:
1105    - type:
1106        name: "es2panda_GlobalTypesHolder"
1107        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1108      name: '|arg_name|'
1109      namespace: 'checker::'
1110    cast:
1111        expression: >-
1112          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1113          reinterpret_cast<checker::GlobalTypesHolder |es2panda_arg.type.ptr_depth|>(|arg_name|);
1114        reverse_cast:
1115          start : >-
1116            reinterpret_cast<?const? es2panda_GlobalTypesHolder |es2panda_arg.type.ptr_depth|>
1117        call_cast:
1118          call_var: 'es2panda_GlobalTypesHolder *ast'
1119          start: >-
1120            (reinterpret_cast<?const? checker::GlobalTypesHolder *>(ast))->
1121        constructor_cast:
1122          start: >-
1123            ctxAllocator->New<checker::GlobalTypesHolder>(
1124          end: )
1125        var_name: '|arg_name|E2p'
1126
1127  - es2panda_arg:
1128      name: '|arg_name|'
1129      type:
1130        name: ObjectDescriptor
1131        namespace: 'checker'
1132      max_ptr_depth: 0
1133    new_args:
1134    - type:
1135        name: "es2panda_ObjectDescriptor"
1136        ptr_depth: 1
1137      name: '|arg_name|'
1138      namespace: 'cheker::'
1139    cast:
1140        expression: ""
1141        var_name: '*reinterpret_cast<checker::ObjectDescriptor *>(|arg_name|)'
1142
1143  - es2panda_arg:
1144      name: '|arg_name|'
1145      type:
1146        name: ObjectDescriptor
1147        namespace: 'checker'
1148      min_ptr_depth: 1
1149    new_args:
1150    - type:
1151        name: "es2panda_ObjectDescriptor"
1152        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1153      name: '|arg_name|'
1154      namespace: 'checker::'
1155    cast:
1156        expression: >-
1157          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1158          reinterpret_cast<checker::ObjectDescriptor |es2panda_arg.type.ptr_depth|>(|arg_name|);
1159        reverse_cast:
1160          start : >-
1161            reinterpret_cast<?const? es2panda_ObjectDescriptor |es2panda_arg.type.ptr_depth|>
1162        call_cast:
1163          call_var: 'es2panda_ObjectDescriptor *ast'
1164          start: >-
1165            (reinterpret_cast<?const? checker::ObjectDescriptor *>(ast))->
1166        constructor_cast:
1167          start: >-
1168            ctxAllocator->New<checker::ObjectDescriptor>(
1169          end: )
1170        var_name: '|arg_name|E2p'
1171
1172  - es2panda_arg:
1173      name: '|arg_name|'
1174      type:
1175        name: UType
1176        namespace: checker
1177    new_args:
1178    - type:
1179        name: int32_t
1180        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1181      name: '|arg_name|'
1182    cast:
1183        expression:
1184        reverse_cast:
1185          start : >-
1186            reinterpret_cast<?const? int32_t |es2panda_arg.type.ptr_depth|>
1187        var_name: '|arg_name|'
1188
1189  - es2panda_arg:
1190      name: '|arg_name|'
1191      type:
1192        name: TupleSizeType
1193        namespace: checker
1194    new_args:
1195    - type:
1196        name: int32_t
1197        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1198      name: '|arg_name|'
1199    cast:
1200        expression:
1201        reverse_cast:
1202          start : >-
1203            reinterpret_cast<?const? int32_t |es2panda_arg.type.ptr_depth|>
1204        var_name: '|arg_name|'
1205
1206  - es2panda_arg:
1207      name: '|arg_name|'
1208      type: '|Variable|'
1209      min_ptr_depth: 1
1210    new_args:
1211    - type:
1212        name: 'es2panda_Variable '
1213        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1214      name: '|arg_name|'
1215      namespace: 'varbinder::'
1216    cast:
1217        expression: >-
1218          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1219          reinterpret_cast<varbinder::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1220        reverse_cast:
1221          start: >-
1222            reinterpret_cast<?const? es2panda_Variable |es2panda_arg.type.ptr_depth|>
1223        call_cast:
1224          call_var: 'es2panda_Variable *ast'
1225          start: >-
1226            (reinterpret_cast<?const? varbinder::|es2panda_arg.type.name| *>(ast))->
1227        constructor_cast:
1228          start: >-
1229            ctxAllocator->New<varbinder::|es2panda_arg.type.name|>(
1230          end: )
1231        var_name: '|arg_name|E2p'
1232
1233  - es2panda_arg:
1234      name: '|arg_name|'
1235      type: '|Enum|'
1236      max_ptr_depth: 0
1237    new_args:
1238      - type:
1239          name: 'Es2panda|es2panda_arg.type.name|'
1240        name: '|arg_name|'
1241    cast:
1242        expression: >-
1243          auto |arg_name|E2p = E2pToIr|es2panda_arg.type.name|(|arg_name|);
1244        reverse_cast:
1245          start: >-
1246            IrToE2p|es2panda_arg.type.name|
1247        var_name: '|arg_name|E2p'
1248
1249  - es2panda_arg:
1250      name: '|arg_name|'
1251      type: '|Scope|'
1252      min_ptr_depth: 1
1253    new_args:
1254    - type:
1255        name: "es2panda_Scope"
1256        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1257      name: '|arg_name|'
1258      namespace: 'varbinder::'
1259    cast:
1260        expression: >-
1261          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1262          reinterpret_cast<varbinder::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1263        reverse_cast:
1264          start : >-
1265            reinterpret_cast<?const? es2panda_Scope |es2panda_arg.type.ptr_depth|>
1266        call_cast:
1267          call_var: 'es2panda_Scope *ast'
1268          start: >-
1269            (reinterpret_cast<?const? varbinder::|es2panda_arg.type.name| *>(ast))->
1270        constructor_cast:
1271          start: >-
1272            ctxAllocator->New<varbinder::|es2panda_arg.type.name|>(
1273          end: )
1274        var_name: '|arg_name|E2p'
1275
1276  - es2panda_arg:
1277      name: '|arg_name|'
1278      type: '|Scope|'
1279      max_ptr_depth: 0
1280    new_args:
1281    - type:
1282        name: "es2panda_Scope"
1283        ptr_depth: 1
1284      name: '|arg_name|'
1285      namespace: 'varbinder::'
1286    cast:
1287        expression: ""
1288        var_name: '*reinterpret_cast<varbinder::|es2panda_arg.type.name| *>(|arg_name|)'
1289
1290  - es2panda_arg:
1291      name: '|arg_name|'
1292      type: '|Declaration|'
1293      min_ptr_depth: 1
1294    new_args:
1295    - type:
1296        name: "es2panda_Declaration"
1297        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1298      name: '|arg_name|'
1299      namespace: 'varbinder::'
1300    cast:
1301        expression: >-
1302          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1303          reinterpret_cast<varbinder::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1304        reverse_cast:
1305          start : >-
1306            reinterpret_cast<?const? es2panda_Declaration |es2panda_arg.type.ptr_depth|>
1307        call_cast:
1308          call_var: 'es2panda_Declaration *ast'
1309          start: >-
1310            (reinterpret_cast<?const? varbinder::|es2panda_arg.type.name| *>(ast))->
1311        constructor_cast:
1312          start: >-
1313            ctxAllocator->New<varbinder::|es2panda_arg.type.name|>(
1314          end: )
1315        var_name: '|arg_name|E2p'
1316
1317  - es2panda_arg:
1318      name: '|arg_name|'
1319      type: '|Declaration|'
1320      max_ptr_depth: 0
1321    new_args:
1322    - type:
1323        name: "es2panda_Declaration"
1324        ptr_depth: 1
1325      name: '|arg_name|'
1326      namespace: 'varbinder::'
1327    cast:
1328        expression: ""
1329        var_name: '*reinterpret_cast<varbinder::|es2panda_arg.type.name| *>(|arg_name|)'
1330
1331  - es2panda_arg:
1332      name: '|arg_name|'
1333      type:
1334        name: 'RecordTable'
1335        namespace: varbinder
1336      min_ptr_depth: 1
1337    new_args:
1338    - type:
1339        name: "es2panda_RecordTable"
1340        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1341      name: '|arg_name|'
1342      namespace: 'varbinder::'
1343    cast:
1344        expression: >-
1345          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1346          reinterpret_cast<varbinder::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1347        reverse_cast:
1348          start : >-
1349            reinterpret_cast<?const? es2panda_RecordTable |es2panda_arg.type.ptr_depth|>
1350        call_cast:
1351          call_var: 'es2panda_RecordTable *ast'
1352          start: >-
1353            (reinterpret_cast<?const? varbinder::|es2panda_arg.type.name| *>(ast))->
1354        constructor_cast:
1355          start: >-
1356            ctxAllocator->New<varbinder::|es2panda_arg.type.name|>(
1357          end: )
1358        var_name: '|arg_name|E2p'
1359
1360  - es2panda_arg:
1361      name: '|arg_name|'
1362      type:
1363        name: 'RecordTable'
1364        namespace: varbinder
1365      max_ptr_depth: 0
1366    new_args:
1367    - type:
1368        name: "es2panda_RecordTable"
1369        ptr_depth: 1
1370      name: '|arg_name|'
1371      namespace: 'varbinder::'
1372    cast:
1373        expression: ""
1374        var_name: '*reinterpret_cast<varbinder::|es2panda_arg.type.name| *>(|arg_name|)'
1375
1376  - es2panda_arg:
1377      name: '|arg_name|'
1378      type:
1379        name: 'BoundContext'
1380        namespace: varbinder
1381      min_ptr_depth: 1
1382    new_args:
1383    - type:
1384        name: "es2panda_BoundContext"
1385        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1386      name: '|arg_name|'
1387      namespace: 'varbinder::'
1388    cast:
1389        expression: >-
1390          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1391          reinterpret_cast<varbinder::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1392        reverse_cast:
1393          start : >-
1394            reinterpret_cast<?const? es2panda_BoundContext |es2panda_arg.type.ptr_depth|>
1395        call_cast:
1396          call_var: 'es2panda_BoundContext *ast'
1397          start: >-
1398            (reinterpret_cast<?const? varbinder::|es2panda_arg.type.name| *>(ast))->
1399        constructor_cast:
1400          start: >-
1401            ctxAllocator->New<varbinder::|es2panda_arg.type.name|>(
1402          end: )
1403        var_name: '|arg_name|E2p'
1404
1405  - es2panda_arg:
1406      name: '|arg_name|'
1407      type:
1408        name: 'BoundContext'
1409        namespace: varbinder
1410      max_ptr_depth: 0
1411    new_args:
1412    - type:
1413        name: "es2panda_BoundContext"
1414        ptr_depth: 1
1415      name: '|arg_name|'
1416      namespace: 'varbinder::'
1417    cast:
1418        expression: ""
1419        var_name: '*reinterpret_cast<varbinder::|es2panda_arg.type.name| *>(|arg_name|)'
1420
1421  - es2panda_arg:
1422      name: '|arg_name|'
1423      type:
1424        name: 'ConstScopeFindResult'
1425        namespace: varbinder
1426      min_ptr_depth: 1
1427    new_args:
1428    - type:
1429        name: "es2panda_ScopeFindResult"
1430        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1431      name: '|arg_name|'
1432      namespace: 'varbinder::'
1433    cast:
1434        expression: >-
1435          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1436          reinterpret_cast<varbinder::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1437        reverse_cast:
1438          start : >-
1439            reinterpret_cast<?const? es2panda_ScopeFindResult |es2panda_arg.type.ptr_depth|>
1440        call_cast:
1441          call_var: 'es2panda_ScopeFindResult *ast'
1442          start: >-
1443            (reinterpret_cast<?const? varbinder::|es2panda_arg.type.name| *>(ast))->
1444        constructor_cast:
1445          start: >-
1446            ctxAllocator->New<varbinder::|es2panda_arg.type.name|>(
1447          end: )
1448        var_name: '|arg_name|E2p'
1449
1450  - es2panda_arg:
1451      name: '|arg_name|'
1452      type:
1453        name: 'ConstScopeFindResult'
1454        namespace: varbinder
1455      max_ptr_depth: 0
1456    new_args:
1457    - type:
1458        name: "es2panda_ScopeFindResult"
1459        ptr_depth: 1
1460      name: '|arg_name|'
1461      namespace: 'varbinder::'
1462    cast:
1463        expression: ""
1464        var_name: '*reinterpret_cast<varbinder::|es2panda_arg.type.name| *>(|arg_name|)'
1465        reverse_cast:
1466          start: >-
1467            reinterpret_cast<?const? es2panda_ScopeFindResult *>(
1468            reinterpret_cast<Context *>(context)->allocator->New<varbinder::ConstScopeFindResult>(
1469          end: '))'
1470
1471  - es2panda_arg:
1472      name: '|arg_name|'
1473      type:
1474        name: 'ScopeFindResult'
1475        namespace: varbinder
1476      min_ptr_depth: 1
1477    new_args:
1478    - type:
1479        name: "es2panda_ScopeFindResult"
1480        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1481      name: '|arg_name|'
1482      namespace: 'varbinder::'
1483    cast:
1484        expression: >-
1485          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1486          reinterpret_cast<varbinder::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1487        reverse_cast:
1488          start : >-
1489            reinterpret_cast<?const? es2panda_ScopeFindResult |es2panda_arg.type.ptr_depth|>
1490        call_cast:
1491          call_var: 'es2panda_ScopeFindResult *ast'
1492          start: >-
1493            (reinterpret_cast<?const? varbinder::|es2panda_arg.type.name| *>(ast))->
1494        constructor_cast:
1495          start: >-
1496            ctxAllocator->New<varbinder::|es2panda_arg.type.name|>(
1497          end: )
1498        var_name: '|arg_name|E2p'
1499
1500  - es2panda_arg:
1501      name: '|arg_name|'
1502      type:
1503        name: 'ScopeFindResult'
1504        namespace: varbinder
1505      max_ptr_depth: 0
1506    new_args:
1507    - type:
1508        name: "es2panda_ScopeFindResult"
1509        ptr_depth: 1
1510      name: '|arg_name|'
1511      namespace: 'varbinder::'
1512    cast:
1513        expression: ""
1514        var_name: '*reinterpret_cast<varbinder::|es2panda_arg.type.name| *>(|arg_name|)'
1515        reverse_cast:
1516          start: >-
1517            reinterpret_cast<?const? es2panda_ScopeFindResult *>(
1518            reinterpret_cast<Context *>(context)->allocator->New<varbinder::ScopeFindResult>(
1519          end: '))'
1520
1521  - es2panda_arg:
1522      name: '|arg_name|'
1523      type:
1524        name: 'BindingProps'
1525        namespace: varbinder
1526      min_ptr_depth: 1
1527    new_args:
1528    - type:
1529        name: "es2panda_BindingProps"
1530        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1531      name: '|arg_name|'
1532      namespace: 'varbinder::ClassScope::'
1533    cast:
1534        expression: >-
1535          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1536          reinterpret_cast<varbinder::ClassScope::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1537        reverse_cast:
1538          start : >-
1539            reinterpret_cast<?const? es2panda_BindingProps |es2panda_arg.type.ptr_depth|>
1540        call_cast:
1541          call_var: 'es2panda_BindingProps *ast'
1542          start: >-
1543            (reinterpret_cast<?const? varbinder::ClassScope::|es2panda_arg.type.name| *>(ast))->
1544        constructor_cast:
1545          start: >-
1546            ctxAllocator->New<varbinder::ClassScope::|es2panda_arg.type.name|>(
1547          end: )
1548        var_name: '|arg_name|E2p'
1549
1550  - es2panda_arg:
1551      name: '|arg_name|'
1552      type:
1553        name: 'BindingProps'
1554        namespace: varbinder
1555      max_ptr_depth: 0
1556    new_args:
1557    - type:
1558        name: "es2panda_BindingProps"
1559        ptr_depth: 1
1560      name: '|arg_name|'
1561      namespace: 'varbinder::ClassScope::'
1562    cast:
1563        expression: ""
1564        var_name: '*reinterpret_cast<varbinder::ClassScope::|es2panda_arg.type.name| *>(|arg_name|)'
1565        reverse_cast:
1566          start: >-
1567            reinterpret_cast<?const? es2panda_BindingProps *>(
1568            reinterpret_cast<Context *>(context)->allocator->New<varbinder::ClassScope::BindingProps>(
1569          end: '))'
1570
1571  - es2panda_arg:
1572      name: '|arg_name|'
1573      type:
1574        name: Checker
1575        namespace: 'checker'
1576      min_ptr_depth: 1
1577      max_ptr_depth: 1
1578    new_args:
1579    cast:
1580      expression: auto |es2panda_arg.type.ptr_depth||arg_name|E2p = reinterpret_cast<Context *>(context)->checker;
1581      call_cast:
1582        start: >-
1583            (reinterpret_cast<Context *>(context)->checker)->
1584      var_name: '|arg_name|E2p'
1585
1586  - es2panda_arg:
1587      name: '|arg_name|'
1588      type:
1589        name: SemanticAnalyzer
1590        namespace: 'checker'
1591      min_ptr_depth: 1
1592      max_ptr_depth: 1
1593    new_args:
1594    cast:
1595      expression: auto |es2panda_arg.type.ptr_depth||arg_name|E2p = reinterpret_cast<Context *>(context)->analyzer;
1596      call_cast:
1597        start: >-
1598            (reinterpret_cast<Context *>(context)->analyzer)->
1599      var_name: '|arg_name|E2p'
1600
1601  - es2panda_arg:
1602      name: '|arg_name|'
1603      type:
1604        name: Context
1605        namespace: 'public_lib'
1606      min_ptr_depth: 1
1607      max_ptr_depth: 1
1608    new_args:
1609    cast:
1610      expression: auto |es2panda_arg.type.ptr_depth||arg_name|E2p = reinterpret_cast<Context *>(context);
1611      var_name: '|arg_name|E2p'
1612
1613  - es2panda_arg:
1614      name: '|arg_name|'
1615      type:
1616        name: ETSChecker
1617        namespace: 'checker'
1618      min_ptr_depth: 1
1619      max_ptr_depth: 1
1620    new_args:
1621    cast:
1622      expression: >-
1623        auto *|arg_name|E2p = reinterpret_cast<Context *>(context)->checker->AsETSChecker();
1624      call_cast:
1625        start: >-
1626            (reinterpret_cast<Context *>(context)->checker->AsETSChecker())->
1627      var_name: '|arg_name|E2p'
1628
1629  - es2panda_arg:
1630      name: '|arg_name|'
1631      type:
1632        name: ETSParser
1633        namespace: 'parser'
1634      min_ptr_depth: 1
1635      max_ptr_depth: 1
1636    new_args:
1637    cast:
1638      expression: >-
1639        auto *|arg_name|E2p = reinterpret_cast<Context *>(context)->parser->AsETSParser();
1640      call_cast:
1641        start: >-
1642            (reinterpret_cast<Context *>(context)->parser->AsETSParser())->
1643      var_name: '|arg_name|E2p'
1644
1645  - es2panda_arg:
1646      name: '|arg_name|'
1647      type:
1648        name: VarBinder
1649        namespace: 'varbinder'
1650      min_ptr_depth: 1
1651      max_ptr_depth: 1
1652    new_args:
1653    cast:
1654      expression: >-
1655        auto |es2panda_arg.type.ptr_depth||arg_name|E2p = reinterpret_cast<Context *>(context)->parserProgram->VarBinder();
1656      call_cast:
1657        start: >-
1658            (reinterpret_cast<Context *>(context)->parserProgram->VarBinder())->
1659      var_name: '|arg_name|E2p'
1660
1661  - es2panda_arg:
1662      name: '|arg_name|'
1663      type:
1664        name: ETSBinder
1665        namespace: 'varbinder'
1666      min_ptr_depth: 1
1667      max_ptr_depth: 1
1668    new_args:
1669    cast:
1670      expression: >-
1671        auto |es2panda_arg.type.ptr_depth||arg_name|E2p = reinterpret_cast<Context *>(context)->parserProgram->VarBinder()->AsETSBinder();
1672      call_cast:
1673        start: >-
1674            (reinterpret_cast<Context *>(context)->parserProgram->VarBinder()->AsETSBinder())->
1675      var_name: '|arg_name|E2p'
1676
1677  - es2panda_arg:
1678      name: '|arg_name|'
1679      type:
1680        name: ArenaAllocator
1681      min_ptr_depth: 1
1682      max_ptr_depth: 1
1683    new_args:
1684    cast:
1685      expression: auto |es2panda_arg.type.ptr_depth||arg_name|E2p = reinterpret_cast<Context *>(context)->allocator;
1686      var_name: '|arg_name|E2p'
1687
1688  - es2panda_arg:
1689      name: '|arg_name|'
1690      type:
1691        name: size_type
1692        namespace: VariableMap
1693      max_ptr_depth: 0
1694    new_args:
1695    - type:
1696        name: size_t
1697        ptr_depth: 0
1698      name: '|arg_name|'
1699    cast:
1700      expression: varbinder::VariableMap::size_type |arg_name|E2p = |arg_name|;
1701      reverse_cast:
1702          start : static_cast<?const? size_t>
1703      var_name: '|arg_name|E2p'
1704
1705  - es2panda_arg:
1706      name: '|arg_name|'
1707      type:
1708        name: Program
1709        namespace: 'pandasm'
1710      min_ptr_depth: 1
1711      max_ptr_depth: 1
1712    new_args:
1713    cast:
1714      expression: auto |es2panda_arg.type.ptr_depth||arg_name|E2p = reinterpret_cast<Context *>(context)->program;
1715      var_name: '|arg_name|E2p'
1716
1717  - es2panda_arg:
1718      name: '|arg_name|'
1719      type:
1720        name: Program
1721        namespace: 'parser'
1722      min_ptr_depth: 1
1723      max_ptr_depth: 1
1724    new_args:
1725    cast:
1726      expression: auto |es2panda_arg.type.ptr_depth||arg_name|E2p = reinterpret_cast<Context *>(context)->parserProgram;
1727      var_name: '|arg_name|E2p'
1728
1729  - es2panda_arg:
1730      name: '|arg_name|'
1731      type:
1732        name: 'FunctionSignature'
1733        namespace: 'ir'
1734      min_ptr_depth: 1
1735    new_args:
1736    - type:
1737        name: "es2panda_FunctionSignature"
1738        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1739      name: '|arg_name|'
1740      namespace: "ir::"
1741    cast:
1742        expression: >-
1743          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1744          reinterpret_cast<ir::FunctionSignature |es2panda_arg.type.ptr_depth|>(|arg_name|);
1745        reverse_cast:
1746          start: >-
1747            reinterpret_cast<?const? es2panda_FunctionSignature |es2panda_arg.type.ptr_depth|>
1748        call_cast:
1749          call_var: 'es2panda_FunctionSignature *ast'
1750          start: >-
1751            (reinterpret_cast<?const? ir::FunctionSignature *>(ast))->
1752        constructor_cast:
1753          start: >-
1754            ctxAllocator->New<ir::FunctionSignature>(
1755          end: )
1756        var_name: '|arg_name|E2p'
1757
1758  - es2panda_arg:
1759      name: '|arg_name|'
1760      type:
1761        name: 'FunctionSignature'
1762        namespace: 'ir'
1763      max_ptr_depth: 0
1764    new_args:
1765    - type:
1766        name: "es2panda_FunctionSignature"
1767        ptr_depth: 1
1768      name: '|arg_name|'
1769      namespace: "ir::"
1770    cast:
1771        expression: ''
1772        var_name: 'std::forward<ir::FunctionSignature>(*reinterpret_cast<ir::FunctionSignature *>(|arg_name|))'
1773        reverse_cast:
1774          start: >-
1775            reinterpret_cast<?const? es2panda_FunctionSignature *>(
1776            reinterpret_cast<Context *>(context)->allocator->New<ir::FunctionSignature>(
1777          end: '))'
1778
1779  - es2panda_arg:
1780      name: '|arg_name|'
1781      type:
1782        name: 'Language'
1783      min_ptr_depth: 1
1784    new_args:
1785    cast:
1786        expression: >-
1787          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1788          reinterpret_cast<Context *>(context)->allocator->
1789          New<Language |es2panda_arg.type.ptr_depth|>(Language::Id::ETS);
1790        var_name: '|arg_name|E2p'
1791
1792  - es2panda_arg:
1793      name: '|arg_name|'
1794      type:
1795        name: 'Language'
1796      max_ptr_depth: 0
1797    new_args:
1798    cast:
1799        expression: >-
1800          ark::es2panda::Language |arg_name|E2p {Language::Id::ETS};
1801        var_name: '|arg_name|E2p'
1802
1803  - es2panda_arg:
1804      name: '|arg_name|'
1805      type:
1806        name: 'SourcePosition'
1807        namespace: 'lexer'
1808      min_ptr_depth: 1
1809    new_args:
1810    - type:
1811        name: "es2panda_SourcePosition"
1812        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1813      name: '|arg_name|'
1814      namespace: 'lexer::'
1815    cast:
1816        expression: >-
1817          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1818          reinterpret_cast<lexer::SourcePosition |es2panda_arg.type.ptr_depth|>(|arg_name|);
1819        reverse_cast:
1820          start : >-
1821            reinterpret_cast<?const? es2panda_SourcePosition |es2panda_arg.type.ptr_depth|>
1822        call_cast:
1823          call_var: 'es2panda_SourcePosition *ast'
1824          start: >-
1825            (reinterpret_cast<?const? lexer::SourcePosition *>(ast))->
1826        constructor_cast:
1827          start: >-
1828            ctxAllocator->New<lexer::SourcePosition>(
1829          end: )
1830        var_name: '|arg_name|E2p'
1831
1832  - es2panda_arg:
1833      name: '|arg_name|'
1834      type:
1835        name: 'SourcePosition'
1836        namespace: 'lexer'
1837      max_ptr_depth: 0
1838    new_args:
1839    - type:
1840        name: "es2panda_SourcePosition"
1841        ptr_depth: 1
1842      name: '|arg_name|'
1843      namespace: 'lexer::'
1844    cast:
1845        expression: >-
1846          auto |arg_name|E2p = *reinterpret_cast<lexer::SourcePosition *>(|arg_name|);
1847        reverse_cast:
1848          start: >-
1849            reinterpret_cast<?const? es2panda_SourcePosition *>(
1850            reinterpret_cast<Context *>(context)->allocator->New<lexer::SourcePosition>(
1851          end: '))'
1852        var_name: '|arg_name|E2p'
1853
1854  - es2panda_arg:
1855      name: '|arg_name|'
1856      type:
1857        name: 'SourceRange'
1858        namespace: 'lexer'
1859      min_ptr_depth: 1
1860    new_args:
1861    - type:
1862        name: "es2panda_SourceRange"
1863        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1864      name: '|arg_name|'
1865      namespace: 'lexer::'
1866    cast:
1867        expression: >-
1868          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1869          reinterpret_cast<lexer::SourceRange |es2panda_arg.type.ptr_depth|>(|arg_name|);
1870        reverse_cast:
1871          start : >-
1872            reinterpret_cast<?const? es2panda_SourceRange |es2panda_arg.type.ptr_depth|>
1873        call_cast:
1874          call_var: 'es2panda_SourceRange *ast'
1875          start: >-
1876            (reinterpret_cast<?const? lexer::SourceRange *>(ast))->
1877        constructor_cast:
1878          start: >-
1879            ctxAllocator->New<lexer::SourceRange>(
1880          end: )
1881        var_name: '|arg_name|E2p'
1882
1883  - es2panda_arg:
1884      name: '|arg_name|'
1885      type:
1886        name: 'SourceRange'
1887        namespace: 'lexer'
1888      max_ptr_depth: 0
1889    new_args:
1890    - type:
1891        name: "es2panda_SourceRange"
1892        ptr_depth: 1
1893      name: '|arg_name|'
1894      namespace: 'lexer::'
1895    cast:
1896        expression: >-
1897          auto |arg_name|E2p = *reinterpret_cast<lexer::SourceRange *>(|arg_name|);
1898        reverse_cast:
1899          start: >-
1900            reinterpret_cast<?const? es2panda_SourceRange *>(
1901            reinterpret_cast<Context *>(context)->allocator->New<lexer::SourceRange>(
1902          end: '))'
1903        var_name: '|arg_name|E2p'
1904
1905  - es2panda_arg:
1906      name: '|arg_name|'
1907      type:
1908        name: 'ErrorLogger'
1909        namespace: 'util'
1910      min_ptr_depth: 1
1911    new_args:
1912    - type:
1913        name: "es2panda_ErrorLogger"
1914        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1915      name: '|arg_name|'
1916      namespace: 'util::'
1917    cast:
1918        expression: >-
1919          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1920          reinterpret_cast<util::ErrorLogger |es2panda_arg.type.ptr_depth|>(|arg_name|);
1921        reverse_cast:
1922          start : >-
1923            reinterpret_cast<?const? es2panda_ErrorLogger |es2panda_arg.type.ptr_depth|>
1924        call_cast:
1925          call_var: 'es2panda_ErrorLogger *ast'
1926          start: >-
1927            (reinterpret_cast<?const? util::ErrorLogger *>(ast))->
1928        constructor_cast:
1929          start: >-
1930            ctxAllocator->New<util::ErrorLogger>(
1931          end: )
1932        var_name: '|arg_name|E2p'
1933
1934  - es2panda_arg:
1935      name: '|arg_name|'
1936      type:
1937        name: 'ErrorLogger'
1938        namespace: 'util'
1939      max_ptr_depth: 0
1940    new_args:
1941    - type:
1942        name: "es2panda_ErrorLogger"
1943        ptr_depth: 1
1944      name: '|arg_name|'
1945      namespace: 'util::'
1946    cast:
1947        expression: >-
1948          auto |arg_name|E2p = *reinterpret_cast<util::ErrorLogger *>(|arg_name|);
1949        var_name: '|arg_name|E2p'
1950
1951  - es2panda_arg:
1952      name: '|arg_name|'
1953      type:
1954        name: 'VReg'
1955        namespace: 'compiler'
1956      min_ptr_depth: 1
1957    new_args:
1958    - type:
1959        name: "es2panda_VReg"
1960        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1961      name: '|arg_name|'
1962      namespace: 'compiler::'
1963    cast:
1964        expression: >-
1965          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1966          reinterpret_cast<compiler::VReg |es2panda_arg.type.ptr_depth|>(|arg_name|);
1967        reverse_cast:
1968          start : >-
1969            reinterpret_cast<?const? es2panda_VReg |es2panda_arg.type.ptr_depth|>
1970        call_cast:
1971          call_var: 'es2panda_VReg *ast'
1972          start: >-
1973            (reinterpret_cast<?const? compiler::VReg *>(ast))->
1974        constructor_cast:
1975          start: >-
1976            ctxAllocator->New<compiler::VReg>(
1977          end: )
1978        var_name: '|arg_name|E2p'
1979
1980  - es2panda_arg:
1981      name: '|arg_name|'
1982      type:
1983        name: 'VReg'
1984        namespace: 'compiler'
1985      max_ptr_depth: 0
1986    new_args:
1987    - type:
1988        name: "es2panda_VReg"
1989        ptr_depth: 1
1990      name: '|arg_name|'
1991      namespace: 'compiler::'
1992    cast:
1993        expression: >-
1994          auto |arg_name|E2p = *reinterpret_cast<compiler::VReg *>(|arg_name|);
1995        reverse_cast:
1996          start: >-
1997            reinterpret_cast<?const? es2panda_VReg *>(
1998            reinterpret_cast<Context *>(context)->allocator->New<compiler::VReg>(
1999          end: '))'
2000        var_name: '|arg_name|E2p'
2001
2002  - es2panda_arg:
2003      name: '|arg_name|'
2004      type:
2005        name: 'IRNode'
2006        namespace: 'compiler'
2007      min_ptr_depth: 1
2008    new_args:
2009    - type:
2010        name: "es2panda_IRNode"
2011        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2012      name: '|arg_name|'
2013      namespace: 'compiler::'
2014    cast:
2015        expression: >-
2016          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2017          reinterpret_cast<compiler::IRNode |es2panda_arg.type.ptr_depth|>(|arg_name|);
2018        reverse_cast:
2019          start : >-
2020            reinterpret_cast<?const? es2panda_IRNode |es2panda_arg.type.ptr_depth|>
2021        call_cast:
2022          call_var: 'es2panda_IRNode *ast'
2023          start: >-
2024            (reinterpret_cast<?const? compiler::IRNode *>(ast))->
2025        constructor_cast:
2026          start: >-
2027            ctxAllocator->New<compiler::IRNode>(
2028          end: )
2029        var_name: '|arg_name|E2p'
2030
2031  - es2panda_arg:
2032      name: '|arg_name|'
2033      type:
2034        name: 'IRNode'
2035        namespace: 'compiler'
2036      max_ptr_depth: 0
2037    new_args:
2038    - type:
2039        name: "es2panda_IRNode"
2040        ptr_depth: 1
2041      name: '|arg_name|'
2042      namespace: 'compiler::'
2043    cast:
2044        expression: >-
2045          auto |arg_name|E2p = *reinterpret_cast<compiler::IRNode *>(|arg_name|);
2046        reverse_cast:
2047          start: >-
2048            reinterpret_cast<?const? es2panda_IRNode *>(
2049            reinterpret_cast<Context *>(context)->allocator->New<compiler::IRNode>(
2050          end: '))'
2051        var_name: '|arg_name|E2p'
2052
2053  - es2panda_arg:
2054      name: '|arg_name|'
2055      type:
2056        name: 'SrcDumper'
2057        namespace: "ir"
2058      min_ptr_depth: 1
2059    new_args:
2060    - type:
2061        name: "es2panda_SrcDumper"
2062        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2063      name: '|arg_name|'
2064      namespace: 'ir::'
2065    cast:
2066        expression: >-
2067          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2068          reinterpret_cast<ir::SrcDumper |es2panda_arg.type.ptr_depth|>(|arg_name|);
2069        reverse_cast:
2070          start : >-
2071            reinterpret_cast<?const? es2panda_SrcDumper |es2panda_arg.type.ptr_depth|>
2072        call_cast:
2073          call_var: 'es2panda_SrcDumper *ast'
2074          start: >-
2075            (reinterpret_cast<?const? ir::SrcDumper *>(ast))->
2076        constructor_cast:
2077          start: >-
2078            ctxAllocator->New<ir::SrcDumper>(
2079          end: )
2080        var_name: '|arg_name|E2p'
2081
2082  - es2panda_arg:
2083      name: '|arg_name|'
2084      type:
2085        name: 'SrcDumper'
2086        namespace: "ir"
2087      max_ptr_depth: 0
2088    new_args:
2089    - type:
2090        name: "es2panda_SrcDumper"
2091        ptr_depth: 1
2092      name: '|arg_name|'
2093      namespace: 'ir::'
2094    cast:
2095        expression: ''
2096        var_name: 'std::forward<ir::SrcDumper>(*reinterpret_cast<ir::SrcDumper *>(|arg_name|))'
2097
2098
2099  - es2panda_arg:
2100      name: '|arg_name|'
2101      type:
2102        name: 'AstDumper'
2103        namespace: "ir"
2104      min_ptr_depth: 1
2105    new_args:
2106    - type:
2107        name: "es2panda_AstDumper"
2108        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2109      name: '|arg_name|'
2110      namespace: 'ir::'
2111    cast:
2112        expression: >-
2113          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2114          reinterpret_cast<ir::AstDumper |es2panda_arg.type.ptr_depth|>(|arg_name|);
2115        reverse_cast:
2116          start : >-
2117            reinterpret_cast<?const? es2panda_AstDumper |es2panda_arg.type.ptr_depth|>
2118        call_cast:
2119          call_var: 'es2panda_AstDumper *ast'
2120          start: >-
2121            (reinterpret_cast<?const? ir::AstDumper *>(ast))->
2122        constructor_cast:
2123          start: >-
2124            ctxAllocator->New<ir::AstDumper>(
2125          end: )
2126        var_name: '|arg_name|E2p'
2127
2128  - es2panda_arg:
2129      name: '|arg_name|'
2130      type:
2131        name: 'AstDumper'
2132        namespace: "ir"
2133      max_ptr_depth: 0
2134    new_args:
2135    - type:
2136        name: "es2panda_AstDumper"
2137        ptr_depth: 1
2138      name: '|arg_name|'
2139      namespace: 'ir::'
2140    cast:
2141        expression: ''
2142        var_name: 'std::forward<ir::AstDumper>(*reinterpret_cast<ir::AstDumper *>(|arg_name|))'
2143
2144  - es2panda_arg:
2145      name: '|arg_name|'
2146      type:
2147        name: 'LabelPair'
2148      min_ptr_depth: 1
2149    new_args:
2150    - type:
2151        name: "es2panda_LabelPair"
2152        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2153      name: '|arg_name|'
2154      namespace: 'compiler::'
2155    cast:
2156        expression: >-
2157          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2158          reinterpret_cast<compiler::LabelPair |es2panda_arg.type.ptr_depth|>(|arg_name|);
2159        reverse_cast:
2160          start : >-
2161            reinterpret_cast<?const? es2panda_LabelPair |es2panda_arg.type.ptr_depth|>
2162        call_cast:
2163          call_var: 'es2panda_LabelPair *ast'
2164          start: >-
2165            (reinterpret_cast<?const? compiler::LabelPair *>(ast))->
2166        constructor_cast:
2167          start: >-
2168            ctxAllocator->New<compiler::LabelPair>(
2169          end: )
2170        var_name: '|arg_name|E2p'
2171
2172  - es2panda_arg:
2173      name: '|arg_name|'
2174      type:
2175        name: 'LabelPair'
2176      max_ptr_depth: 0
2177    new_args:
2178    - type:
2179        name: "es2panda_LabelPair"
2180        ptr_depth: 1
2181      name: '|arg_name|'
2182      namespace: 'compiler::'
2183    cast:
2184        expression: ''
2185        var_name: 'std::forward<compiler::LabelPair>(*reinterpret_cast<compiler::LabelPair *>(|arg_name|))'
2186        reverse_cast:
2187          start: >-
2188            reinterpret_cast<?const? es2panda_LabelPair *>(ctxAllocator->New<compiler::LabelPair>
2189          end: )
2190
2191  - es2panda_arg:
2192      name: '|arg_name|'
2193      type:
2194        name: 'ImportSource'
2195        namespace: "ir"
2196      min_ptr_depth: 1
2197    new_args:
2198    - type:
2199        name: "es2panda_ImportSource"
2200        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2201      name: '|arg_name|'
2202      namespace: "ir::"
2203    cast:
2204        expression: >-
2205          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2206          reinterpret_cast<ir::ImportSource |es2panda_arg.type.ptr_depth|>(|arg_name|);
2207        reverse_cast:
2208          start : >-
2209            reinterpret_cast<?const? es2panda_ImportSource |es2panda_arg.type.ptr_depth|>
2210        call_cast:
2211          call_var: 'es2panda_ImportSource *ast'
2212          start: >-
2213            (reinterpret_cast<?const? ir::ImportSource *>(ast))->
2214        constructor_cast:
2215          start: >-
2216            ctxAllocator->New<ir::ImportSource>(
2217          end: )
2218        var_name: '|arg_name|E2p'
2219
2220  - es2panda_arg:
2221      name: '|arg_name|'
2222      type:
2223        name: 'ValidationInfo'
2224        namespace: "ir"
2225      min_ptr_depth: 1
2226    new_args:
2227    - type:
2228        name: "es2panda_ValidationInfo"
2229        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2230      name: '|arg_name|'
2231      namespace: "ir::"
2232    cast:
2233        expression: >-
2234          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2235          reinterpret_cast<ir::ValidationInfo |es2panda_arg.type.ptr_depth|>(|arg_name|);
2236        reverse_cast:
2237          start : >-
2238            reinterpret_cast<?const? es2panda_ValidationInfo |es2panda_arg.type.ptr_depth|>
2239        call_cast:
2240          call_var: 'es2panda_ValidationInfo *ast'
2241          start: >-
2242            (reinterpret_cast<?const? ir::ValidationInfo *>(ast))->
2243        constructor_cast:
2244          start: >-
2245            ctxAllocator->New<ir::ValidationInfo>(
2246          end: )
2247        var_name: '|arg_name|E2p'
2248
2249  - es2panda_arg:
2250      name: '|arg_name|'
2251      type:
2252        name: 'ValidationInfo'
2253        namespace: "ir"
2254      max_ptr_depth: 0
2255    new_args:
2256    - type:
2257        name: "es2panda_ValidationInfo"
2258        ptr_depth: 1
2259      name: '|arg_name|'
2260      namespace: "ir::"
2261    cast:
2262        expression: ''
2263        reverse_cast:
2264          start : >-
2265            reinterpret_cast<?const? es2panda_ValidationInfo *>(reinterpret_cast<Context *>(context)->
2266            allocator->New<ir::ValidationInfo>(
2267          end: '))'
2268        var_name: '*reinterpret_cast<ir::ValidationInfo |es2panda_arg.type.ptr_depth|>(|arg_name|)'
2269
2270  - es2panda_arg:
2271      name: '|arg_name|'
2272      type:
2273        name: 'ASTAbstractVisitor'
2274        namespace: 'visitor'
2275      min_ptr_depth: 1
2276    new_args:
2277    - type:
2278        name: "es2panda_AstVisitor"
2279        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2280      name: '|arg_name|'
2281      namespace: 'ir::visitor::'
2282    cast:
2283        expression: >-
2284          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2285          reinterpret_cast<ir::visitor::ASTAbstractVisitor |es2panda_arg.type.ptr_depth|>(|arg_name|);
2286        reverse_cast:
2287          start : >-
2288            reinterpret_cast<?const? es2panda_AstVisitor |es2panda_arg.type.ptr_depth|>
2289        call_cast:
2290          call_var: 'es2panda_AstVisitor *ast'
2291          start: >-
2292            (reinterpret_cast<?const? ir::visitor::ASTAbstractVisitor *>(ast))->
2293        constructor_cast:
2294          start: >-
2295            ctxAllocator->New<ir::visitor::ASTAbstractVisitor>(
2296          end: )
2297        var_name: '|arg_name|E2p'
2298
2299  - es2panda_arg:
2300      name: '|arg_name|'
2301      type:
2302        name: 'Signature'
2303        namespace: 'ir'
2304      min_ptr_depth: 1
2305    new_args:
2306    - type:
2307        name: "es2panda_Signature"
2308        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2309      name: '|arg_name|'
2310      namespace: 'ir::'
2311    cast:
2312        expression: >-
2313          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2314          reinterpret_cast<checker::Signature |es2panda_arg.type.ptr_depth|>(|arg_name|);
2315        reverse_cast:
2316          start: >-
2317            reinterpret_cast<?const? es2panda_Signature |es2panda_arg.type.ptr_depth|>
2318        call_cast:
2319          call_var: 'es2panda_Signature *ast'
2320          start: >-
2321            (reinterpret_cast<?const? checker::Signature *>(ast))->
2322        constructor_cast:
2323          start: >-
2324            ctxAllocator->New<checker::Signature>(
2325          end: )
2326        var_name: '|arg_name|E2p'
2327
2328  - es2panda_arg:
2329      name: '|arg_name|'
2330      type:
2331        name: 'Substitution'
2332        namespace: 'checker'
2333      min_ptr_depth: 1
2334    new_args:
2335    - type:
2336        name: "ArenaMap"
2337        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2338        template_args:
2339        - type:
2340            name: ETSTypeParameter
2341            ptr_depth: 1
2342        - type:
2343            name: Type
2344            ptr_depth: 1
2345      name: '|arg_name|'
2346    cast:
2347        reverse_cast: ''
2348
2349  - es2panda_arg:
2350      name: '|arg_name|'
2351      type:
2352        name: 'VariableMap'
2353        namespace: 'varbinder::Scope'
2354    new_args:
2355    - type:
2356        name: "ArenaUnorderedMap"
2357        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2358        template_args:
2359        - type:
2360            name: StringView
2361            ptr_depth: 0
2362            namespace: util
2363        - type:
2364            name: Variable
2365            ptr_depth: 1
2366            namespace: varbinder
2367      name: '|arg_name|'
2368    cast:
2369        reverse_cast: ''
2370
2371  - es2panda_arg:
2372      name: '|arg_name|'
2373      type:
2374        name: 'DynamicImportVariables'
2375        namespace: 'varbinder'
2376    new_args:
2377    - type:
2378        name: "ArenaUnorderedMap"
2379        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2380        template_args:
2381        - type:
2382            name: Variable
2383            ptr_depth: 1
2384            namespace: varbinder
2385            const: const
2386        - type:
2387            name: DynamicImportData
2388            ptr_depth: 0
2389      name: '|arg_name|'
2390    cast:
2391        reverse_cast: ''
2392
2393  - es2panda_arg:
2394      name: '|arg_name|'
2395      type:
2396        name: 'GlobalArraySignatureMap'
2397        namespace: 'checker'
2398    new_args:
2399    - type:
2400        name: "ArenaUnorderedMap"
2401        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2402        template_args:
2403        - type:
2404            name: ETSArrayType
2405            ptr_depth: 1
2406            namespace: checker
2407            const: const
2408        - type:
2409            name: Signature
2410            ptr_depth: 1
2411            namespace: checker
2412      name: '|arg_name|'
2413    cast:
2414        reverse_cast: ''
2415
2416  - es2panda_arg:
2417      name: '|arg_name|'
2418      type:
2419        name: 'CapturedVarsMap'
2420        namespace: 'checker'
2421    new_args:
2422    - type:
2423        name: "ArenaUnorderedMap"
2424        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2425        template_args:
2426        - type:
2427            name: Variable
2428            ptr_depth: 1
2429            namespace: varbinder
2430            const: const
2431        - type:
2432            name: SourcePosition
2433            ptr_depth: 0
2434            namespace: lexer
2435      name: '|arg_name|'
2436    cast:
2437        reverse_cast: ''
2438
2439  - es2panda_arg:
2440      name: '|arg_name|'
2441      type:
2442        name: 'Signature'
2443        namespace: 'checker'
2444      min_ptr_depth: 1
2445    new_args:
2446    - type:
2447        name: "es2panda_Signature"
2448        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2449      name: '|arg_name|'
2450      namespace: 'checker::'
2451    cast:
2452        expression: >-
2453          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2454          reinterpret_cast<checker::Signature |es2panda_arg.type.ptr_depth|>(|arg_name|);
2455        reverse_cast:
2456          start: >-
2457            reinterpret_cast<?const? es2panda_Signature |es2panda_arg.type.ptr_depth|>
2458        call_cast:
2459          call_var: 'es2panda_Signature *ast'
2460          start: >-
2461            (reinterpret_cast<?const? checker::Signature *>(ast))->
2462        constructor_cast:
2463          start: >-
2464            ctxAllocator->New<checker::Signature>(
2465          end: )
2466        var_name: '|arg_name|E2p'
2467
2468  - es2panda_arg:
2469      name: '|arg_name|'
2470      type:
2471        name: 'SignatureInfo'
2472        namespace: 'checker'
2473      min_ptr_depth: 1
2474    new_args:
2475    - type:
2476        name: "es2panda_SignatureInfo"
2477        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2478      name: '|arg_name|'
2479      namespace: 'checker::'
2480    cast:
2481        expression: >-
2482          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2483          reinterpret_cast<checker::SignatureInfo |es2panda_arg.type.ptr_depth|>(|arg_name|);
2484        reverse_cast:
2485          start: >-
2486            reinterpret_cast<?const? es2panda_SignatureInfo |es2panda_arg.type.ptr_depth|>
2487        call_cast:
2488          call_var: 'es2panda_SignatureInfo *ast'
2489          start: >-
2490            (reinterpret_cast<?const? checker::SignatureInfo *>(ast))->
2491        constructor_cast:
2492          start: >-
2493            ctxAllocator->New<checker::SignatureInfo>(
2494          end: )
2495        var_name: '|arg_name|E2p'
2496
2497  - es2panda_arg:
2498      name: '|arg_name|'
2499      type:
2500        name: 'CheckerContext'
2501        namespace: 'checker'
2502      min_ptr_depth: 1
2503    new_args:
2504    - type:
2505        name: "es2panda_CheckerContext"
2506        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2507      name: '|arg_name|'
2508      namespace: 'checker::'
2509    cast:
2510        expression: >-
2511          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2512          reinterpret_cast<checker::CheckerContext |es2panda_arg.type.ptr_depth|>(|arg_name|);
2513        reverse_cast:
2514          start: >-
2515            reinterpret_cast<?const? es2panda_CheckerContext |es2panda_arg.type.ptr_depth|>
2516        call_cast:
2517          call_var: 'es2panda_CheckerContext *ast'
2518          start: >-
2519            (reinterpret_cast<?const? checker::CheckerContext *>(ast))->
2520        constructor_cast:
2521          start: >-
2522            ctxAllocator->New<checker::CheckerContext>(
2523          end: )
2524        var_name: '|arg_name|E2p'
2525
2526  - es2panda_arg:
2527      name: '|arg_name|'
2528      type:
2529        name: 'CheckerContext'
2530        namespace: 'checker'
2531      max_ptr_depth: 0
2532    new_args:
2533    - type:
2534        name: "es2panda_CheckerContext"
2535        ptr_depth: 1
2536      name: '|arg_name|'
2537      namespace: 'checker::'
2538    cast:
2539        expression: >-
2540          auto |arg_name|E2p =
2541          *(reinterpret_cast<checker::CheckerContext *>(|arg_name|));
2542        reverse_cast:
2543          start: >-
2544            reinterpret_cast<?const? es2panda_CheckerContext *>(reinterpret_cast<Context *>(context)->allocator->
2545            New<checker::CheckerContext>
2546          end: )
2547        var_name: '|arg_name|E2p'
2548
2549  - es2panda_arg:
2550      name: '|arg_name|'
2551      type:
2552        name: 'CompilerOptions'
2553      max_ptr_depth: 1
2554      min_ptr_depth: 1
2555    new_args:
2556    cast:
2557        expression: >-
2558          auto |arg_name|E2p =
2559          &(reinterpret_cast<Context *>(context)->config->options->CompilerOptions());
2560        call_cast:
2561          start: >-
2562            (reinterpret_cast<Context *>(context)->config->options->CompilerOptions().
2563        var_name: '|arg_name|E2p'
2564
2565  - es2panda_arg:
2566      name: '|arg_name|'
2567      type:
2568        name: 'CompilerOptions'
2569      max_ptr_depth: 0
2570    new_args:
2571    cast:
2572        expression: >-
2573          auto |arg_name|E2p =
2574          reinterpret_cast<Context *>(context)->config->options->CompilerOptions();
2575        var_name: '|arg_name|E2p'
2576
2577  - es2panda_arg:
2578      name: '|arg_name|'
2579      type:
2580        name: 'ResolveResult'
2581        namespace: 'checker'
2582      min_ptr_depth: 1
2583    new_args:
2584    - type:
2585        name: "es2panda_ResolveResult"
2586        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2587      name: '|arg_name|'
2588      namespace: 'checker::'
2589    cast:
2590        expression: >-
2591          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2592          reinterpret_cast<checker::ResolveResult |es2panda_arg.type.ptr_depth|>(|arg_name|);
2593        reverse_cast:
2594          start: >-
2595            reinterpret_cast<?const? es2panda_ResolveResult |es2panda_arg.type.ptr_depth|>
2596        call_cast:
2597          call_var: 'es2panda_ResolveResult *ast'
2598          start: >-
2599            (reinterpret_cast<?const? checker::ResolveResult *>(ast))->
2600        constructor_cast:
2601          start: >-
2602            ctxAllocator->New<checker::ResolveResult>(
2603          end: )
2604        var_name: '|arg_name|E2p'
2605
2606  - es2panda_arg:
2607      name: '|arg_name|'
2608      type:
2609        name: 'ResolveResult'
2610        namespace: 'checker'
2611      max_ptr_depth: 0
2612    new_args:
2613    - type:
2614        name: "es2panda_ResolveResult"
2615        ptr_depth: 1
2616      name: '|arg_name|'
2617      namespace: 'checker::'
2618    cast:
2619        expression: >-
2620          auto |arg_name|E2p =
2621          *(reinterpret_cast<checker::ResolveResult *>(|arg_name|));
2622        var_name: '|arg_name|E2p'
2623
2624  - es2panda_arg:
2625      name: '|arg_name|'
2626      type:
2627        name: StringView
2628        namespace: util
2629      min_ptr_depth: 0
2630      max_ptr_depth: 0
2631    new_args:
2632    - type:
2633        name: "char"
2634        ptr_depth: 1
2635      name: "|arg_name|"
2636      namespace: 'util::'
2637    cast:
2638      expression: util::StringView |arg_name|E2p {|arg_name|};
2639      var_name: '|arg_name|E2p'
2640      reverse_cast:
2641          start: StringViewToCString(reinterpret_cast<Context *>(context)->allocator,
2642          end: )
2643
2644  - es2panda_arg:
2645      name: '|arg_name|'
2646      type:
2647        name: UString
2648        namespace: util
2649      min_ptr_depth: 0
2650      max_ptr_depth: 0
2651    new_args:
2652    - type:
2653        name: "char"
2654        ptr_depth: 1
2655      name: "|arg_name|"
2656      namespace: 'util::'
2657    cast:
2658      expression: util::UString |arg_name|E2p {std::string(|arg_name|), reinterpret_cast<Context *>(context)->allocator};
2659      var_name: '|arg_name|E2p'
2660      reverse_cast:
2661          start: UStringToCString(reinterpret_cast<Context *>(context)->allocator,
2662          end: )
2663
2664  - es2panda_arg:
2665      name: '|arg_name|'
2666      type:
2667        name: string_view
2668      min_ptr_depth: 0
2669      max_ptr_depth: 0
2670    new_args:
2671    - type:
2672        name: "char"
2673        ptr_depth: 1
2674      name: "|arg_name|"
2675    cast:
2676      expression: std::string_view |arg_name|E2p {|arg_name|};
2677      var_name: '|arg_name|E2p'
2678      reverse_cast:
2679          start: StringViewToCString(reinterpret_cast<Context *>(context)->allocator,
2680          end: )
2681
2682  - es2panda_arg:
2683      name: '|arg_name|'
2684      type:
2685        name: "string"
2686      max_ptr_depth: 0
2687      min_ptr_depth: 0
2688    new_args:
2689      - name: '|arg_name|'
2690        type:
2691          name: char
2692          ptr_depth: 1
2693        namespace: 'std::'
2694    cast:
2695      expression: std::string |arg_name|E2p {|arg_name|};
2696      reverse_cast:
2697        start: 'StdStringToCString(reinterpret_cast<Context *>(context)->allocator, '
2698        end: ')'
2699      var_name: '|arg_name|E2p'
2700
2701  - es2panda_arg:
2702      name: '|arg_name|'
2703      type:
2704        name: "EnumMemberResult"
2705        namespace: 'varbinder'
2706      max_ptr_depth: 0
2707      min_ptr_depth: 0
2708    new_args:
2709      - name: '|arg_name|'
2710        type:
2711          name: es2panda_variantDoubleCharArrayBool
2712          ptr_depth: 0
2713        namespace: 'varbinder::'
2714    cast:
2715      expression: |
2716        varbinder::EnumMemberResult |arg_name|E2p;
2717            // NOLINTBEGIN(cppcoreguidelines-pro-type-union-access)
2718            switch  (|arg_name|.index) {
2719              case 0:
2720                |arg_name|E2p = std::variant<double, util::StringView, bool>(|arg_name|.variant.d);
2721                break;
2722              case 1:
2723                {
2724                  util::StringView |arg_name|E2pStringView {|arg_name|.variant.c};
2725                  |arg_name|E2p = std::variant<double, util::StringView, bool>(|arg_name|E2pStringView);
2726                  break;
2727                }
2728              case 2:
2729                |arg_name|E2p = std::variant<double, util::StringView, bool>(|arg_name|.variant.b);
2730                break;
2731              default:
2732                break;
2733            }
2734            // NOLINTEND(cppcoreguidelines-pro-type-union-access)
2735      reverse_cast:
2736        start: 'EnumMemberResultToEs2pandaVariant(reinterpret_cast<Context *>(context)->allocator, '
2737        end: ')'
2738      var_name: '|arg_name|E2p'
2739
2740  - es2panda_arg:
2741      name: '|arg_name|'
2742      type:
2743        name: "NodeTraverser"
2744      max_ptr_depth: 0
2745      min_ptr_depth: 0
2746    new_args:
2747      - name: '|arg_name|'
2748        type:
2749          name: NodeTraverser
2750          ptr_depth: 0
2751        namespace: ''
2752    cast:
2753      expression: >-
2754        std::function<void(ir::AstNode *)> |arg_name|E2p =
2755        [|arg_name|](ir::AstNode *traverserLambdaNode)
2756        {|arg_name|(reinterpret_cast<es2panda_AstNode *>(traverserLambdaNode));};
2757      var_name: '|arg_name|E2p'
2758
2759  - es2panda_arg:
2760      name: '|arg_name|'
2761      type:
2762        name: "NodeTransformer"
2763      max_ptr_depth: 0
2764      min_ptr_depth: 0
2765    new_args:
2766      - name: '|arg_name|'
2767        type:
2768          name: NodeTransformer
2769          ptr_depth: 0
2770        namespace: ''
2771    cast:
2772      expression: >-
2773        std::function<ir::AstNode *(ir::AstNode *)> |arg_name|E2p =
2774        [|arg_name|](ir::AstNode *traverserLambdaNode)
2775        {return reinterpret_cast<ir::AstNode *>(|arg_name|(reinterpret_cast<es2panda_AstNode *>(traverserLambdaNode)));};
2776      var_name: '|arg_name|E2p'
2777
2778  - es2panda_arg:
2779      name: '|arg_name|'
2780      type:
2781        name: NodePredicate
2782      max_ptr_depth: 0
2783      min_ptr_depth: 0
2784    new_args:
2785      - name: '|arg_name|'
2786        type:
2787          name: NodePredicate
2788          ptr_depth: 0
2789        namespace: ''
2790    cast:
2791      expression: >-
2792        std::function<bool(ir::AstNode *)> |arg_name|E2p =
2793        [|arg_name|](ir::AstNode *traverserLambdaNode)
2794        {return |arg_name|(reinterpret_cast<es2panda_AstNode *>(traverserLambdaNode));};
2795      var_name: '|arg_name|E2p'
2796
2797  - es2panda_arg:
2798      name: '|arg_name|'
2799      type:
2800        name: PropertyProcesser
2801        namespace: checker
2802      max_ptr_depth: 0
2803      min_ptr_depth: 0
2804    new_args:
2805      - name: '|arg_name|'
2806        type:
2807          name: PropertyProcessor
2808          ptr_depth: 0
2809        namespace: ''
2810    cast:
2811      expression: >-
2812        std::function<varbinder::LocalVariable *(varbinder::LocalVariable *, checker::Type *)> |arg_name|E2p =
2813        [|arg_name|](varbinder::LocalVariable *propertyProcessorLambdaVariable, checker::Type *propertyProcessorLambdaType)
2814        {return reinterpret_cast<varbinder::LocalVariable *>(|arg_name|(
2815        reinterpret_cast<es2panda_Variable *>(propertyProcessorLambdaVariable),
2816        reinterpret_cast<es2panda_Type *>(propertyProcessorLambdaType)));};
2817      var_name: '|arg_name|E2p'
2818
2819  - es2panda_arg:
2820      name: '|arg_name|'
2821      type:
2822        name: PropertyTraverser
2823      max_ptr_depth: 0
2824      min_ptr_depth: 0
2825    new_args:
2826      - name: '|arg_name|'
2827        type:
2828          name: PropertyTraverser
2829          ptr_depth: 0
2830        namespace: ''
2831    cast:
2832      expression: >-
2833        std::function<void(const varbinder::LocalVariable *)> |arg_name|E2p =
2834        [|arg_name|](const varbinder::LocalVariable *propertyTraverserLambdaVariable)
2835        {|arg_name|(reinterpret_cast<const es2panda_Variable *>(propertyTraverserLambdaVariable));};
2836      var_name: '|arg_name|E2p'
2837
2838  - es2panda_arg:
2839      name: '|arg_name|'
2840      type:
2841        name: ClassBuilder
2842        namespace: 'checker'
2843      max_ptr_depth: 0
2844      min_ptr_depth: 0
2845    new_args:
2846      - name: '|arg_name|'
2847        type:
2848          name: ClassBuilder
2849          ptr_depth: 0
2850        namespace: 'checker::'
2851    cast:
2852      expression: >-
2853        std::function<void(ArenaVector<ir::AstNode *> *)> |arg_name|E2p =
2854        [|arg_name|](ArenaVector<ir::AstNode *> *classBuilderLambdaVariable)
2855        {|arg_name|(reinterpret_cast<es2panda_AstNode **>(classBuilderLambdaVariable->data()), classBuilderLambdaVariable->size());};
2856      var_name: '|arg_name|E2p'
2857
2858  - es2panda_arg:
2859      name: '|arg_name|'
2860      type:
2861        name: MethodBuilder
2862        namespace: 'checker'
2863      max_ptr_depth: 0
2864      min_ptr_depth: 0
2865    new_args:
2866      - name: '|arg_name|'
2867        type:
2868          name: MethodBuilder
2869          ptr_depth: 0
2870        namespace: 'checker::'
2871    cast:
2872      expression: >-
2873        std::function<void(ArenaVector<ir::Statement *> *, ArenaVector<ir::Expression *> *, checker::Type **)> |arg_name|E2p =
2874        [|arg_name|](ArenaVector<ir::Statement *> *methodBuilderLambdaStatementVariable,
2875        ArenaVector<ir::Expression *> *methodBuilderLambdaExpressionVariable, checker::Type **methodBuilderLambdaTypeVariable)
2876        {|arg_name|(reinterpret_cast<es2panda_AstNode **>(methodBuilderLambdaStatementVariable->data()),
2877        methodBuilderLambdaStatementVariable->size(), reinterpret_cast<es2panda_AstNode **>(methodBuilderLambdaExpressionVariable->data()),
2878        methodBuilderLambdaExpressionVariable->size(), reinterpret_cast<es2panda_Type **>(methodBuilderLambdaTypeVariable));};
2879      var_name: '|arg_name|E2p'
2880
2881  - es2panda_arg:
2882      name: '|arg_name|'
2883      type:
2884        name: ClassInitializerBuilder
2885        namespace: 'checker'
2886      max_ptr_depth: 0
2887      min_ptr_depth: 0
2888    new_args:
2889      - name: '|arg_name|'
2890        type:
2891          name: ClassInitializerBuilder
2892          ptr_depth: 0
2893        namespace: 'checker::'
2894    cast:
2895      expression: >-
2896        std::function<void(ArenaVector<ir::Statement *> *, ArenaVector<ir::Expression *> *)> |arg_name|E2p =
2897        [|arg_name|](ArenaVector<ir::Statement *> *classInitializerBuilderLambdaStatementVariable,
2898        ArenaVector<ir::Expression *> *classInitializerBuilderLambdaExpressionVariable)
2899        {|arg_name|(reinterpret_cast<es2panda_AstNode **>(classInitializerBuilderLambdaStatementVariable->data()),
2900        classInitializerBuilderLambdaStatementVariable->size(), reinterpret_cast<es2panda_AstNode **>(classInitializerBuilderLambdaExpressionVariable->data()),
2901        classInitializerBuilderLambdaExpressionVariable->size());};
2902      var_name: '|arg_name|E2p'
2903
2904  - es2panda_arg:
2905      name: '|arg_name|'
2906      type:
2907        name: ConstructorFlags
2908        current_class: TSModuleDeclaration
2909      max_ptr_depth: 0
2910      min_ptr_depth: 0
2911    new_args:
2912      - name: declare
2913        type:
2914          name: bool
2915      - name: global
2916        type:
2917          name: bool
2918    cast:
2919      expression: ""
2920      var_name: "ir::TSModuleDeclaration::ConstructorFlags {declare, global}"
2921
2922  - es2panda_arg:
2923      name: '|arg_name|'
2924      type:
2925        name: "ConstructorFlags"
2926        current_class: TSEnumDeclaration
2927      max_ptr_depth: 0
2928      min_ptr_depth: 0
2929    new_args:
2930      - name: 'isConst'
2931        type:
2932          name: bool
2933      - name: 'isStatic'
2934        type:
2935          name: bool
2936      - name: 'isDeclare'
2937        type:
2938          name: bool
2939    cast:
2940      expression: ""
2941      var_name: "ir::TSEnumDeclaration::ConstructorFlags {isConst, isStatic, isDeclare}"
2942
2943  - es2panda_arg:
2944      name: '|arg_name|'
2945      type:
2946        name: "ConstructorData"
2947        current_class: TSInterfaceDeclaration
2948      max_ptr_depth: 0
2949      min_ptr_depth: 0
2950    new_args:
2951      - name: 'id'
2952        type:
2953          name: es2panda_AstNode
2954          ptr_depth: 1
2955      - name: 'typeParams'
2956        type:
2957          name: es2panda_AstNode
2958          ptr_depth: 1
2959      - name: 'body'
2960        type:
2961          name: es2panda_AstNode
2962          ptr_depth: 1
2963      - name: isStatic
2964        type:
2965          name: bool
2966      - name: isExternal
2967        type:
2968          name: bool
2969    cast:
2970      expression: "\
2971        auto es2pandaId = reinterpret_cast<ir::Identifier *>(id);\n
2972        auto es2pandaTypeParams = reinterpret_cast<ir::TSTypeParameterDeclaration *>(typeParams);\n
2973        auto es2pandaBody = reinterpret_cast<ir::TSInterfaceBody *>(body);\n
2974        ark::es2panda::Language es2pandaLang {Language::Id::ETS};\n
2975        "
2976      var_name: "ir::TSInterfaceDeclaration::ConstructorData {es2pandaId, es2pandaTypeParams, es2pandaBody, isStatic, isExternal, es2pandaLang}"
2977
2978  - es2panda_arg:
2979      name: '|arg_name|'
2980      type:
2981        name: "ScriptFunctionData"
2982        current_class: ScriptFunction
2983      max_ptr_depth: 0
2984      min_ptr_depth: 0
2985    new_args:
2986      - name: '|arg_name|body'
2987        type:
2988          name: es2panda_AstNode
2989          ptr_depth: 1
2990      - name: '|arg_name|signature'
2991        type:
2992          name: es2panda_FunctionSignature
2993          ptr_depth: 1
2994      - name: '|arg_name|funcFlags'
2995        type:
2996          name: int
2997          ptr_depth: 0
2998      - name: '|arg_name|flags'
2999        type:
3000          name: int
3001    cast:
3002      expression: "
3003        auto *|arg_name|bodyE2p = reinterpret_cast<ir::AstNode *>(|arg_name|body);\n
3004        auto |arg_name|signatureE2p = (*reinterpret_cast<ir::FunctionSignature *>(|arg_name|signature));\n
3005        auto |arg_name|funcFlagsE2p = E2pToIrScriptFunctionFlags((Es2pandaScriptFunctionFlags)|arg_name|funcFlags);\n
3006        auto |arg_name|flagsE2p = E2pToIrModifierFlags((Es2pandaModifierFlags)|arg_name|flags);\n
3007        ark::es2panda::Language |arg_name|lang {Language::Id::ETS};\n
3008        "
3009      var_name: "ir::ScriptFunction::ScriptFunctionData {|arg_name|bodyE2p, std::move(|arg_name|signatureE2p),
3010        |arg_name|funcFlagsE2p, |arg_name|flagsE2p, |arg_name|lang}"
3011
3012  - es2panda_arg:
3013      name: '|arg_name|'
3014      type:
3015        name: Method
3016        namespace: checker
3017      max_ptr_depth: 0
3018      min_ptr_depth: 0
3019    new_args:
3020      - name: 'globalSignature'
3021        type:
3022          name: es2panda_Signature
3023          ptr_depth: 1
3024        namespace: 'checker::'
3025      - name: 'memberProxyType'
3026        type:
3027          name: es2panda_Type
3028          ptr_depth: 1
3029        namespace: 'checker::'
3030    return_args:
3031      - name: '|arg_name|MemberProxyType'
3032        type:
3033          name: es2panda_Type
3034          ptr_depth: 2
3035    cast:
3036      expression: "\
3037        auto es2pandaGlobalSignature = reinterpret_cast<checker::Signature *>(globalSignature);\n
3038        auto es2pandaMemberProxyType = reinterpret_cast<checker::ETSFunctionType *>(memberProxyType);\n
3039        "
3040      reverse_cast:
3041        start: >-
3042          auto resMethod =
3043        end: ";\n
3044          \t(*|arg_name|MemberProxyType) = reinterpret_cast<es2panda_Type *>(resMethod.memberProxyType);\n
3045          \tauto res = reinterpret_cast<es2panda_Signature *>(resMethod.globalSignature)"
3046      var_name: "checker::ETSEnumType::Method {es2pandaGlobalSignature, es2pandaMemberProxyType}"
3047
3048  - es2panda_arg:
3049      name: '|arg_name|'
3050      type:
3051        name: DynamicImportData
3052        namespace: varbinder
3053      max_ptr_depth: 1
3054      min_ptr_depth: 1
3055    new_args:
3056      - name: '|arg_name|'
3057        type:
3058          name: es2panda_DynamicImportData
3059          ptr_depth: 1
3060        namespace: 'varbinder::'
3061    cast:
3062      expression: "\
3063        auto |arg_name|import = reinterpret_cast<const ir::ETSImportDeclaration *>(|arg_name|->import);\n
3064        auto |arg_name|specifier = reinterpret_cast<const ir::AstNode *>(|arg_name|->specifier);\n
3065        auto |arg_name|variable = reinterpret_cast<varbinder::Variable *>(|arg_name|->variable);\n
3066        auto |arg_name|E2p = reinterpret_cast<Context *>(context)->allocator->New<varbinder::DynamicImportData>()
3067        |arg_name|E2p->import = |arg_name|import;\n
3068        |arg_name|E2p->specifier = |arg_name|specifier;\n
3069        |arg_name|E2p->variable = |arg_name|variable;\n"
3070      reverse_cast:
3071        start: DynamicImportDataToE2p(reinterpret_cast<Context *>(context)->allocator,
3072        end: )
3073      var_name: "|arg_name|E2p"
3074
3075  - es2panda_arg:
3076      name: '|arg_name|'
3077      type:
3078        name: DynamicImportData
3079        namespace: varbinder
3080      max_ptr_depth: 0
3081    new_args:
3082      - name: '|arg_name|'
3083        type:
3084          name: es2panda_DynamicImportData
3085          ptr_depth: 0
3086        namespace: 'varbinder::'
3087    cast:
3088      expression: "\
3089        auto |arg_name|import = reinterpret_cast<const ir::ETSImportDeclaration *>(|arg_name|.import);\n
3090        auto |arg_name|specifier = reinterpret_cast<const ir::AstNode *>(|arg_name|.specifier);\n
3091        auto |arg_name|variable = reinterpret_cast<varbinder::Variable *>(|arg_name|.variable);\n
3092        varbinder::DynamicImportData |arg_name|E2p;
3093        |arg_name|E2p.import = |arg_name|import;\n
3094        |arg_name|E2p.specifier = |arg_name|specifier;\n
3095        |arg_name|E2p.variable = |arg_name|variable;\n"
3096      reverse_cast:
3097        start: DynamicImportDataToE2p(
3098        end: )
3099      var_name: "|arg_name|E2p"
3100
3101
3102  - es2panda_arg:
3103      name: '|arg_name|'
3104      type:
3105        name: Accessor
3106        namespace: checker
3107      max_ptr_depth: 0
3108    new_args:
3109      - name: '|arg_name|isGetter'
3110        type:
3111          name: bool
3112          ptr_depth: 0
3113        namespace: 'checker::'
3114      - name: '|arg_name|isSetter'
3115        type:
3116          name: bool
3117          ptr_depth: 0
3118        namespace: 'checker::'
3119      - name: '|arg_name|isExternal'
3120        type:
3121          name: bool
3122          ptr_depth: 0
3123        namespace: 'checker::'
3124    cast:
3125      expression: "
3126        checker::Accessor |arg_name|E2p;
3127        |arg_name|E2p.isGetter = |arg_name|isGetter;\n
3128        |arg_name|E2p.isSetter = |arg_name|isSetter;\n
3129        |arg_name|E2p.isExternal = |arg_name|isExternal;\n"
3130      var_name: "|arg_name|E2p"
3131