xref: /php-ast/ast_data.c (revision 71f6a54d)
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