• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2021-2025 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 apiRes = 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            \t\tauto toPush = |reverse_template_nested_expression_1_start|(resultVector|accessor|at(i))|reverse_template_nested_expression_1_end|;\n
57            \t\tapiRes[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 apiRes = 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            \t\tauto toPush = |reverse_template_nested_expression_1_start|(resultVector|accessor|at(i))|reverse_template_nested_expression_1_end|;\n
103            \t\tapiRes[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 apiRes = 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            \t\tauto toPush = |reverse_template_nested_expression_1_start|(resultVector|accessor|at(i))|reverse_template_nested_expression_1_end|;\n
147            \t\tapiRes[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
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 apiRes = 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            \t\tauto toPush = |reverse_template_nested_expression_1_start|(resultVector|accessor|at(i))|reverse_template_nested_expression_1_end|;\n
195            \t\tapiRes[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 apiRes = 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\tapiRes[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  - es2panda_arg:
244      name: '|arg_name|'
245      type:
246        name: ArenaSet
247        template_args:
248        - type: '|element_type|'
249      max_ptr_depth: 0
250    new_args:
251    - type: '|element_type|'
252      name: '|arg_name|'
253      increase_ptr_depth: 1
254      local_var_name: '|arg_name|'
255      namespace: ''
256    - type:
257        name: size_t
258      name: '|arg_name|Len'
259    return_args:
260    - type:
261        name: size_t
262        ptr_depth: 1
263      name: '|arg_name|Len'
264    cast:
265        expression: "\
266          \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
267          {reinterpret_cast<Context *>(context)->allocator->Adapter()};\n
268          \t\tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
269          \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
270          \t\t|template_nested_expression_1|\n
271          \t\t\t|arg_name|ArenaSet.insert(|new_args.0.local_var_name|);\n
272          \t\t}"
273        var_name: '|arg_name|ArenaSet'
274        reverse_cast:
275          start: "\n
276            \tauto *ctx = reinterpret_cast<Context *>(context);\n
277            \tauto *ctxAllocator = ctx->allocator;\n
278            \tauto resultSet = "
279          end: ";\n
280            \t*|return_args.0.name| = resultSet|accessor|size();\n
281            \tauto apiRes = 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
282            \tsize_t i = 0;\n
283            \tfor (auto elem : resultSet) {\n
284            \t\tauto toPush = |reverse_template_nested_expression_1_start|(elem)|reverse_template_nested_expression_1_end|;\n
285            \t\tapiRes[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
286            \t}"
287
288  - es2panda_arg:
289      name: '|arg_name|'
290      type:
291        name: unordered_set
292        namespace: 'std'
293        template_args:
294        - type: '|element_type|'
295      max_ptr_depth: 0
296    new_args:
297    - type: '|element_type|'
298      name: '|arg_name|'
299      increase_ptr_depth: 1
300      local_var_name: '|arg_name|'
301      namespace: ''
302    - type:
303        name: size_t
304      name: '|arg_name|Len'
305    return_args:
306    - type:
307        name: size_t
308        ptr_depth: 1
309      name: '|arg_name|Len'
310    cast:
311        expression: "\
312          \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
313          {};\n
314          \t\tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
315          \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
316          \t\t|template_nested_expression_1|\n
317          \t\t\t|arg_name|Set.insert(|new_args.0.local_var_name|);\n
318          \t\t}"
319        var_name: '|arg_name|Set'
320        reverse_cast:
321          start: "\n
322            \tauto *ctx = reinterpret_cast<Context *>(context);\n
323            \tauto *ctxAllocator = ctx->allocator;\n
324            \tauto resultSet = "
325          end: ";\n
326            \t*|return_args.0.name| = resultSet|accessor|size();\n
327            \tauto apiRes = 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
328            \tsize_t i = 0;\n
329            \tfor (auto elem : resultSet) {\n
330            \t\tauto toPush = |reverse_template_nested_expression_1_start|(elem)|reverse_template_nested_expression_1_end|;\n
331            \t\tapiRes[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
332            \t}"
333
334  - es2panda_arg:
335      name: '|arg_name|'
336      type:
337        name: unordered_set
338        namespace: 'std'
339        template_args:
340        - type: '|element_type|'
341      max_ptr_depth: 1
342      min_ptr_depth: 1
343    new_args:
344    - type: '|element_type|'
345      name: '|arg_name|'
346      increase_ptr_depth: 1
347      local_var_name: '|arg_name|'
348      namespace: ''
349    - type:
350        name: size_t
351      name: '|arg_name|Len'
352    return_args:
353    - type:
354        name: size_t
355        ptr_depth: 1
356      name: '|arg_name|Len'
357    cast:
358        expression: "\
359          \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
360          \t\tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
361          \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
362          \t\t|template_nested_expression_1|\n
363          \t\t\t|arg_name|Set->insert(|new_args.0.local_var_name|);\n
364          \t\t}"
365        var_name: '|arg_name|Set'
366        reverse_cast:
367          start: "\n
368            \tauto *ctx = reinterpret_cast<Context *>(context);\n
369            \tauto *ctxAllocator = ctx->allocator;\n
370            \tauto resultSet = "
371          end: ";\n
372            \t*|return_args.0.name| = resultSet|accessor|size();\n
373            \tauto apiRes = 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
374            \tsize_t i = 0;\n
375            \tfor (auto elem : resultSet) {\n
376            \t\tauto toPush = |reverse_template_nested_expression_1_start|(elem)|reverse_template_nested_expression_1_end|;\n
377            \t\tapiRes[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
378            \t}"
379
380  - es2panda_arg:
381      name: '|arg_name|'
382      type:
383        name: set
384        namespace: 'std'
385        template_args:
386        - type: '|element_type|'
387      max_ptr_depth: 0
388    new_args:
389    - type: '|element_type|'
390      name: '|arg_name|'
391      increase_ptr_depth: 1
392      local_var_name: '|arg_name|'
393      namespace: ''
394    - type:
395        name: size_t
396      name: '|arg_name|Len'
397    return_args:
398    - type:
399        name: size_t
400        ptr_depth: 1
401      name: '|arg_name|Len'
402    cast:
403        expression: "\
404          \tstd::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
405          {};\n
406          \t\tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
407          \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
408          \t\t|template_nested_expression_1|\n
409          \t\t\t|arg_name|Set.insert(|new_args.0.local_var_name|);\n
410          \t\t}"
411        var_name: '|arg_name|Set'
412        reverse_cast:
413          start: "\n
414            \tauto *ctx = reinterpret_cast<Context *>(context);\n
415            \tauto *ctxAllocator = ctx->allocator;\n
416            \tauto resultSet = "
417          end: ";\n
418            \t*|return_args.0.name| = resultSet|accessor|size();\n
419            \tauto apiRes = 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
420            \tsize_t i = 0;\n
421            \tfor (auto elem : resultSet) {\n
422            \t\tauto toPush = |reverse_template_nested_expression_1_start|(elem)|reverse_template_nested_expression_1_end|;\n
423            \t\tapiRes[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
424            \t}"
425
426  - es2panda_arg:
427      name: '|arg_name|'
428      type:
429        name: set
430        namespace: 'std'
431        template_args:
432        - type: '|element_type|'
433      max_ptr_depth: 1
434      min_ptr_depth: 1
435    new_args:
436    - type: '|element_type|'
437      name: '|arg_name|'
438      increase_ptr_depth: 1
439      local_var_name: '|arg_name|'
440      namespace: ''
441    - type:
442        name: size_t
443      name: '|arg_name|Len'
444    return_args:
445    - type:
446        name: size_t
447        ptr_depth: 1
448      name: '|arg_name|Len'
449    cast:
450        expression: "\
451          \tauto *|arg_name|Set = reinterpret_cast<Context *>(context)->allocator->New<std::set<|new_args.0.namespace||es2panda_arg.type.template_args.0.type.name| |es2panda_arg.type.template_args.0.type.ptr_depth|>>();\n
452          \t\tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
453          \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
454          \t\t|template_nested_expression_1|\n
455          \t\t\t|arg_name|Set->insert(|new_args.0.local_var_name|);\n
456          \t\t}"
457        var_name: '|arg_name|Set'
458        reverse_cast:
459          start: "\n
460            \tauto *ctx = reinterpret_cast<Context *>(context);\n
461            \tauto *ctxAllocator = ctx->allocator;\n
462            \tauto resultSet = "
463          end: ";\n
464            \t*|return_args.0.name| = resultSet|accessor|size();\n
465            \tauto apiRes = 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
466            \tsize_t i = 0;\n
467            \tfor (auto elem : resultSet) {\n
468            \t\tauto toPush = |reverse_template_nested_expression_1_start|(elem)|reverse_template_nested_expression_1_end|;\n
469            \t\tapiRes[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
470            \t}"
471
472  - es2panda_arg:
473      name: '|arg_name|'
474      type:
475        name: ArenaUnorderedMap
476        template_args:
477        - type: '|element_type_1|'
478        - type: '|element_type_2|'
479      max_ptr_depth: 0
480    new_args:
481    - type: '|element_type_1|'
482      name: '|arg_name|KeyArray'
483      local_var_name: '|arg_name|KeyArray'
484      increase_ptr_depth: 1
485    - type: '|element_type_2|'
486      name: '|arg_name|ValueArray'
487      local_var_name: '|arg_name|ValueArray'
488      increase_ptr_depth: 1
489    - type:
490        name: size_t
491      name: '|arg_name|Len'
492    return_args:
493    - type: '|element_type_2|'
494      name: 'arenaMapValueArray'
495      increase_ptr_depth: 2
496    - type:
497        name: size_t
498        ptr_depth: 1
499      name: '|arg_name|Len'
500    cast:
501        expression: "\
502          \tArenaUnorderedMap<|new_args.0.namespace||es2panda_arg.type.template_args.0.type.name| |es2panda_arg.type.template_args.0.type.ptr_depth|,
503          |new_args.1.namespace||es2panda_arg.type.template_args.1.type.name| |es2panda_arg.type.template_args.1.type.ptr_depth|> |arg_name|ArenaMap
504          {reinterpret_cast<Context *>(context)->allocator->Adapter()};\n
505          \tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
506          \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
507          \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
508          \t\t|template_nested_expression_1|\n
509          \t\t|template_nested_expression_2|\n
510          \t\t|arg_name|ArenaMap[|new_args.0.local_var_name|] = |new_args.1.local_var_name|;\n
511          \t}"
512        var_name: '|arg_name|ArenaMap'
513        reverse_cast:
514          start: "\n
515            \tauto *ctx = reinterpret_cast<Context *>(context);\n
516            \tauto *ctxAllocator = ctx->allocator;\n
517            \tauto resultMap = "
518          end: ";\n
519            \t*|return_args.1.name| = resultMap|accessor|size();\n
520            \tauto apiRes = 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
521            \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
522            \tsize_t i = 0;\n
523            \tfor (auto [key, value] : resultMap) {\n
524            \t\tapiRes[i] = |reverse_template_nested_expression_1_start|(key)|reverse_template_nested_expression_1_end|;\n
525            \t\t(*|return_args.0.name|)[i] = |reverse_template_nested_expression_2_start|(value)|reverse_template_nested_expression_2_end|;\n
526            \t\t++i;\n
527            \t}"
528
529  - es2panda_arg:
530      name: '|arg_name|'
531      type:
532        name: ArenaUnorderedMap
533        template_args:
534        - type: '|element_type_1|'
535        - type: '|element_type_2|'
536      max_ptr_depth: 1
537      min_ptr_depth: 1
538    new_args:
539    - type: '|element_type_1|'
540      name: '|arg_name|KeyArray'
541      local_var_name: '|arg_name|KeyArray'
542      increase_ptr_depth: 1
543    - type: '|element_type_2|'
544      name: '|arg_name|ValueArray'
545      local_var_name: '|arg_name|ValueArray'
546      increase_ptr_depth: 1
547    - type:
548        name: size_t
549      name: '|arg_name|Len'
550    return_args:
551    - type: '|element_type_2|'
552      name: 'arenaMapValueArray'
553      increase_ptr_depth: 2
554    - type:
555        name: size_t
556        ptr_depth: 1
557      name: '|arg_name|Len'
558    cast:
559        expression: "\
560          \tauto *|arg_name|ArenaMap = reinterpret_cast<Context *>(context)->allocator->New<ArenaUnorderedMap<
561          |new_args.0.namespace||es2panda_arg.type.template_args.0.type.name| |es2panda_arg.type.template_args.0.type.ptr_depth|,
562          |new_args.1.namespace||es2panda_arg.type.template_args.1.type.name| |es2panda_arg.type.template_args.1.type.ptr_depth|>>
563          (reinterpret_cast<Context *>(context)->allocator->Adapter());\n
564          \tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
565          \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
566          \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
567          \t\t|template_nested_expression_1|\n
568          \t\t|template_nested_expression_2|\n
569          \t\t(*|arg_name|ArenaMap)[|new_args.0.local_var_name|] = |new_args.1.local_var_name|;\n
570          \t}"
571        var_name: '|arg_name|ArenaMap'
572        reverse_cast:
573          start: "\n
574            \tauto *ctx = reinterpret_cast<Context *>(context);\n
575            \tauto *ctxAllocator = ctx->allocator;\n
576            \tauto resultMap = "
577          end: ";\n
578            \t*|return_args.1.name| = resultMap|accessor|size();\n
579            \tauto apiRes = 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
580            \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
581            \tsize_t i = 0;\n
582            \tfor (auto [key, value] : (*resultMap)) {\n
583            \t\tapiRes[i] = |reverse_template_nested_expression_1_start|(key)|reverse_template_nested_expression_1_end|;\n
584            \t\t(*|return_args.0.name|)[i] = |reverse_template_nested_expression_2_start|(value)|reverse_template_nested_expression_2_end|;\n
585            \t\t++i;\n
586            \t}"
587
588  - es2panda_arg:
589      name: '|arg_name|'
590      type:
591        name: unordered_map
592        namespace: 'std'
593        template_args:
594        - type: '|element_type_1|'
595        - type: '|element_type_2|'
596      max_ptr_depth: 0
597    new_args:
598    - type: '|element_type_1|'
599      name: '|arg_name|KeyArray'
600      local_var_name: '|arg_name|KeyArray'
601      increase_ptr_depth: 1
602    - type: '|element_type_2|'
603      name: '|arg_name|ValueArray'
604      local_var_name: '|arg_name|ValueArray'
605      increase_ptr_depth: 1
606    - type:
607        name: size_t
608      name: '|arg_name|Len'
609    return_args:
610    - type: '|element_type_2|'
611      name: 'stdMapValueArray'
612      increase_ptr_depth: 2
613    - type:
614        name: size_t
615        ptr_depth: 1
616      name: '|arg_name|Len'
617    cast:
618        expression: "\
619          \tstd::unordered_map<|new_args.0.namespace||es2panda_arg.type.template_args.0.type.name| |es2panda_arg.type.template_args.0.type.ptr_depth|,
620          |new_args.1.namespace||es2panda_arg.type.template_args.1.type.name| |es2panda_arg.type.template_args.1.type.ptr_depth|> |arg_name|StdMap
621          {};\n
622          \tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
623          \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
624          \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
625          \t\t|template_nested_expression_1|\n
626          \t\t|template_nested_expression_2|\n
627          \t\t|arg_name|StdMap[|new_args.0.local_var_name|] = |new_args.1.local_var_name|;\n
628          \t}"
629        var_name: '|arg_name|StdMap'
630        reverse_cast:
631          start: "\n
632            \tauto *ctx = reinterpret_cast<Context *>(context);\n
633            \tauto *ctxAllocator = ctx->allocator;\n
634            \tauto resultMap = "
635          end: ";\n
636            \t*|return_args.1.name| = resultMap|accessor|size();\n
637            \tauto apiRes = 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
638            \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
639            \tsize_t i = 0;\n
640            \tfor (auto [key, value] : resultMap) {\n
641            \t\tapiRes[i] = |reverse_template_nested_expression_1_start|(key)|reverse_template_nested_expression_1_end|;\n
642            \t\t(*|return_args.0.name|)[i] = |reverse_template_nested_expression_2_start|(value)|reverse_template_nested_expression_2_end|;\n
643            \t\t++i;\n
644            \t}"
645
646  - es2panda_arg:
647      name: '|arg_name|'
648      type:
649        name: unordered_map
650        namespace: std
651        template_args:
652        - type: '|element_type_1|'
653        - type: '|element_type_2|'
654      max_ptr_depth: 1
655      min_ptr_depth: 1
656    new_args:
657    - type: '|element_type_1|'
658      name: '|arg_name|KeyArray'
659      local_var_name: '|arg_name|KeyArray'
660      increase_ptr_depth: 1
661    - type: '|element_type_2|'
662      name: '|arg_name|ValueArray'
663      local_var_name: '|arg_name|ValueArray'
664      increase_ptr_depth: 1
665    - type:
666        name: size_t
667      name: '|arg_name|Len'
668    return_args:
669    - type: '|element_type_2|'
670      name: 'stdMapValueArray'
671      increase_ptr_depth: 2
672    - type:
673        name: size_t
674        ptr_depth: 1
675      name: '|arg_name|Len'
676    cast:
677        expression: "\
678          \tauto *|arg_name|StdMap = reinterpret_cast<Context *>(context)->allocator->New<std::unordered_map<
679          |new_args.0.namespace||es2panda_arg.type.template_args.0.type.name| |es2panda_arg.type.template_args.0.type.ptr_depth|,
680          |new_args.1.namespace||es2panda_arg.type.template_args.1.type.name| |es2panda_arg.type.template_args.1.type.ptr_depth|>>
681          ();\n
682          \tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
683          \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
684          \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
685          \t\t|template_nested_expression_1|\n
686          \t\t|template_nested_expression_2|\n
687          \t\t(*|arg_name|StdMap)[|new_args.0.local_var_name|] = |new_args.1.local_var_name|;\n
688          \t}"
689        var_name: '|arg_name|StdMap'
690        reverse_cast:
691          start: "\n
692            \tauto *ctx = reinterpret_cast<Context *>(context);\n
693            \tauto *ctxAllocator = ctx->allocator;\n
694            \tauto resultMap = "
695          end: ";\n
696            \t*|return_args.1.name| = resultMap|accessor|size();\n
697            \tauto apiRes = 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
698            \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
699            \tsize_t i = 0;\n
700            \tfor (auto [key, value] : (*resultMap)) {\n
701            \t\tapiRes[i] = |reverse_template_nested_expression_1_start|(key)|reverse_template_nested_expression_1_end|;\n
702            \t\t(*|return_args.0.name|)[i] = |reverse_template_nested_expression_2_start|(value)|reverse_template_nested_expression_2_end|;\n
703            \t\t++i;\n
704            \t}"
705
706  - es2panda_arg:
707      name: '|arg_name|'
708      type:
709        name: ArenaMultiMap
710        template_args:
711        - type: '|element_type_1|'
712        - type: '|element_type_2|'
713      max_ptr_depth: 0
714    new_args:
715    - type: '|element_type_1|'
716      name: '|arg_name|KeyArray'
717      local_var_name: '|arg_name|KeyArray'
718      increase_ptr_depth: 1
719    - type: '|element_type_2|'
720      name: '|arg_name|ValueArray'
721      local_var_name: '|arg_name|ValueArray'
722      increase_ptr_depth: 1
723    - type:
724        name: size_t
725      name: '|arg_name|Len'
726    return_args:
727    - type: '|element_type_2|'
728      name: 'arenaMapValueArray'
729      increase_ptr_depth: 2
730    - type:
731        name: size_t
732        ptr_depth: 1
733      name: '|arg_name|Len'
734    cast:
735        expression: "\
736          \tArenaMultiMap<|new_args.0.namespace||es2panda_arg.type.template_args.0.type.name| |es2panda_arg.type.template_args.0.type.ptr_depth|,
737          |new_args.1.namespace||es2panda_arg.type.template_args.1.type.name| |es2panda_arg.type.template_args.1.type.ptr_depth|> |arg_name|ArenaMap
738          {reinterpret_cast<Context *>(context)->allocator->Adapter()};\n
739          \tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
740          \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
741          \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
742          \t\t|template_nested_expression_1|\n
743          \t\t|template_nested_expression_2|\n
744          \t\t|arg_name|ArenaMap.emplace(|new_args.0.local_var_name|, |new_args.1.local_var_name|);\n
745          \t}"
746        var_name: '|arg_name|ArenaMap'
747        reverse_cast:
748          start: "\n
749            \tauto *ctx = reinterpret_cast<Context *>(context);\n
750            \tauto *ctxAllocator = ctx->allocator;\n
751            \tauto resultMap = "
752          end: ";\n
753            \t*|return_args.1.name| = resultMap|accessor|size();\n
754            \tauto apiRes = 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
755            \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
756            \tsize_t i = 0;\n
757            \tfor (auto [key, value] : resultMap) {\n
758            \t\tapiRes[i] = |reverse_template_nested_expression_1_start|(key)|reverse_template_nested_expression_1_end|;\n
759            \t\t(*|return_args.0.name|)[i] = |reverse_template_nested_expression_2_start|(value)|reverse_template_nested_expression_2_end|;\n
760            \t\t++i;\n
761            \t}"
762
763  - es2panda_arg:
764      name: '|arg_name|'
765      type:
766        name: pair
767        template_args:
768        - type: '|element_type_1|'
769        - type: '|element_type_2|'
770      max_ptr_depth: 0
771    new_args:
772    - type: '|element_type_1|'
773      name: '|arg_name|First'
774      local_var_name: '|arg_name|First'
775    - type: '|element_type_2|'
776      name: '|arg_name|Second'
777      local_var_name: '|arg_name|Second'
778    return_args:
779    - type: '|element_type_2|'
780      name: '|arg_name|Second'
781      increase_ptr_depth: 1
782    cast:
783        expression: " /* ERROR! NOT IMPLEMENTED EXPRESSION FOR STD::PAIR */ \n"
784        var_name: '|arg_name|ArenaSet'
785        reverse_cast:
786          start: "\n
787            \tauto *ctx = reinterpret_cast<Context *>(context);\n
788            \t[[maybe_unused]] auto *ctxAllocator = ctx->allocator;\n
789            \tauto resultPair = "
790          end: ";\n
791            \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
792            \tauto apiRes = |reverse_template_nested_expression_1_start|(resultPair|accessor|first)|reverse_template_nested_expression_1_end|;\n
793            "
794
795  - es2panda_arg:
796      name: '|arg_name|'
797      type:
798        name: ArenaMap
799        template_args:
800        - type: '|element_type_1|'
801        - type: '|element_type_2|'
802      max_ptr_depth: 0
803    new_args:
804    - type: '|element_type_1|'
805      name: '|arg_name|KeyArray'
806      local_var_name: '|arg_name|KeyArray'
807      increase_ptr_depth: 1
808    - type: '|element_type_2|'
809      name: '|arg_name|ValueArray'
810      local_var_name: '|arg_name|ValueArray'
811      increase_ptr_depth: 1
812    - type:
813        name: size_t
814      name: '|arg_name|Len'
815    return_args:
816    - type: '|element_type_2|'
817      name: 'arenaMapValueArray'
818      increase_ptr_depth: 2
819    - type:
820        name: size_t
821        ptr_depth: 1
822      name: '|arg_name|Len'
823    cast:
824        expression: "\
825          \tArenaMap<|new_args.0.namespace||es2panda_arg.type.template_args.0.type.name| |es2panda_arg.type.template_args.0.type.ptr_depth|,
826          |new_args.1.namespace||es2panda_arg.type.template_args.1.type.name| |es2panda_arg.type.template_args.1.type.ptr_depth|> |arg_name|ArenaMap
827          {reinterpret_cast<Context *>(context)->allocator->Adapter()};\n
828          \tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
829          \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
830          \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
831          \t\t|template_nested_expression_1|\n
832          \t\t|template_nested_expression_2|\n
833          \t\t|arg_name|ArenaMap[|new_args.0.local_var_name|] = |new_args.1.local_var_name|;\n
834          \t}"
835        var_name: '|arg_name|ArenaMap'
836        reverse_cast:
837          start: "\n
838            \tauto *ctx = reinterpret_cast<Context *>(context);\n
839            \tauto *ctxAllocator = ctx->allocator;\n
840            \tauto resultMap = "
841          end: ";\n
842            \t*|return_args.1.name| = resultMap|accessor|size();\n
843            \tauto apiRes = 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
844            \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
845            \tsize_t i = 0;\n
846            \tfor (auto [key, value] : resultMap) {\n
847            \t\tapiRes[i] = |reverse_template_nested_expression_1_start|(key)|reverse_template_nested_expression_1_end|;\n
848            \t\t(*|return_args.0.name|)[i] = |reverse_template_nested_expression_2_start|(value)|reverse_template_nested_expression_2_end|;\n
849            \t\t++i;\n
850            \t}"
851
852  - es2panda_arg:
853      name: '|arg_name|'
854      type:
855        name: ArenaMap
856        template_args:
857        - type: '|element_type_1|'
858        - type: '|element_type_2|'
859      max_ptr_depth: 1
860      min_ptr_depth: 1
861    new_args:
862    - type: '|element_type_1|'
863      name: '|arg_name|KeyArray'
864      local_var_name: '|arg_name|KeyArray'
865      increase_ptr_depth: 1
866    - type: '|element_type_2|'
867      name: '|arg_name|ValueArray'
868      local_var_name: '|arg_name|ValueArray'
869      increase_ptr_depth: 1
870    - type:
871        name: size_t
872      name: '|arg_name|Len'
873    return_args:
874    - type: '|element_type_2|'
875      name: 'arenaMapValueArray'
876      increase_ptr_depth: 2
877    - type:
878        name: size_t
879        ptr_depth: 1
880      name: '|arg_name|Len'
881    cast:
882        expression: "\
883          \tauto *|arg_name|ArenaMap = reinterpret_cast<Context *>(context)->allocator->New<ArenaMap<|new_args.0.namespace|
884          |es2panda_arg.type.template_args.0.type.name||es2panda_arg.type.template_args.0.type.ptr_depth|,
885          |new_args.1.namespace||es2panda_arg.type.template_args.1.type.name|
886          |es2panda_arg.type.template_args.1.type.ptr_depth|>>(reinterpret_cast<Context *>(context)->allocator->Adapter());\n
887          \tfor (size_t i = 0; i < |arg_name|Len; ++i) {\n
888          \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
889          \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
890          \t\t|template_nested_expression_1|\n
891          \t\t|template_nested_expression_2|\n
892          \t\t(*|arg_name|ArenaMap)[|new_args.0.local_var_name|] = |new_args.1.local_var_name|;\n
893          \t}"
894        var_name: '|arg_name|ArenaMap'
895        reverse_cast:
896          start: "\n
897            \tauto *ctx = reinterpret_cast<Context *>(context);\n
898            \tauto *ctxAllocator = ctx->allocator;\n
899            \tauto resultMap = "
900          end: ";\n
901            \t*|return_args.1.name| = resultMap|accessor|size();\n
902            \tauto apiRes = 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
903            \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
904            \tsize_t i = 0;\n
905            \tfor (auto [key, value] : (*resultMap)) {\n
906            \t\tapiRes[i] = |reverse_template_nested_expression_1_start|(key)|reverse_template_nested_expression_1_end|;\n
907            \t\t(*|return_args.0.name|)[i] = |reverse_template_nested_expression_2_start|(value)|reverse_template_nested_expression_2_end|;\n
908            \t\t++i;\n
909            \t}"
910
911  - es2panda_arg:
912      name: '|arg_name|'
913      type:
914        name: shared_ptr
915        namespace: std
916        template_args:
917        - type: '|element_type_1|'
918      max_ptr_depth: 0
919    new_args:
920    - type: '|element_type_1|'
921      name: '|arg_name|Ptr'
922      local_var_name: '|arg_name|Ptr'
923    cast:
924        reverse_cast:
925          start: "\n
926            \tauto resultPtr = "
927          end: ";\n
928            \tauto &resultRef = *resultPtr;\n
929            \tauto *apiRes = |reverse_template_nested_expression_1_start|(resultRef)|reverse_template_nested_expression_1_end|;"
930
931  - es2panda_arg:
932      name: '|arg_name|'
933      type:
934        name: 'ArkTsConfig'
935      min_ptr_depth: 1
936    new_args:
937    - type:
938        name: 'es2panda_ArkTsConfig'
939        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
940      name: '|arg_name|'
941    cast:
942        expression: >-
943          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
944          reinterpret_cast<ArkTsConfig |es2panda_arg.type.ptr_depth|>(|arg_name|);
945        reverse_cast:
946          start: >-
947            reinterpret_cast<?const? es2panda_ArkTsConfig |es2panda_arg.type.ptr_depth|>
948        call_cast:
949          call_var:
950            name: classInstance
951            type:
952              name: es2panda_ArkTsConfig
953              ptr_depth: 1
954          start: >-
955            (reinterpret_cast<?const? ArkTsConfig *>(classInstance))->
956        constructor_cast:
957          start: >-
958            ctxAllocator->New<ArkTsConfig>(
959          end: )
960        var_name: '|arg_name|E2p'
961
962  - es2panda_arg:
963      name: '|arg_name|'
964      type:
965        name: 'ArkTsConfig'
966      max_ptr_depth: 0
967    new_args:
968    - type:
969        name: 'es2panda_ArkTsConfig'
970        ptr_depth: 1
971      name: '|arg_name|'
972    cast:
973        reverse_cast:
974          start: >-
975            reinterpret_cast<?const? es2panda_ArkTsConfig *>(
976            reinterpret_cast<Context *>(context)->allocator->New<ArkTsConfig>(
977          end: ))
978        var_name: '|arg_name|E2p'
979
980  - es2panda_arg:
981      name: '|arg_name|'
982      type:
983        name: 'Typed'
984        ptr_depth: '|arg_ptr_depth|'
985        namespace: 'ir'
986      min_ptr_depth: 1
987    new_args:
988    - type:
989        name: 'es2panda_AstNode'
990        ptr_depth: '|arg_ptr_depth|'
991      name: '|arg_name|'
992      namespace: 'ir::'
993    cast:
994        expression: >-
995          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
996          reinterpret_cast<ir::Typed<ir::AstNode> |es2panda_arg.type.ptr_depth|>(|arg_name|);
997        reverse_cast:
998          start: >-
999            reinterpret_cast<?const? es2panda_AstNode |es2panda_arg.type.ptr_depth|>
1000        call_cast:
1001          call_var:
1002            name: classInstance
1003            type:
1004              name: es2panda_AstNode
1005              ptr_depth: 1
1006          start: >-
1007            (reinterpret_cast<?const? ir::Typed<ir::AstNode> *>(classInstance))->
1008        constructor_cast:
1009          start: >-
1010            ctxAllocator->New<ir::Typed<ir::AstNode>>(
1011          end: )
1012        var_name: '|arg_name|E2p'
1013
1014  - es2panda_arg:
1015      name: '|arg_name|'
1016      type: '|AstNode|'
1017      min_ptr_depth: 1
1018    new_args:
1019    - type:
1020        name: "es2panda_AstNode"
1021        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1022      name: '|arg_name|'
1023      namespace: 'ir::'
1024    cast:
1025        expression: >-
1026          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1027          reinterpret_cast<ir::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1028        reverse_cast:
1029          start: >-
1030            reinterpret_cast<?const? es2panda_AstNode |es2panda_arg.type.ptr_depth|>
1031        call_cast:
1032          call_var:
1033            name: classInstance
1034            type:
1035              name: es2panda_AstNode
1036              ptr_depth: 1
1037          start: >-
1038            (reinterpret_cast<?const? ir::|es2panda_arg.type.name| *>(classInstance))->
1039        constructor_cast:
1040          start: >-
1041            ctxAllocator->New<ir::|es2panda_arg.type.name|>(
1042          end: )
1043        var_name: '|arg_name|E2p'
1044
1045  - es2panda_arg:
1046      name: '|arg_name|'
1047      type: '|AstNode|'
1048      max_ptr_depth: 0
1049    new_args:
1050    - type:
1051        name: "es2panda_AstNode"
1052        ptr_depth: 1
1053      name: '|arg_name|'
1054      namespace: 'ir::'
1055    cast:
1056        expression: ""
1057        var_name: '*reinterpret_cast<ir::|es2panda_arg.type.name| *>(|arg_name|)'
1058
1059  - es2panda_arg:
1060      name: '|arg_name|'
1061      type: '|AstNodeAdditionalChildren|'
1062      min_ptr_depth: 1
1063    new_args:
1064    - type:
1065        name: "es2panda_AstNode"
1066        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1067      name: '|arg_name|'
1068      namespace: 'ir::'
1069    cast:
1070        expression: >-
1071          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1072          reinterpret_cast<ir::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1073        reverse_cast:
1074          start : >-
1075            reinterpret_cast<?const? es2panda_AstNode |es2panda_arg.type.ptr_depth|>
1076        call_cast:
1077          call_var:
1078            name: classInstance
1079            type:
1080              name: es2panda_AstNode
1081              ptr_depth: 1
1082          start: >-
1083            (reinterpret_cast<?const? ir::|es2panda_arg.type.name| *>(classInstance))->
1084        constructor_cast:
1085          start: >-
1086            ctxAllocator->New<ir::|es2panda_arg.type.name|>(
1087          end: )
1088        var_name: '|arg_name|E2p'
1089
1090  - es2panda_arg:
1091      name: '|arg_name|'
1092      type: '|AstNodeAdditionalChildren|'
1093      max_ptr_depth: 0
1094    new_args:
1095    - type:
1096        name: "es2panda_AstNode"
1097        ptr_depth: 1
1098      name: '|arg_name|'
1099      namespace: 'ir::'
1100    cast:
1101        expression: ""
1102        var_name: '*reinterpret_cast<ir::|es2panda_arg.type.name| *>(|arg_name|)'
1103
1104  - es2panda_arg:
1105      name: '|arg_name|'
1106      type: '|CodeGen|'
1107      min_ptr_depth: 1
1108    new_args:
1109    - type:
1110        name: "es2panda_CodeGen"
1111        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1112      name: '|arg_name|'
1113      namespace: 'compiler::'
1114    cast:
1115        expression: >-
1116          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1117          reinterpret_cast<compiler::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1118        reverse_cast:
1119          start : >-
1120            reinterpret_cast<?const? es2panda_CodeGen |es2panda_arg.type.ptr_depth|>
1121        call_cast:
1122          call_var:
1123            name: classInstance
1124            type:
1125              name: es2panda_CodeGen
1126              ptr_depth: 1
1127          start: >-
1128            (reinterpret_cast<?const? compiler::|es2panda_arg.type.name| *>(classInstance))->
1129        constructor_cast:
1130          start: >-
1131            ctxAllocator->New<compiler::|es2panda_arg.type.name|>(
1132          end: )
1133        var_name: '|arg_name|E2p'
1134
1135  - es2panda_arg:
1136      name: '|arg_name|'
1137      type: '|AstType|'
1138      min_ptr_depth: 1
1139    new_args:
1140    - type:
1141        name: 'es2panda_Type'
1142        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1143      name: '|arg_name|'
1144      namespace: 'checker::'
1145    cast:
1146        expression: >-
1147          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1148          reinterpret_cast<checker::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1149        reverse_cast:
1150          start: >-
1151            reinterpret_cast<?const? es2panda_Type |es2panda_arg.type.ptr_depth|>
1152        call_cast:
1153          call_var:
1154            name: classInstance
1155            type:
1156              name: es2panda_Type
1157              ptr_depth: 1
1158          start: >-
1159            (reinterpret_cast<?const? checker::|es2panda_arg.type.name| *>(classInstance))->
1160        constructor_cast:
1161          start: >-
1162            ctxAllocator->New<checker::|es2panda_arg.type.name|>(
1163          end: )
1164        var_name: '|arg_name|E2p'
1165
1166  - es2panda_arg:
1167      name: '|arg_name|'
1168      type: '|AstType|'
1169      max_ptr_depth: 0
1170    new_args:
1171    - type:
1172        name: 'es2panda_Type'
1173        ptr_depth: 1
1174      name: '|arg_name|'
1175      namespace: 'checker::'
1176    cast:
1177        expression: >-
1178          auto &|arg_name|E2p =
1179          *(reinterpret_cast<checker::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|));
1180        var_name: '|arg_name|E2p'
1181
1182  - es2panda_arg:
1183      name: '|arg_name|'
1184      type: '|AstTypeAdditionalChildren|'
1185      min_ptr_depth: 1
1186    new_args:
1187    - type:
1188        name: "es2panda_Type"
1189        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1190      name: '|arg_name|'
1191      namespace: 'checker::'
1192    cast:
1193        expression: >-
1194          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1195          reinterpret_cast<checker::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1196        reverse_cast:
1197          start : >-
1198            reinterpret_cast<?const? es2panda_Type |es2panda_arg.type.ptr_depth|>
1199        call_cast:
1200          call_var:
1201            name: classInstance
1202            type:
1203              name: es2panda_Type
1204              ptr_depth: 1
1205          start: >-
1206            (reinterpret_cast<?const? checker::|es2panda_arg.type.name| *>(classInstance))->
1207        constructor_cast:
1208          start: >-
1209            ctxAllocator->New<checker::|es2panda_arg.type.name|>(
1210          end: )
1211        var_name: '|arg_name|E2p'
1212
1213  - es2panda_arg:
1214      name: '|arg_name|'
1215      type: '|AstTypeAdditionalChildren|'
1216      max_ptr_depth: 0
1217    new_args:
1218    - type:
1219        name: "es2panda_Type"
1220        ptr_depth: 1
1221      name: '|arg_name|'
1222      namespace: 'cheker::'
1223    cast:
1224        expression: ""
1225        var_name: '*reinterpret_cast<checker::|es2panda_arg.type.name| *>(|arg_name|)'
1226
1227  - es2panda_arg:
1228      name: '|arg_name|'
1229      type:
1230        name: 'VerifiedType'
1231        namespace: 'checker'
1232      max_ptr_depth: 0
1233    new_args:
1234    - type:
1235        name: "es2panda_Type"
1236        ptr_depth: 1
1237      name: '|arg_name|'
1238      namespace: 'checker::'
1239    cast:
1240        expression: >-
1241          auto |arg_name|E2p =
1242          static_cast<checker::VerifiedType>(
1243          reinterpret_cast<checker::Type *>(|arg_name|));
1244        reverse_cast:
1245          start : >-
1246            reinterpret_cast<?const? es2panda_Type *>(
1247            static_cast<?const? checker::Type *>
1248          end: )
1249        call_cast:
1250          call_var:
1251            name: classInstance
1252            type:
1253              name: es2panda_Type
1254              ptr_depth: 1
1255          start: >-
1256            (static_cast<?const? checker::VerifiedType>(
1257            reinterpret_cast<?const? checker::Type *>(classInstance)))->
1258        var_name: '|arg_name|E2p'
1259
1260  - es2panda_arg:
1261      name: '|arg_name|'
1262      type:
1263        name: 'AnnotationAllowed'
1264        namespace: 'ir'
1265      min_ptr_depth: 1
1266    new_args:
1267    - type:
1268        name: "es2panda_AstNode"
1269        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1270      name: '|arg_name|'
1271      namespace: 'ir::'
1272    cast:
1273        expression: >-
1274          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1275          reinterpret_cast<ir::AnnotationAllowed<ir::AstNode> |es2panda_arg.type.ptr_depth|>(|arg_name|);
1276        reverse_cast:
1277          start : >-
1278            reinterpret_cast<?const? es2panda_AstNode |es2panda_arg.type.ptr_depth|>
1279        call_cast:
1280          call_var:
1281            name: classInstance
1282            type:
1283              name: es2panda_AstNode
1284              ptr_depth: 1
1285          start: >-
1286            (reinterpret_cast<?const? ir::AnnotationAllowed<ir::AstNode> *>(classInstance))->
1287        constructor_cast:
1288          start: >-
1289            ctxAllocator->New<ir::AnnotationAllowed<ir::AstNode>>(
1290          end: )
1291        var_name: '|arg_name|E2p'
1292
1293  - es2panda_arg:
1294      name: '|arg_name|'
1295      type:
1296        name: 'AnnotationAllowed'
1297        namespace: 'ir'
1298      max_ptr_depth: 0
1299    new_args:
1300    - type:
1301        name: "es2panda_AstNode"
1302        ptr_depth: 1
1303      name: '|arg_name|'
1304      namespace: 'ir::'
1305    cast:
1306        expression: ""
1307        var_name: '*reinterpret_cast<ir::AnnotationAllowed<ir::AstNode> *>(|arg_name|)'
1308
1309  - es2panda_arg:
1310      name: '|arg_name|'
1311      type:
1312        name: TypeRelation
1313        namespace: 'checker'
1314      max_ptr_depth: 0
1315    new_args:
1316    - type:
1317        name: "es2panda_TypeRelation"
1318        ptr_depth: 1
1319      name: '|arg_name|'
1320      namespace: 'cheker::'
1321    cast:
1322        expression: ""
1323        var_name: '*reinterpret_cast<checker::TypeRelation *>(|arg_name|)'
1324
1325  - es2panda_arg:
1326      name: '|arg_name|'
1327      type:
1328        name: TypeRelation
1329        namespace: 'checker'
1330      min_ptr_depth: 1
1331    new_args:
1332    - type:
1333        name: "es2panda_TypeRelation"
1334        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1335      name: '|arg_name|'
1336      namespace: 'checker::'
1337    cast:
1338        expression: >-
1339          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1340          reinterpret_cast<checker::TypeRelation |es2panda_arg.type.ptr_depth|>(|arg_name|);
1341        reverse_cast:
1342          start : >-
1343            reinterpret_cast<?const? es2panda_TypeRelation |es2panda_arg.type.ptr_depth|>
1344        call_cast:
1345          call_var:
1346            name: classInstance
1347            type:
1348              name: es2panda_TypeRelation
1349              ptr_depth: 1
1350          start: >-
1351            (reinterpret_cast<?const? checker::TypeRelation *>(classInstance))->
1352        constructor_cast:
1353          start: >-
1354            ctxAllocator->New<checker::TypeRelation>(
1355          end: )
1356        var_name: '|arg_name|E2p'
1357
1358  - es2panda_arg:
1359      name: '|arg_name|'
1360      type:
1361        name: IndexInfo
1362        namespace: 'checker'
1363      max_ptr_depth: 0
1364    new_args:
1365    - type:
1366        name: "es2panda_IndexInfo"
1367        ptr_depth: 1
1368      name: '|arg_name|'
1369      namespace: 'cheker::'
1370    cast:
1371        expression: ""
1372        var_name: '*reinterpret_cast<checker::IndexInfo *>(|arg_name|)'
1373
1374  - es2panda_arg:
1375      name: '|arg_name|'
1376      type:
1377        name: IndexInfo
1378        namespace: 'checker'
1379      min_ptr_depth: 1
1380    new_args:
1381    - type:
1382        name: "es2panda_IndexInfo"
1383        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1384      name: '|arg_name|'
1385      namespace: 'checker::'
1386    cast:
1387        expression: >-
1388          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1389          reinterpret_cast<checker::IndexInfo |es2panda_arg.type.ptr_depth|>(|arg_name|);
1390        reverse_cast:
1391          start : >-
1392            reinterpret_cast<?const? es2panda_IndexInfo |es2panda_arg.type.ptr_depth|>
1393        call_cast:
1394          call_var:
1395            name: classInstance
1396            type:
1397              name: es2panda_IndexInfo
1398              ptr_depth: 1
1399          start: >-
1400            (reinterpret_cast<?const? checker::IndexInfo *>(classInstance))->
1401        constructor_cast:
1402          start: >-
1403            ctxAllocator->New<checker::IndexInfo>(
1404          end: )
1405        var_name: '|arg_name|E2p'
1406
1407  - es2panda_arg:
1408      name: '|arg_name|'
1409      type:
1410        name: GlobalTypesHolder
1411        namespace: 'checker'
1412      max_ptr_depth: 0
1413    new_args:
1414    - type:
1415        name: "es2panda_GlobalTypesHolder"
1416        ptr_depth: 1
1417      name: '|arg_name|'
1418      namespace: 'cheker::'
1419    cast:
1420        expression: ""
1421        var_name: '*reinterpret_cast<checker::GlobalTypesHolder *>(|arg_name|)'
1422
1423  - es2panda_arg:
1424      name: '|arg_name|'
1425      type:
1426        name: GlobalTypesHolder
1427        namespace: 'checker'
1428      min_ptr_depth: 1
1429    new_args:
1430    - type:
1431        name: "es2panda_GlobalTypesHolder"
1432        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1433      name: '|arg_name|'
1434      namespace: 'checker::'
1435    cast:
1436        expression: >-
1437          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1438          reinterpret_cast<checker::GlobalTypesHolder |es2panda_arg.type.ptr_depth|>(|arg_name|);
1439        reverse_cast:
1440          start : >-
1441            reinterpret_cast<?const? es2panda_GlobalTypesHolder |es2panda_arg.type.ptr_depth|>
1442        call_cast:
1443          call_var:
1444            name: classInstance
1445            type:
1446              name: es2panda_GlobalTypesHolder
1447              ptr_depth: 1
1448          start: >-
1449            (reinterpret_cast<?const? checker::GlobalTypesHolder *>(classInstance))->
1450        constructor_cast:
1451          start: >-
1452            ctxAllocator->New<checker::GlobalTypesHolder>(
1453          end: )
1454        var_name: '|arg_name|E2p'
1455
1456  - es2panda_arg:
1457      name: '|arg_name|'
1458      type:
1459        name: ObjectDescriptor
1460        namespace: 'checker'
1461      max_ptr_depth: 0
1462    new_args:
1463    - type:
1464        name: "es2panda_ObjectDescriptor"
1465        ptr_depth: 1
1466      name: '|arg_name|'
1467      namespace: 'cheker::'
1468    cast:
1469        expression: ""
1470        var_name: '*reinterpret_cast<checker::ObjectDescriptor *>(|arg_name|)'
1471
1472  - es2panda_arg:
1473      name: '|arg_name|'
1474      type:
1475        name: ObjectDescriptor
1476        namespace: 'checker'
1477      min_ptr_depth: 1
1478    new_args:
1479    - type:
1480        name: "es2panda_ObjectDescriptor"
1481        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1482      name: '|arg_name|'
1483      namespace: 'checker::'
1484    cast:
1485        expression: >-
1486          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1487          reinterpret_cast<checker::ObjectDescriptor |es2panda_arg.type.ptr_depth|>(|arg_name|);
1488        reverse_cast:
1489          start : >-
1490            reinterpret_cast<?const? es2panda_ObjectDescriptor |es2panda_arg.type.ptr_depth|>
1491        call_cast:
1492          call_var:
1493            name: classInstance
1494            type:
1495              name: es2panda_ObjectDescriptor
1496              ptr_depth: 1
1497          start: >-
1498            (reinterpret_cast<?const? checker::ObjectDescriptor *>(classInstance))->
1499        constructor_cast:
1500          start: >-
1501            ctxAllocator->New<checker::ObjectDescriptor>(
1502          end: )
1503        var_name: '|arg_name|E2p'
1504
1505  - es2panda_arg:
1506      name: '|arg_name|'
1507      type:
1508        name: UType
1509        namespace: checker
1510    new_args:
1511    - type:
1512        name: int32_t
1513        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1514      name: '|arg_name|'
1515    cast:
1516        expression:
1517        reverse_cast:
1518          start : >-
1519            reinterpret_cast<?const? int32_t |es2panda_arg.type.ptr_depth|>
1520        var_name: '|arg_name|'
1521
1522  - es2panda_arg:
1523      name: '|arg_name|'
1524      type:
1525        name: TupleSizeType
1526        namespace: checker
1527    new_args:
1528    - type:
1529        name: size_t
1530        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1531      name: '|arg_name|'
1532    cast:
1533        expression:
1534        reverse_cast:
1535          start : >-
1536            reinterpret_cast<?const? size_t |es2panda_arg.type.ptr_depth|>
1537        var_name: '|arg_name|'
1538
1539  - es2panda_arg:
1540      name: '|arg_name|'
1541      type: '|Variable|'
1542      min_ptr_depth: 1
1543    new_args:
1544    - type:
1545        name: 'es2panda_Variable'
1546        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1547      name: '|arg_name|'
1548      namespace: 'varbinder::'
1549    cast:
1550        expression: >-
1551          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1552          reinterpret_cast<varbinder::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1553        reverse_cast:
1554          start: >-
1555            reinterpret_cast<?const? es2panda_Variable |es2panda_arg.type.ptr_depth|>
1556        call_cast:
1557          call_var:
1558            name: classInstance
1559            type:
1560              name: es2panda_Variable
1561              ptr_depth: 1
1562          start: >-
1563            (reinterpret_cast<?const? varbinder::|es2panda_arg.type.name| *>(classInstance))->
1564        constructor_cast:
1565          start: >-
1566            ctxAllocator->New<varbinder::|es2panda_arg.type.name|>(
1567          end: )
1568        var_name: '|arg_name|E2p'
1569
1570  - es2panda_arg:
1571      name: '|arg_name|'
1572      type: '|Enum|'
1573      max_ptr_depth: 0
1574    new_args:
1575      - type:
1576          name: 'Es2panda|es2panda_arg.type.name|'
1577        name: '|arg_name|'
1578    cast:
1579        expression: >-
1580          auto |arg_name|E2p = E2pToIr|es2panda_arg.type.name|(|arg_name|);
1581        reverse_cast:
1582          start: >-
1583            IrToE2p|es2panda_arg.type.name|
1584        var_name: '|arg_name|E2p'
1585
1586  - es2panda_arg:
1587      name: '|arg_name|'
1588      type: '|Scope|'
1589      min_ptr_depth: 1
1590    new_args:
1591    - type:
1592        name: "es2panda_Scope"
1593        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1594      name: '|arg_name|'
1595      namespace: 'varbinder::'
1596    cast:
1597        expression: >-
1598          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1599          reinterpret_cast<varbinder::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1600        reverse_cast:
1601          start : >-
1602            reinterpret_cast<?const? es2panda_Scope |es2panda_arg.type.ptr_depth|>
1603        call_cast:
1604          call_var:
1605            name: classInstance
1606            type:
1607              name: es2panda_Scope
1608              ptr_depth: 1
1609          start: >-
1610            (reinterpret_cast<?const? varbinder::|es2panda_arg.type.name| *>(classInstance))->
1611        constructor_cast:
1612          start: >-
1613            ctxAllocator->New<varbinder::|es2panda_arg.type.name|>(
1614          end: )
1615        var_name: '|arg_name|E2p'
1616
1617  - es2panda_arg:
1618      name: '|arg_name|'
1619      type: '|Scope|'
1620      max_ptr_depth: 0
1621    new_args:
1622    - type:
1623        name: "es2panda_Scope"
1624        ptr_depth: 1
1625      name: '|arg_name|'
1626      namespace: 'varbinder::'
1627    cast:
1628        expression: ""
1629        var_name: '*reinterpret_cast<varbinder::|es2panda_arg.type.name| *>(|arg_name|)'
1630
1631  - es2panda_arg:
1632      name: '|arg_name|'
1633      type: '|Declaration|'
1634      min_ptr_depth: 1
1635    new_args:
1636    - type:
1637        name: "es2panda_Declaration"
1638        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1639      name: '|arg_name|'
1640      namespace: 'varbinder::'
1641    cast:
1642        expression: >-
1643          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1644          reinterpret_cast<varbinder::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1645        reverse_cast:
1646          start : >-
1647            reinterpret_cast<?const? es2panda_Declaration |es2panda_arg.type.ptr_depth|>
1648        call_cast:
1649          call_var:
1650            name: classInstance
1651            type:
1652              name: es2panda_Declaration
1653              ptr_depth: 1
1654          start: >-
1655            (reinterpret_cast<?const? varbinder::|es2panda_arg.type.name| *>(classInstance))->
1656        constructor_cast:
1657          start: >-
1658            ctxAllocator->New<varbinder::|es2panda_arg.type.name|>(
1659          end: )
1660        var_name: '|arg_name|E2p'
1661
1662  - es2panda_arg:
1663      name: '|arg_name|'
1664      type: '|Declaration|'
1665      max_ptr_depth: 0
1666    new_args:
1667    - type:
1668        name: "es2panda_Declaration"
1669        ptr_depth: 1
1670      name: '|arg_name|'
1671      namespace: 'varbinder::'
1672    cast:
1673        expression: ""
1674        var_name: '*reinterpret_cast<varbinder::|es2panda_arg.type.name| *>(|arg_name|)'
1675
1676  - es2panda_arg:
1677      name: '|arg_name|'
1678      type:
1679        name: 'RecordTable'
1680        namespace: varbinder
1681      min_ptr_depth: 1
1682    new_args:
1683    - type:
1684        name: "es2panda_RecordTable"
1685        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1686      name: '|arg_name|'
1687      namespace: 'varbinder::'
1688    cast:
1689        expression: >-
1690          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1691          reinterpret_cast<varbinder::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1692        reverse_cast:
1693          start : >-
1694            reinterpret_cast<?const? es2panda_RecordTable |es2panda_arg.type.ptr_depth|>
1695        call_cast:
1696          call_var:
1697            name: classInstance
1698            type:
1699              name: es2panda_RecordTable
1700              ptr_depth: 1
1701          start: >-
1702            (reinterpret_cast<?const? varbinder::|es2panda_arg.type.name| *>(classInstance))->
1703        constructor_cast:
1704          start: >-
1705            ctxAllocator->New<varbinder::|es2panda_arg.type.name|>(
1706          end: )
1707        var_name: '|arg_name|E2p'
1708
1709  - es2panda_arg:
1710      name: '|arg_name|'
1711      type:
1712        name: 'RecordTable'
1713        namespace: varbinder
1714      max_ptr_depth: 0
1715    new_args:
1716    - type:
1717        name: "es2panda_RecordTable"
1718        ptr_depth: 1
1719      name: '|arg_name|'
1720      namespace: 'varbinder::'
1721    cast:
1722        expression: ""
1723        var_name: '*reinterpret_cast<varbinder::|es2panda_arg.type.name| *>(|arg_name|)'
1724
1725  - es2panda_arg:
1726      name: '|arg_name|'
1727      type:
1728        name: 'BoundContext'
1729        namespace: varbinder
1730      min_ptr_depth: 1
1731    new_args:
1732    - type:
1733        name: "es2panda_BoundContext"
1734        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1735      name: '|arg_name|'
1736      namespace: 'varbinder::'
1737    cast:
1738        expression: >-
1739          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1740          reinterpret_cast<varbinder::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1741        reverse_cast:
1742          start : >-
1743            reinterpret_cast<?const? es2panda_BoundContext |es2panda_arg.type.ptr_depth|>
1744        call_cast:
1745          call_var:
1746            name: classInstance
1747            type:
1748              name: es2panda_BoundContext
1749              ptr_depth: 1
1750          start: >-
1751            (reinterpret_cast<?const? varbinder::|es2panda_arg.type.name| *>(classInstance))->
1752        constructor_cast:
1753          start: >-
1754            ctxAllocator->New<varbinder::|es2panda_arg.type.name|>(
1755          end: )
1756        var_name: '|arg_name|E2p'
1757
1758  - es2panda_arg:
1759      name: '|arg_name|'
1760      type:
1761        name: 'BoundContext'
1762        namespace: varbinder
1763      max_ptr_depth: 0
1764    new_args:
1765    - type:
1766        name: "es2panda_BoundContext"
1767        ptr_depth: 1
1768      name: '|arg_name|'
1769      namespace: 'varbinder::'
1770    cast:
1771        expression: ""
1772        var_name: '*reinterpret_cast<varbinder::|es2panda_arg.type.name| *>(|arg_name|)'
1773
1774  - es2panda_arg:
1775      name: '|arg_name|'
1776      type:
1777        name: 'ConstScopeFindResult'
1778        namespace: varbinder
1779      min_ptr_depth: 1
1780    new_args:
1781    - type:
1782        name: "es2panda_ScopeFindResult"
1783        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1784      name: '|arg_name|'
1785      namespace: 'varbinder::'
1786    cast:
1787        expression: >-
1788          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1789          reinterpret_cast<varbinder::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1790        reverse_cast:
1791          start : >-
1792            reinterpret_cast<?const? es2panda_ScopeFindResult |es2panda_arg.type.ptr_depth|>
1793        call_cast:
1794          call_var:
1795            name: classInstance
1796            type:
1797              name: es2panda_ScopeFindResult
1798              ptr_depth: 1
1799          start: >-
1800            (reinterpret_cast<?const? varbinder::|es2panda_arg.type.name| *>(classInstance))->
1801        constructor_cast:
1802          start: >-
1803            ctxAllocator->New<varbinder::|es2panda_arg.type.name|>(
1804          end: )
1805        var_name: '|arg_name|E2p'
1806
1807  - es2panda_arg:
1808      name: '|arg_name|'
1809      type:
1810        name: 'ConstScopeFindResult'
1811        namespace: varbinder
1812      max_ptr_depth: 0
1813    new_args:
1814    - type:
1815        name: "es2panda_ScopeFindResult"
1816        ptr_depth: 1
1817      name: '|arg_name|'
1818      namespace: 'varbinder::'
1819    cast:
1820        expression: ""
1821        var_name: '*reinterpret_cast<varbinder::|es2panda_arg.type.name| *>(|arg_name|)'
1822        reverse_cast:
1823          start: >-
1824            reinterpret_cast<?const? es2panda_ScopeFindResult *>(
1825            reinterpret_cast<Context *>(context)->allocator->New<varbinder::ConstScopeFindResult>(
1826          end: '))'
1827
1828  - es2panda_arg:
1829      name: '|arg_name|'
1830      type:
1831        name: 'ScopeFindResult'
1832        namespace: varbinder
1833      min_ptr_depth: 1
1834    new_args:
1835    - type:
1836        name: "es2panda_ScopeFindResult"
1837        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1838      name: '|arg_name|'
1839      namespace: 'varbinder::'
1840    cast:
1841        expression: >-
1842          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1843          reinterpret_cast<varbinder::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1844        reverse_cast:
1845          start : >-
1846            reinterpret_cast<?const? es2panda_ScopeFindResult |es2panda_arg.type.ptr_depth|>
1847        call_cast:
1848          call_var:
1849            name: classInstance
1850            type:
1851              name: es2panda_ScopeFindResult
1852              ptr_depth: 1
1853          start: >-
1854            (reinterpret_cast<?const? varbinder::|es2panda_arg.type.name| *>(classInstance))->
1855        constructor_cast:
1856          start: >-
1857            ctxAllocator->New<varbinder::|es2panda_arg.type.name|>(
1858          end: )
1859        var_name: '|arg_name|E2p'
1860
1861  - es2panda_arg:
1862      name: '|arg_name|'
1863      type:
1864        name: 'ScopeFindResult'
1865        namespace: varbinder
1866      max_ptr_depth: 0
1867    new_args:
1868    - type:
1869        name: "es2panda_ScopeFindResult"
1870        ptr_depth: 1
1871      name: '|arg_name|'
1872      namespace: 'varbinder::'
1873    cast:
1874        expression: ""
1875        var_name: '*reinterpret_cast<varbinder::|es2panda_arg.type.name| *>(|arg_name|)'
1876        reverse_cast:
1877          start: >-
1878            reinterpret_cast<?const? es2panda_ScopeFindResult *>(
1879            reinterpret_cast<Context *>(context)->allocator->New<varbinder::ScopeFindResult>(
1880          end: '))'
1881
1882  - es2panda_arg:
1883      name: '|arg_name|'
1884      type:
1885        name: 'BindingProps'
1886        namespace: varbinder
1887      min_ptr_depth: 1
1888    new_args:
1889    - type:
1890        name: "es2panda_BindingProps"
1891        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
1892      name: '|arg_name|'
1893      namespace: 'varbinder::ClassScope::'
1894    cast:
1895        expression: >-
1896          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
1897          reinterpret_cast<varbinder::ClassScope::|es2panda_arg.type.name| |es2panda_arg.type.ptr_depth|>(|arg_name|);
1898        reverse_cast:
1899          start : >-
1900            reinterpret_cast<?const? es2panda_BindingProps |es2panda_arg.type.ptr_depth|>
1901        call_cast:
1902          call_var:
1903            name: classInstance
1904            type:
1905              name: es2panda_BindingProps
1906              ptr_depth: 1
1907          start: >-
1908            (reinterpret_cast<?const? varbinder::ClassScope::|es2panda_arg.type.name| *>(classInstance))->
1909        constructor_cast:
1910          start: >-
1911            ctxAllocator->New<varbinder::ClassScope::|es2panda_arg.type.name|>(
1912          end: )
1913        var_name: '|arg_name|E2p'
1914
1915  - es2panda_arg:
1916      name: '|arg_name|'
1917      type:
1918        name: 'BindingProps'
1919        namespace: varbinder
1920      max_ptr_depth: 0
1921    new_args:
1922    - type:
1923        name: "es2panda_BindingProps"
1924        ptr_depth: 1
1925      name: '|arg_name|'
1926      namespace: 'varbinder::ClassScope::'
1927    cast:
1928        expression: ""
1929        var_name: '*reinterpret_cast<varbinder::ClassScope::|es2panda_arg.type.name| *>(|arg_name|)'
1930        reverse_cast:
1931          start: >-
1932            reinterpret_cast<?const? es2panda_BindingProps *>(
1933            reinterpret_cast<Context *>(context)->allocator->New<varbinder::ClassScope::BindingProps>(
1934          end: '))'
1935
1936  - es2panda_arg:
1937      name: '|arg_name|'
1938      type:
1939        name: Checker
1940        namespace: 'checker'
1941      min_ptr_depth: 1
1942      max_ptr_depth: 1
1943    new_args:
1944    cast:
1945      expression: auto |es2panda_arg.type.ptr_depth||arg_name|E2p = reinterpret_cast<Context *>(context)->checker;
1946      call_cast:
1947        start: >-
1948            (reinterpret_cast<Context *>(context)->checker)->
1949      var_name: '|arg_name|E2p'
1950
1951  - es2panda_arg:
1952      name: '|arg_name|'
1953      type:
1954        name: SemanticAnalyzer
1955        namespace: 'checker'
1956      min_ptr_depth: 1
1957      max_ptr_depth: 1
1958    new_args:
1959    cast:
1960      expression: auto |es2panda_arg.type.ptr_depth||arg_name|E2p = reinterpret_cast<Context *>(context)->analyzer;
1961      call_cast:
1962        start: >-
1963            (reinterpret_cast<Context *>(context)->analyzer)->
1964      var_name: '|arg_name|E2p'
1965
1966  - es2panda_arg:
1967      name: '|arg_name|'
1968      type:
1969        name: Context
1970        namespace: 'public_lib'
1971      min_ptr_depth: 1
1972      max_ptr_depth: 1
1973    new_args:
1974    cast:
1975      expression: auto |es2panda_arg.type.ptr_depth||arg_name|E2p = reinterpret_cast<Context *>(context);
1976      var_name: '|arg_name|E2p'
1977
1978  - es2panda_arg:
1979      name: '|arg_name|'
1980      type:
1981        name: Context
1982        namespace: 'public_lib'
1983      min_ptr_depth: 0
1984      max_ptr_depth: 0
1985    new_args:
1986    cast:
1987      expression: auto |es2panda_arg.type.ptr_depth||arg_name|E2p = *(reinterpret_cast<Context *>(context));
1988      var_name: '|arg_name|E2p'
1989
1990  - es2panda_arg:
1991      name: '|arg_name|'
1992      type:
1993        name: ETSChecker
1994        namespace: 'checker'
1995      min_ptr_depth: 1
1996      max_ptr_depth: 1
1997    new_args:
1998    cast:
1999      expression: >-
2000        auto *|arg_name|E2p = reinterpret_cast<Context *>(context)->checker->AsETSChecker();
2001      call_cast:
2002        start: >-
2003            (reinterpret_cast<Context *>(context)->checker->AsETSChecker())->
2004      var_name: '|arg_name|E2p'
2005
2006  - es2panda_arg:
2007      name: '|arg_name|'
2008      type:
2009        name: ETSParser
2010        namespace: 'parser'
2011      min_ptr_depth: 1
2012      max_ptr_depth: 1
2013    new_args:
2014    cast:
2015      expression: >-
2016        auto *|arg_name|E2p = reinterpret_cast<Context *>(context)->parser->AsETSParser();
2017      call_cast:
2018        start: >-
2019            (reinterpret_cast<Context *>(context)->parser->AsETSParser())->
2020      var_name: '|arg_name|E2p'
2021
2022  - es2panda_arg:
2023      name: '|arg_name|'
2024      type:
2025        name: VarBinder
2026        namespace: 'varbinder'
2027      min_ptr_depth: 1
2028      max_ptr_depth: 1
2029    new_args:
2030    cast:
2031      expression: >-
2032        auto |es2panda_arg.type.ptr_depth||arg_name|E2p = reinterpret_cast<Context *>(context)->parserProgram->VarBinder();
2033      call_cast:
2034        start: >-
2035            (reinterpret_cast<Context *>(context)->parserProgram->VarBinder())->
2036      var_name: '|arg_name|E2p'
2037
2038  - es2panda_arg:
2039      name: '|arg_name|'
2040      type:
2041        name: ETSBinder
2042        namespace: 'varbinder'
2043      min_ptr_depth: 1
2044      max_ptr_depth: 1
2045    new_args:
2046    cast:
2047      expression: >-
2048        auto |es2panda_arg.type.ptr_depth||arg_name|E2p = reinterpret_cast<Context *>(context)->parserProgram->VarBinder()->AsETSBinder();
2049      call_cast:
2050        start: >-
2051            (reinterpret_cast<Context *>(context)->parserProgram->VarBinder()->AsETSBinder())->
2052      var_name: '|arg_name|E2p'
2053
2054  - es2panda_arg:
2055      name: '|arg_name|'
2056      type:
2057        name: ArenaAllocator
2058      min_ptr_depth: 1
2059      max_ptr_depth: 1
2060    new_args:
2061    cast:
2062      expression: auto |es2panda_arg.type.ptr_depth||arg_name|E2p = reinterpret_cast<Context *>(context)->allocator;
2063      var_name: '|arg_name|E2p'
2064
2065  - es2panda_arg:
2066      name: '|arg_name|'
2067      type:
2068        name: size_type
2069        namespace: VariableMap
2070      max_ptr_depth: 0
2071    new_args:
2072    - type:
2073        name: size_t
2074        ptr_depth: 0
2075      name: '|arg_name|'
2076    cast:
2077      expression: varbinder::VariableMap::size_type |arg_name|E2p = |arg_name|;
2078      reverse_cast:
2079          start : static_cast<?const? size_t>
2080      var_name: '|arg_name|E2p'
2081
2082  - es2panda_arg:
2083      name: '|arg_name|'
2084      type:
2085        name: Program
2086        namespace: 'pandasm'
2087      min_ptr_depth: 1
2088      max_ptr_depth: 1
2089    new_args:
2090    cast:
2091      expression: auto |es2panda_arg.type.ptr_depth||arg_name|E2p = reinterpret_cast<Context *>(context)->program;
2092      var_name: '|arg_name|E2p'
2093
2094  - es2panda_arg:
2095      name: '|arg_name|'
2096      type:
2097        name: Program
2098        namespace: 'parser'
2099      min_ptr_depth: 1
2100    new_args:
2101    - type:
2102        name: "es2panda_Program"
2103        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2104      name: '|arg_name|'
2105      namespace: "parser::"
2106    cast:
2107      expression: >-
2108        auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2109        reinterpret_cast<parser::Program *>(|arg_name|);
2110      var_name: '|arg_name|E2p'
2111      reverse_cast:
2112          start: reinterpret_cast<?const? es2panda_Program *>
2113      call_cast:
2114          call_var:
2115            name: classInstance
2116            type:
2117              name: es2panda_Program
2118              ptr_depth: 1
2119          start: >-
2120            (reinterpret_cast<?const? parser::Program *>(classInstance))->
2121
2122  - es2panda_arg:
2123      name: '|arg_name|'
2124      type:
2125        name: Program
2126        namespace: 'parser'
2127      max_ptr_depth: 0
2128    new_args:
2129    - type:
2130        name: "es2panda_Program"
2131        ptr_depth: 1
2132      name: '|arg_name|'
2133      namespace: "parser::"
2134    cast:
2135      expression: auto &|arg_name|E2p = *reinterpret_cast<parser::Program *>(|arg_name|);
2136      var_name: '|arg_name|E2p'
2137      reverse_cast:
2138          start: >-
2139            reinterpret_cast<?const? es2panda_Program *>(
2140            reinterpret_cast<Context *>(context)->allocator->New<parser::Program>(
2141          end: '))'
2142
2143  - es2panda_arg:
2144      name: '|arg_name|'
2145      type:
2146        name: 'FunctionSignature'
2147        namespace: 'ir'
2148      min_ptr_depth: 1
2149    new_args:
2150    - type:
2151        name: "es2panda_FunctionSignature"
2152        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2153      name: '|arg_name|'
2154      namespace: "ir::"
2155    cast:
2156        expression: >-
2157          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2158          reinterpret_cast<ir::FunctionSignature |es2panda_arg.type.ptr_depth|>(|arg_name|);
2159        reverse_cast:
2160          start: >-
2161            reinterpret_cast<?const? es2panda_FunctionSignature |es2panda_arg.type.ptr_depth|>
2162        call_cast:
2163          call_var:
2164            name: classInstance
2165            type:
2166              name: es2panda_FunctionSignature
2167              ptr_depth: 1
2168          start: >-
2169            (reinterpret_cast<?const? ir::FunctionSignature *>(classInstance))->
2170        constructor_cast:
2171          start: >-
2172            ctxAllocator->New<ir::FunctionSignature>(
2173          end: )
2174        var_name: '|arg_name|E2p'
2175
2176  - es2panda_arg:
2177      name: '|arg_name|'
2178      type:
2179        name: 'FunctionSignature'
2180        namespace: 'ir'
2181      max_ptr_depth: 0
2182    new_args:
2183    - type:
2184        name: "es2panda_FunctionSignature"
2185        ptr_depth: 1
2186      name: '|arg_name|'
2187      namespace: "ir::"
2188    cast:
2189        expression: ''
2190        var_name: 'std::forward<ir::FunctionSignature>(*reinterpret_cast<ir::FunctionSignature *>(|arg_name|))'
2191        reverse_cast:
2192          start: >-
2193            reinterpret_cast<?const? es2panda_FunctionSignature *>(
2194            reinterpret_cast<Context *>(context)->allocator->New<ir::FunctionSignature>(
2195          end: '))'
2196
2197  - es2panda_arg:
2198      name: '|arg_name|'
2199      type:
2200        name: 'Language'
2201      min_ptr_depth: 1
2202    new_args:
2203    cast:
2204        expression: >-
2205          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2206          reinterpret_cast<Context *>(context)->allocator->
2207          New<Language |es2panda_arg.type.ptr_depth|>(Language::Id::ETS);
2208        var_name: '|arg_name|E2p'
2209
2210  - es2panda_arg:
2211      name: '|arg_name|'
2212      type:
2213        name: 'Language'
2214      max_ptr_depth: 0
2215    new_args:
2216    cast:
2217        expression: >-
2218          ark::es2panda::Language |arg_name|E2p {Language::Id::ETS};
2219        var_name: '|arg_name|E2p'
2220
2221  - es2panda_arg:
2222      name: '|arg_name|'
2223      type:
2224        name: 'ScriptExtension'
2225      min_ptr_depth: 1
2226    new_args:
2227    cast:
2228        expression: >-
2229          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2230          reinterpret_cast<Context *>(context)->allocator->
2231          New<ScriptExtension |es2panda_arg.type.ptr_depth|>(ScriptExtension::ETS);
2232        var_name: '|arg_name|E2p'
2233
2234  - es2panda_arg:
2235      name: '|arg_name|'
2236      type:
2237        name: 'ScriptExtension'
2238      max_ptr_depth: 0
2239    new_args:
2240    cast:
2241        expression: >-
2242          ark::es2panda::ScriptExtension |arg_name|E2p {ScriptExtension::ETS};
2243        var_name: '|arg_name|E2p'
2244
2245  - es2panda_arg:
2246      name: '|arg_name|'
2247      type:
2248        name: 'SourcePosition'
2249        namespace: 'lexer'
2250      min_ptr_depth: 1
2251    new_args:
2252    - type:
2253        name: "es2panda_SourcePosition"
2254        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2255      name: '|arg_name|'
2256      namespace: 'lexer::'
2257    cast:
2258        expression: >-
2259          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2260          reinterpret_cast<lexer::SourcePosition |es2panda_arg.type.ptr_depth|>(|arg_name|);
2261        reverse_cast:
2262          start : >-
2263            reinterpret_cast<?const? es2panda_SourcePosition |es2panda_arg.type.ptr_depth|>
2264        call_cast:
2265          call_var:
2266            name: classInstance
2267            type:
2268              name: es2panda_SourcePosition
2269              ptr_depth: 1
2270          start: >-
2271            (reinterpret_cast<?const? lexer::SourcePosition *>(classInstance))->
2272        constructor_cast:
2273          start: >-
2274            ctxAllocator->New<lexer::SourcePosition>(
2275          end: )
2276        var_name: '|arg_name|E2p'
2277
2278  - es2panda_arg:
2279      name: '|arg_name|'
2280      type:
2281        name: 'SourcePosition'
2282        namespace: 'lexer'
2283      max_ptr_depth: 0
2284    new_args:
2285    - type:
2286        name: "es2panda_SourcePosition"
2287        ptr_depth: 1
2288      name: '|arg_name|'
2289      namespace: 'lexer::'
2290    cast:
2291        expression: >-
2292          auto &|arg_name|E2p = *reinterpret_cast<lexer::SourcePosition *>(|arg_name|);
2293        reverse_cast:
2294          start: >-
2295            reinterpret_cast<?const? es2panda_SourcePosition *>(
2296            reinterpret_cast<Context *>(context)->allocator->New<lexer::SourcePosition>(
2297          end: '))'
2298        var_name: '|arg_name|E2p'
2299
2300  - es2panda_arg:
2301      name: '|arg_name|'
2302      type:
2303        name: 'SourceRange'
2304        namespace: 'lexer'
2305      min_ptr_depth: 1
2306    new_args:
2307    - type:
2308        name: "es2panda_SourceRange"
2309        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2310      name: '|arg_name|'
2311      namespace: 'lexer::'
2312    cast:
2313        expression: >-
2314          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2315          reinterpret_cast<lexer::SourceRange |es2panda_arg.type.ptr_depth|>(|arg_name|);
2316        reverse_cast:
2317          start : >-
2318            reinterpret_cast<?const? es2panda_SourceRange |es2panda_arg.type.ptr_depth|>
2319        call_cast:
2320          call_var:
2321            name: classInstance
2322            type:
2323              name: es2panda_SourceRange
2324              ptr_depth: 1
2325          start: >-
2326            (reinterpret_cast<?const? lexer::SourceRange *>(classInstance))->
2327        constructor_cast:
2328          start: >-
2329            ctxAllocator->New<lexer::SourceRange>(
2330          end: )
2331        var_name: '|arg_name|E2p'
2332
2333  - es2panda_arg:
2334      name: '|arg_name|'
2335      type:
2336        name: 'SourceRange'
2337        namespace: 'lexer'
2338      max_ptr_depth: 0
2339    new_args:
2340    - type:
2341        name: "es2panda_SourceRange"
2342        ptr_depth: 1
2343      name: '|arg_name|'
2344      namespace: 'lexer::'
2345    cast:
2346        expression: >-
2347          auto &|arg_name|E2p = *reinterpret_cast<lexer::SourceRange *>(|arg_name|);
2348        reverse_cast:
2349          start: >-
2350            reinterpret_cast<?const? es2panda_SourceRange *>(
2351            reinterpret_cast<Context *>(context)->allocator->New<lexer::SourceRange>(
2352          end: '))'
2353        var_name: '|arg_name|E2p'
2354
2355  - es2panda_arg:
2356      name: '|arg_name|'
2357      type:
2358        name: 'DiagnosticEngine'
2359        namespace: 'util'
2360      min_ptr_depth: 1
2361    new_args:
2362    - type:
2363        name: "es2panda_ErrorLogger"
2364        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2365      name: '|arg_name|'
2366      namespace: 'util::'
2367    cast:
2368        expression: >-
2369          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2370          reinterpret_cast<util::DiagnosticEngine |es2panda_arg.type.ptr_depth|>(|arg_name|);
2371        reverse_cast:
2372          start : >-
2373            reinterpret_cast<?const? es2panda_ErrorLogger |es2panda_arg.type.ptr_depth|>
2374        call_cast:
2375          call_var:
2376            name: classInstance
2377            type:
2378              name: es2panda_ErrorLogger
2379              ptr_depth: 1
2380          start: >-
2381            (reinterpret_cast<?const? util::DiagnosticEngine *>(ast))->
2382        constructor_cast:
2383          start: >-
2384            ctxAllocator->New<util::DiagnosticEngine>(
2385          end: )
2386        var_name: '|arg_name|E2p'
2387
2388  - es2panda_arg:
2389      name: '|arg_name|'
2390      type:
2391        name: 'DiagnosticEngine'
2392        namespace: 'util'
2393      max_ptr_depth: 0
2394    new_args:
2395    - type:
2396        name: "es2panda_ErrorLogger"
2397        ptr_depth: 1
2398      name: '|arg_name|'
2399      namespace: 'util::'
2400    cast:
2401        expression: >-
2402          auto &|arg_name|E2p = *(reinterpret_cast<util::DiagnosticEngine *>(|arg_name|));
2403        var_name: '|arg_name|E2p'
2404
2405  - es2panda_arg:
2406      name: '|arg_name|'
2407      type:
2408        name: 'VReg'
2409        namespace: 'compiler'
2410      min_ptr_depth: 1
2411    new_args:
2412    - type:
2413        name: "es2panda_VReg"
2414        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2415      name: '|arg_name|'
2416      namespace: 'compiler::'
2417    cast:
2418        expression: >-
2419          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2420          reinterpret_cast<compiler::VReg |es2panda_arg.type.ptr_depth|>(|arg_name|);
2421        reverse_cast:
2422          start : >-
2423            reinterpret_cast<?const? es2panda_VReg |es2panda_arg.type.ptr_depth|>
2424        call_cast:
2425          call_var:
2426            name: classInstance
2427            type:
2428              name: es2panda_VReg
2429              ptr_depth: 1
2430          start: >-
2431            (reinterpret_cast<?const? compiler::VReg *>(classInstance))->
2432        constructor_cast:
2433          start: >-
2434            ctxAllocator->New<compiler::VReg>(
2435          end: )
2436        var_name: '|arg_name|E2p'
2437
2438  - es2panda_arg:
2439      name: '|arg_name|'
2440      type:
2441        name: 'VReg'
2442        namespace: 'compiler'
2443      max_ptr_depth: 0
2444    new_args:
2445    - type:
2446        name: "es2panda_VReg"
2447        ptr_depth: 1
2448      name: '|arg_name|'
2449      namespace: 'compiler::'
2450    cast:
2451        expression: >-
2452          auto &|arg_name|E2p = *reinterpret_cast<compiler::VReg *>(|arg_name|);
2453        reverse_cast:
2454          start: >-
2455            reinterpret_cast<?const? es2panda_VReg *>(
2456            reinterpret_cast<Context *>(context)->allocator->New<compiler::VReg>(
2457          end: '))'
2458        var_name: '|arg_name|E2p'
2459
2460  - es2panda_arg:
2461      name: '|arg_name|'
2462      type:
2463        name: 'IRNode'
2464        namespace: 'compiler'
2465      min_ptr_depth: 1
2466    new_args:
2467    - type:
2468        name: "es2panda_IRNode"
2469        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2470      name: '|arg_name|'
2471      namespace: 'compiler::'
2472    cast:
2473        expression: >-
2474          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2475          reinterpret_cast<compiler::IRNode |es2panda_arg.type.ptr_depth|>(|arg_name|);
2476        reverse_cast:
2477          start : >-
2478            reinterpret_cast<?const? es2panda_IRNode |es2panda_arg.type.ptr_depth|>
2479        call_cast:
2480          call_var:
2481            name: classInstance
2482            type:
2483              name: es2panda_IRNode
2484              ptr_depth: 1
2485          start: >-
2486            (reinterpret_cast<?const? compiler::IRNode *>(classInstance))->
2487        constructor_cast:
2488          start: >-
2489            ctxAllocator->New<compiler::IRNode>(
2490          end: )
2491        var_name: '|arg_name|E2p'
2492
2493  - es2panda_arg:
2494      name: '|arg_name|'
2495      type:
2496        name: 'IRNode'
2497        namespace: 'compiler'
2498      max_ptr_depth: 0
2499    new_args:
2500    - type:
2501        name: "es2panda_IRNode"
2502        ptr_depth: 1
2503      name: '|arg_name|'
2504      namespace: 'compiler::'
2505    cast:
2506        expression: >-
2507          auto &|arg_name|E2p = *reinterpret_cast<compiler::IRNode *>(|arg_name|);
2508        reverse_cast:
2509          start: >-
2510            reinterpret_cast<?const? es2panda_IRNode *>(
2511            reinterpret_cast<Context *>(context)->allocator->New<compiler::IRNode>(
2512          end: '))'
2513        var_name: '|arg_name|E2p'
2514
2515  - es2panda_arg:
2516      name: '|arg_name|'
2517      type:
2518        name: 'SrcDumper'
2519        namespace: "ir"
2520      min_ptr_depth: 1
2521    new_args:
2522    - type:
2523        name: "es2panda_SrcDumper"
2524        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2525      name: '|arg_name|'
2526      namespace: 'ir::'
2527    cast:
2528        expression: >-
2529          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2530          reinterpret_cast<ir::SrcDumper |es2panda_arg.type.ptr_depth|>(|arg_name|);
2531        reverse_cast:
2532          start : >-
2533            reinterpret_cast<?const? es2panda_SrcDumper |es2panda_arg.type.ptr_depth|>
2534        call_cast:
2535          call_var:
2536            name: classInstance
2537            type:
2538              name: es2panda_SrcDumper
2539              ptr_depth: 1
2540          start: >-
2541            (reinterpret_cast<?const? ir::SrcDumper *>(classInstance))->
2542        constructor_cast:
2543          start: >-
2544            ctxAllocator->New<ir::SrcDumper>(
2545          end: )
2546        var_name: '|arg_name|E2p'
2547
2548  - es2panda_arg:
2549      name: '|arg_name|'
2550      type:
2551        name: 'SrcDumper'
2552        namespace: "ir"
2553      max_ptr_depth: 0
2554    new_args:
2555    - type:
2556        name: "es2panda_SrcDumper"
2557        ptr_depth: 1
2558      name: '|arg_name|'
2559      namespace: 'ir::'
2560    cast:
2561        expression: ''
2562        var_name: 'std::forward<ir::SrcDumper>(*reinterpret_cast<ir::SrcDumper *>(|arg_name|))'
2563
2564  - es2panda_arg:
2565      name: '|arg_name|'
2566      type:
2567        name: 'AstDumper'
2568        namespace: "ir"
2569      min_ptr_depth: 1
2570    new_args:
2571    - type:
2572        name: "es2panda_AstDumper"
2573        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2574      name: '|arg_name|'
2575      namespace: 'ir::'
2576    cast:
2577        expression: >-
2578          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2579          reinterpret_cast<ir::AstDumper |es2panda_arg.type.ptr_depth|>(|arg_name|);
2580        reverse_cast:
2581          start : >-
2582            reinterpret_cast<?const? es2panda_AstDumper |es2panda_arg.type.ptr_depth|>
2583        call_cast:
2584          call_var:
2585            name: classInstance
2586            type:
2587              name: es2panda_AstDumper
2588              ptr_depth: 1
2589          start: >-
2590            (reinterpret_cast<?const? ir::AstDumper *>(classInstance))->
2591        constructor_cast:
2592          start: >-
2593            ctxAllocator->New<ir::AstDumper>(
2594          end: )
2595        var_name: '|arg_name|E2p'
2596
2597  - es2panda_arg:
2598      name: '|arg_name|'
2599      type:
2600        name: 'AstDumper'
2601        namespace: "ir"
2602      max_ptr_depth: 0
2603    new_args:
2604    - type:
2605        name: "es2panda_AstDumper"
2606        ptr_depth: 1
2607      name: '|arg_name|'
2608      namespace: 'ir::'
2609    cast:
2610        expression: ''
2611        var_name: 'std::forward<ir::AstDumper>(*reinterpret_cast<ir::AstDumper *>(|arg_name|))'
2612
2613  - es2panda_arg:
2614      name: '|arg_name|'
2615      type:
2616        name: 'LabelPair'
2617      min_ptr_depth: 1
2618    new_args:
2619    - type:
2620        name: "es2panda_LabelPair"
2621        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2622      name: '|arg_name|'
2623      namespace: 'compiler::'
2624    cast:
2625        expression: >-
2626          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2627          reinterpret_cast<compiler::LabelPair |es2panda_arg.type.ptr_depth|>(|arg_name|);
2628        reverse_cast:
2629          start : >-
2630            reinterpret_cast<?const? es2panda_LabelPair |es2panda_arg.type.ptr_depth|>
2631        call_cast:
2632          call_var:
2633            name: classInstance
2634            type:
2635              name: es2panda_LabelPair
2636              ptr_depth: 1
2637          start: >-
2638            (reinterpret_cast<?const? compiler::LabelPair *>(classInstance))->
2639        constructor_cast:
2640          start: >-
2641            ctxAllocator->New<compiler::LabelPair>(
2642          end: )
2643        var_name: '|arg_name|E2p'
2644
2645  - es2panda_arg:
2646      name: '|arg_name|'
2647      type:
2648        name: 'LabelPair'
2649      max_ptr_depth: 0
2650    new_args:
2651    - type:
2652        name: "es2panda_LabelPair"
2653        ptr_depth: 1
2654      name: '|arg_name|'
2655      namespace: 'compiler::'
2656    cast:
2657        expression: ''
2658        var_name: 'std::forward<compiler::LabelPair>(*reinterpret_cast<compiler::LabelPair *>(|arg_name|))'
2659        reverse_cast:
2660          start: >-
2661            reinterpret_cast<?const? es2panda_LabelPair *>(ctxAllocator->New<compiler::LabelPair>
2662          end: )
2663
2664  - es2panda_arg:
2665      name: '|arg_name|'
2666      type:
2667        name: 'ValidationInfo'
2668        namespace: "ir"
2669      min_ptr_depth: 1
2670    new_args:
2671    - type:
2672        name: "es2panda_ValidationInfo"
2673        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2674      name: '|arg_name|'
2675      namespace: "ir::"
2676    cast:
2677        expression: >-
2678          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2679          reinterpret_cast<ir::ValidationInfo |es2panda_arg.type.ptr_depth|>(|arg_name|);
2680        reverse_cast:
2681          start : >-
2682            reinterpret_cast<?const? es2panda_ValidationInfo |es2panda_arg.type.ptr_depth|>
2683        call_cast:
2684          call_var:
2685            name: classInstance
2686            type:
2687              name: es2panda_ValidationInfo
2688              ptr_depth: 1
2689          start: >-
2690            (reinterpret_cast<?const? ir::ValidationInfo *>(classInstance))->
2691        constructor_cast:
2692          start: >-
2693            ctxAllocator->New<ir::ValidationInfo>(
2694          end: )
2695        var_name: '|arg_name|E2p'
2696
2697  - es2panda_arg:
2698      name: '|arg_name|'
2699      type:
2700        name: 'ValidationInfo'
2701        namespace: "ir"
2702      max_ptr_depth: 0
2703    new_args:
2704    - type:
2705        name: "es2panda_ValidationInfo"
2706        ptr_depth: 1
2707      name: '|arg_name|'
2708      namespace: "ir::"
2709    cast:
2710        expression: ''
2711        reverse_cast:
2712          start : >-
2713            reinterpret_cast<?const? es2panda_ValidationInfo *>(reinterpret_cast<Context *>(context)->
2714            allocator->New<ir::ValidationInfo>(
2715          end: '))'
2716        var_name: '*reinterpret_cast<ir::ValidationInfo |es2panda_arg.type.ptr_depth|>(|arg_name|)'
2717
2718  - es2panda_arg:
2719      name: '|arg_name|'
2720      type:
2721        name: 'ASTAbstractVisitor'
2722        namespace: 'visitor'
2723      min_ptr_depth: 1
2724    new_args:
2725    - type:
2726        name: "es2panda_AstVisitor"
2727        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2728      name: '|arg_name|'
2729      namespace: 'ir::visitor::'
2730    cast:
2731        expression: >-
2732          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2733          reinterpret_cast<ir::visitor::ASTAbstractVisitor |es2panda_arg.type.ptr_depth|>(|arg_name|);
2734        reverse_cast:
2735          start : >-
2736            reinterpret_cast<?const? es2panda_AstVisitor |es2panda_arg.type.ptr_depth|>
2737        call_cast:
2738          call_var:
2739            name: classInstance
2740            type:
2741              name: es2panda_AstVisitor
2742              ptr_depth: 1
2743          start: >-
2744            (reinterpret_cast<?const? ir::visitor::ASTAbstractVisitor *>(classInstance))->
2745        constructor_cast:
2746          start: >-
2747            ctxAllocator->New<ir::visitor::ASTAbstractVisitor>(
2748          end: )
2749        var_name: '|arg_name|E2p'
2750
2751  - es2panda_arg:
2752      name: '|arg_name|'
2753      type:
2754        name: 'Signature'
2755        namespace: 'ir'
2756      min_ptr_depth: 1
2757    new_args:
2758    - type:
2759        name: "es2panda_Signature"
2760        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2761      name: '|arg_name|'
2762      namespace: 'ir::'
2763    cast:
2764        expression: >-
2765          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2766          reinterpret_cast<checker::Signature |es2panda_arg.type.ptr_depth|>(|arg_name|);
2767        reverse_cast:
2768          start: >-
2769            reinterpret_cast<?const? es2panda_Signature |es2panda_arg.type.ptr_depth|>
2770        call_cast:
2771          call_var:
2772            name: classInstance
2773            type:
2774              name: es2panda_Signature
2775              ptr_depth: 1
2776          start: >-
2777            (reinterpret_cast<?const? checker::Signature *>(classInstance))->
2778        constructor_cast:
2779          start: >-
2780            ctxAllocator->New<checker::Signature>(
2781          end: )
2782        var_name: '|arg_name|E2p'
2783
2784  - es2panda_arg:
2785      name: '|arg_name|'
2786      type:
2787        name: 'Substitution'
2788        namespace: 'checker'
2789      min_ptr_depth: 1
2790    new_args:
2791    - type:
2792        name: "ArenaMap"
2793        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2794        template_args:
2795        - type:
2796            name: ETSTypeParameter
2797            ptr_depth: 1
2798        - type:
2799            name: Type
2800            ptr_depth: 1
2801      name: '|arg_name|'
2802    cast:
2803        reverse_cast: ''
2804
2805  - es2panda_arg:
2806      name: '|arg_name|'
2807      type:
2808        name: 'VariableMap'
2809        namespace: 'varbinder::Scope'
2810    new_args:
2811    - type:
2812        name: "ArenaUnorderedMap"
2813        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2814        template_args:
2815        - type:
2816            name: StringView
2817            ptr_depth: 0
2818            namespace: util
2819        - type:
2820            name: Variable
2821            ptr_depth: 1
2822            namespace: varbinder
2823      name: '|arg_name|'
2824    cast:
2825        reverse_cast: ''
2826
2827  - es2panda_arg:
2828      name: '|arg_name|'
2829      type:
2830        name: 'DynamicImportVariables'
2831        namespace: 'varbinder'
2832    new_args:
2833    - type:
2834        name: "ArenaUnorderedMap"
2835        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2836        template_args:
2837        - type:
2838            name: Variable
2839            ptr_depth: 1
2840            namespace: varbinder
2841            const: const
2842        - type:
2843            name: DynamicImportData
2844            ptr_depth: 0
2845      name: '|arg_name|'
2846    cast:
2847        reverse_cast: ''
2848
2849  - es2panda_arg:
2850      name: '|arg_name|'
2851      type:
2852        name: 'GlobalArraySignatureMap'
2853        namespace: 'checker'
2854    new_args:
2855    - type:
2856        name: "ArenaUnorderedMap"
2857        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2858        template_args:
2859        - type:
2860            name: ETSArrayType
2861            ptr_depth: 1
2862            namespace: checker
2863            const: const
2864        - type:
2865            name: Signature
2866            ptr_depth: 1
2867            namespace: checker
2868      name: '|arg_name|'
2869    cast:
2870        reverse_cast: ''
2871
2872  - es2panda_arg:
2873      name: '|arg_name|'
2874      type:
2875        name: 'CapturedVarsMap'
2876        namespace: 'checker'
2877    new_args:
2878    - type:
2879        name: "ArenaUnorderedMap"
2880        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2881        template_args:
2882        - type:
2883            name: Variable
2884            ptr_depth: 1
2885            namespace: varbinder
2886            const: const
2887        - type:
2888            name: SourcePosition
2889            ptr_depth: 0
2890            namespace: lexer
2891      name: '|arg_name|'
2892    cast:
2893        reverse_cast: ''
2894
2895  - es2panda_arg:
2896      name: '|arg_name|'
2897      type:
2898        name: JsDocInfo
2899      max_ptr_depth: 0
2900    new_args:
2901    - type:
2902        name: es2panda_JsDocInfo
2903        ptr_depth: 1
2904      namespace: 'ir::'
2905      name: '|arg_name|'
2906    cast:
2907        expression: "\
2908          \tir::JsDocInfo |arg_name|ArenaUnorderedMap{reinterpret_cast<Context *>(context)->allocator->Adapter()};\n
2909          \tfor (size_t j = 0; j < |arg_name|->len; ++j) {\n
2910          \t\t|arg_name|ArenaUnorderedMap.emplace(|arg_name|->strings[j], JsDocRecordToE2p(|arg_name|->jsDocRecords[j]));\n
2911          \t}"
2912        var_name: '|arg_name|ArenaUnorderedMap'
2913        reverse_cast:
2914          start: JsDocInfoFromE2p(reinterpret_cast<Context *>(context)->allocator,
2915          end: )
2916
2917  - es2panda_arg:
2918      name: '|arg_name|'
2919      type:
2920        name: 'Signature'
2921        namespace: 'checker'
2922      min_ptr_depth: 1
2923    new_args:
2924    - type:
2925        name: "es2panda_Signature"
2926        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2927      name: '|arg_name|'
2928      namespace: 'checker::'
2929    cast:
2930        expression: >-
2931          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2932          reinterpret_cast<checker::Signature |es2panda_arg.type.ptr_depth|>(|arg_name|);
2933        reverse_cast:
2934          start: >-
2935            reinterpret_cast<?const? es2panda_Signature |es2panda_arg.type.ptr_depth|>
2936        call_cast:
2937          call_var:
2938            name: classInstance
2939            type:
2940              name: es2panda_Signature
2941              ptr_depth: 1
2942          start: >-
2943            (reinterpret_cast<?const? checker::Signature *>(classInstance))->
2944        constructor_cast:
2945          start: >-
2946            ctxAllocator->New<checker::Signature>(
2947          end: )
2948        var_name: '|arg_name|E2p'
2949
2950  - es2panda_arg:
2951      name: '|arg_name|'
2952      type:
2953        name: 'SignatureInfo'
2954        namespace: 'checker'
2955      min_ptr_depth: 1
2956    new_args:
2957    - type:
2958        name: "es2panda_SignatureInfo"
2959        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2960      name: '|arg_name|'
2961      namespace: 'checker::'
2962    cast:
2963        expression: >-
2964          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2965          reinterpret_cast<checker::SignatureInfo |es2panda_arg.type.ptr_depth|>(|arg_name|);
2966        reverse_cast:
2967          start: >-
2968            reinterpret_cast<?const? es2panda_SignatureInfo |es2panda_arg.type.ptr_depth|>
2969        call_cast:
2970          call_var:
2971            name: classInstance
2972            type:
2973              name: es2panda_SignatureInfo
2974              ptr_depth: 1
2975          start: >-
2976            (reinterpret_cast<?const? checker::SignatureInfo *>(classInstance))->
2977        constructor_cast:
2978          start: >-
2979            ctxAllocator->New<checker::SignatureInfo>(
2980          end: )
2981        var_name: '|arg_name|E2p'
2982
2983  - es2panda_arg:
2984      name: '|arg_name|'
2985      type:
2986        name: 'CheckerContext'
2987        namespace: 'checker'
2988      min_ptr_depth: 1
2989    new_args:
2990    - type:
2991        name: "es2panda_CheckerContext"
2992        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
2993      name: '|arg_name|'
2994      namespace: 'checker::'
2995    cast:
2996        expression: >-
2997          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
2998          reinterpret_cast<checker::CheckerContext |es2panda_arg.type.ptr_depth|>(|arg_name|);
2999        reverse_cast:
3000          start: >-
3001            reinterpret_cast<?const? es2panda_CheckerContext |es2panda_arg.type.ptr_depth|>
3002        call_cast:
3003          call_var:
3004            name: classInstance
3005            type:
3006              name: es2panda_CheckerContext
3007              ptr_depth: 1
3008          start: >-
3009            (reinterpret_cast<?const? checker::CheckerContext *>(classInstance))->
3010        constructor_cast:
3011          start: >-
3012            ctxAllocator->New<checker::CheckerContext>(
3013          end: )
3014        var_name: '|arg_name|E2p'
3015
3016  - es2panda_arg:
3017      name: '|arg_name|'
3018      type:
3019        name: 'CheckerContext'
3020        namespace: 'checker'
3021      max_ptr_depth: 0
3022    new_args:
3023    - type:
3024        name: "es2panda_CheckerContext"
3025        ptr_depth: 1
3026      name: '|arg_name|'
3027      namespace: 'checker::'
3028    cast:
3029        expression: >-
3030          auto &|arg_name|E2p =
3031          *(reinterpret_cast<checker::CheckerContext *>(|arg_name|));
3032        reverse_cast:
3033          start: >-
3034            reinterpret_cast<?const? es2panda_CheckerContext *>(reinterpret_cast<Context *>(context)->allocator->
3035            New<checker::CheckerContext>
3036          end: )
3037        var_name: '|arg_name|E2p'
3038
3039  - es2panda_arg:
3040      name: '|arg_name|'
3041      type:
3042        name: 'ResolveResult'
3043        namespace: 'checker'
3044      min_ptr_depth: 1
3045    new_args:
3046    - type:
3047        name: "es2panda_ResolveResult"
3048        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
3049      name: '|arg_name|'
3050      namespace: 'checker::'
3051    cast:
3052        expression: >-
3053          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
3054          reinterpret_cast<checker::ResolveResult |es2panda_arg.type.ptr_depth|>(|arg_name|);
3055        reverse_cast:
3056          start: >-
3057            reinterpret_cast<?const? es2panda_ResolveResult |es2panda_arg.type.ptr_depth|>
3058        call_cast:
3059          call_var:
3060            name: classInstance
3061            type:
3062              name: es2panda_ResolveResult
3063              ptr_depth: 1
3064          start: >-
3065            (reinterpret_cast<?const? checker::ResolveResult *>(classInstance))->
3066        constructor_cast:
3067          start: >-
3068            ctxAllocator->New<checker::ResolveResult>(
3069          end: )
3070        var_name: '|arg_name|E2p'
3071
3072  - es2panda_arg:
3073      name: '|arg_name|'
3074      type:
3075        name: 'ResolveResult'
3076        namespace: 'checker'
3077      max_ptr_depth: 0
3078    new_args:
3079    - type:
3080        name: "es2panda_ResolveResult"
3081        ptr_depth: 1
3082      name: '|arg_name|'
3083      namespace: 'checker::'
3084    cast:
3085        expression: >-
3086          auto &|arg_name|E2p =
3087          *(reinterpret_cast<checker::ResolveResult *>(|arg_name|));
3088        var_name: '|arg_name|E2p'
3089
3090  - es2panda_arg:
3091      name: '|arg_name|'
3092      type:
3093        name: StringView
3094        namespace: util
3095      min_ptr_depth: 0
3096      max_ptr_depth: 0
3097    new_args:
3098    - type:
3099        name: "char"
3100        ptr_depth: 1
3101      name: "|arg_name|"
3102      namespace: 'util::'
3103    cast:
3104      expression: util::StringView |arg_name|E2p {|arg_name|};
3105      var_name: '|arg_name|E2p'
3106      reverse_cast:
3107          start: StringViewToCString(reinterpret_cast<Context *>(context)->allocator,
3108          end: )
3109
3110  - es2panda_arg:
3111      name: '|arg_name|'
3112      type:
3113        name: UString
3114        namespace: util
3115      min_ptr_depth: 0
3116      max_ptr_depth: 0
3117    new_args:
3118    - type:
3119        name: "char"
3120        ptr_depth: 1
3121      name: "|arg_name|"
3122      namespace: 'util::'
3123    cast:
3124      expression: util::UString |arg_name|E2p {std::string(|arg_name|), reinterpret_cast<Context *>(context)->allocator};
3125      var_name: '|arg_name|E2p'
3126      reverse_cast:
3127          start: UStringToCString(reinterpret_cast<Context *>(context)->allocator,
3128          end: )
3129
3130  - es2panda_arg:
3131      name: '|arg_name|'
3132      type:
3133        name: string_view
3134      min_ptr_depth: 0
3135      max_ptr_depth: 0
3136    new_args:
3137    - type:
3138        name: "char"
3139        ptr_depth: 1
3140      name: "|arg_name|"
3141    cast:
3142      expression: std::string_view |arg_name|E2p {|arg_name|};
3143      var_name: '|arg_name|E2p'
3144      reverse_cast:
3145          start: StringViewToCString(reinterpret_cast<Context *>(context)->allocator,
3146          end: )
3147
3148  - es2panda_arg:
3149      name: '|arg_name|'
3150      type:
3151        name: "string"
3152      max_ptr_depth: 0
3153      min_ptr_depth: 0
3154    new_args:
3155      - name: '|arg_name|'
3156        type:
3157          name: char
3158          ptr_depth: 1
3159        namespace: 'std::'
3160    cast:
3161      expression: std::string |arg_name|E2p {|arg_name|};
3162      reverse_cast:
3163        start: 'StdStringToCString(reinterpret_cast<Context *>(context)->allocator, '
3164        end: ')'
3165      var_name: '|arg_name|E2p'
3166
3167  - es2panda_arg:
3168      name: '|arg_name|'
3169      type:
3170        name: "ExternalSource"
3171      max_ptr_depth: 0
3172      min_ptr_depth: 0
3173    new_args:
3174      - name: '|arg_name|'
3175        type:
3176          name: es2panda_ExternalSource
3177          ptr_depth: 2
3178        namespace: 'parser::'
3179    return_args:
3180      - name: '|arg_name|Len'
3181        type:
3182          name: size_t
3183          ptr_depth: 1
3184    cast:
3185      reverse_cast:
3186        start: 'auto apiRes = const_cast<?const? es2panda_ExternalSource **>(ExternalSourcesToE2p(reinterpret_cast<Context *>(context)->allocator, '
3187        end: ', |arg_name|Len))'
3188      var_name: '|arg_name|E2p'
3189
3190  - es2panda_arg:
3191      name: '|arg_name|'
3192      type:
3193        name: "DirectExternalSource"
3194      max_ptr_depth: 0
3195      min_ptr_depth: 0
3196    new_args:
3197      - name: '|arg_name|'
3198        type:
3199          name: es2panda_ExternalSource
3200          ptr_depth: 2
3201        namespace: 'parser::'
3202    return_args:
3203      - name: '|arg_name|Len'
3204        type:
3205          name: size_t
3206          ptr_depth: 1
3207    cast:
3208      reverse_cast:
3209        start: 'auto apiRes = const_cast<?const? es2panda_ExternalSource **>(ExternalSourcesToE2p(reinterpret_cast<Context *>(context)->allocator, '
3210        end: ', |arg_name|Len))'
3211      var_name: '|arg_name|E2p'
3212
3213  - es2panda_arg:
3214      name: '|arg_name|'
3215      type:
3216        name: 'VerificationContext'
3217        namespace: 'compiler::ast_verifier'
3218      min_ptr_depth: 1
3219    new_args:
3220    - type:
3221        name: "es2panda_VerificationContext"
3222        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
3223      name: '|arg_name|'
3224      namespace: 'compiler::ast_verifier::'
3225    cast:
3226        expression: >-
3227          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
3228          reinterpret_cast<compiler::ast_verifier::VerificationContext |es2panda_arg.type.ptr_depth|>(|arg_name|);
3229        reverse_cast:
3230          start: >-
3231            reinterpret_cast<?const? es2panda_VerificationContext |es2panda_arg.type.ptr_depth|>
3232        call_cast:
3233          call_var: 'es2panda_VerificationContext *classInstance'
3234          start: >-
3235            (reinterpret_cast<?const? compiler::ast_verifier::VerificationContext *>(classInstance))->
3236        constructor_cast:
3237          start: >-
3238            ctxAllocator->New<compiler::ast_verifier::VerificationContext>(
3239          end: )
3240        var_name: '|arg_name|E2p'
3241
3242  - es2panda_arg:
3243      name: '|arg_name|'
3244      type:
3245        name: 'VerificationContext'
3246        namespace: 'compiler::ast_verifier'
3247      max_ptr_depth: 0
3248    new_args:
3249    - type:
3250        name: "es2panda_VerificationContext"
3251        ptr_depth: 1
3252      name: '|arg_name|'
3253      namespace: 'compiler::ast_verifier::'
3254    cast:
3255        expression: >-
3256          auto &|arg_name|E2p =
3257          *(reinterpret_cast<compiler::ast_verifier::VerificationContext *>(|arg_name|));
3258        var_name: '|arg_name|E2p'
3259
3260  - es2panda_arg:
3261      name: '|arg_name|'
3262      type:
3263        name: 'ASTVerifier'
3264        namespace: 'compiler::ast_verifier'
3265      min_ptr_depth: 1
3266    new_args:
3267    - type:
3268        name: "es2panda_AstVerifier"
3269        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
3270      name: '|arg_name|'
3271      namespace: 'compiler::ast_verifier::'
3272    cast:
3273        expression: >-
3274          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
3275          reinterpret_cast<compiler::ast_verifier::ASTVerifier |es2panda_arg.type.ptr_depth|>(|arg_name|);
3276        reverse_cast:
3277          start: >-
3278            reinterpret_cast<?const? es2panda_AstVerifier |es2panda_arg.type.ptr_depth|>
3279        call_cast:
3280          call_var:
3281            name: classInstance
3282            type:
3283              name: es2panda_AstVerifier
3284              ptr_depth: 1
3285          start: >-
3286            (reinterpret_cast<?const? compiler::ast_verifier::ASTVerifier *>(classInstance))->
3287        constructor_cast:
3288          start: >-
3289            ctxAllocator->New<compiler::ast_verifier::ASTVerifier>(
3290          end: )
3291        var_name: '|arg_name|E2p'
3292
3293  - es2panda_arg:
3294      name: '|arg_name|'
3295      type:
3296        name: 'ASTVerifier'
3297        namespace: 'compiler::ast_verifier'
3298      max_ptr_depth: 0
3299    new_args:
3300    - type:
3301        name: "es2panda_AstVerifier"
3302        ptr_depth: 1
3303      name: '|arg_name|'
3304      namespace: 'compiler::ast_verifier::'
3305    cast:
3306        expression: >-
3307          auto &|arg_name|E2p =
3308          *(reinterpret_cast<compiler::ast_verifier::ASTVerifier *>(|arg_name|));
3309        var_name: '|arg_name|E2p'
3310
3311  - es2panda_arg:
3312      name: '|arg_name|'
3313      type:
3314        name: 'CheckMessage'
3315        namespace: 'compiler::ast_verifier'
3316      min_ptr_depth: 1
3317    new_args:
3318    - type:
3319        name: "es2panda_VerifierMessage"
3320        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
3321      name: '|arg_name|'
3322      namespace: 'compiler::ast_verifier::'
3323    cast:
3324        expression: >-
3325          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
3326          reinterpret_cast<compiler::ast_verifier::CheckMessage |es2panda_arg.type.ptr_depth|>(|arg_name|);
3327        reverse_cast:
3328          start: >-
3329            reinterpret_cast<?const? es2panda_VerifierMessage |es2panda_arg.type.ptr_depth|>
3330        call_cast:
3331          call_var:
3332            name: classInstance
3333            type:
3334              name: es2panda_VerifierMessage
3335              ptr_depth: 1
3336          start: >-
3337            (reinterpret_cast<?const? compiler::ast_verifier::CheckMessage *>(classInstance))->
3338        constructor_cast:
3339          start: >-
3340            ctxAllocator->New<compiler::ast_verifier::CheckMessage>(
3341          end: )
3342        var_name: '|arg_name|E2p'
3343
3344  - es2panda_arg:
3345      name: '|arg_name|'
3346      type:
3347        name: 'CheckMessage'
3348        namespace: 'compiler::ast_verifier'
3349      max_ptr_depth: 0
3350    new_args:
3351    - type:
3352        name: "es2panda_VerifierMessage"
3353        ptr_depth: 1
3354      name: '|arg_name|'
3355      namespace: 'compiler::ast_verifier::'
3356    cast:
3357        expression: >-
3358          auto &|arg_name|E2p =
3359          *(reinterpret_cast<compiler::ast_verifier::CheckMessage *>(|arg_name|));
3360        reverse_cast:
3361          start: >-
3362            reinterpret_cast<?const? es2panda_VerifierMessage *>(ctxAllocator->New<compiler::ast_verifier::CheckMessage>
3363          end: )
3364        var_name: '|arg_name|E2p'
3365
3366  - es2panda_arg:
3367      name: '|arg_name|'
3368      type:
3369        name: 'InvariantNameSet'
3370        namespace: 'compiler::ast_verifier'
3371    new_args:
3372    - type:
3373        name: 'set'
3374        namespace: 'std'
3375        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
3376        template_args:
3377        - type:
3378            name: string
3379            ptr_depth: 0
3380            namespace: std
3381            const: ''
3382      name: '|arg_name|'
3383    cast:
3384        reverse_cast: ''
3385
3386  - es2panda_arg:
3387      name: '|arg_name|'
3388      type:
3389        name: 'Messages'
3390        namespace: 'compiler::ast_verifier'
3391    new_args:
3392    - type:
3393        name: 'vector'
3394        namespace: 'std'
3395        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
3396        template_args:
3397        - type:
3398            name: CheckMessage
3399            ptr_depth: 0
3400            namespace: compiler::ast_verifier
3401            const: ''
3402      name: '|arg_name|'
3403    cast:
3404        reverse_cast: ''
3405
3406  - es2panda_arg:
3407      name: '|arg_name|'
3408      type:
3409        name: 'VerifierInvariants'
3410        namespace: 'compiler::ast_verifier'
3411    new_args:
3412    - type:
3413        name: 'Enum'
3414        namespace: 'verifier_invariants'
3415        ptr_depth: 0
3416      name: '|arg_name|'
3417    cast:
3418        reverse_cast: ''
3419
3420  - es2panda_arg:
3421      name: '|arg_name|'
3422      type:
3423        name: "EnumMemberResult"
3424        namespace: 'varbinder'
3425      max_ptr_depth: 0
3426      min_ptr_depth: 0
3427    new_args:
3428      - name: '|arg_name|'
3429        type:
3430          name: es2panda_variantDoubleCharArrayBool
3431          ptr_depth: 0
3432        namespace: 'varbinder::'
3433    cast:
3434      expression: |
3435        varbinder::EnumMemberResult |arg_name|E2p;
3436            // NOLINTBEGIN(cppcoreguidelines-pro-type-union-access)
3437            switch  (|arg_name|.index) {
3438              case 0:
3439                |arg_name|E2p = std::variant<double, util::StringView, bool>(|arg_name|.variant.d);
3440                break;
3441              case 1:
3442                {
3443                  util::StringView |arg_name|E2pStringView {|arg_name|.variant.c};
3444                  |arg_name|E2p = std::variant<double, util::StringView, bool>(|arg_name|E2pStringView);
3445                  break;
3446                }
3447              case 2:
3448                |arg_name|E2p = std::variant<double, util::StringView, bool>(|arg_name|.variant.b);
3449                break;
3450              default:
3451                break;
3452            }
3453            // NOLINTEND(cppcoreguidelines-pro-type-union-access)
3454      reverse_cast:
3455        start: 'EnumMemberResultToEs2pandaVariant(reinterpret_cast<Context *>(context)->allocator, '
3456        end: ')'
3457      var_name: '|arg_name|E2p'
3458
3459  - es2panda_arg:
3460      name: '|arg_name|'
3461      type:
3462        name: "NodeTraverser"
3463      max_ptr_depth: 0
3464      min_ptr_depth: 0
3465    new_args:
3466      - name: '|arg_name|'
3467        type:
3468          name: NodeTraverser
3469          ptr_depth: 0
3470        namespace: ''
3471    cast:
3472      expression: >-
3473        std::function<void(ir::AstNode *)> |arg_name|E2p =
3474        [|arg_name|](ir::AstNode *traverserLambdaNode)
3475        {|arg_name|(reinterpret_cast<es2panda_AstNode *>(traverserLambdaNode));};
3476      var_name: '|arg_name|E2p'
3477
3478  - es2panda_arg:
3479      name: '|arg_name|'
3480      type:
3481        name: "NodeTransformer"
3482      max_ptr_depth: 0
3483      min_ptr_depth: 0
3484    new_args:
3485      - name: '|arg_name|'
3486        type:
3487          name: NodeTransformer
3488          ptr_depth: 0
3489        namespace: ''
3490    cast:
3491      expression: >-
3492        std::function<ir::AstNode *(ir::AstNode *)> |arg_name|E2p =
3493        [|arg_name|](ir::AstNode *traverserLambdaNode)
3494        {return reinterpret_cast<ir::AstNode *>(|arg_name|(reinterpret_cast<es2panda_AstNode *>(traverserLambdaNode)));};
3495      var_name: '|arg_name|E2p'
3496
3497  - es2panda_arg:
3498      name: '|arg_name|'
3499      type:
3500        name: NodePredicate
3501      max_ptr_depth: 0
3502      min_ptr_depth: 0
3503    new_args:
3504      - name: '|arg_name|'
3505        type:
3506          name: NodePredicate
3507          ptr_depth: 0
3508        namespace: ''
3509    cast:
3510      expression: >-
3511        std::function<bool(ir::AstNode *)> |arg_name|E2p =
3512        [|arg_name|](ir::AstNode *traverserLambdaNode)
3513        {return |arg_name|(reinterpret_cast<es2panda_AstNode *>(traverserLambdaNode));};
3514      var_name: '|arg_name|E2p'
3515
3516  - es2panda_arg:
3517      name: '|arg_name|'
3518      type:
3519        name: PropertyProcesser
3520        namespace: checker
3521      max_ptr_depth: 0
3522      min_ptr_depth: 0
3523    new_args:
3524      - name: '|arg_name|'
3525        type:
3526          name: PropertyProcessor
3527          ptr_depth: 0
3528        namespace: ''
3529    cast:
3530      expression: >-
3531        std::function<varbinder::LocalVariable *(varbinder::LocalVariable *, checker::Type *)> |arg_name|E2p =
3532        [|arg_name|](varbinder::LocalVariable *propertyProcessorLambdaVariable, checker::Type *propertyProcessorLambdaType)
3533        {return reinterpret_cast<varbinder::LocalVariable *>(|arg_name|(
3534        reinterpret_cast<es2panda_Variable *>(propertyProcessorLambdaVariable),
3535        reinterpret_cast<es2panda_Type *>(propertyProcessorLambdaType)));};
3536      var_name: '|arg_name|E2p'
3537
3538  - es2panda_arg:
3539      name: '|arg_name|'
3540      type:
3541        name: PropertyTraverser
3542      max_ptr_depth: 0
3543      min_ptr_depth: 0
3544    new_args:
3545      - name: '|arg_name|'
3546        type:
3547          name: PropertyTraverser
3548          ptr_depth: 0
3549        namespace: ''
3550    cast:
3551      expression: >-
3552        std::function<void(const varbinder::LocalVariable *)> |arg_name|E2p =
3553        [|arg_name|](const varbinder::LocalVariable *propertyTraverserLambdaVariable)
3554        {|arg_name|(reinterpret_cast<const es2panda_Variable *>(propertyTraverserLambdaVariable));};
3555      var_name: '|arg_name|E2p'
3556
3557  - es2panda_arg:
3558      name: '|arg_name|'
3559      type:
3560        name: ClassBuilder
3561        namespace: 'checker'
3562      max_ptr_depth: 0
3563      min_ptr_depth: 0
3564    new_args:
3565      - name: '|arg_name|'
3566        type:
3567          name: ClassBuilder
3568          ptr_depth: 0
3569        namespace: 'checker::'
3570    cast:
3571      expression: >-
3572        std::function<void(ArenaVector<ir::AstNode *> *)> |arg_name|E2p =
3573        [|arg_name|](ArenaVector<ir::AstNode *> *classBuilderLambdaVariable)
3574        {|arg_name|(reinterpret_cast<es2panda_AstNode **>(classBuilderLambdaVariable->data()), classBuilderLambdaVariable->size());};
3575      var_name: '|arg_name|E2p'
3576
3577  - es2panda_arg:
3578      name: '|arg_name|'
3579      type:
3580        name: MethodBuilder
3581        namespace: 'checker'
3582      max_ptr_depth: 0
3583      min_ptr_depth: 0
3584    new_args:
3585      - name: '|arg_name|'
3586        type:
3587          name: MethodBuilder
3588          ptr_depth: 0
3589        namespace: 'checker::'
3590    cast:
3591      expression: >-
3592        std::function<void(ArenaVector<ir::Statement *> *, ArenaVector<ir::Expression *> *, checker::Type **)> |arg_name|E2p =
3593        [|arg_name|](ArenaVector<ir::Statement *> *methodBuilderLambdaStatementVariable,
3594        ArenaVector<ir::Expression *> *methodBuilderLambdaExpressionVariable, checker::Type **methodBuilderLambdaTypeVariable)
3595        {|arg_name|(reinterpret_cast<es2panda_AstNode **>(methodBuilderLambdaStatementVariable->data()),
3596        methodBuilderLambdaStatementVariable->size(), reinterpret_cast<es2panda_AstNode **>(methodBuilderLambdaExpressionVariable->data()),
3597        methodBuilderLambdaExpressionVariable->size(), reinterpret_cast<es2panda_Type **>(methodBuilderLambdaTypeVariable));};
3598      var_name: '|arg_name|E2p'
3599
3600  - es2panda_arg:
3601      name: '|arg_name|'
3602      type:
3603        name: ClassInitializerBuilder
3604        namespace: 'checker'
3605      max_ptr_depth: 0
3606      min_ptr_depth: 0
3607    new_args:
3608      - name: '|arg_name|'
3609        type:
3610          name: ClassInitializerBuilder
3611          ptr_depth: 0
3612        namespace: 'checker::'
3613    cast:
3614      expression: >-
3615        std::function<void(ArenaVector<ir::Statement *> *, ArenaVector<ir::Expression *> *)> |arg_name|E2p =
3616        [|arg_name|](ArenaVector<ir::Statement *> *classInitializerBuilderLambdaStatementVariable,
3617        ArenaVector<ir::Expression *> *classInitializerBuilderLambdaExpressionVariable)
3618        {|arg_name|(reinterpret_cast<es2panda_AstNode **>(classInitializerBuilderLambdaStatementVariable->data()),
3619        classInitializerBuilderLambdaStatementVariable->size(), reinterpret_cast<es2panda_AstNode **>(classInitializerBuilderLambdaExpressionVariable->data()),
3620        classInitializerBuilderLambdaExpressionVariable->size());};
3621      var_name: '|arg_name|E2p'
3622
3623  - es2panda_arg:
3624      name: '|arg_name|'
3625      type:
3626        name: ConstructorFlags
3627        current_class: TSModuleDeclaration
3628      max_ptr_depth: 0
3629      min_ptr_depth: 0
3630    new_args:
3631      - name: declare
3632        type:
3633          name: bool
3634      - name: global
3635        type:
3636          name: bool
3637    cast:
3638      expression: ""
3639      var_name: "ir::TSModuleDeclaration::ConstructorFlags {declare, global}"
3640
3641  - es2panda_arg:
3642      name: '|arg_name|'
3643      type:
3644        name: "ConstructorFlags"
3645        current_class: TSEnumDeclaration
3646      max_ptr_depth: 0
3647      min_ptr_depth: 0
3648    new_args:
3649      - name: 'isConst'
3650        type:
3651          name: bool
3652      - name: 'isStatic'
3653        type:
3654          name: bool
3655      - name: 'isDeclare'
3656        type:
3657          name: bool
3658    cast:
3659      expression: ""
3660      var_name: "ir::TSEnumDeclaration::ConstructorFlags {isConst, isStatic, isDeclare}"
3661
3662  - es2panda_arg:
3663      name: '|arg_name|'
3664      type:
3665        name: "ConstructorData"
3666        current_class: TSInterfaceDeclaration
3667      max_ptr_depth: 0
3668      min_ptr_depth: 0
3669    new_args:
3670      - name: 'id'
3671        type:
3672          name: es2panda_AstNode
3673          ptr_depth: 1
3674      - name: 'typeParams'
3675        type:
3676          name: es2panda_AstNode
3677          ptr_depth: 1
3678      - name: 'body'
3679        type:
3680          name: es2panda_AstNode
3681          ptr_depth: 1
3682      - name: isStatic
3683        type:
3684          name: bool
3685      - name: isExternal
3686        type:
3687          name: bool
3688    cast:
3689      expression: "\
3690        auto es2pandaId = reinterpret_cast<ir::Identifier *>(id);\n
3691        auto es2pandaTypeParams = reinterpret_cast<ir::TSTypeParameterDeclaration *>(typeParams);\n
3692        auto es2pandaBody = reinterpret_cast<ir::TSInterfaceBody *>(body);\n
3693        ark::es2panda::Language es2pandaLang {Language::Id::ETS};\n
3694        "
3695      var_name: "ir::TSInterfaceDeclaration::ConstructorData {es2pandaId, es2pandaTypeParams, es2pandaBody, isStatic, isExternal, es2pandaLang}"
3696
3697  - es2panda_arg:
3698      name: '|arg_name|'
3699      type:
3700        name: "ScriptFunctionData"
3701        current_class: ScriptFunction
3702      max_ptr_depth: 0
3703      min_ptr_depth: 0
3704    new_args:
3705      - name: '|arg_name|body'
3706        type:
3707          name: es2panda_AstNode
3708          ptr_depth: 1
3709      - name: '|arg_name|signature'
3710        type:
3711          name: es2panda_FunctionSignature
3712          ptr_depth: 1
3713      - name: '|arg_name|funcFlags'
3714        type:
3715          name: int
3716          ptr_depth: 0
3717      - name: '|arg_name|flags'
3718        type:
3719          name: int
3720    cast:
3721      expression: "
3722        auto *|arg_name|bodyE2p = reinterpret_cast<ir::AstNode *>(|arg_name|body);\n
3723        auto |arg_name|signatureE2p = std::move(*reinterpret_cast<ir::FunctionSignature *>(|arg_name|signature));\n
3724        auto |arg_name|funcFlagsE2p = E2pToIrScriptFunctionFlags((Es2pandaScriptFunctionFlags)|arg_name|funcFlags);\n
3725        auto |arg_name|flagsE2p = E2pToIrModifierFlags((Es2pandaModifierFlags)|arg_name|flags);\n
3726        ark::es2panda::Language |arg_name|lang {Language::Id::ETS};\n
3727        "
3728      var_name: "ir::ScriptFunction::ScriptFunctionData {|arg_name|bodyE2p, std::move(|arg_name|signatureE2p),
3729        |arg_name|funcFlagsE2p, |arg_name|flagsE2p, |arg_name|lang}"
3730
3731  - es2panda_arg:
3732      name: '|arg_name|'
3733      type:
3734        name: Method
3735        namespace: checker
3736      max_ptr_depth: 0
3737      min_ptr_depth: 0
3738    new_args:
3739      - name: 'globalSignature'
3740        type:
3741          name: es2panda_Signature
3742          ptr_depth: 1
3743        namespace: 'checker::'
3744      - name: 'memberProxyType'
3745        type:
3746          name: es2panda_Type
3747          ptr_depth: 1
3748        namespace: 'checker::'
3749    return_args:
3750      - name: '|arg_name|MemberProxyType'
3751        type:
3752          name: es2panda_Type
3753          ptr_depth: 2
3754    cast:
3755      expression: "\
3756        auto es2pandaGlobalSignature = reinterpret_cast<checker::Signature *>(globalSignature);\n
3757        auto es2pandaMemberProxyType = reinterpret_cast<checker::ETSFunctionType *>(memberProxyType);\n
3758        "
3759      reverse_cast:
3760        start: >-
3761          auto resMethod =
3762        end: ";\n
3763          \t(*|arg_name|MemberProxyType) = reinterpret_cast<es2panda_Type *>(resMethod.memberProxyType);\n
3764          \tauto apiRes = reinterpret_cast<es2panda_Signature *>(resMethod.globalSignature)"
3765      var_name: "checker::ETSEnumType::Method {es2pandaGlobalSignature, es2pandaMemberProxyType}"
3766
3767  - es2panda_arg:
3768      name: '|arg_name|'
3769      type:
3770        name: DynamicImportData
3771        namespace: varbinder
3772      max_ptr_depth: 1
3773      min_ptr_depth: 1
3774    new_args:
3775      - name: '|arg_name|'
3776        type:
3777          name: es2panda_DynamicImportData
3778          ptr_depth: 1
3779        namespace: 'varbinder::'
3780    cast:
3781      expression: "\
3782        auto |arg_name|import = reinterpret_cast<const ir::ETSImportDeclaration *>(|arg_name|->import);\n
3783        auto |arg_name|specifier = reinterpret_cast<const ir::AstNode *>(|arg_name|->specifier);\n
3784        auto |arg_name|variable = reinterpret_cast<varbinder::Variable *>(|arg_name|->variable);\n
3785        auto |arg_name|E2p = reinterpret_cast<Context *>(context)->allocator->New<varbinder::DynamicImportData>()
3786        |arg_name|E2p->import = |arg_name|import;\n
3787        |arg_name|E2p->specifier = |arg_name|specifier;\n
3788        |arg_name|E2p->variable = |arg_name|variable;\n"
3789      reverse_cast:
3790        start: DynamicImportDataToE2pPtr(reinterpret_cast<Context *>(context)->allocator,
3791        end: )
3792      var_name: "|arg_name|E2p"
3793
3794  - es2panda_arg:
3795      name: '|arg_name|'
3796      type:
3797        name: DynamicImportData
3798        namespace: varbinder
3799      max_ptr_depth: 0
3800    new_args:
3801      - name: '|arg_name|'
3802        type:
3803          name: es2panda_DynamicImportData
3804          ptr_depth: 0
3805        namespace: 'varbinder::'
3806    cast:
3807      expression: "\
3808        auto |arg_name|import = reinterpret_cast<const ir::ETSImportDeclaration *>(|arg_name|.import);\n
3809        auto |arg_name|specifier = reinterpret_cast<const ir::AstNode *>(|arg_name|.specifier);\n
3810        auto |arg_name|variable = reinterpret_cast<varbinder::Variable *>(|arg_name|.variable);\n
3811        varbinder::DynamicImportData |arg_name|E2p;
3812        |arg_name|E2p.import = |arg_name|import;\n
3813        |arg_name|E2p.specifier = |arg_name|specifier;\n
3814        |arg_name|E2p.variable = |arg_name|variable;\n"
3815      reverse_cast:
3816        start: DynamicImportDataToE2p(
3817        end: )
3818      var_name: "|arg_name|E2p"
3819
3820  - es2panda_arg:
3821      name: '|arg_name|'
3822      type:
3823        name: OverloadInfo
3824        namespace: ir
3825      max_ptr_depth: 1
3826      min_ptr_depth: 1
3827    new_args:
3828      - name: '|arg_name|'
3829        type:
3830          name: es2panda_OverloadInfo
3831          ptr_depth: 1
3832        namespace: 'ir::'
3833    cast:
3834      expression: "\
3835        auto |arg_name|E2p = reinterpret_cast<Context *>(context)->allocator->New<ir::OverloadInfo>();
3836        |arg_name|E2p->minArg = |arg_name|->minArg;\n
3837        |arg_name|E2p->maxArg = |arg_name|->maxArg;\n
3838        |arg_name|E2p->needHelperOverload = |arg_name|->needHelperOverload;\n
3839        |arg_name|E2p->isDeclare = |arg_name|->isDeclare;\n
3840        |arg_name|E2p->hasRestVar = |arg_name|->hasRestVar;\n
3841        |arg_name|E2p->returnVoid = |arg_name|->returnVoid;\n"
3842      reverse_cast:
3843        start: OverloadInfoToE2pPtr(reinterpret_cast<Context *>(context)->allocator,
3844        end: )
3845      var_name: "|arg_name|E2p"
3846
3847  - es2panda_arg:
3848      name: '|arg_name|'
3849      type:
3850        name: OverloadInfo
3851        namespace: ir
3852      max_ptr_depth: 0
3853    new_args:
3854      - name: '|arg_name|'
3855        type:
3856          name: es2panda_OverloadInfo
3857          ptr_depth: 0
3858        namespace: 'ir::'
3859    cast:
3860      expression: "\
3861        ir::OverloadInfo |arg_name|E2p;
3862        |arg_name|E2p.minArg = |arg_name|.minArg;\n
3863        |arg_name|E2p.maxArg = |arg_name|.maxArg;\n
3864        |arg_name|E2p.needHelperOverload = |arg_name|.needHelperOverload;\n
3865        |arg_name|E2p.isDeclare = |arg_name|.isDeclare;\n
3866        |arg_name|E2p.hasRestVar = |arg_name|.hasRestVar;\n
3867        |arg_name|E2p.returnVoid = |arg_name|.returnVoid;\n"
3868      reverse_cast:
3869        start: OverloadInfoToE2p(
3870        end: )
3871      var_name: "|arg_name|E2p"
3872
3873  - es2panda_arg:
3874      name: '|arg_name|'
3875      type:
3876        name: Accessor
3877        namespace: checker
3878      max_ptr_depth: 0
3879    new_args:
3880      - name: '|arg_name|isGetter'
3881        type:
3882          name: bool
3883          ptr_depth: 0
3884        namespace: 'checker::'
3885      - name: '|arg_name|isSetter'
3886        type:
3887          name: bool
3888          ptr_depth: 0
3889        namespace: 'checker::'
3890      - name: '|arg_name|isExternal'
3891        type:
3892          name: bool
3893          ptr_depth: 0
3894        namespace: 'checker::'
3895    cast:
3896      expression: "
3897        checker::Accessor |arg_name|E2p;
3898        |arg_name|E2p.isGetter = |arg_name|isGetter;\n
3899        |arg_name|E2p.isSetter = |arg_name|isSetter;\n
3900        |arg_name|E2p.isExternal = |arg_name|isExternal;\n"
3901      var_name: "|arg_name|E2p"
3902
3903  - es2panda_arg:
3904      name: '|arg_name|'
3905      type:
3906        name: 'ImportPathManager'
3907      min_ptr_depth: 1
3908    new_args:
3909    - type:
3910        name: 'es2panda_ImportPathManager'
3911        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
3912      name: '|arg_name|'
3913    cast:
3914        expression: >-
3915          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
3916          reinterpret_cast<util::ImportPathManager |es2panda_arg.type.ptr_depth|>(|arg_name|);
3917        reverse_cast:
3918          start: >-
3919            reinterpret_cast<?const? es2panda_ImportPathManager |es2panda_arg.type.ptr_depth|>
3920        call_cast:
3921          call_var:
3922            name: classInstance
3923            type:
3924              name: es2panda_ImportPathManager
3925              ptr_depth: 1
3926          start: >-
3927            (reinterpret_cast<?const? util::ImportPathManager *>(classInstance))->
3928        constructor_cast:
3929          start: >-
3930            ctxAllocator->New<util::ImportPathManager>(
3931          end: )
3932        var_name: '|arg_name|E2p'
3933
3934  - es2panda_arg:
3935      name: '|arg_name|'
3936      type:
3937        name: Path
3938        namespace: util
3939      max_ptr_depth: 0
3940    new_args:
3941    - type:
3942        name: es2panda_Path
3943        ptr_depth: 1
3944      name: '|arg_name|'
3945    cast:
3946        expression: >-
3947          auto &|arg_name|E2p =
3948          *(reinterpret_cast<util::Path *>(|arg_name|));
3949        reverse_cast:
3950          start: >-
3951            reinterpret_cast<?const? es2panda_Path *>(reinterpret_cast<Context *>(context)->allocator->
3952            New<util::Path>
3953          end: )
3954        var_name: '|arg_name|E2p'
3955
3956  - es2panda_arg:
3957      name: '|arg_name|'
3958      type:
3959        name: Path
3960        namespace: util
3961      min_ptr_depth: 1
3962    new_args:
3963    - type:
3964        name: 'es2panda_Path'
3965        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
3966      name: '|arg_name|'
3967    cast:
3968        expression: >-
3969          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
3970          reinterpret_cast<util::Path |es2panda_arg.type.ptr_depth|>(|arg_name|);
3971        reverse_cast:
3972          start: >-
3973            reinterpret_cast<?const? es2panda_Path |es2panda_arg.type.ptr_depth|>
3974        call_cast:
3975          call_var:
3976            name: classInstance
3977            type:
3978              name: es2panda_Path
3979              ptr_depth: 1
3980          start: >-
3981            (reinterpret_cast<?const? util::Path *>(classInstance))->
3982        constructor_cast:
3983          start: >-
3984            ctxAllocator->New<util::Path>(
3985          end: )
3986        var_name: '|arg_name|E2p'
3987
3988  - es2panda_arg:
3989      name: '|arg_name|'
3990      type:
3991        name: 'Options'
3992        namespace: 'gen'
3993      min_ptr_depth: 1
3994    new_args:
3995    - type:
3996        name: 'es2panda_Options'
3997        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
3998      name: '|arg_name|'
3999    cast:
4000        expression: >-
4001          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
4002          reinterpret_cast<util::gen::Options |es2panda_arg.type.ptr_depth|>(|arg_name|);
4003        reverse_cast:
4004          start: >-
4005            reinterpret_cast<?const? es2panda_Options |es2panda_arg.type.ptr_depth|>
4006        call_cast:
4007          call_var:
4008            name: classInstance
4009            type:
4010              name: es2panda_Options
4011              ptr_depth: 1
4012          start: >-
4013            (reinterpret_cast<?const? util::gen::Options *>(classInstance))->
4014        constructor_cast:
4015          start: >-
4016            ctxAllocator->New<util::gen::Options>(
4017          end: )
4018        var_name: '|arg_name|E2p'
4019
4020  - es2panda_arg:
4021      name: '|arg_name|'
4022      type:
4023        name: 'Options'
4024        namespace: 'util'
4025      min_ptr_depth: 1
4026    new_args:
4027    - type:
4028        name: 'es2panda_Options'
4029        ptr_depth: '|es2panda_arg.type.ptr_depth_int|'
4030      name: '|arg_name|'
4031    cast:
4032        expression: >-
4033          auto |es2panda_arg.type.ptr_depth||arg_name|E2p =
4034          reinterpret_cast<util::Options |es2panda_arg.type.ptr_depth|>(|arg_name|);
4035        reverse_cast:
4036          start: >-
4037            reinterpret_cast<?const? es2panda_Options |es2panda_arg.type.ptr_depth|>
4038        call_cast:
4039          call_var:
4040            name: classInstance
4041            type:
4042              name: es2panda_Options
4043              ptr_depth: 1
4044          start: >-
4045            (reinterpret_cast<?const? util::Options *>(classInstance))->
4046        constructor_cast:
4047          start: >-
4048            ctxAllocator->New<util::Options>(
4049          end: )
4050        var_name: '|arg_name|E2p'
4051
4052  - es2panda_arg:
4053      name: '|arg_name|'
4054      type:
4055        name: arg_list_t
4056        namespace: gen
4057      max_ptr_depth: 0
4058    new_args:
4059    - name: '|arg_name|'
4060      type:
4061        name: vector
4062        namespace: std
4063        ref_depth: 2
4064        template_args:
4065        - type:
4066            name: string
4067            namespace: std
4068    cast:
4069        reverse_cast: {}
4070