summaryrefslogtreecommitdiff
path: root/Zend/zend_ast.c
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_ast.c')
-rw-r--r--Zend/zend_ast.c32
1 files changed, 18 insertions, 14 deletions
diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c
index 1a8be00395..9604079a9e 100644
--- a/Zend/zend_ast.c
+++ b/Zend/zend_ast.c
@@ -42,8 +42,10 @@ static inline size_t zend_ast_list_size(uint32_t children) {
}
ZEND_API zend_ast *zend_ast_create_znode(znode *node) {
+ zend_ast_znode *ast;
TSRMLS_FETCH();
- zend_ast_znode *ast = zend_ast_alloc(sizeof(zend_ast_znode) TSRMLS_CC);
+
+ ast = zend_ast_alloc(sizeof(zend_ast_znode) TSRMLS_CC);
ast->kind = ZEND_AST_ZNODE;
ast->attr = 0;
ast->lineno = CG(zend_lineno);
@@ -52,8 +54,10 @@ ZEND_API zend_ast *zend_ast_create_znode(znode *node) {
}
ZEND_API zend_ast *zend_ast_create_zval_ex(zval *zv, zend_ast_attr attr) {
+ zend_ast_zval *ast;
TSRMLS_FETCH();
- zend_ast_zval *ast = zend_ast_alloc(sizeof(zend_ast_zval) TSRMLS_CC);
+
+ ast = zend_ast_alloc(sizeof(zend_ast_zval) TSRMLS_CC);
ast->kind = ZEND_AST_ZVAL;
ast->attr = attr;
ZVAL_COPY_VALUE(&ast->val, zv);
@@ -65,9 +69,10 @@ 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_decl *ast;
TSRMLS_FETCH();
- zend_ast_decl *ast = zend_ast_alloc(sizeof(zend_ast_decl) TSRMLS_CC);
+ ast = zend_ast_alloc(sizeof(zend_ast_decl) TSRMLS_CC);
ast->kind = kind;
ast->attr = 0;
ast->start_lineno = start_lineno;
@@ -84,9 +89,11 @@ ZEND_API zend_ast *zend_ast_create_decl(
}
static zend_ast *zend_ast_create_from_va_list(zend_ast_kind kind, zend_ast_attr attr, va_list va) {
- TSRMLS_FETCH();
uint32_t i, children = kind >> ZEND_AST_NUM_CHILDREN_SHIFT;
- zend_ast *ast = zend_ast_alloc(zend_ast_size(children) TSRMLS_CC);
+ zend_ast *ast;
+ TSRMLS_FETCH();
+
+ ast = zend_ast_alloc(zend_ast_size(children) TSRMLS_CC);
ast->kind = kind;
ast->attr = attr;
ast->lineno = (uint32_t) -1;
@@ -131,10 +138,12 @@ ZEND_API zend_ast *zend_ast_create(zend_ast_kind kind, ...) {
}
ZEND_API zend_ast *zend_ast_create_list(uint32_t init_children, zend_ast_kind kind, ...) {
+ zend_ast *ast;
+ zend_ast_list *list;
TSRMLS_FETCH();
- zend_ast *ast = zend_ast_alloc(zend_ast_list_size(4) TSRMLS_CC);
- zend_ast_list *list = (zend_ast_list *) ast;
+ ast = zend_ast_alloc(zend_ast_list_size(4) TSRMLS_CC);
+ list = (zend_ast_list *) ast;
list->kind = kind;
list->attr = 0;
list->lineno = CG(zend_lineno);
@@ -154,7 +163,7 @@ ZEND_API zend_ast *zend_ast_create_list(uint32_t init_children, zend_ast_kind ki
}
static inline zend_bool is_power_of_two(uint32_t n) {
- return n == (n & -n);
+ return ((n != 0) && (n == (n & (~n + 1))));
}
ZEND_API zend_ast *zend_ast_list_add(zend_ast *ast, zend_ast *op) {
@@ -373,16 +382,11 @@ static void zend_ast_destroy_ex(zend_ast *ast, zend_bool free) {
switch (ast->kind) {
case ZEND_AST_ZVAL:
- {
/* Destroy value without using GC: When opcache moves arrays into SHM it will
* free the zend_array structure, so references to it from outside the op array
* become invalid. GC would cause such a reference in the root buffer. */
- zval *zv = zend_ast_get_zval(ast);
- if (Z_REFCOUNTED_P(zv) && !Z_DELREF_P(zv)) {
- _zval_dtor_func_for_ptr(Z_COUNTED_P(zv) ZEND_FILE_LINE_CC);
- }
+ zval_ptr_dtor_nogc(zend_ast_get_zval(ast));
break;
- }
case ZEND_AST_FUNC_DECL:
case ZEND_AST_CLOSURE:
case ZEND_AST_METHOD: