php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
zend_ast.h
Go to the documentation of this file.
1/*
2 +----------------------------------------------------------------------+
3 | Zend Engine |
4 +----------------------------------------------------------------------+
5 | Copyright (c) Zend Technologies Ltd. (http://www.zend.com) |
6 +----------------------------------------------------------------------+
7 | This source file is subject to version 2.00 of the Zend license, |
8 | that is bundled with this package in the file LICENSE, and is |
9 | available through the world-wide-web at the following url: |
10 | http://www.zend.com/license/2_00.txt. |
11 | If you did not receive a copy of the Zend license and are unable to |
12 | obtain it through the world-wide-web, please send a note to |
13 | license@zend.com so we can mail you a copy immediately. |
14 +----------------------------------------------------------------------+
15 | Authors: Bob Weinand <bwoebi@php.net> |
16 | Dmitry Stogov <dmitry@php.net> |
17 | Nikita Popov <nikic@php.net> |
18 +----------------------------------------------------------------------+
19*/
20
21#ifndef ZEND_AST_H
22#define ZEND_AST_H
23
24#include "zend_types.h"
25
26#ifndef ZEND_AST_SPEC
27# define ZEND_AST_SPEC 1
28#endif
29
30#define ZEND_AST_SPECIAL_SHIFT 6
31#define ZEND_AST_IS_LIST_SHIFT 7
32#define ZEND_AST_NUM_CHILDREN_SHIFT 8
33
35 /* special nodes */
39
40 /* declaration nodes */
47
48 /* list nodes */
71
72 /* 0 child nodes */
77
78 /* 1 child node */
100
113
114 /* 2 child nodes */
135
155
156 /* 3 child nodes */
161
167
168 // Pseudo node for initializing enums
170
171 /* 4 child nodes */
176
177 /* 5 child nodes */
178
179 /* 6 child nodes */
181};
182
183typedef uint16_t zend_ast_kind;
184typedef uint16_t zend_ast_attr;
185
186struct _zend_ast {
187 zend_ast_kind kind; /* Type of the node (ZEND_AST_* enum constant) */
188 zend_ast_attr attr; /* Additional attribute, use depending on node type */
189 uint32_t lineno; /* Line number */
190 zend_ast *child[1]; /* Array of children (using struct hack) */
191};
192
193/* Same as zend_ast, but with children count, which is updated dynamically */
201
202/* Lineno is stored in val.u2.lineno */
208
209/* Separate structure for function and class declaration, as they need extra information. */
220
223
229
232
233#if ZEND_AST_SPEC
234# define ZEND_AST_SPEC_CALL(name, ...) \
235 ZEND_EXPAND_VA(ZEND_AST_SPEC_CALL_(name, __VA_ARGS__, _n, _5, _4, _3, _2, _1, _0)(__VA_ARGS__))
236# define ZEND_AST_SPEC_CALL_(name, _, _6, _5, _4, _3, _2, _1, suffix, ...) \
237 name ## suffix
238# define ZEND_AST_SPEC_CALL_EX(name, ...) \
239 ZEND_EXPAND_VA(ZEND_AST_SPEC_CALL_EX_(name, __VA_ARGS__, _n, _5, _4, _3, _2, _1, _0)(__VA_ARGS__))
240# define ZEND_AST_SPEC_CALL_EX_(name, _, _7, _6, _5, _4, _3, _2, _1, suffix, ...) \
241 name ## suffix
242
249
251/* Need to use unsigned args to avoid va promotion UB. */
252ZEND_API zend_ast * zend_ast_create_n(unsigned kind, ...);
254
255static zend_always_inline zend_ast * zend_ast_create_ex_0(zend_ast_kind kind, zend_ast_attr attr) {
257 ast->attr = attr;
258 return ast;
259}
260static zend_always_inline zend_ast * zend_ast_create_ex_1(zend_ast_kind kind, zend_ast_attr attr, zend_ast *child) {
261 zend_ast *ast = zend_ast_create_1(kind, child);
262 ast->attr = attr;
263 return ast;
264}
265static zend_always_inline zend_ast * zend_ast_create_ex_2(zend_ast_kind kind, zend_ast_attr attr, zend_ast *child1, zend_ast *child2) {
266 zend_ast *ast = zend_ast_create_2(kind, child1, child2);
267 ast->attr = attr;
268 return ast;
269}
270static zend_always_inline zend_ast * zend_ast_create_ex_3(zend_ast_kind kind, zend_ast_attr attr, zend_ast *child1, zend_ast *child2, zend_ast *child3) {
271 zend_ast *ast = zend_ast_create_3(kind, child1, child2, child3);
272 ast->attr = attr;
273 return ast;
274}
275static zend_always_inline zend_ast * zend_ast_create_ex_4(zend_ast_kind kind, zend_ast_attr attr, zend_ast *child1, zend_ast *child2, zend_ast *child3, zend_ast *child4) {
276 zend_ast *ast = zend_ast_create_4(kind, child1, child2, child3, child4);
277 ast->attr = attr;
278 return ast;
279}
280static zend_always_inline zend_ast * zend_ast_create_ex_5(zend_ast_kind kind, zend_ast_attr attr, zend_ast *child1, zend_ast *child2, zend_ast *child3, zend_ast *child4, zend_ast *child5) {
281 zend_ast *ast = zend_ast_create_5(kind, child1, child2, child3, child4, child5);
282 ast->attr = attr;
283 return ast;
284}
285
289
290# define zend_ast_create(...) \
291 ZEND_AST_SPEC_CALL(zend_ast_create, __VA_ARGS__)
292# define zend_ast_create_ex(...) \
293 ZEND_AST_SPEC_CALL_EX(zend_ast_create_ex, __VA_ARGS__)
294# define zend_ast_create_list(init_children, ...) \
295 ZEND_AST_SPEC_CALL(zend_ast_create_list, __VA_ARGS__)
296
297#else
300ZEND_API zend_ast *zend_ast_create_list(uint32_t init_children, zend_ast_kind kind, ...);
301#endif
302
304
306 zend_ast_kind kind, uint32_t flags, uint32_t start_lineno, zend_string *doc_comment,
307 zend_string *name, zend_ast *child0, zend_ast *child1, zend_ast *child2, zend_ast *child3, zend_ast *child4
308);
309
310typedef struct {
313
316ZEND_API zend_string *zend_ast_export(const char *prefix, zend_ast *ast, const char *suffix);
317
321
322typedef void (*zend_ast_apply_func)(zend_ast **ast_ptr, void *context);
324
325static zend_always_inline size_t zend_ast_size(uint32_t children) {
326 return XtOffsetOf(zend_ast, child) + (sizeof(zend_ast *) * children);
327}
328
329static zend_always_inline bool zend_ast_is_special(zend_ast *ast) {
330 return (ast->kind >> ZEND_AST_SPECIAL_SHIFT) & 1;
331}
332
333static zend_always_inline bool zend_ast_is_list(zend_ast *ast) {
334 return (ast->kind >> ZEND_AST_IS_LIST_SHIFT) & 1;
335}
336static zend_always_inline zend_ast_list *zend_ast_get_list(zend_ast *ast) {
337 ZEND_ASSERT(zend_ast_is_list(ast));
338 return (zend_ast_list *) ast;
339}
340
341static zend_always_inline zval *zend_ast_get_zval(zend_ast *ast) {
343 return &((zend_ast_zval *) ast)->val;
344}
345static zend_always_inline zend_string *zend_ast_get_str(zend_ast *ast) {
346 zval *zv = zend_ast_get_zval(ast);
348 return Z_STR_P(zv);
349}
350
351static zend_always_inline zend_string *zend_ast_get_constant_name(zend_ast *ast) {
354 return Z_STR(((zend_ast_zval *) ast)->val);
355}
356
357static zend_always_inline uint32_t zend_ast_get_num_children(zend_ast *ast) {
358 ZEND_ASSERT(!zend_ast_is_list(ast));
359 return ast->kind >> ZEND_AST_NUM_CHILDREN_SHIFT;
360}
361static zend_always_inline uint32_t zend_ast_get_lineno(zend_ast *ast) {
362 if (ast->kind == ZEND_AST_ZVAL) {
363 zval *zv = zend_ast_get_zval(ast);
364 return Z_LINENO_P(zv);
365 } else if (ast->kind == ZEND_AST_CONSTANT) {
366 zval *zv = &((zend_ast_zval *) ast)->val;
367 return Z_LINENO_P(zv);
368 } else {
369 return ast->lineno;
370 }
371}
372
373static zend_always_inline zend_ast *zend_ast_create_binary_op(uint32_t opcode, zend_ast *op0, zend_ast *op1) {
374 return zend_ast_create_ex(ZEND_AST_BINARY_OP, opcode, op0, op1);
375}
376
378
379static zend_always_inline zend_ast *zend_ast_create_assign_op(uint32_t opcode, zend_ast *op0, zend_ast *op1) {
380 return zend_ast_create_ex(ZEND_AST_ASSIGN_OP, opcode, op0, op1);
381}
382static zend_always_inline zend_ast *zend_ast_create_cast(uint32_t type, zend_ast *op0) {
384}
385static zend_always_inline zend_ast *zend_ast_list_rtrim(zend_ast *ast) {
386 zend_ast_list *list = zend_ast_get_list(ast);
387 if (list->children && list->child[list->children - 1] == NULL) {
388 list->children--;
389 }
390 return ast;
391}
392
394
395#endif
zend_ffi_type * type
Definition ffi.c:3812
zval * zv
Definition ffi.c:3975
new_type kind
Definition ffi.c:4363
new_type attr
Definition ffi.c:4364
zval * val
Definition ffi.c:4262
#define NULL
Definition gdcache.h:45
#define prefix
zend_ast_attr attr
Definition zend_ast.h:212
zend_ast * child[5]
Definition zend_ast.h:218
uint32_t start_lineno
Definition zend_ast.h:213
uint32_t end_lineno
Definition zend_ast.h:214
zend_string * doc_comment
Definition zend_ast.h:216
uint32_t flags
Definition zend_ast.h:215
zend_string * name
Definition zend_ast.h:217
zend_ast_kind kind
Definition zend_ast.h:211
uint32_t lineno
Definition zend_ast.h:197
zend_ast * child[1]
Definition zend_ast.h:199
zend_ast_kind kind
Definition zend_ast.h:195
uint32_t children
Definition zend_ast.h:198
zend_ast_attr attr
Definition zend_ast.h:196
zend_ast_kind kind
Definition zend_ast.h:204
zend_ast_attr attr
Definition zend_ast.h:205
zend_ast_attr attr
Definition zend_ast.h:188
zend_ast_kind kind
Definition zend_ast.h:187
zend_ast * child[1]
Definition zend_ast.h:190
uint32_t lineno
Definition zend_ast.h:189
Definition dce.c:49
ZEND_API zend_ast_process_t zend_ast_process
Definition zend_ast.c:29
#define zend_ast_create(...)
Definition zend_ast.h:290
#define zend_ast_create_ex(...)
Definition zend_ast.h:292
ZEND_API zend_ast *ZEND_FASTCALL zend_ast_create_zval_from_long(zend_long lval)
Definition zend_ast.c:85
ZEND_API zend_ast * zend_ast_create_n(unsigned kind,...)
Definition zend_ast.c:293
ZEND_API void ZEND_FASTCALL zend_ast_destroy(zend_ast *ast)
Definition zend_ast.c:1163
struct _zend_ast_zval zend_ast_zval
ZEND_API zend_string * zend_ast_export(const char *prefix, zend_ast *ast, const char *suffix)
Definition zend_ast.c:2679
#define ZEND_AST_NUM_CHILDREN_SHIFT
Definition zend_ast.h:32
ZEND_API zend_ast *ZEND_FASTCALL zend_ast_create_2(zend_ast_kind kind, zend_ast *child1, zend_ast *child2)
Definition zend_ast.c:167
struct _zend_ast_list zend_ast_list
#define ZEND_AST_SPECIAL_SHIFT
Definition zend_ast.h:30
ZEND_API zend_ast *ZEND_FASTCALL zend_ast_create_1(zend_ast_kind kind, zend_ast *child)
Definition zend_ast.c:148
ZEND_API void zend_ast_apply(zend_ast *ast, zend_ast_apply_func fn, void *context)
Definition zend_ast.c:1217
ZEND_API zend_result ZEND_FASTCALL zend_ast_evaluate_ex(zval *result, zend_ast *ast, zend_class_entry *scope, bool *short_circuited_ptr, zend_ast_evaluate_ctx *ctx)
Definition zend_ast.c:544
ZEND_API zend_ast_ref *ZEND_FASTCALL zend_ast_copy(zend_ast *ast)
Definition zend_ast.c:1149
uint16_t zend_ast_kind
Definition zend_ast.h:183
ZEND_API zend_ast *ZEND_FASTCALL zend_ast_create_3(zend_ast_kind kind, zend_ast *child1, zend_ast *child2, zend_ast *child3)
Definition zend_ast.c:189
ZEND_API zend_ast *ZEND_FASTCALL zend_ast_create_zval_with_lineno(zval *zv, uint32_t lineno)
Definition zend_ast.c:67
zend_ast *ZEND_FASTCALL zend_ast_with_attributes(zend_ast *ast, zend_ast *attr)
Definition zend_ast.c:2690
zend_ast * zend_ast_create_concat_op(zend_ast *op0, zend_ast *op1)
Definition zend_ast.c:459
ZEND_API zend_ast *ZEND_FASTCALL zend_ast_create_list_1(zend_ast_kind kind, zend_ast *child)
Definition zend_ast.c:324
ZEND_API zend_ast *ZEND_FASTCALL zend_ast_create_class_const_or_name(zend_ast *class_name, zend_ast *name)
Definition zend_ast.c:102
ZEND_API zend_ast *ZEND_FASTCALL zend_ast_create_va(zend_ast_kind kind, zend_ast_attr attr, va_list *va)
Definition zend_ast.c:273
void(* zend_ast_process_t)(zend_ast *ast)
Definition zend_ast.h:221
uint16_t zend_ast_attr
Definition zend_ast.h:184
void(* zend_ast_apply_func)(zend_ast **ast_ptr, void *context)
Definition zend_ast.h:322
ZEND_API zend_result ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast, zend_class_entry *scope)
Definition zend_ast.c:1061
#define ZEND_AST_IS_LIST_SHIFT
Definition zend_ast.h:31
ZEND_API zend_ast *ZEND_FASTCALL zend_ast_create_zval_ex(zval *zv, zend_ast_attr attr)
Definition zend_ast.c:71
ZEND_API zend_ast *ZEND_FASTCALL zend_ast_create_5(zend_ast_kind kind, zend_ast *child1, zend_ast *child2, zend_ast *child3, zend_ast *child4, zend_ast *child5)
Definition zend_ast.c:242
ZEND_API zend_ast *ZEND_FASTCALL zend_ast_create_4(zend_ast_kind kind, zend_ast *child1, zend_ast *child2, zend_ast *child3, zend_ast *child4)
Definition zend_ast.c:214
#define zend_ast_create_list(init_children,...)
Definition zend_ast.h:294
ZEND_API zend_ast * zend_ast_create_decl(zend_ast_kind kind, uint32_t flags, uint32_t start_lineno, zend_string *doc_comment, zend_string *name, zend_ast *child0, zend_ast *child1, zend_ast *child2, zend_ast *child3, zend_ast *child4)
Definition zend_ast.c:112
ZEND_API zend_ast *ZEND_FASTCALL zend_ast_create_list_2(zend_ast_kind kind, zend_ast *child1, zend_ast *child2)
Definition zend_ast.c:348
ZEND_API zend_ast *ZEND_FASTCALL zend_ast_list_add(zend_ast *list, zend_ast *op)
Definition zend_ast.c:476
ZEND_API zend_ast *ZEND_FASTCALL zend_ast_create_list_0(zend_ast_kind kind)
Definition zend_ast.c:310
ZEND_API zend_ast *ZEND_FASTCALL zend_ast_create_0(zend_ast_kind kind)
Definition zend_ast.c:136
ZEND_API zend_ast * zend_ast_create_ex_n(zend_ast_kind kind, unsigned attr,...)
Definition zend_ast.c:301
_zend_ast_kind
Definition zend_ast.h:34
@ ZEND_AST_CONDITIONAL
Definition zend_ast.h:160
@ ZEND_AST_NAMED_ARG
Definition zend_ast.h:153
@ ZEND_AST_IF
Definition zend_ast.h:54
@ ZEND_AST_LABEL
Definition zend_ast.h:104
@ ZEND_AST_SWITCH_CASE
Definition zend_ast.h:141
@ ZEND_AST_CATCH_LIST
Definition zend_ast.h:56
@ ZEND_AST_THROW
Definition zend_ast.h:108
@ ZEND_AST_HALT_COMPILER
Definition zend_ast.h:106
@ ZEND_AST_REF
Definition zend_ast.h:105
@ ZEND_AST_PRINT
Definition zend_ast.h:91
@ ZEND_AST_UNPACK
Definition zend_ast.h:81
@ ZEND_AST_ARG_LIST
Definition zend_ast.h:49
@ ZEND_AST_USE_ELEM
Definition zend_ast.h:147
@ ZEND_AST_TRAIT_ALIAS
Definition zend_ast.h:148
@ ZEND_AST_ARROW_FUNC
Definition zend_ast.h:45
@ ZEND_AST_TRY
Definition zend_ast.h:162
@ ZEND_AST_POST_INC
Definition zend_ast.h:96
@ ZEND_AST_ASSIGN_COALESCE
Definition zend_ast.h:134
@ ZEND_AST_FOREACH
Definition zend_ast.h:173
@ ZEND_AST_CONSTANT
Definition zend_ast.h:37
@ ZEND_AST_BINARY_OP
Definition zend_ast.h:124
@ ZEND_AST_ENUM_CASE
Definition zend_ast.h:174
@ ZEND_AST_CATCH
Definition zend_ast.h:163
@ ZEND_AST_CALL
Definition zend_ast.h:119
@ ZEND_AST_ASSIGN_OP
Definition zend_ast.h:123
@ ZEND_AST_PARAM
Definition zend_ast.h:180
@ ZEND_AST_IF_ELEM
Definition zend_ast.h:139
@ ZEND_AST_CLASS_CONST_DECL
Definition zend_ast.h:61
@ ZEND_AST_NEW
Definition zend_ast.h:130
@ ZEND_AST_PROPERTY_HOOK
Definition zend_ast.h:46
@ ZEND_AST_GLOBAL
Definition zend_ast.h:101
@ ZEND_AST_CLASS_CONST_GROUP
Definition zend_ast.h:166
@ ZEND_AST_VAR
Definition zend_ast.h:79
@ ZEND_AST_NAMESPACE
Definition zend_ast.h:146
@ ZEND_AST_ATTRIBUTE_LIST
Definition zend_ast.h:67
@ ZEND_AST_YIELD
Definition zend_ast.h:132
@ ZEND_AST_BREAK
Definition zend_ast.h:110
@ ZEND_AST_PRE_DEC
Definition zend_ast.h:95
@ ZEND_AST_PROP_DECL
Definition zend_ast.h:59
@ ZEND_AST_TRAIT_ADAPTATIONS
Definition zend_ast.h:63
@ ZEND_AST_SWITCH_LIST
Definition zend_ast.h:55
@ ZEND_AST_TYPE_INTERSECTION
Definition zend_ast.h:66
@ ZEND_AST_CLASS
Definition zend_ast.h:44
@ ZEND_AST_AND
Definition zend_ast.h:127
@ ZEND_AST_TYPE_UNION
Definition zend_ast.h:65
@ ZEND_AST_TRAIT_PRECEDENCE
Definition zend_ast.h:144
@ ZEND_AST_CONST
Definition zend_ast.h:80
@ ZEND_AST_ATTRIBUTE_GROUP
Definition zend_ast.h:68
@ ZEND_AST_UNARY_MINUS
Definition zend_ast.h:83
@ ZEND_AST_ARRAY_ELEM
Definition zend_ast.h:129
@ ZEND_AST_PARENT_PROPERTY_HOOK_CALL
Definition zend_ast.h:154
@ ZEND_AST_GOTO
Definition zend_ast.h:109
@ ZEND_AST_ZNODE
Definition zend_ast.h:38
@ ZEND_AST_RETURN
Definition zend_ast.h:103
@ ZEND_AST_PROP_ELEM
Definition zend_ast.h:175
@ ZEND_AST_STATIC
Definition zend_ast.h:136
@ ZEND_AST_CONST_ELEM
Definition zend_ast.h:165
@ ZEND_AST_USE_TRAIT
Definition zend_ast.h:143
@ ZEND_AST_CLASS_CONST
Definition zend_ast.h:120
@ ZEND_AST_CALLABLE_CONVERT
Definition zend_ast.h:76
@ ZEND_AST_PROP
Definition zend_ast.h:116
@ ZEND_AST_SWITCH
Definition zend_ast.h:140
@ ZEND_AST_GREATER
Definition zend_ast.h:125
@ ZEND_AST_USE
Definition zend_ast.h:64
@ ZEND_AST_INCLUDE_OR_EVAL
Definition zend_ast.h:92
@ ZEND_AST_MATCH_ARM
Definition zend_ast.h:152
@ ZEND_AST_INSTANCEOF
Definition zend_ast.h:131
@ ZEND_AST_FUNC_DECL
Definition zend_ast.h:41
@ ZEND_AST_CLONE
Definition zend_ast.h:89
@ ZEND_AST_ASSIGN
Definition zend_ast.h:121
@ ZEND_AST_ENCAPS_LIST
Definition zend_ast.h:51
@ ZEND_AST_CLOSURE_USES
Definition zend_ast.h:58
@ ZEND_AST_POST_DEC
Definition zend_ast.h:97
@ ZEND_AST_EXIT
Definition zend_ast.h:90
@ ZEND_AST_EXPR_LIST
Definition zend_ast.h:52
@ ZEND_AST_YIELD_FROM
Definition zend_ast.h:98
@ ZEND_AST_MATCH_ARM_LIST
Definition zend_ast.h:69
@ ZEND_AST_PRE_INC
Definition zend_ast.h:94
@ ZEND_AST_ISSET
Definition zend_ast.h:86
@ ZEND_AST_TYPE
Definition zend_ast.h:74
@ ZEND_AST_NAME_LIST
Definition zend_ast.h:62
@ ZEND_AST_ASSIGN_REF
Definition zend_ast.h:122
@ ZEND_AST_DO_WHILE
Definition zend_ast.h:138
@ ZEND_AST_UNARY_OP
Definition zend_ast.h:93
@ ZEND_AST_CONST_ENUM_INIT
Definition zend_ast.h:169
@ ZEND_AST_WHILE
Definition zend_ast.h:137
@ ZEND_AST_ARRAY
Definition zend_ast.h:50
@ ZEND_AST_PROP_GROUP
Definition zend_ast.h:164
@ ZEND_AST_GROUP_USE
Definition zend_ast.h:149
@ ZEND_AST_METHOD_REFERENCE
Definition zend_ast.h:145
@ ZEND_AST_DECLARE
Definition zend_ast.h:142
@ ZEND_AST_COALESCE
Definition zend_ast.h:133
@ ZEND_AST_PROPERTY_HOOK_SHORT_BODY
Definition zend_ast.h:112
@ ZEND_AST_UNSET
Definition zend_ast.h:102
@ ZEND_AST_STATIC_PROP
Definition zend_ast.h:118
@ ZEND_AST_NULLSAFE_METHOD_CALL
Definition zend_ast.h:158
@ ZEND_AST_CONTINUE
Definition zend_ast.h:111
@ ZEND_AST_PARAM_LIST
Definition zend_ast.h:57
@ ZEND_AST_CLASS_NAME
Definition zend_ast.h:99
@ ZEND_AST_EMPTY
Definition zend_ast.h:85
@ ZEND_AST_GREATER_EQUAL
Definition zend_ast.h:126
@ ZEND_AST_METHOD
Definition zend_ast.h:43
@ ZEND_AST_CONSTANT_CLASS
Definition zend_ast.h:75
@ ZEND_AST_FOR
Definition zend_ast.h:172
@ ZEND_AST_NULLSAFE_PROP
Definition zend_ast.h:117
@ ZEND_AST_METHOD_CALL
Definition zend_ast.h:157
@ ZEND_AST_UNARY_PLUS
Definition zend_ast.h:82
@ ZEND_AST_CAST
Definition zend_ast.h:84
@ ZEND_AST_CLOSURE
Definition zend_ast.h:42
@ ZEND_AST_MAGIC_CONST
Definition zend_ast.h:73
@ ZEND_AST_SILENCE
Definition zend_ast.h:87
@ ZEND_AST_ECHO
Definition zend_ast.h:107
@ ZEND_AST_DIM
Definition zend_ast.h:115
@ ZEND_AST_ATTRIBUTE
Definition zend_ast.h:150
@ ZEND_AST_OR
Definition zend_ast.h:128
@ ZEND_AST_MODIFIER_LIST
Definition zend_ast.h:70
@ ZEND_AST_ZVAL
Definition zend_ast.h:36
@ ZEND_AST_CONST_DECL
Definition zend_ast.h:60
@ ZEND_AST_STATIC_CALL
Definition zend_ast.h:159
@ ZEND_AST_STMT_LIST
Definition zend_ast.h:53
@ ZEND_AST_SHELL_EXEC
Definition zend_ast.h:88
@ ZEND_AST_MATCH
Definition zend_ast.h:151
struct _zend_ast_decl zend_ast_decl
ZEND_API zend_ast *ZEND_FASTCALL zend_ast_create_zval(zval *zv)
Definition zend_ast.c:75
ZEND_API void ZEND_FASTCALL zend_ast_ref_destroy(zend_ast_ref *ast)
Definition zend_ast.c:1211
ZEND_API zend_ast *ZEND_FASTCALL zend_ast_create_constant(zend_string *name, zend_ast_attr attr)
Definition zend_ast.c:91
ZEND_API zend_ast *ZEND_FASTCALL zend_ast_create_zval_from_str(zend_string *str)
Definition zend_ast.c:79
struct _zval_struct zval
#define ZEND_API
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)
int32_t zend_long
Definition zend_long.h:42
struct _zend_string zend_string
#define zend_always_inline
#define XtOffsetOf(s_type, field)
#define ZEND_FASTCALL
#define ZEND_ASSERT(c)
struct _zend_class_entry zend_class_entry
#define Z_TYPE_P(zval_p)
Definition zend_types.h:660
struct _zend_ast_ref zend_ast_ref
Definition zend_types.h:101
#define IS_STRING
Definition zend_types.h:606
#define Z_STR_P(zval_p)
Definition zend_types.h:972
#define Z_STR(zval)
Definition zend_types.h:971
#define Z_LINENO_P(zval_p)
Definition zend_types.h:678
ZEND_RESULT_CODE zend_result
Definition zend_types.h:64
#define Z_TYPE(zval)
Definition zend_types.h:659
struct _zend_ast zend_ast
Definition zend_types.h:102
zend_string * name
bool result
op1
new_op_array scope