@ -405,12 +405,12 @@ static int zend_ast_add_array_element(zval *result, zval *offset, zval *expr)
if ( ! zend_hash_next_index_insert ( Z_ARRVAL_P ( result ) , expr ) ) {
zend_error ( E_WARNING ,
" Cannot add element to the array as the next element is already occupied " ) ;
zval_ptr_dtor ( expr ) ;
zval_ptr_dtor_nogc ( expr ) ;
}
break ;
case IS_STRING :
zend_symtable_update ( Z_ARRVAL_P ( result ) , Z_STR_P ( offset ) , expr ) ;
zval_dtor ( offset ) ;
zval_ptr_ dtor_st r ( offset ) ;
break ;
case IS_NULL :
zend_symtable_update ( Z_ARRVAL_P ( result ) , ZSTR_EMPTY_ALLOC ( ) , expr ) ;
@ -448,13 +448,13 @@ ZEND_API int ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast, zend_c
if ( UNEXPECTED ( zend_ast_evaluate ( & op1 , ast - > child [ 0 ] , scope ) ! = SUCCESS ) ) {
ret = FAILURE ;
} else if ( UNEXPECTED ( zend_ast_evaluate ( & op2 , ast - > child [ 1 ] , scope ) ! = SUCCESS ) ) {
zval_dtor ( & op1 ) ;
zval_ptr_ dtor_nogc ( & op1 ) ;
ret = FAILURE ;
} else {
binary_op_type op = get_binary_op ( ast - > attr ) ;
ret = op ( result , & op1 , & op2 ) ;
zval_dtor ( & op1 ) ;
zval_dtor ( & op2 ) ;
zval_ptr_ dtor_nogc ( & op1 ) ;
zval_ptr_ dtor_nogc ( & op2 ) ;
}
break ;
case ZEND_AST_GREATER :
@ -462,15 +462,15 @@ ZEND_API int ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast, zend_c
if ( UNEXPECTED ( zend_ast_evaluate ( & op1 , ast - > child [ 0 ] , scope ) ! = SUCCESS ) ) {
ret = FAILURE ;
} else if ( UNEXPECTED ( zend_ast_evaluate ( & op2 , ast - > child [ 1 ] , scope ) ! = SUCCESS ) ) {
zval_dtor ( & op1 ) ;
zval_ptr_ dtor_nogc ( & op1 ) ;
ret = FAILURE ;
} else {
/* op1 > op2 is the same as op2 < op1 */
binary_op_type op = ast - > kind = = ZEND_AST_GREATER
? is_smaller_function : is_smaller_or_equal_function ;
ret = op ( result , & op2 , & op1 ) ;
zval_dtor ( & op1 ) ;
zval_dtor ( & op2 ) ;
zval_ptr_ dtor_nogc ( & op1 ) ;
zval_ptr_ dtor_nogc ( & op2 ) ;
}
break ;
case ZEND_AST_UNARY_OP :
@ -479,7 +479,7 @@ ZEND_API int ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast, zend_c
} else {
unary_op_type op = get_unary_op ( ast - > attr ) ;
ret = op ( result , & op1 ) ;
zval_dtor ( & op1 ) ;
zval_ptr_ dtor_nogc ( & op1 ) ;
}
break ;
case ZEND_AST_ZVAL :
@ -517,16 +517,16 @@ ZEND_API int ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast, zend_c
}
if ( zend_is_true ( & op1 ) ) {
if ( UNEXPECTED ( zend_ast_evaluate ( & op2 , ast - > child [ 1 ] , scope ) ! = SUCCESS ) ) {
zval_dtor ( & op1 ) ;
zval_ptr_ dtor_nogc ( & op1 ) ;
ret = FAILURE ;
break ;
}
ZVAL_BOOL ( result , zend_is_true ( & op2 ) ) ;
zval_dtor ( & op2 ) ;
zval_ptr_ dtor_nogc ( & op2 ) ;
} else {
ZVAL_FALSE ( result ) ;
}
zval_dtor ( & op1 ) ;
zval_ptr_ dtor_nogc ( & op1 ) ;
break ;
case ZEND_AST_OR :
if ( UNEXPECTED ( zend_ast_evaluate ( & op1 , ast - > child [ 0 ] , scope ) ! = SUCCESS ) ) {
@ -537,14 +537,14 @@ ZEND_API int ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast, zend_c
ZVAL_TRUE ( result ) ;
} else {
if ( UNEXPECTED ( zend_ast_evaluate ( & op2 , ast - > child [ 1 ] , scope ) ! = SUCCESS ) ) {
zval_dtor ( & op1 ) ;
zval_ptr_ dtor_nogc ( & op1 ) ;
ret = FAILURE ;
break ;
}
ZVAL_BOOL ( result , zend_is_true ( & op2 ) ) ;
zval_dtor ( & op2 ) ;
zval_ptr_ dtor_nogc ( & op2 ) ;
}
zval_dtor ( & op1 ) ;
zval_ptr_ dtor_nogc ( & op1 ) ;
break ;
case ZEND_AST_CONDITIONAL :
if ( UNEXPECTED ( zend_ast_evaluate ( & op1 , ast - > child [ 0 ] , scope ) ! = SUCCESS ) ) {
@ -556,19 +556,19 @@ ZEND_API int ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast, zend_c
* result = op1 ;
} else {
if ( UNEXPECTED ( zend_ast_evaluate ( result , ast - > child [ 1 ] , scope ) ! = SUCCESS ) ) {
zval_dtor ( & op1 ) ;
zval_ptr_ dtor_nogc ( & op1 ) ;
ret = FAILURE ;
break ;
}
zval_dtor ( & op1 ) ;
zval_ptr_ dtor_nogc ( & op1 ) ;
}
} else {
if ( UNEXPECTED ( zend_ast_evaluate ( result , ast - > child [ 2 ] , scope ) ! = SUCCESS ) ) {
zval_dtor ( & op1 ) ;
zval_ptr_ dtor_nogc ( & op1 ) ;
ret = FAILURE ;
break ;
}
zval_dtor ( & op1 ) ;
zval_ptr_ dtor_nogc ( & op1 ) ;
}
break ;
case ZEND_AST_COALESCE :
@ -580,11 +580,11 @@ ZEND_API int ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast, zend_c
* result = op1 ;
} else {
if ( UNEXPECTED ( zend_ast_evaluate ( result , ast - > child [ 1 ] , scope ) ! = SUCCESS ) ) {
zval_dtor ( & op1 ) ;
zval_ptr_ dtor_nogc ( & op1 ) ;
ret = FAILURE ;
break ;
}
zval_dtor ( & op1 ) ;
zval_ptr_ dtor_nogc ( & op1 ) ;
}
break ;
case ZEND_AST_UNARY_PLUS :
@ -593,7 +593,7 @@ ZEND_API int ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast, zend_c
} else {
ZVAL_LONG ( & op1 , 0 ) ;
ret = add_function ( result , & op1 , & op2 ) ;
zval_dtor ( & op2 ) ;
zval_ptr_ dtor_nogc ( & op2 ) ;
}
break ;
case ZEND_AST_UNARY_MINUS :
@ -602,7 +602,7 @@ ZEND_API int ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast, zend_c
} else {
ZVAL_LONG ( & op1 , 0 ) ;
ret = sub_function ( result , & op1 , & op2 ) ;
zval_dtor ( & op2 ) ;
zval_ptr_ dtor_nogc ( & op2 ) ;
}
break ;
case ZEND_AST_ARRAY :
@ -619,21 +619,21 @@ ZEND_API int ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast, zend_c
zend_ast * elem = list - > child [ i ] ;
if ( elem - > child [ 1 ] ) {
if ( UNEXPECTED ( zend_ast_evaluate ( & op1 , elem - > child [ 1 ] , scope ) ! = SUCCESS ) ) {
zval_dtor ( result ) ;
zval_ptr_ dtor_nogc ( result ) ;
return FAILURE ;
}
} else {
ZVAL_UNDEF ( & op1 ) ;
}
if ( UNEXPECTED ( zend_ast_evaluate ( & op2 , elem - > child [ 0 ] , scope ) ! = SUCCESS ) ) {
zval_dtor ( & op1 ) ;
zval_dtor ( result ) ;
zval_ptr_ dtor_nogc ( & op1 ) ;
zval_ptr_ dtor_nogc ( result ) ;
return FAILURE ;
}
if ( UNEXPECTED ( zend_ast_add_array_element ( result , & op1 , & op2 ) ! = SUCCESS ) ) {
zval_dtor ( & op1 ) ;
zval_dtor ( & op2 ) ;
zval_dtor ( result ) ;
zval_ptr_ dtor_nogc ( & op1 ) ;
zval_ptr_ dtor_nogc ( & op2 ) ;
zval_ptr_ dtor_nogc ( result ) ;
return FAILURE ;
}
}
@ -647,13 +647,13 @@ ZEND_API int ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast, zend_c
if ( UNEXPECTED ( zend_ast_evaluate ( & op1 , ast - > child [ 0 ] , scope ) ! = SUCCESS ) ) {
ret = FAILURE ;
} else if ( UNEXPECTED ( zend_ast_evaluate ( & op2 , ast - > child [ 1 ] , scope ) ! = SUCCESS ) ) {
zval_dtor ( & op1 ) ;
zval_ptr_ dtor_nogc ( & op1 ) ;
ret = FAILURE ;
} else {
zend_fetch_dimension_const ( result , & op1 , & op2 , ( ast - > attr = = ZEND_DIM_IS ) ? BP_VAR_IS : BP_VAR_R ) ;
zval_dtor ( & op1 ) ;
zval_dtor ( & op2 ) ;
zval_ptr_ dtor_nogc ( & op1 ) ;
zval_ptr_ dtor_nogc ( & op2 ) ;
}
break ;
default :