{
zend_ast_zval *ast = emalloc(sizeof(zend_ast_zval));
ast->kind = ZEND_CONST;
- ast->children = 0;
+ ast->EA = 0;
ZVAL_COPY_VALUE(&ast->val, zv);
return (zend_ast *) ast;
}
{
zend_ast_znode *ast = emalloc(sizeof(zend_ast_znode));
ast->kind = ZEND_AST_ZNODE;
- ast->children = 0;
+ ast->EA = 0;
ast->node = *node;
return (zend_ast *) ast;
}
{
zend_ast *ast = emalloc(sizeof(zend_ast));
ast->kind = kind;
+ ast->EA = 0;
ast->children = 1;
ast->child[0] = op0;
return ast;
{
zend_ast *ast = emalloc(sizeof(zend_ast) + sizeof(zend_ast *));
ast->kind = kind;
+ ast->EA = 0;
ast->children = 2;
ast->child[0] = op0;
ast->child[1] = op1;
{
zend_ast *ast = emalloc(sizeof(zend_ast) + sizeof(zend_ast *) * 2);
ast->kind = kind;
+ ast->EA = 0;
ast->children = 3;
ast->child[0] = op0;
ast->child[1] = op1;
/* use 4 children as default */
zend_ast *ast = emalloc(sizeof(zend_ast) + sizeof(zend_ast *) * 3);
ast->kind = kind;
+ ast->EA = 0;
ast->children = 0;
return ast;
}
if (ast->kind == ZEND_CONST) {
zval_dtor(zend_ast_get_zval(ast));
- } else {
+ } else if (ast->kind != ZEND_AST_ZNODE) {
for (i = 0; i < ast->children; i++) {
if (ast->child[i]) {
zend_ast_destroy(ast->child[i]);
struct _zend_ast {
unsigned short kind;
- unsigned short children;
+ unsigned short EA;
+ zend_uint children;
zend_ast *child[1];
};
typedef struct _zend_ast_zval {
unsigned short kind;
- unsigned short children;
+ unsigned short EA;
zval val;
} zend_ast_zval;
/* Temporarily defined here, to avoid header ordering issues */
typedef struct _zend_ast_znode {
unsigned short kind;
- unsigned short children;
+ unsigned short EA;
znode node;
} zend_ast_znode;
ZEND_API zend_ast *zend_ast_create_znode(znode *node);