1 #include "php_ast.h"
2
3 const zend_ast_kind ast_kinds[] = {
4 ZEND_AST_ARG_LIST,
5 ZEND_AST_LIST,
6 ZEND_AST_ARRAY,
7 ZEND_AST_ENCAPS_LIST,
8 ZEND_AST_EXPR_LIST,
9 ZEND_AST_STMT_LIST,
10 ZEND_AST_IF,
11 ZEND_AST_SWITCH_LIST,
12 ZEND_AST_CATCH_LIST,
13 ZEND_AST_PARAM_LIST,
14 ZEND_AST_CLOSURE_USES,
15 ZEND_AST_PROP_DECL,
16 ZEND_AST_CONST_DECL,
17 ZEND_AST_CLASS_CONST_DECL,
18 ZEND_AST_NAME_LIST,
19 ZEND_AST_TRAIT_ADAPTATIONS,
20 ZEND_AST_USE,
21 ZEND_AST_TYPE_UNION,
22 ZEND_AST_TYPE_INTERSECTION,
23 ZEND_AST_ATTRIBUTE_LIST,
24 ZEND_AST_ATTRIBUTE_GROUP,
25 ZEND_AST_MATCH_ARM_LIST,
26 AST_NAME,
27 AST_CLOSURE_VAR,
28 AST_NULLABLE_TYPE,
29 ZEND_AST_FUNC_DECL,
30 ZEND_AST_CLOSURE,
31 ZEND_AST_METHOD,
32 ZEND_AST_ARROW_FUNC,
33 ZEND_AST_CLASS,
34 ZEND_AST_MAGIC_CONST,
35 ZEND_AST_TYPE,
36 ZEND_AST_CALLABLE_CONVERT,
37 ZEND_AST_VAR,
38 ZEND_AST_CONST,
39 ZEND_AST_UNPACK,
40 ZEND_AST_CAST,
41 ZEND_AST_EMPTY,
42 ZEND_AST_ISSET,
43 ZEND_AST_SHELL_EXEC,
44 ZEND_AST_CLONE,
45 ZEND_AST_EXIT,
46 ZEND_AST_PRINT,
47 ZEND_AST_INCLUDE_OR_EVAL,
48 ZEND_AST_UNARY_OP,
49 ZEND_AST_PRE_INC,
50 ZEND_AST_PRE_DEC,
51 ZEND_AST_POST_INC,
52 ZEND_AST_POST_DEC,
53 ZEND_AST_YIELD_FROM,
54 ZEND_AST_GLOBAL,
55 ZEND_AST_UNSET,
56 ZEND_AST_RETURN,
57 ZEND_AST_LABEL,
58 ZEND_AST_REF,
59 ZEND_AST_HALT_COMPILER,
60 ZEND_AST_ECHO,
61 ZEND_AST_THROW,
62 ZEND_AST_GOTO,
63 ZEND_AST_BREAK,
64 ZEND_AST_CONTINUE,
65 ZEND_AST_CLASS_NAME,
66 ZEND_AST_CLASS_CONST_GROUP,
67 ZEND_AST_DIM,
68 ZEND_AST_PROP,
69 ZEND_AST_NULLSAFE_PROP,
70 ZEND_AST_STATIC_PROP,
71 ZEND_AST_CALL,
72 ZEND_AST_CLASS_CONST,
73 ZEND_AST_ASSIGN,
74 ZEND_AST_ASSIGN_REF,
75 ZEND_AST_ASSIGN_OP,
76 ZEND_AST_BINARY_OP,
77 ZEND_AST_ARRAY_ELEM,
78 ZEND_AST_NEW,
79 ZEND_AST_INSTANCEOF,
80 ZEND_AST_YIELD,
81 ZEND_AST_STATIC,
82 ZEND_AST_WHILE,
83 ZEND_AST_DO_WHILE,
84 ZEND_AST_IF_ELEM,
85 ZEND_AST_SWITCH,
86 ZEND_AST_SWITCH_CASE,
87 ZEND_AST_DECLARE,
88 ZEND_AST_PROP_ELEM,
89 ZEND_AST_PROP_GROUP,
90 ZEND_AST_CONST_ELEM,
91 ZEND_AST_USE_TRAIT,
92 ZEND_AST_TRAIT_PRECEDENCE,
93 ZEND_AST_METHOD_REFERENCE,
94 ZEND_AST_NAMESPACE,
95 ZEND_AST_USE_ELEM,
96 ZEND_AST_TRAIT_ALIAS,
97 ZEND_AST_GROUP_USE,
98 ZEND_AST_ATTRIBUTE,
99 ZEND_AST_MATCH,
100 ZEND_AST_MATCH_ARM,
101 ZEND_AST_NAMED_ARG,
102 ZEND_AST_METHOD_CALL,
103 ZEND_AST_NULLSAFE_METHOD_CALL,
104 ZEND_AST_STATIC_CALL,
105 ZEND_AST_CONDITIONAL,
106 ZEND_AST_TRY,
107 ZEND_AST_CATCH,
108 ZEND_AST_FOR,
109 ZEND_AST_FOREACH,
110 ZEND_AST_ENUM_CASE,
111 ZEND_AST_PARAM,
112 };
113
114 const size_t ast_kinds_count = sizeof(ast_kinds) / sizeof(ast_kinds[0]);
115
ast_kind_to_name(zend_ast_kind kind)116 const char *ast_kind_to_name(zend_ast_kind kind) {
117 switch (kind) {
118 case ZEND_AST_ARG_LIST: return "AST_ARG_LIST";
119 case ZEND_AST_LIST: return "AST_LIST";
120 case ZEND_AST_ARRAY: return "AST_ARRAY";
121 case ZEND_AST_ENCAPS_LIST: return "AST_ENCAPS_LIST";
122 case ZEND_AST_EXPR_LIST: return "AST_EXPR_LIST";
123 case ZEND_AST_STMT_LIST: return "AST_STMT_LIST";
124 case ZEND_AST_IF: return "AST_IF";
125 case ZEND_AST_SWITCH_LIST: return "AST_SWITCH_LIST";
126 case ZEND_AST_CATCH_LIST: return "AST_CATCH_LIST";
127 case ZEND_AST_PARAM_LIST: return "AST_PARAM_LIST";
128 case ZEND_AST_CLOSURE_USES: return "AST_CLOSURE_USES";
129 case ZEND_AST_PROP_DECL: return "AST_PROP_DECL";
130 case ZEND_AST_CONST_DECL: return "AST_CONST_DECL";
131 case ZEND_AST_CLASS_CONST_DECL: return "AST_CLASS_CONST_DECL";
132 case ZEND_AST_NAME_LIST: return "AST_NAME_LIST";
133 case ZEND_AST_TRAIT_ADAPTATIONS: return "AST_TRAIT_ADAPTATIONS";
134 case ZEND_AST_USE: return "AST_USE";
135 case ZEND_AST_TYPE_UNION: return "AST_TYPE_UNION";
136 case ZEND_AST_TYPE_INTERSECTION: return "AST_TYPE_INTERSECTION";
137 case ZEND_AST_ATTRIBUTE_LIST: return "AST_ATTRIBUTE_LIST";
138 case ZEND_AST_ATTRIBUTE_GROUP: return "AST_ATTRIBUTE_GROUP";
139 case ZEND_AST_MATCH_ARM_LIST: return "AST_MATCH_ARM_LIST";
140 case AST_NAME: return "AST_NAME";
141 case AST_CLOSURE_VAR: return "AST_CLOSURE_VAR";
142 case AST_NULLABLE_TYPE: return "AST_NULLABLE_TYPE";
143 case ZEND_AST_FUNC_DECL: return "AST_FUNC_DECL";
144 case ZEND_AST_CLOSURE: return "AST_CLOSURE";
145 case ZEND_AST_METHOD: return "AST_METHOD";
146 case ZEND_AST_ARROW_FUNC: return "AST_ARROW_FUNC";
147 case ZEND_AST_CLASS: return "AST_CLASS";
148 case ZEND_AST_MAGIC_CONST: return "AST_MAGIC_CONST";
149 case ZEND_AST_TYPE: return "AST_TYPE";
150 case ZEND_AST_CALLABLE_CONVERT: return "AST_CALLABLE_CONVERT";
151 case ZEND_AST_VAR: return "AST_VAR";
152 case ZEND_AST_CONST: return "AST_CONST";
153 case ZEND_AST_UNPACK: return "AST_UNPACK";
154 case ZEND_AST_CAST: return "AST_CAST";
155 case ZEND_AST_EMPTY: return "AST_EMPTY";
156 case ZEND_AST_ISSET: return "AST_ISSET";
157 case ZEND_AST_SHELL_EXEC: return "AST_SHELL_EXEC";
158 case ZEND_AST_CLONE: return "AST_CLONE";
159 case ZEND_AST_EXIT: return "AST_EXIT";
160 case ZEND_AST_PRINT: return "AST_PRINT";
161 case ZEND_AST_INCLUDE_OR_EVAL: return "AST_INCLUDE_OR_EVAL";
162 case ZEND_AST_UNARY_OP: return "AST_UNARY_OP";
163 case ZEND_AST_PRE_INC: return "AST_PRE_INC";
164 case ZEND_AST_PRE_DEC: return "AST_PRE_DEC";
165 case ZEND_AST_POST_INC: return "AST_POST_INC";
166 case ZEND_AST_POST_DEC: return "AST_POST_DEC";
167 case ZEND_AST_YIELD_FROM: return "AST_YIELD_FROM";
168 case ZEND_AST_GLOBAL: return "AST_GLOBAL";
169 case ZEND_AST_UNSET: return "AST_UNSET";
170 case ZEND_AST_RETURN: return "AST_RETURN";
171 case ZEND_AST_LABEL: return "AST_LABEL";
172 case ZEND_AST_REF: return "AST_REF";
173 case ZEND_AST_HALT_COMPILER: return "AST_HALT_COMPILER";
174 case ZEND_AST_ECHO: return "AST_ECHO";
175 case ZEND_AST_THROW: return "AST_THROW";
176 case ZEND_AST_GOTO: return "AST_GOTO";
177 case ZEND_AST_BREAK: return "AST_BREAK";
178 case ZEND_AST_CONTINUE: return "AST_CONTINUE";
179 case ZEND_AST_CLASS_NAME: return "AST_CLASS_NAME";
180 case ZEND_AST_CLASS_CONST_GROUP: return "AST_CLASS_CONST_GROUP";
181 case ZEND_AST_DIM: return "AST_DIM";
182 case ZEND_AST_PROP: return "AST_PROP";
183 case ZEND_AST_NULLSAFE_PROP: return "AST_NULLSAFE_PROP";
184 case ZEND_AST_STATIC_PROP: return "AST_STATIC_PROP";
185 case ZEND_AST_CALL: return "AST_CALL";
186 case ZEND_AST_CLASS_CONST: return "AST_CLASS_CONST";
187 case ZEND_AST_ASSIGN: return "AST_ASSIGN";
188 case ZEND_AST_ASSIGN_REF: return "AST_ASSIGN_REF";
189 case ZEND_AST_ASSIGN_OP: return "AST_ASSIGN_OP";
190 case ZEND_AST_BINARY_OP: return "AST_BINARY_OP";
191 case ZEND_AST_ARRAY_ELEM: return "AST_ARRAY_ELEM";
192 case ZEND_AST_NEW: return "AST_NEW";
193 case ZEND_AST_INSTANCEOF: return "AST_INSTANCEOF";
194 case ZEND_AST_YIELD: return "AST_YIELD";
195 case ZEND_AST_STATIC: return "AST_STATIC";
196 case ZEND_AST_WHILE: return "AST_WHILE";
197 case ZEND_AST_DO_WHILE: return "AST_DO_WHILE";
198 case ZEND_AST_IF_ELEM: return "AST_IF_ELEM";
199 case ZEND_AST_SWITCH: return "AST_SWITCH";
200 case ZEND_AST_SWITCH_CASE: return "AST_SWITCH_CASE";
201 case ZEND_AST_DECLARE: return "AST_DECLARE";
202 case ZEND_AST_PROP_ELEM: return "AST_PROP_ELEM";
203 case ZEND_AST_PROP_GROUP: return "AST_PROP_GROUP";
204 case ZEND_AST_CONST_ELEM: return "AST_CONST_ELEM";
205 case ZEND_AST_USE_TRAIT: return "AST_USE_TRAIT";
206 case ZEND_AST_TRAIT_PRECEDENCE: return "AST_TRAIT_PRECEDENCE";
207 case ZEND_AST_METHOD_REFERENCE: return "AST_METHOD_REFERENCE";
208 case ZEND_AST_NAMESPACE: return "AST_NAMESPACE";
209 case ZEND_AST_USE_ELEM: return "AST_USE_ELEM";
210 case ZEND_AST_TRAIT_ALIAS: return "AST_TRAIT_ALIAS";
211 case ZEND_AST_GROUP_USE: return "AST_GROUP_USE";
212 case ZEND_AST_ATTRIBUTE: return "AST_ATTRIBUTE";
213 case ZEND_AST_MATCH: return "AST_MATCH";
214 case ZEND_AST_MATCH_ARM: return "AST_MATCH_ARM";
215 case ZEND_AST_NAMED_ARG: return "AST_NAMED_ARG";
216 case ZEND_AST_METHOD_CALL: return "AST_METHOD_CALL";
217 case ZEND_AST_NULLSAFE_METHOD_CALL: return "AST_NULLSAFE_METHOD_CALL";
218 case ZEND_AST_STATIC_CALL: return "AST_STATIC_CALL";
219 case ZEND_AST_CONDITIONAL: return "AST_CONDITIONAL";
220 case ZEND_AST_TRY: return "AST_TRY";
221 case ZEND_AST_CATCH: return "AST_CATCH";
222 case ZEND_AST_FOR: return "AST_FOR";
223 case ZEND_AST_FOREACH: return "AST_FOREACH";
224 case ZEND_AST_ENUM_CASE: return "AST_ENUM_CASE";
225 case ZEND_AST_PARAM: return "AST_PARAM";
226 }
227
228 return NULL;
229 }
230
ast_kind_child_name(zend_ast_kind kind,uint32_t child)231 zend_string *ast_kind_child_name(zend_ast_kind kind, uint32_t child) {
232 switch (kind) {
233 case AST_NAME:
234 case AST_CLOSURE_VAR:
235 case ZEND_AST_VAR:
236 case ZEND_AST_CONST:
237 case ZEND_AST_LABEL:
238 switch (child) {
239 case 0: return AST_STR(str_name);
240 }
241 return NULL;
242 case AST_NULLABLE_TYPE:
243 switch (child) {
244 case 0: return AST_STR(str_type);
245 }
246 return NULL;
247 case ZEND_AST_FUNC_DECL:
248 case ZEND_AST_CLOSURE:
249 case ZEND_AST_METHOD:
250 case ZEND_AST_ARROW_FUNC:
251 switch (child) {
252 case 0: return AST_STR(str_params);
253 case 1: return AST_STR(str_uses);
254 case 2: return AST_STR(str_stmts);
255 case 3: return AST_STR(str_returnType);
256 case 4: return AST_STR(str_attributes);
257 }
258 return NULL;
259 case ZEND_AST_CLASS:
260 switch (child) {
261 case 0: return AST_STR(str_extends);
262 case 1: return AST_STR(str_implements);
263 case 2: return AST_STR(str_stmts);
264 case 3: return AST_STR(str_attributes);
265 case 4: return AST_STR(str_type);
266 }
267 return NULL;
268 case ZEND_AST_MAGIC_CONST:
269 case ZEND_AST_TYPE:
270 case ZEND_AST_CALLABLE_CONVERT:
271 return NULL;
272 case ZEND_AST_UNPACK:
273 case ZEND_AST_CAST:
274 case ZEND_AST_EMPTY:
275 case ZEND_AST_SHELL_EXEC:
276 case ZEND_AST_CLONE:
277 case ZEND_AST_EXIT:
278 case ZEND_AST_PRINT:
279 case ZEND_AST_INCLUDE_OR_EVAL:
280 case ZEND_AST_UNARY_OP:
281 case ZEND_AST_YIELD_FROM:
282 case ZEND_AST_RETURN:
283 case ZEND_AST_ECHO:
284 case ZEND_AST_THROW:
285 switch (child) {
286 case 0: return AST_STR(str_expr);
287 }
288 return NULL;
289 case ZEND_AST_ISSET:
290 case ZEND_AST_PRE_INC:
291 case ZEND_AST_PRE_DEC:
292 case ZEND_AST_POST_INC:
293 case ZEND_AST_POST_DEC:
294 case ZEND_AST_GLOBAL:
295 case ZEND_AST_UNSET:
296 case ZEND_AST_REF:
297 switch (child) {
298 case 0: return AST_STR(str_var);
299 }
300 return NULL;
301 case ZEND_AST_HALT_COMPILER:
302 switch (child) {
303 case 0: return AST_STR(str_offset);
304 }
305 return NULL;
306 case ZEND_AST_GOTO:
307 switch (child) {
308 case 0: return AST_STR(str_label);
309 }
310 return NULL;
311 case ZEND_AST_BREAK:
312 case ZEND_AST_CONTINUE:
313 switch (child) {
314 case 0: return AST_STR(str_depth);
315 }
316 return NULL;
317 case ZEND_AST_CLASS_NAME:
318 switch (child) {
319 case 0: return AST_STR(str_class);
320 }
321 return NULL;
322 case ZEND_AST_CLASS_CONST_GROUP:
323 switch (child) {
324 case 0: return AST_STR(str_const);
325 case 1: return AST_STR(str_attributes);
326 case 2: return AST_STR(str_type);
327 }
328 return NULL;
329 case ZEND_AST_DIM:
330 switch (child) {
331 case 0: return AST_STR(str_expr);
332 case 1: return AST_STR(str_dim);
333 }
334 return NULL;
335 case ZEND_AST_PROP:
336 case ZEND_AST_NULLSAFE_PROP:
337 switch (child) {
338 case 0: return AST_STR(str_expr);
339 case 1: return AST_STR(str_prop);
340 }
341 return NULL;
342 case ZEND_AST_STATIC_PROP:
343 switch (child) {
344 case 0: return AST_STR(str_class);
345 case 1: return AST_STR(str_prop);
346 }
347 return NULL;
348 case ZEND_AST_CALL:
349 switch (child) {
350 case 0: return AST_STR(str_expr);
351 case 1: return AST_STR(str_args);
352 }
353 return NULL;
354 case ZEND_AST_CLASS_CONST:
355 switch (child) {
356 case 0: return AST_STR(str_class);
357 case 1: return AST_STR(str_const);
358 }
359 return NULL;
360 case ZEND_AST_ASSIGN:
361 case ZEND_AST_ASSIGN_REF:
362 case ZEND_AST_ASSIGN_OP:
363 switch (child) {
364 case 0: return AST_STR(str_var);
365 case 1: return AST_STR(str_expr);
366 }
367 return NULL;
368 case ZEND_AST_BINARY_OP:
369 switch (child) {
370 case 0: return AST_STR(str_left);
371 case 1: return AST_STR(str_right);
372 }
373 return NULL;
374 case ZEND_AST_ARRAY_ELEM:
375 case ZEND_AST_YIELD:
376 switch (child) {
377 case 0: return AST_STR(str_value);
378 case 1: return AST_STR(str_key);
379 }
380 return NULL;
381 case ZEND_AST_NEW:
382 case ZEND_AST_ATTRIBUTE:
383 switch (child) {
384 case 0: return AST_STR(str_class);
385 case 1: return AST_STR(str_args);
386 }
387 return NULL;
388 case ZEND_AST_INSTANCEOF:
389 switch (child) {
390 case 0: return AST_STR(str_expr);
391 case 1: return AST_STR(str_class);
392 }
393 return NULL;
394 case ZEND_AST_STATIC:
395 switch (child) {
396 case 0: return AST_STR(str_var);
397 case 1: return AST_STR(str_default);
398 }
399 return NULL;
400 case ZEND_AST_WHILE:
401 case ZEND_AST_IF_ELEM:
402 case ZEND_AST_SWITCH:
403 case ZEND_AST_SWITCH_CASE:
404 case ZEND_AST_MATCH:
405 switch (child) {
406 case 0: return AST_STR(str_cond);
407 case 1: return AST_STR(str_stmts);
408 }
409 return NULL;
410 case ZEND_AST_DO_WHILE:
411 switch (child) {
412 case 0: return AST_STR(str_stmts);
413 case 1: return AST_STR(str_cond);
414 }
415 return NULL;
416 case ZEND_AST_DECLARE:
417 switch (child) {
418 case 0: return AST_STR(str_declares);
419 case 1: return AST_STR(str_stmts);
420 }
421 return NULL;
422 case ZEND_AST_PROP_ELEM:
423 switch (child) {
424 case 0: return AST_STR(str_name);
425 case 1: return AST_STR(str_default);
426 case 2: return AST_STR(str_docComment);
427 }
428 return NULL;
429 case ZEND_AST_PROP_GROUP:
430 switch (child) {
431 case 0: return AST_STR(str_type);
432 case 1: return AST_STR(str_props);
433 case 2: return AST_STR(str_attributes);
434 }
435 return NULL;
436 case ZEND_AST_CONST_ELEM:
437 switch (child) {
438 case 0: return AST_STR(str_name);
439 case 1: return AST_STR(str_value);
440 case 2: return AST_STR(str_docComment);
441 }
442 return NULL;
443 case ZEND_AST_USE_TRAIT:
444 switch (child) {
445 case 0: return AST_STR(str_traits);
446 case 1: return AST_STR(str_adaptations);
447 }
448 return NULL;
449 case ZEND_AST_TRAIT_PRECEDENCE:
450 switch (child) {
451 case 0: return AST_STR(str_method);
452 case 1: return AST_STR(str_insteadof);
453 }
454 return NULL;
455 case ZEND_AST_METHOD_REFERENCE:
456 switch (child) {
457 case 0: return AST_STR(str_class);
458 case 1: return AST_STR(str_method);
459 }
460 return NULL;
461 case ZEND_AST_NAMESPACE:
462 switch (child) {
463 case 0: return AST_STR(str_name);
464 case 1: return AST_STR(str_stmts);
465 }
466 return NULL;
467 case ZEND_AST_USE_ELEM:
468 switch (child) {
469 case 0: return AST_STR(str_name);
470 case 1: return AST_STR(str_alias);
471 }
472 return NULL;
473 case ZEND_AST_TRAIT_ALIAS:
474 switch (child) {
475 case 0: return AST_STR(str_method);
476 case 1: return AST_STR(str_alias);
477 }
478 return NULL;
479 case ZEND_AST_GROUP_USE:
480 switch (child) {
481 case 0: return AST_STR(str_prefix);
482 case 1: return AST_STR(str_uses);
483 }
484 return NULL;
485 case ZEND_AST_MATCH_ARM:
486 switch (child) {
487 case 0: return AST_STR(str_cond);
488 case 1: return AST_STR(str_expr);
489 }
490 return NULL;
491 case ZEND_AST_NAMED_ARG:
492 switch (child) {
493 case 0: return AST_STR(str_name);
494 case 1: return AST_STR(str_expr);
495 }
496 return NULL;
497 case ZEND_AST_METHOD_CALL:
498 case ZEND_AST_NULLSAFE_METHOD_CALL:
499 switch (child) {
500 case 0: return AST_STR(str_expr);
501 case 1: return AST_STR(str_method);
502 case 2: return AST_STR(str_args);
503 }
504 return NULL;
505 case ZEND_AST_STATIC_CALL:
506 switch (child) {
507 case 0: return AST_STR(str_class);
508 case 1: return AST_STR(str_method);
509 case 2: return AST_STR(str_args);
510 }
511 return NULL;
512 case ZEND_AST_CONDITIONAL:
513 switch (child) {
514 case 0: return AST_STR(str_cond);
515 case 1: return AST_STR(str_true);
516 case 2: return AST_STR(str_false);
517 }
518 return NULL;
519 case ZEND_AST_TRY:
520 switch (child) {
521 case 0: return AST_STR(str_try);
522 case 1: return AST_STR(str_catches);
523 case 2: return AST_STR(str_finally);
524 }
525 return NULL;
526 case ZEND_AST_CATCH:
527 switch (child) {
528 case 0: return AST_STR(str_class);
529 case 1: return AST_STR(str_var);
530 case 2: return AST_STR(str_stmts);
531 }
532 return NULL;
533 case ZEND_AST_FOR:
534 switch (child) {
535 case 0: return AST_STR(str_init);
536 case 1: return AST_STR(str_cond);
537 case 2: return AST_STR(str_loop);
538 case 3: return AST_STR(str_stmts);
539 }
540 return NULL;
541 case ZEND_AST_FOREACH:
542 switch (child) {
543 case 0: return AST_STR(str_expr);
544 case 1: return AST_STR(str_value);
545 case 2: return AST_STR(str_key);
546 case 3: return AST_STR(str_stmts);
547 }
548 return NULL;
549 case ZEND_AST_ENUM_CASE:
550 switch (child) {
551 case 0: return AST_STR(str_name);
552 case 1: return AST_STR(str_expr);
553 case 2: return AST_STR(str_docComment);
554 case 3: return AST_STR(str_attributes);
555 }
556 return NULL;
557 case ZEND_AST_PARAM:
558 switch (child) {
559 case 0: return AST_STR(str_type);
560 case 1: return AST_STR(str_name);
561 case 2: return AST_STR(str_default);
562 case 3: return AST_STR(str_attributes);
563 case 4: return AST_STR(str_docComment);
564 }
565 return NULL;
566 }
567
568 return NULL;
569 }
570
ast_register_kind_constants(INIT_FUNC_ARGS)571 void ast_register_kind_constants(INIT_FUNC_ARGS) {
572 REGISTER_NS_LONG_CONSTANT("ast", "AST_ARG_LIST", ZEND_AST_ARG_LIST, CONST_CS | CONST_PERSISTENT);
573 REGISTER_NS_LONG_CONSTANT("ast", "AST_LIST", ZEND_AST_LIST, CONST_CS | CONST_PERSISTENT);
574 REGISTER_NS_LONG_CONSTANT("ast", "AST_ARRAY", ZEND_AST_ARRAY, CONST_CS | CONST_PERSISTENT);
575 REGISTER_NS_LONG_CONSTANT("ast", "AST_ENCAPS_LIST", ZEND_AST_ENCAPS_LIST, CONST_CS | CONST_PERSISTENT);
576 REGISTER_NS_LONG_CONSTANT("ast", "AST_EXPR_LIST", ZEND_AST_EXPR_LIST, CONST_CS | CONST_PERSISTENT);
577 REGISTER_NS_LONG_CONSTANT("ast", "AST_STMT_LIST", ZEND_AST_STMT_LIST, CONST_CS | CONST_PERSISTENT);
578 REGISTER_NS_LONG_CONSTANT("ast", "AST_IF", ZEND_AST_IF, CONST_CS | CONST_PERSISTENT);
579 REGISTER_NS_LONG_CONSTANT("ast", "AST_SWITCH_LIST", ZEND_AST_SWITCH_LIST, CONST_CS | CONST_PERSISTENT);
580 REGISTER_NS_LONG_CONSTANT("ast", "AST_CATCH_LIST", ZEND_AST_CATCH_LIST, CONST_CS | CONST_PERSISTENT);
581 REGISTER_NS_LONG_CONSTANT("ast", "AST_PARAM_LIST", ZEND_AST_PARAM_LIST, CONST_CS | CONST_PERSISTENT);
582 REGISTER_NS_LONG_CONSTANT("ast", "AST_CLOSURE_USES", ZEND_AST_CLOSURE_USES, CONST_CS | CONST_PERSISTENT);
583 REGISTER_NS_LONG_CONSTANT("ast", "AST_PROP_DECL", ZEND_AST_PROP_DECL, CONST_CS | CONST_PERSISTENT);
584 REGISTER_NS_LONG_CONSTANT("ast", "AST_CONST_DECL", ZEND_AST_CONST_DECL, CONST_CS | CONST_PERSISTENT);
585 REGISTER_NS_LONG_CONSTANT("ast", "AST_CLASS_CONST_DECL", ZEND_AST_CLASS_CONST_DECL, CONST_CS | CONST_PERSISTENT);
586 REGISTER_NS_LONG_CONSTANT("ast", "AST_NAME_LIST", ZEND_AST_NAME_LIST, CONST_CS | CONST_PERSISTENT);
587 REGISTER_NS_LONG_CONSTANT("ast", "AST_TRAIT_ADAPTATIONS", ZEND_AST_TRAIT_ADAPTATIONS, CONST_CS | CONST_PERSISTENT);
588 REGISTER_NS_LONG_CONSTANT("ast", "AST_USE", ZEND_AST_USE, CONST_CS | CONST_PERSISTENT);
589 REGISTER_NS_LONG_CONSTANT("ast", "AST_TYPE_UNION", ZEND_AST_TYPE_UNION, CONST_CS | CONST_PERSISTENT);
590 REGISTER_NS_LONG_CONSTANT("ast", "AST_TYPE_INTERSECTION", ZEND_AST_TYPE_INTERSECTION, CONST_CS | CONST_PERSISTENT);
591 REGISTER_NS_LONG_CONSTANT("ast", "AST_ATTRIBUTE_LIST", ZEND_AST_ATTRIBUTE_LIST, CONST_CS | CONST_PERSISTENT);
592 REGISTER_NS_LONG_CONSTANT("ast", "AST_ATTRIBUTE_GROUP", ZEND_AST_ATTRIBUTE_GROUP, CONST_CS | CONST_PERSISTENT);
593 REGISTER_NS_LONG_CONSTANT("ast", "AST_MATCH_ARM_LIST", ZEND_AST_MATCH_ARM_LIST, CONST_CS | CONST_PERSISTENT);
594 REGISTER_NS_LONG_CONSTANT("ast", "AST_NAME", AST_NAME, CONST_CS | CONST_PERSISTENT);
595 REGISTER_NS_LONG_CONSTANT("ast", "AST_CLOSURE_VAR", AST_CLOSURE_VAR, CONST_CS | CONST_PERSISTENT);
596 REGISTER_NS_LONG_CONSTANT("ast", "AST_NULLABLE_TYPE", AST_NULLABLE_TYPE, CONST_CS | CONST_PERSISTENT);
597 REGISTER_NS_LONG_CONSTANT("ast", "AST_FUNC_DECL", ZEND_AST_FUNC_DECL, CONST_CS | CONST_PERSISTENT);
598 REGISTER_NS_LONG_CONSTANT("ast", "AST_CLOSURE", ZEND_AST_CLOSURE, CONST_CS | CONST_PERSISTENT);
599 REGISTER_NS_LONG_CONSTANT("ast", "AST_METHOD", ZEND_AST_METHOD, CONST_CS | CONST_PERSISTENT);
600 REGISTER_NS_LONG_CONSTANT("ast", "AST_ARROW_FUNC", ZEND_AST_ARROW_FUNC, CONST_CS | CONST_PERSISTENT);
601 REGISTER_NS_LONG_CONSTANT("ast", "AST_CLASS", ZEND_AST_CLASS, CONST_CS | CONST_PERSISTENT);
602 REGISTER_NS_LONG_CONSTANT("ast", "AST_MAGIC_CONST", ZEND_AST_MAGIC_CONST, CONST_CS | CONST_PERSISTENT);
603 REGISTER_NS_LONG_CONSTANT("ast", "AST_TYPE", ZEND_AST_TYPE, CONST_CS | CONST_PERSISTENT);
604 REGISTER_NS_LONG_CONSTANT("ast", "AST_CALLABLE_CONVERT", ZEND_AST_CALLABLE_CONVERT, CONST_CS | CONST_PERSISTENT);
605 REGISTER_NS_LONG_CONSTANT("ast", "AST_VAR", ZEND_AST_VAR, CONST_CS | CONST_PERSISTENT);
606 REGISTER_NS_LONG_CONSTANT("ast", "AST_CONST", ZEND_AST_CONST, CONST_CS | CONST_PERSISTENT);
607 REGISTER_NS_LONG_CONSTANT("ast", "AST_UNPACK", ZEND_AST_UNPACK, CONST_CS | CONST_PERSISTENT);
608 REGISTER_NS_LONG_CONSTANT("ast", "AST_CAST", ZEND_AST_CAST, CONST_CS | CONST_PERSISTENT);
609 REGISTER_NS_LONG_CONSTANT("ast", "AST_EMPTY", ZEND_AST_EMPTY, CONST_CS | CONST_PERSISTENT);
610 REGISTER_NS_LONG_CONSTANT("ast", "AST_ISSET", ZEND_AST_ISSET, CONST_CS | CONST_PERSISTENT);
611 REGISTER_NS_LONG_CONSTANT("ast", "AST_SHELL_EXEC", ZEND_AST_SHELL_EXEC, CONST_CS | CONST_PERSISTENT);
612 REGISTER_NS_LONG_CONSTANT("ast", "AST_CLONE", ZEND_AST_CLONE, CONST_CS | CONST_PERSISTENT);
613 REGISTER_NS_LONG_CONSTANT("ast", "AST_EXIT", ZEND_AST_EXIT, CONST_CS | CONST_PERSISTENT);
614 REGISTER_NS_LONG_CONSTANT("ast", "AST_PRINT", ZEND_AST_PRINT, CONST_CS | CONST_PERSISTENT);
615 REGISTER_NS_LONG_CONSTANT("ast", "AST_INCLUDE_OR_EVAL", ZEND_AST_INCLUDE_OR_EVAL, CONST_CS | CONST_PERSISTENT);
616 REGISTER_NS_LONG_CONSTANT("ast", "AST_UNARY_OP", ZEND_AST_UNARY_OP, CONST_CS | CONST_PERSISTENT);
617 REGISTER_NS_LONG_CONSTANT("ast", "AST_PRE_INC", ZEND_AST_PRE_INC, CONST_CS | CONST_PERSISTENT);
618 REGISTER_NS_LONG_CONSTANT("ast", "AST_PRE_DEC", ZEND_AST_PRE_DEC, CONST_CS | CONST_PERSISTENT);
619 REGISTER_NS_LONG_CONSTANT("ast", "AST_POST_INC", ZEND_AST_POST_INC, CONST_CS | CONST_PERSISTENT);
620 REGISTER_NS_LONG_CONSTANT("ast", "AST_POST_DEC", ZEND_AST_POST_DEC, CONST_CS | CONST_PERSISTENT);
621 REGISTER_NS_LONG_CONSTANT("ast", "AST_YIELD_FROM", ZEND_AST_YIELD_FROM, CONST_CS | CONST_PERSISTENT);
622 REGISTER_NS_LONG_CONSTANT("ast", "AST_GLOBAL", ZEND_AST_GLOBAL, CONST_CS | CONST_PERSISTENT);
623 REGISTER_NS_LONG_CONSTANT("ast", "AST_UNSET", ZEND_AST_UNSET, CONST_CS | CONST_PERSISTENT);
624 REGISTER_NS_LONG_CONSTANT("ast", "AST_RETURN", ZEND_AST_RETURN, CONST_CS | CONST_PERSISTENT);
625 REGISTER_NS_LONG_CONSTANT("ast", "AST_LABEL", ZEND_AST_LABEL, CONST_CS | CONST_PERSISTENT);
626 REGISTER_NS_LONG_CONSTANT("ast", "AST_REF", ZEND_AST_REF, CONST_CS | CONST_PERSISTENT);
627 REGISTER_NS_LONG_CONSTANT("ast", "AST_HALT_COMPILER", ZEND_AST_HALT_COMPILER, CONST_CS | CONST_PERSISTENT);
628 REGISTER_NS_LONG_CONSTANT("ast", "AST_ECHO", ZEND_AST_ECHO, CONST_CS | CONST_PERSISTENT);
629 REGISTER_NS_LONG_CONSTANT("ast", "AST_THROW", ZEND_AST_THROW, CONST_CS | CONST_PERSISTENT);
630 REGISTER_NS_LONG_CONSTANT("ast", "AST_GOTO", ZEND_AST_GOTO, CONST_CS | CONST_PERSISTENT);
631 REGISTER_NS_LONG_CONSTANT("ast", "AST_BREAK", ZEND_AST_BREAK, CONST_CS | CONST_PERSISTENT);
632 REGISTER_NS_LONG_CONSTANT("ast", "AST_CONTINUE", ZEND_AST_CONTINUE, CONST_CS | CONST_PERSISTENT);
633 REGISTER_NS_LONG_CONSTANT("ast", "AST_CLASS_NAME", ZEND_AST_CLASS_NAME, CONST_CS | CONST_PERSISTENT);
634 REGISTER_NS_LONG_CONSTANT("ast", "AST_CLASS_CONST_GROUP", ZEND_AST_CLASS_CONST_GROUP, CONST_CS | CONST_PERSISTENT);
635 REGISTER_NS_LONG_CONSTANT("ast", "AST_DIM", ZEND_AST_DIM, CONST_CS | CONST_PERSISTENT);
636 REGISTER_NS_LONG_CONSTANT("ast", "AST_PROP", ZEND_AST_PROP, CONST_CS | CONST_PERSISTENT);
637 REGISTER_NS_LONG_CONSTANT("ast", "AST_NULLSAFE_PROP", ZEND_AST_NULLSAFE_PROP, CONST_CS | CONST_PERSISTENT);
638 REGISTER_NS_LONG_CONSTANT("ast", "AST_STATIC_PROP", ZEND_AST_STATIC_PROP, CONST_CS | CONST_PERSISTENT);
639 REGISTER_NS_LONG_CONSTANT("ast", "AST_CALL", ZEND_AST_CALL, CONST_CS | CONST_PERSISTENT);
640 REGISTER_NS_LONG_CONSTANT("ast", "AST_CLASS_CONST", ZEND_AST_CLASS_CONST, CONST_CS | CONST_PERSISTENT);
641 REGISTER_NS_LONG_CONSTANT("ast", "AST_ASSIGN", ZEND_AST_ASSIGN, CONST_CS | CONST_PERSISTENT);
642 REGISTER_NS_LONG_CONSTANT("ast", "AST_ASSIGN_REF", ZEND_AST_ASSIGN_REF, CONST_CS | CONST_PERSISTENT);
643 REGISTER_NS_LONG_CONSTANT("ast", "AST_ASSIGN_OP", ZEND_AST_ASSIGN_OP, CONST_CS | CONST_PERSISTENT);
644 REGISTER_NS_LONG_CONSTANT("ast", "AST_BINARY_OP", ZEND_AST_BINARY_OP, CONST_CS | CONST_PERSISTENT);
645 REGISTER_NS_LONG_CONSTANT("ast", "AST_ARRAY_ELEM", ZEND_AST_ARRAY_ELEM, CONST_CS | CONST_PERSISTENT);
646 REGISTER_NS_LONG_CONSTANT("ast", "AST_NEW", ZEND_AST_NEW, CONST_CS | CONST_PERSISTENT);
647 REGISTER_NS_LONG_CONSTANT("ast", "AST_INSTANCEOF", ZEND_AST_INSTANCEOF, CONST_CS | CONST_PERSISTENT);
648 REGISTER_NS_LONG_CONSTANT("ast", "AST_YIELD", ZEND_AST_YIELD, CONST_CS | CONST_PERSISTENT);
649 REGISTER_NS_LONG_CONSTANT("ast", "AST_STATIC", ZEND_AST_STATIC, CONST_CS | CONST_PERSISTENT);
650 REGISTER_NS_LONG_CONSTANT("ast", "AST_WHILE", ZEND_AST_WHILE, CONST_CS | CONST_PERSISTENT);
651 REGISTER_NS_LONG_CONSTANT("ast", "AST_DO_WHILE", ZEND_AST_DO_WHILE, CONST_CS | CONST_PERSISTENT);
652 REGISTER_NS_LONG_CONSTANT("ast", "AST_IF_ELEM", ZEND_AST_IF_ELEM, CONST_CS | CONST_PERSISTENT);
653 REGISTER_NS_LONG_CONSTANT("ast", "AST_SWITCH", ZEND_AST_SWITCH, CONST_CS | CONST_PERSISTENT);
654 REGISTER_NS_LONG_CONSTANT("ast", "AST_SWITCH_CASE", ZEND_AST_SWITCH_CASE, CONST_CS | CONST_PERSISTENT);
655 REGISTER_NS_LONG_CONSTANT("ast", "AST_DECLARE", ZEND_AST_DECLARE, CONST_CS | CONST_PERSISTENT);
656 REGISTER_NS_LONG_CONSTANT("ast", "AST_PROP_ELEM", ZEND_AST_PROP_ELEM, CONST_CS | CONST_PERSISTENT);
657 REGISTER_NS_LONG_CONSTANT("ast", "AST_PROP_GROUP", ZEND_AST_PROP_GROUP, CONST_CS | CONST_PERSISTENT);
658 REGISTER_NS_LONG_CONSTANT("ast", "AST_CONST_ELEM", ZEND_AST_CONST_ELEM, CONST_CS | CONST_PERSISTENT);
659 REGISTER_NS_LONG_CONSTANT("ast", "AST_USE_TRAIT", ZEND_AST_USE_TRAIT, CONST_CS | CONST_PERSISTENT);
660 REGISTER_NS_LONG_CONSTANT("ast", "AST_TRAIT_PRECEDENCE", ZEND_AST_TRAIT_PRECEDENCE, CONST_CS | CONST_PERSISTENT);
661 REGISTER_NS_LONG_CONSTANT("ast", "AST_METHOD_REFERENCE", ZEND_AST_METHOD_REFERENCE, CONST_CS | CONST_PERSISTENT);
662 REGISTER_NS_LONG_CONSTANT("ast", "AST_NAMESPACE", ZEND_AST_NAMESPACE, CONST_CS | CONST_PERSISTENT);
663 REGISTER_NS_LONG_CONSTANT("ast", "AST_USE_ELEM", ZEND_AST_USE_ELEM, CONST_CS | CONST_PERSISTENT);
664 REGISTER_NS_LONG_CONSTANT("ast", "AST_TRAIT_ALIAS", ZEND_AST_TRAIT_ALIAS, CONST_CS | CONST_PERSISTENT);
665 REGISTER_NS_LONG_CONSTANT("ast", "AST_GROUP_USE", ZEND_AST_GROUP_USE, CONST_CS | CONST_PERSISTENT);
666 REGISTER_NS_LONG_CONSTANT("ast", "AST_ATTRIBUTE", ZEND_AST_ATTRIBUTE, CONST_CS | CONST_PERSISTENT);
667 REGISTER_NS_LONG_CONSTANT("ast", "AST_MATCH", ZEND_AST_MATCH, CONST_CS | CONST_PERSISTENT);
668 REGISTER_NS_LONG_CONSTANT("ast", "AST_MATCH_ARM", ZEND_AST_MATCH_ARM, CONST_CS | CONST_PERSISTENT);
669 REGISTER_NS_LONG_CONSTANT("ast", "AST_NAMED_ARG", ZEND_AST_NAMED_ARG, CONST_CS | CONST_PERSISTENT);
670 REGISTER_NS_LONG_CONSTANT("ast", "AST_METHOD_CALL", ZEND_AST_METHOD_CALL, CONST_CS | CONST_PERSISTENT);
671 REGISTER_NS_LONG_CONSTANT("ast", "AST_NULLSAFE_METHOD_CALL", ZEND_AST_NULLSAFE_METHOD_CALL, CONST_CS | CONST_PERSISTENT);
672 REGISTER_NS_LONG_CONSTANT("ast", "AST_STATIC_CALL", ZEND_AST_STATIC_CALL, CONST_CS | CONST_PERSISTENT);
673 REGISTER_NS_LONG_CONSTANT("ast", "AST_CONDITIONAL", ZEND_AST_CONDITIONAL, CONST_CS | CONST_PERSISTENT);
674 REGISTER_NS_LONG_CONSTANT("ast", "AST_TRY", ZEND_AST_TRY, CONST_CS | CONST_PERSISTENT);
675 REGISTER_NS_LONG_CONSTANT("ast", "AST_CATCH", ZEND_AST_CATCH, CONST_CS | CONST_PERSISTENT);
676 REGISTER_NS_LONG_CONSTANT("ast", "AST_FOR", ZEND_AST_FOR, CONST_CS | CONST_PERSISTENT);
677 REGISTER_NS_LONG_CONSTANT("ast", "AST_FOREACH", ZEND_AST_FOREACH, CONST_CS | CONST_PERSISTENT);
678 REGISTER_NS_LONG_CONSTANT("ast", "AST_ENUM_CASE", ZEND_AST_ENUM_CASE, CONST_CS | CONST_PERSISTENT);
679 REGISTER_NS_LONG_CONSTANT("ast", "AST_PARAM", ZEND_AST_PARAM, CONST_CS | CONST_PERSISTENT);
680 }
681