mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Add ZVAL_OBJ_COPY macro
For the common ZVAL_OBJ + GC_ADDREF pattern. This mirrors the existing ZVAL_STR_COPY API.
This commit is contained in:
parent
b516566b84
commit
15846ff115
27 changed files with 89 additions and 140 deletions
|
@ -716,6 +716,7 @@ END_EXTERN_C()
|
|||
#define RETVAL_ARR(r) ZVAL_ARR(return_value, r)
|
||||
#define RETVAL_EMPTY_ARRAY() ZVAL_EMPTY_ARRAY(return_value)
|
||||
#define RETVAL_OBJ(r) ZVAL_OBJ(return_value, r)
|
||||
#define RETVAL_OBJ_COPY(r) ZVAL_OBJ_COPY(return_value, r)
|
||||
#define RETVAL_COPY(zv) ZVAL_COPY(return_value, zv)
|
||||
#define RETVAL_COPY_VALUE(zv) ZVAL_COPY_VALUE(return_value, zv)
|
||||
#define RETVAL_ZVAL(zv, copy, dtor) ZVAL_ZVAL(return_value, zv, copy, dtor)
|
||||
|
@ -740,6 +741,7 @@ END_EXTERN_C()
|
|||
#define RETURN_ARR(r) do { RETVAL_ARR(r); return; } while (0)
|
||||
#define RETURN_EMPTY_ARRAY() do { RETVAL_EMPTY_ARRAY(); return; } while (0)
|
||||
#define RETURN_OBJ(r) do { RETVAL_OBJ(r); return; } while (0)
|
||||
#define RETURN_OBJ_COPY(r) do { RETVAL_OBJ_COPY(r); return; } while (0)
|
||||
#define RETURN_COPY(zv) do { RETVAL_COPY(zv); return; } while (0)
|
||||
#define RETURN_COPY_VALUE(zv) do { RETVAL_COPY_VALUE(zv); return; } while (0)
|
||||
#define RETURN_ZVAL(zv, copy, dtor) do { RETVAL_ZVAL(zv, copy, dtor); return; } while (0)
|
||||
|
|
|
@ -2069,9 +2069,8 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int
|
|||
}
|
||||
zend_hash_add_new(Z_ARRVAL(stack_frame), ZSTR_KNOWN(ZEND_STR_CLASS), &tmp);
|
||||
if ((options & DEBUG_BACKTRACE_PROVIDE_OBJECT) != 0) {
|
||||
ZVAL_OBJ(&tmp, object);
|
||||
ZVAL_OBJ_COPY(&tmp, object);
|
||||
zend_hash_add_new(Z_ARRVAL(stack_frame), ZSTR_KNOWN(ZEND_STR_OBJECT), &tmp);
|
||||
Z_ADDREF(tmp);
|
||||
}
|
||||
|
||||
ZVAL_INTERNED_STR(&tmp, ZSTR_KNOWN(ZEND_STR_OBJECT_OPERATOR));
|
||||
|
|
|
@ -283,8 +283,7 @@ static int zend_create_closure_from_callable(zval *return_value, zval *callable,
|
|||
/* For Closure::fromCallable([$closure, "__invoke"]) return $closure. */
|
||||
if (fcc.object && fcc.object->ce == zend_ce_closure
|
||||
&& zend_string_equals_literal(mptr->common.function_name, "__invoke")) {
|
||||
ZVAL_OBJ(return_value, fcc.object);
|
||||
GC_ADDREF(fcc.object);
|
||||
RETVAL_OBJ_COPY(fcc.object);
|
||||
zend_free_trampoline(mptr);
|
||||
return SUCCESS;
|
||||
}
|
||||
|
@ -725,8 +724,7 @@ ZEND_API void zend_create_closure(zval *res, zend_function *func, zend_class_ent
|
|||
if (scope) {
|
||||
closure->func.common.fn_flags |= ZEND_ACC_PUBLIC;
|
||||
if (this_ptr && Z_TYPE_P(this_ptr) == IS_OBJECT && (closure->func.common.fn_flags & ZEND_ACC_STATIC) == 0) {
|
||||
Z_ADDREF_P(this_ptr);
|
||||
ZVAL_OBJ(&closure->this_ptr, Z_OBJ_P(this_ptr));
|
||||
ZVAL_OBJ_COPY(&closure->this_ptr, Z_OBJ_P(this_ptr));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1120,8 +1120,7 @@ zend_object_iterator *zend_generator_get_iterator(zend_class_entry *ce, zval *ob
|
|||
zend_iterator_init(iterator);
|
||||
|
||||
iterator->funcs = &zend_generator_iterator_functions;
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(&iterator->data, Z_OBJ_P(object));
|
||||
ZVAL_OBJ_COPY(&iterator->data, Z_OBJ_P(object));
|
||||
|
||||
return iterator;
|
||||
}
|
||||
|
|
|
@ -2416,8 +2416,7 @@ static void check_unrecoverable_load_failure(zend_class_entry *ce) {
|
|||
zend_string *exception_str;
|
||||
zval exception_zv;
|
||||
ZEND_ASSERT(EG(exception) && "Exception must have been thrown");
|
||||
ZVAL_OBJ(&exception_zv, EG(exception));
|
||||
Z_ADDREF(exception_zv);
|
||||
ZVAL_OBJ_COPY(&exception_zv, EG(exception));
|
||||
zend_clear_exception();
|
||||
exception_str = zval_get_string(&exception_zv);
|
||||
zend_error_noreturn(E_ERROR,
|
||||
|
|
|
@ -211,8 +211,7 @@ static zend_object_iterator *zend_user_it_get_iterator(zend_class_entry *ce, zva
|
|||
|
||||
zend_iterator_init((zend_object_iterator*)iterator);
|
||||
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(&iterator->it.data, Z_OBJ_P(object));
|
||||
ZVAL_OBJ_COPY(&iterator->it.data, Z_OBJ_P(object));
|
||||
iterator->it.funcs = &zend_interface_iterator_funcs_iterator;
|
||||
iterator->ce = Z_OBJCE_P(object);
|
||||
ZVAL_UNDEF(&iterator->value);
|
||||
|
|
|
@ -968,6 +968,14 @@ static zend_always_inline uint32_t zval_gc_info(uint32_t gc_type_info) {
|
|||
Z_TYPE_INFO_P(__z) = IS_OBJECT_EX; \
|
||||
} while (0)
|
||||
|
||||
#define ZVAL_OBJ_COPY(z, o) do { \
|
||||
zval *__z = (z); \
|
||||
zend_object *__o = (o); \
|
||||
GC_ADDREF(__o); \
|
||||
Z_OBJ_P(__z) = __o; \
|
||||
Z_TYPE_INFO_P(__z) = IS_OBJECT_EX; \
|
||||
} while (0)
|
||||
|
||||
#define ZVAL_RES(z, r) do { \
|
||||
zval *__z = (z); \
|
||||
Z_RES_P(__z) = (r); \
|
||||
|
|
|
@ -189,8 +189,7 @@ static zend_always_inline zend_bool zend_weakref_find(zval *referent, zval *retu
|
|||
zend_weakref *wr;
|
||||
found_weakref:
|
||||
wr = ptr;
|
||||
GC_ADDREF(&wr->std);
|
||||
ZVAL_OBJ(return_value, &wr->std);
|
||||
RETVAL_OBJ_COPY(&wr->std);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -221,8 +220,7 @@ static zend_always_inline void zend_weakref_get(zval *weakref, zval *return_valu
|
|||
zend_weakref *wr = zend_weakref_fetch(weakref);
|
||||
|
||||
if (wr->referent) {
|
||||
ZVAL_OBJ(return_value, wr->referent);
|
||||
Z_ADDREF_P(return_value);
|
||||
RETVAL_OBJ_COPY(wr->referent);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -433,8 +431,7 @@ static HashTable *zend_weakmap_get_properties_for(zend_object *object, zend_prop
|
|||
zval obj_zv;
|
||||
array_init(&pair);
|
||||
|
||||
ZVAL_OBJ(&obj_zv, (zend_object *) obj_addr);
|
||||
Z_ADDREF(obj_zv);
|
||||
ZVAL_OBJ_COPY(&obj_zv, (zend_object *) obj_addr);
|
||||
add_assoc_zval(&pair, "key", &obj_zv);
|
||||
Z_TRY_ADDREF_P(val);
|
||||
add_assoc_zval(&pair, "value", val);
|
||||
|
@ -511,8 +508,7 @@ static void zend_weakmap_iterator_get_current_key(zend_object_iterator *obj_iter
|
|||
ZEND_ASSERT(0 && "Must have integer key");
|
||||
}
|
||||
|
||||
ZVAL_OBJ(key, (zend_object *) num_key);
|
||||
Z_ADDREF_P(key);
|
||||
ZVAL_OBJ_COPY(key, (zend_object *) num_key);
|
||||
}
|
||||
|
||||
static void zend_weakmap_iterator_move_forward(zend_object_iterator *obj_iter)
|
||||
|
|
|
@ -1542,8 +1542,7 @@ zend_object_iterator *date_object_period_get_iterator(zend_class_entry *ce, zval
|
|||
|
||||
zend_iterator_init((zend_object_iterator*)iterator);
|
||||
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(&iterator->intern.data, Z_OBJ_P(object));
|
||||
ZVAL_OBJ_COPY(&iterator->intern.data, Z_OBJ_P(object));
|
||||
iterator->intern.funcs = &date_period_it_funcs;
|
||||
iterator->object = Z_PHPPERIOD_P(object);
|
||||
ZVAL_UNDEF(&iterator->current);
|
||||
|
@ -2891,8 +2890,7 @@ PHP_FUNCTION(date_modify)
|
|||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(return_value, Z_OBJ_P(object));
|
||||
RETURN_OBJ_COPY(Z_OBJ_P(object));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -2915,7 +2913,7 @@ PHP_METHOD(DateTimeImmutable, modify)
|
|||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
ZVAL_OBJ(return_value, Z_OBJ(new_object));
|
||||
RETURN_OBJ(Z_OBJ(new_object));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -2948,8 +2946,7 @@ PHP_FUNCTION(date_add)
|
|||
|
||||
php_date_add(object, interval, return_value);
|
||||
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(return_value, Z_OBJ_P(object));
|
||||
RETURN_OBJ_COPY(Z_OBJ_P(object));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -2967,7 +2964,7 @@ PHP_METHOD(DateTimeImmutable, add)
|
|||
date_clone_immutable(object, &new_object);
|
||||
php_date_add(&new_object, interval, return_value);
|
||||
|
||||
ZVAL_OBJ(return_value, Z_OBJ(new_object));
|
||||
RETURN_OBJ(Z_OBJ(new_object));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -3005,8 +3002,7 @@ PHP_FUNCTION(date_sub)
|
|||
|
||||
php_date_sub(object, interval, return_value);
|
||||
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(return_value, Z_OBJ_P(object));
|
||||
RETURN_OBJ_COPY(Z_OBJ_P(object));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -3024,7 +3020,7 @@ PHP_METHOD(DateTimeImmutable, sub)
|
|||
date_clone_immutable(object, &new_object);
|
||||
php_date_sub(&new_object, interval, return_value);
|
||||
|
||||
ZVAL_OBJ(return_value, Z_OBJ(new_object));
|
||||
RETURN_OBJ(Z_OBJ(new_object));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -3109,8 +3105,7 @@ PHP_FUNCTION(date_timezone_set)
|
|||
|
||||
php_date_timezone_set(object, timezone_object, return_value);
|
||||
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(return_value, Z_OBJ_P(object));
|
||||
RETURN_OBJ_COPY(Z_OBJ_P(object));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -3129,7 +3124,7 @@ PHP_METHOD(DateTimeImmutable, setTimezone)
|
|||
date_clone_immutable(object, &new_object);
|
||||
php_date_timezone_set(&new_object, timezone_object, return_value);
|
||||
|
||||
ZVAL_OBJ(return_value, Z_OBJ(new_object));
|
||||
RETURN_OBJ(Z_OBJ(new_object));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -3196,8 +3191,7 @@ PHP_FUNCTION(date_time_set)
|
|||
|
||||
php_date_time_set(object, h, i, s, ms, return_value);
|
||||
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(return_value, Z_OBJ_P(object));
|
||||
RETURN_OBJ_COPY(Z_OBJ_P(object));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -3216,7 +3210,7 @@ PHP_METHOD(DateTimeImmutable, setTime)
|
|||
date_clone_immutable(object, &new_object);
|
||||
php_date_time_set(&new_object, h, i, s, ms, return_value);
|
||||
|
||||
ZVAL_OBJ(return_value, Z_OBJ(new_object));
|
||||
RETURN_OBJ(Z_OBJ(new_object));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -3246,8 +3240,7 @@ PHP_FUNCTION(date_date_set)
|
|||
|
||||
php_date_date_set(object, y, m, d, return_value);
|
||||
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(return_value, Z_OBJ_P(object));
|
||||
RETURN_OBJ_COPY(Z_OBJ_P(object));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -3266,7 +3259,7 @@ PHP_METHOD(DateTimeImmutable, setDate)
|
|||
date_clone_immutable(object, &new_object);
|
||||
php_date_date_set(&new_object, y, m, d, return_value);
|
||||
|
||||
ZVAL_OBJ(return_value, Z_OBJ(new_object));
|
||||
RETURN_OBJ(Z_OBJ(new_object));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -3300,8 +3293,7 @@ PHP_FUNCTION(date_isodate_set)
|
|||
|
||||
php_date_isodate_set(object, y, w, d, return_value);
|
||||
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(return_value, Z_OBJ_P(object));
|
||||
RETURN_OBJ_COPY(Z_OBJ_P(object));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -3320,7 +3312,7 @@ PHP_METHOD(DateTimeImmutable, setISODate)
|
|||
date_clone_immutable(object, &new_object);
|
||||
php_date_isodate_set(&new_object, y, w, d, return_value);
|
||||
|
||||
ZVAL_OBJ(return_value, Z_OBJ(new_object));
|
||||
RETURN_OBJ(Z_OBJ(new_object));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -3349,8 +3341,7 @@ PHP_FUNCTION(date_timestamp_set)
|
|||
|
||||
php_date_timestamp_set(object, timestamp, return_value);
|
||||
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(return_value, Z_OBJ_P(object));
|
||||
RETURN_OBJ_COPY(Z_OBJ_P(object));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -3369,7 +3360,7 @@ PHP_METHOD(DateTimeImmutable, setTimestamp)
|
|||
date_clone_immutable(object, &new_object);
|
||||
php_date_timestamp_set(&new_object, timestamp, return_value);
|
||||
|
||||
ZVAL_OBJ(return_value, Z_OBJ(new_object));
|
||||
RETURN_OBJ(Z_OBJ(new_object));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
|
|
@ -270,8 +270,7 @@ zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object, i
|
|||
iterator = emalloc(sizeof(php_dom_iterator));
|
||||
zend_iterator_init(&iterator->intern);
|
||||
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(&iterator->intern.data, Z_OBJ_P(object));
|
||||
ZVAL_OBJ_COPY(&iterator->intern.data, Z_OBJ_P(object));
|
||||
iterator->intern.funcs = &php_dom_iterator_funcs;
|
||||
|
||||
ZVAL_UNDEF(&iterator->curobj);
|
||||
|
|
|
@ -997,8 +997,7 @@ void dom_namednode_iter(dom_object *basenode, int ntype, dom_object *intern, xml
|
|||
|
||||
ZEND_ASSERT(basenode != NULL);
|
||||
|
||||
ZVAL_OBJ(&mapptr->baseobj_zv, &basenode->std);
|
||||
Z_ADDREF(mapptr->baseobj_zv);
|
||||
ZVAL_OBJ_COPY(&mapptr->baseobj_zv, &basenode->std);
|
||||
|
||||
mapptr->baseobj = basenode;
|
||||
mapptr->nodetype = ntype;
|
||||
|
@ -1136,8 +1135,7 @@ PHP_DOM_EXPORT zend_bool php_dom_create_object(xmlNodePtr obj, zval *return_valu
|
|||
}
|
||||
|
||||
if ((intern = (dom_object *) php_dom_object_get_data((void *) obj))) {
|
||||
GC_ADDREF(&intern->std);
|
||||
ZVAL_OBJ(return_value, &intern->std);
|
||||
ZVAL_OBJ_COPY(return_value, &intern->std);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -110,8 +110,7 @@ U_CFUNC zend_object_iterator *_breakiterator_get_iterator(
|
|||
|
||||
zoi_with_current *zoi_iter = static_cast<zoi_with_current*>(emalloc(sizeof *zoi_iter));
|
||||
zend_iterator_init(&zoi_iter->zoi);
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(&zoi_iter->zoi.data, Z_OBJ_P(object));
|
||||
ZVAL_OBJ_COPY(&zoi_iter->zoi.data, Z_OBJ_P(object));
|
||||
zoi_iter->zoi.funcs = &breakiterator_iterator_funcs;
|
||||
zoi_iter->zoi.index = 0;
|
||||
zoi_iter->destroy_it = _breakiterator_destroy_it;
|
||||
|
|
|
@ -535,8 +535,7 @@ PHP_METHOD(PDO, prepare)
|
|||
stmt->default_fetch_type = dbh->default_fetch_type;
|
||||
stmt->dbh = dbh;
|
||||
/* give it a reference to me */
|
||||
ZVAL_OBJ(&stmt->database_object_handle, &dbh_obj->std);
|
||||
Z_ADDREF(stmt->database_object_handle);
|
||||
ZVAL_OBJ_COPY(&stmt->database_object_handle, &dbh_obj->std);
|
||||
/* we haven't created a lazy object yet */
|
||||
ZVAL_UNDEF(&stmt->lazy_object_ref);
|
||||
|
||||
|
@ -1073,8 +1072,7 @@ PHP_METHOD(PDO, query)
|
|||
stmt->active_query_stringlen = statement_len;
|
||||
stmt->dbh = dbh;
|
||||
/* give it a reference to me */
|
||||
ZVAL_OBJ(&stmt->database_object_handle, &dbh_obj->std);
|
||||
Z_ADDREF(stmt->database_object_handle);
|
||||
ZVAL_OBJ_COPY(&stmt->database_object_handle, &dbh_obj->std);
|
||||
/* we haven't created a lazy object yet */
|
||||
ZVAL_UNDEF(&stmt->lazy_object_ref);
|
||||
|
||||
|
|
|
@ -2473,7 +2473,7 @@ PHP_METHOD(Phar, convertToExecutable)
|
|||
phar_obj->archive->is_data = is_data;
|
||||
|
||||
if (ret) {
|
||||
ZVAL_OBJ(return_value, ret);
|
||||
RETURN_OBJ(ret);
|
||||
} else {
|
||||
RETURN_NULL();
|
||||
}
|
||||
|
@ -2576,7 +2576,7 @@ PHP_METHOD(Phar, convertToData)
|
|||
phar_obj->archive->is_data = is_data;
|
||||
|
||||
if (ret) {
|
||||
ZVAL_OBJ(return_value, ret);
|
||||
RETURN_OBJ(ret);
|
||||
} else {
|
||||
RETURN_NULL();
|
||||
}
|
||||
|
@ -3279,7 +3279,7 @@ PHP_METHOD(Phar, compress)
|
|||
}
|
||||
|
||||
if (ret) {
|
||||
ZVAL_OBJ(return_value, ret);
|
||||
RETURN_OBJ(ret);
|
||||
} else {
|
||||
RETURN_NULL();
|
||||
}
|
||||
|
@ -3319,7 +3319,7 @@ PHP_METHOD(Phar, decompress)
|
|||
}
|
||||
|
||||
if (ret) {
|
||||
ZVAL_OBJ(return_value, ret);
|
||||
RETURN_OBJ(ret);
|
||||
} else {
|
||||
RETURN_NULL();
|
||||
}
|
||||
|
|
|
@ -1275,8 +1275,7 @@ static void reflection_parameter_factory(zend_function *fptr, zval *closure_obje
|
|||
intern->ref_type = REF_TYPE_PARAMETER;
|
||||
intern->ce = fptr->common.scope;
|
||||
if (closure_object) {
|
||||
Z_ADDREF_P(closure_object);
|
||||
ZVAL_OBJ(&intern->obj, Z_OBJ_P(closure_object));
|
||||
ZVAL_OBJ_COPY(&intern->obj, Z_OBJ_P(closure_object));
|
||||
}
|
||||
|
||||
prop_name = reflection_prop_name(object);
|
||||
|
@ -1343,8 +1342,7 @@ static void reflection_function_factory(zend_function *function, zval *closure_o
|
|||
intern->ref_type = REF_TYPE_FUNCTION;
|
||||
intern->ce = NULL;
|
||||
if (closure_object) {
|
||||
Z_ADDREF_P(closure_object);
|
||||
ZVAL_OBJ(&intern->obj, Z_OBJ_P(closure_object));
|
||||
ZVAL_OBJ_COPY(&intern->obj, Z_OBJ_P(closure_object));
|
||||
}
|
||||
ZVAL_STR_COPY(reflection_prop_name(object), function->common.function_name);
|
||||
}
|
||||
|
@ -1361,8 +1359,7 @@ static void reflection_method_factory(zend_class_entry *ce, zend_function *metho
|
|||
intern->ref_type = REF_TYPE_FUNCTION;
|
||||
intern->ce = ce;
|
||||
if (closure_object) {
|
||||
Z_ADDREF_P(closure_object);
|
||||
ZVAL_OBJ(&intern->obj, Z_OBJ_P(closure_object));
|
||||
ZVAL_OBJ_COPY(&intern->obj, Z_OBJ_P(closure_object));
|
||||
}
|
||||
|
||||
ZVAL_STR_COPY(reflection_prop_name(object), method->common.function_name);
|
||||
|
@ -1490,7 +1487,6 @@ ZEND_METHOD(ReflectionFunction, __construct)
|
|||
|
||||
if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "O", &closure, zend_ce_closure) == SUCCESS) {
|
||||
fptr = (zend_function*)zend_get_closure_method_def(closure);
|
||||
Z_ADDREF_P(closure);
|
||||
} else {
|
||||
ALLOCA_FLAG(use_heap)
|
||||
|
||||
|
@ -1521,7 +1517,7 @@ ZEND_METHOD(ReflectionFunction, __construct)
|
|||
intern->ptr = fptr;
|
||||
intern->ref_type = REF_TYPE_FUNCTION;
|
||||
if (closure) {
|
||||
ZVAL_OBJ(&intern->obj, Z_OBJ_P(closure));
|
||||
ZVAL_OBJ_COPY(&intern->obj, Z_OBJ_P(closure));
|
||||
} else {
|
||||
ZVAL_UNDEF(&intern->obj);
|
||||
}
|
||||
|
@ -1591,8 +1587,7 @@ ZEND_METHOD(ReflectionFunctionAbstract, getClosureThis)
|
|||
if (!Z_ISUNDEF(intern->obj)) {
|
||||
closure_this = zend_get_closure_this_ptr(&intern->obj);
|
||||
if (!Z_ISUNDEF_P(closure_this)) {
|
||||
Z_ADDREF_P(closure_this);
|
||||
ZVAL_OBJ(return_value, Z_OBJ_P(closure_this));
|
||||
RETURN_OBJ_COPY(Z_OBJ_P(closure_this));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1632,8 +1627,7 @@ ZEND_METHOD(ReflectionFunction, getClosure)
|
|||
|
||||
if (!Z_ISUNDEF(intern->obj)) {
|
||||
/* Closures are immutable objects */
|
||||
Z_ADDREF(intern->obj);
|
||||
ZVAL_OBJ(return_value, Z_OBJ(intern->obj));
|
||||
RETURN_OBJ_COPY(Z_OBJ(intern->obj));
|
||||
} else {
|
||||
zend_create_fake_closure(return_value, fptr, NULL, NULL, NULL);
|
||||
}
|
||||
|
@ -2100,8 +2094,7 @@ ZEND_METHOD(ReflectionGenerator, __construct)
|
|||
}
|
||||
|
||||
intern->ref_type = REF_TYPE_GENERATOR;
|
||||
Z_ADDREF_P(generator);
|
||||
ZVAL_OBJ(&intern->obj, Z_OBJ_P(generator));
|
||||
ZVAL_OBJ_COPY(&intern->obj, Z_OBJ_P(generator));
|
||||
intern->ce = zend_ce_generator;
|
||||
}
|
||||
/* }}} */
|
||||
|
@ -2217,10 +2210,9 @@ ZEND_METHOD(ReflectionGenerator, getThis)
|
|||
REFLECTION_CHECK_VALID_GENERATOR(ex)
|
||||
|
||||
if (Z_TYPE(ex->This) == IS_OBJECT) {
|
||||
Z_ADDREF(ex->This);
|
||||
ZVAL_OBJ(return_value, Z_OBJ(ex->This));
|
||||
RETURN_OBJ_COPY(Z_OBJ(ex->This));
|
||||
} else {
|
||||
ZVAL_NULL(return_value);
|
||||
RETURN_NULL();
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
@ -2239,9 +2231,7 @@ ZEND_METHOD(ReflectionGenerator, getExecutingGenerator)
|
|||
REFLECTION_CHECK_VALID_GENERATOR(ex)
|
||||
|
||||
current = zend_generator_get_current(generator);
|
||||
GC_ADDREF(¤t->std);
|
||||
|
||||
ZVAL_OBJ(return_value, (zend_object *) current);
|
||||
RETURN_OBJ_COPY(¤t->std);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -3166,8 +3156,7 @@ ZEND_METHOD(ReflectionMethod, getClosure)
|
|||
if (Z_OBJCE_P(obj) == zend_ce_closure &&
|
||||
(mptr->internal_function.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE))
|
||||
{
|
||||
Z_ADDREF_P(obj);
|
||||
ZVAL_OBJ(return_value, Z_OBJ_P(obj));
|
||||
RETURN_OBJ_COPY(Z_OBJ_P(obj));
|
||||
} else {
|
||||
zend_create_fake_closure(return_value, mptr, mptr->common.scope, Z_OBJCE_P(obj), obj);
|
||||
}
|
||||
|
|
|
@ -2216,7 +2216,7 @@ PHP_FUNCTION(simplexml_load_file)
|
|||
php_libxml_increment_doc_ref((php_libxml_node_object *)sxe, docp);
|
||||
php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, xmlDocGetRootElement(docp), NULL);
|
||||
|
||||
ZVAL_OBJ(return_value, &sxe->zo);
|
||||
RETURN_OBJ(&sxe->zo);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -2270,7 +2270,7 @@ PHP_FUNCTION(simplexml_load_string)
|
|||
php_libxml_increment_doc_ref((php_libxml_node_object *)sxe, docp);
|
||||
php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, xmlDocGetRootElement(docp), NULL);
|
||||
|
||||
ZVAL_OBJ(return_value, &sxe->zo);
|
||||
RETURN_OBJ(&sxe->zo);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -2419,8 +2419,7 @@ zend_object_iterator *php_sxe_get_iterator(zend_class_entry *ce, zval *object, i
|
|||
iterator = emalloc(sizeof(php_sxe_iterator));
|
||||
zend_iterator_init(&iterator->intern);
|
||||
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(&iterator->intern.data, Z_OBJ_P(object));
|
||||
ZVAL_OBJ_COPY(&iterator->intern.data, Z_OBJ_P(object));
|
||||
iterator->intern.funcs = &php_sxe_iterator_funcs;
|
||||
iterator->sxe = Z_SXEOBJ_P(object);
|
||||
|
||||
|
@ -2568,7 +2567,7 @@ PHP_FUNCTION(simplexml_import_dom)
|
|||
php_libxml_increment_doc_ref((php_libxml_node_object *)sxe, nodep->doc);
|
||||
php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, nodep, NULL);
|
||||
|
||||
ZVAL_OBJ(return_value, &sxe->zo);
|
||||
RETURN_OBJ(&sxe->zo);
|
||||
} else {
|
||||
php_error_docref(NULL, E_WARNING, "Invalid Nodetype to import");
|
||||
RETVAL_NULL();
|
||||
|
|
|
@ -1049,8 +1049,7 @@ PHP_METHOD(SoapServer, setObject)
|
|||
|
||||
service->type = SOAP_OBJECT;
|
||||
|
||||
Z_ADDREF_P(obj);
|
||||
ZVAL_OBJ(&service->soap_object, Z_OBJ_P(obj));
|
||||
ZVAL_OBJ_COPY(&service->soap_object, Z_OBJ_P(obj));
|
||||
|
||||
SOAP_SERVER_END_CODE();
|
||||
}
|
||||
|
@ -1760,8 +1759,7 @@ PHP_METHOD(SoapServer, addSoapHeader)
|
|||
*p = emalloc(sizeof(soapHeader));
|
||||
memset(*p, 0, sizeof(soapHeader));
|
||||
ZVAL_NULL(&(*p)->function_name);
|
||||
Z_ADDREF_P(fault);
|
||||
ZVAL_OBJ(&(*p)->retval, Z_OBJ_P(fault));
|
||||
ZVAL_OBJ_COPY(&(*p)->retval, Z_OBJ_P(fault));
|
||||
|
||||
SOAP_SERVER_END_CODE();
|
||||
}
|
||||
|
|
|
@ -609,8 +609,7 @@ PHP_FUNCTION(spl_autoload_functions)
|
|||
ZEND_HASH_FOREACH_PTR(SPL_G(autoload_functions), alfi) {
|
||||
if (alfi->closure) {
|
||||
zval obj_zv;
|
||||
ZVAL_OBJ(&obj_zv, alfi->closure);
|
||||
Z_ADDREF(obj_zv);
|
||||
ZVAL_OBJ_COPY(&obj_zv, alfi->closure);
|
||||
add_next_index_zval(return_value, &obj_zv);
|
||||
} else if (alfi->func_ptr->common.scope) {
|
||||
zval tmp;
|
||||
|
@ -618,8 +617,7 @@ PHP_FUNCTION(spl_autoload_functions)
|
|||
array_init(&tmp);
|
||||
if (alfi->obj) {
|
||||
zval obj_zv;
|
||||
ZVAL_OBJ(&obj_zv, alfi->obj);
|
||||
Z_ADDREF(obj_zv);
|
||||
ZVAL_OBJ_COPY(&obj_zv, alfi->obj);
|
||||
add_next_index_zval(&tmp, &obj_zv);
|
||||
} else {
|
||||
add_next_index_str(&tmp, zend_string_copy(alfi->ce->name));
|
||||
|
|
|
@ -189,13 +189,11 @@ static zend_object *spl_array_object_new_ex(zend_class_entry *class_type, zend_o
|
|||
zend_array_dup(spl_array_get_hash_table(other)));
|
||||
} else {
|
||||
ZEND_ASSERT(orig->handlers == &spl_handler_ArrayIterator);
|
||||
GC_ADDREF(orig);
|
||||
ZVAL_OBJ(&intern->array, orig);
|
||||
ZVAL_OBJ_COPY(&intern->array, orig);
|
||||
intern->ar_flags |= SPL_ARRAY_USE_OTHER;
|
||||
}
|
||||
} else {
|
||||
GC_ADDREF(orig);
|
||||
ZVAL_OBJ(&intern->array, orig);
|
||||
ZVAL_OBJ_COPY(&intern->array, orig);
|
||||
intern->ar_flags |= SPL_ARRAY_USE_OTHER;
|
||||
}
|
||||
} else {
|
||||
|
@ -1173,8 +1171,7 @@ zend_object_iterator *spl_array_get_iterator(zend_class_entry *ce, zval *object,
|
|||
|
||||
zend_iterator_init(&iterator->it);
|
||||
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(&iterator->it.data, Z_OBJ_P(object));
|
||||
ZVAL_OBJ_COPY(&iterator->it.data, Z_OBJ_P(object));
|
||||
iterator->it.funcs = &spl_array_it_funcs;
|
||||
iterator->ce = ce;
|
||||
ZVAL_UNDEF(&iterator->value);
|
||||
|
@ -1333,7 +1330,7 @@ PHP_METHOD(ArrayObject, getIterator)
|
|||
RETURN_THROWS();
|
||||
}
|
||||
|
||||
ZVAL_OBJ(return_value, spl_array_object_new_ex(intern->ce_get_iterator, Z_OBJ_P(object), 0));
|
||||
RETURN_OBJ(spl_array_object_new_ex(intern->ce_get_iterator, Z_OBJ_P(object), 0));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -1652,9 +1649,7 @@ PHP_METHOD(RecursiveArrayIterator, getChildren)
|
|||
return;
|
||||
}
|
||||
if (instanceof_function(Z_OBJCE_P(entry), Z_OBJCE_P(ZEND_THIS))) {
|
||||
ZVAL_OBJ(return_value, Z_OBJ_P(entry));
|
||||
Z_ADDREF_P(return_value);
|
||||
return;
|
||||
RETURN_OBJ_COPY(Z_OBJ_P(entry));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -457,7 +457,7 @@ static spl_filesystem_object *spl_filesystem_object_create_info(spl_filesystem_o
|
|||
zend_update_class_constants(ce);
|
||||
|
||||
intern = spl_filesystem_from_obj(spl_filesystem_object_new_ex(ce));
|
||||
ZVAL_OBJ(return_value, &intern->std);
|
||||
RETVAL_OBJ(&intern->std);
|
||||
|
||||
if (ce->constructor->common.scope != spl_ce_SplFileInfo) {
|
||||
ZVAL_STRINGL(&arg1, file_path, file_path_len);
|
||||
|
@ -501,7 +501,7 @@ static spl_filesystem_object *spl_filesystem_object_create_type(int num_args, sp
|
|||
}
|
||||
|
||||
intern = spl_filesystem_from_obj(spl_filesystem_object_new_ex(ce));
|
||||
ZVAL_OBJ(return_value, &intern->std);
|
||||
RETVAL_OBJ(&intern->std);
|
||||
|
||||
spl_filesystem_object_get_file_name(source);
|
||||
if (ce->constructor->common.scope != spl_ce_SplFileInfo) {
|
||||
|
@ -536,7 +536,7 @@ static spl_filesystem_object *spl_filesystem_object_create_type(int num_args, sp
|
|||
|
||||
intern = spl_filesystem_from_obj(spl_filesystem_object_new_ex(ce));
|
||||
|
||||
ZVAL_OBJ(return_value, &intern->std);
|
||||
RETVAL_OBJ(&intern->std);
|
||||
|
||||
spl_filesystem_object_get_file_name(source);
|
||||
|
||||
|
@ -802,8 +802,7 @@ PHP_METHOD(DirectoryIterator, current)
|
|||
if (zend_parse_parameters_none() == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
ZVAL_OBJ(return_value, Z_OBJ_P(ZEND_THIS));
|
||||
Z_ADDREF_P(return_value);
|
||||
RETURN_OBJ_COPY(Z_OBJ_P(ZEND_THIS));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -1099,8 +1098,7 @@ PHP_METHOD(FilesystemIterator, current)
|
|||
spl_filesystem_object_get_file_name(intern);
|
||||
spl_filesystem_object_create_type(0, intern, SPL_FS_INFO, NULL, return_value);
|
||||
} else {
|
||||
ZVAL_OBJ(return_value, Z_OBJ_P(ZEND_THIS));
|
||||
Z_ADDREF_P(return_value);
|
||||
RETURN_OBJ_COPY(Z_OBJ_P(ZEND_THIS));
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
@ -1645,8 +1643,7 @@ zend_object_iterator *spl_filesystem_dir_get_iterator(zend_class_entry *ce, zval
|
|||
}
|
||||
dir_object = Z_SPLFILESYSTEM_P(object);
|
||||
iterator = spl_filesystem_object_to_iterator(dir_object);
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(&iterator->intern.data, Z_OBJ_P(object));
|
||||
ZVAL_OBJ_COPY(&iterator->intern.data, Z_OBJ_P(object));
|
||||
iterator->intern.funcs = &spl_filesystem_dir_it_funcs;
|
||||
/* ->current must be initialized; rewind doesn't set it and valid
|
||||
* doesn't check whether it's set */
|
||||
|
@ -1847,8 +1844,7 @@ zend_object_iterator *spl_filesystem_tree_get_iterator(zend_class_entry *ce, zva
|
|||
dir_object = Z_SPLFILESYSTEM_P(object);
|
||||
iterator = spl_filesystem_object_to_iterator(dir_object);
|
||||
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(&iterator->intern.data, Z_OBJ_P(object));
|
||||
ZVAL_OBJ_COPY(&iterator->intern.data, Z_OBJ_P(object));
|
||||
iterator->intern.funcs = &spl_filesystem_tree_it_funcs;
|
||||
|
||||
return &iterator->intern;
|
||||
|
|
|
@ -1351,8 +1351,7 @@ zend_object_iterator *spl_dllist_get_iterator(zend_class_entry *ce, zval *object
|
|||
|
||||
zend_iterator_init((zend_object_iterator*)iterator);
|
||||
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(&iterator->intern.it.data, Z_OBJ_P(object));
|
||||
ZVAL_OBJ_COPY(&iterator->intern.it.data, Z_OBJ_P(object));
|
||||
iterator->intern.it.funcs = &spl_dllist_it_funcs;
|
||||
iterator->intern.ce = ce;
|
||||
iterator->traverse_position = dllist_object->traverse_position;
|
||||
|
|
|
@ -980,8 +980,7 @@ zend_object_iterator *spl_fixedarray_get_iterator(zend_class_entry *ce, zval *ob
|
|||
|
||||
zend_iterator_init((zend_object_iterator*)iterator);
|
||||
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(&iterator->intern.it.data, Z_OBJ_P(object));
|
||||
ZVAL_OBJ_COPY(&iterator->intern.it.data, Z_OBJ_P(object));
|
||||
iterator->intern.it.funcs = &spl_fixedarray_it_funcs;
|
||||
iterator->intern.ce = ce;
|
||||
ZVAL_UNDEF(&iterator->intern.value);
|
||||
|
|
|
@ -459,8 +459,7 @@ static zend_object_iterator *spl_recursive_it_get_iterator(zend_class_entry *ce,
|
|||
|
||||
zend_iterator_init((zend_object_iterator*)iterator);
|
||||
|
||||
Z_ADDREF_P(zobject);
|
||||
ZVAL_OBJ(&iterator->intern.data, Z_OBJ_P(zobject));
|
||||
ZVAL_OBJ_COPY(&iterator->intern.data, Z_OBJ_P(zobject));
|
||||
iterator->intern.funcs = &spl_recursive_it_iterator_funcs;
|
||||
return (zend_object_iterator*)iterator;
|
||||
}
|
||||
|
|
|
@ -534,8 +534,7 @@ PHP_METHOD(SQLite3, prepare)
|
|||
object_init_ex(return_value, php_sqlite3_stmt_entry);
|
||||
stmt_obj = Z_SQLITE3_STMT_P(return_value);
|
||||
stmt_obj->db_obj = db_obj;
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(&stmt_obj->db_obj_zval, Z_OBJ_P(object));
|
||||
ZVAL_OBJ_COPY(&stmt_obj->db_obj_zval, Z_OBJ_P(object));
|
||||
|
||||
errcode = sqlite3_prepare_v2(db_obj->db, ZSTR_VAL(sql), ZSTR_LEN(sql), &(stmt_obj->stmt), NULL);
|
||||
if (errcode != SQLITE_OK) {
|
||||
|
@ -590,8 +589,7 @@ PHP_METHOD(SQLite3, query)
|
|||
object_init_ex(&stmt, php_sqlite3_stmt_entry);
|
||||
stmt_obj = Z_SQLITE3_STMT_P(&stmt);
|
||||
stmt_obj->db_obj = db_obj;
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(&stmt_obj->db_obj_zval, Z_OBJ_P(object));
|
||||
ZVAL_OBJ_COPY(&stmt_obj->db_obj_zval, Z_OBJ_P(object));
|
||||
|
||||
return_code = sqlite3_prepare_v2(db_obj->db, ZSTR_VAL(sql), ZSTR_LEN(sql), &(stmt_obj->stmt), NULL);
|
||||
if (return_code != SQLITE_OK) {
|
||||
|
@ -1879,8 +1877,7 @@ PHP_METHOD(SQLite3Stmt, execute)
|
|||
result->is_prepared_statement = 1;
|
||||
result->db_obj = stmt_obj->db_obj;
|
||||
result->stmt_obj = stmt_obj;
|
||||
Z_ADDREF_P(object);
|
||||
ZVAL_OBJ(&result->stmt_obj_zval, Z_OBJ_P(object));
|
||||
ZVAL_OBJ_COPY(&result->stmt_obj_zval, Z_OBJ_P(object));
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -1929,8 +1926,7 @@ PHP_METHOD(SQLite3Stmt, __construct)
|
|||
}
|
||||
|
||||
stmt_obj->db_obj = db_obj;
|
||||
Z_ADDREF_P(db_zval);
|
||||
ZVAL_OBJ(&stmt_obj->db_obj_zval, Z_OBJ_P(db_zval));
|
||||
ZVAL_OBJ_COPY(&stmt_obj->db_obj_zval, Z_OBJ_P(db_zval));
|
||||
|
||||
errcode = sqlite3_prepare_v2(db_obj->db, ZSTR_VAL(sql), ZSTR_LEN(sql), &(stmt_obj->stmt), NULL);
|
||||
if (errcode != SQLITE_OK) {
|
||||
|
|
|
@ -2479,8 +2479,7 @@ static void php_compact_var(HashTable *eg_active_symbol_table, zval *return_valu
|
|||
} else if (zend_string_equals_literal(Z_STR_P(entry), "this")) {
|
||||
zend_object *object = zend_get_this_object(EG(current_execute_data));
|
||||
if (object) {
|
||||
GC_ADDREF(object);
|
||||
ZVAL_OBJ(&data, object);
|
||||
ZVAL_OBJ_COPY(&data, object);
|
||||
zend_hash_update(Z_ARRVAL_P(return_value), Z_STR_P(entry), &data);
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -1001,8 +1001,7 @@ again:
|
|||
zval *data;
|
||||
zend_ulong index;
|
||||
|
||||
Z_ADDREF_P(struc);
|
||||
ZVAL_OBJ(&obj, Z_OBJ_P(struc));
|
||||
ZVAL_OBJ_COPY(&obj, Z_OBJ_P(struc));
|
||||
if (php_var_serialize_call_magic_serialize(&retval, &obj) == FAILURE) {
|
||||
if (!EG(exception)) {
|
||||
smart_str_appendl(buf, "N;", 2);
|
||||
|
@ -1065,8 +1064,7 @@ again:
|
|||
if (ce != PHP_IC_ENTRY && zend_hash_str_exists(&ce->function_table, "__sleep", sizeof("__sleep")-1)) {
|
||||
zval retval, tmp;
|
||||
|
||||
Z_ADDREF_P(struc);
|
||||
ZVAL_OBJ(&tmp, Z_OBJ_P(struc));
|
||||
ZVAL_OBJ_COPY(&tmp, Z_OBJ_P(struc));
|
||||
|
||||
if (php_var_serialize_call_sleep(&retval, &tmp) == FAILURE) {
|
||||
if (!EG(exception)) {
|
||||
|
|
|
@ -1085,8 +1085,7 @@ PHP_FUNCTION(xml_set_object)
|
|||
parser = Z_XMLPARSER_P(pind);
|
||||
|
||||
zval_ptr_dtor(&parser->object);
|
||||
Z_ADDREF_P(mythis);
|
||||
ZVAL_OBJ(&parser->object, Z_OBJ_P(mythis));
|
||||
ZVAL_OBJ_COPY(&parser->object, Z_OBJ_P(mythis));
|
||||
|
||||
RETVAL_TRUE;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue