summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2014-02-28 13:59:07 +0800
committerXinchen Hui <laruence@gmail.com>2014-02-28 13:59:07 +0800
commita5ce7d526e77a7d0cce650c7b2c09a1c31ad39bb (patch)
treeb1e27e3de1c7f79ddbd25f8383e8681eac33962b
parent32311747496da82069017649590e0fec801443c2 (diff)
downloadphp-git-a5ce7d526e77a7d0cce650c7b2c09a1c31ad39bb.tar.gz
Revert "Move zend_objects_store_put out of zend_object_std_init"
This reverts commit 8ced4f0ac906fd9a28b968801487630326c45bc8.
-rw-r--r--Zend/zend_closures.c1
-rw-r--r--Zend/zend_generators.c1
-rw-r--r--Zend/zend_objects.c2
-rw-r--r--ext/date/php_date.c4
-rw-r--r--ext/reflection/php_reflection.c1
-rw-r--r--ext/spl/spl_array.c1
-rw-r--r--ext/spl/spl_directory.c1
-rw-r--r--ext/spl/spl_dllist.c1
-rw-r--r--ext/spl/spl_fixedarray.c1
-rw-r--r--ext/spl/spl_heap.c1
-rw-r--r--ext/spl/spl_iterators.c58
-rw-r--r--ext/spl/spl_iterators.h3
-rw-r--r--ext/spl/spl_observer.c1
13 files changed, 33 insertions, 43 deletions
diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c
index 00555564a3..46894c6106 100644
--- a/Zend/zend_closures.c
+++ b/Zend/zend_closures.c
@@ -254,7 +254,6 @@ static zend_object *zend_closure_new(zend_class_entry *class_type TSRMLS_DC) /*
zend_object_std_init(&closure->std, class_type TSRMLS_CC);
closure->std.handlers = &closure_handlers;
- zend_objects_store_put(&closure->std);
return (zend_object*)closure;
}
diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c
index b163646970..7bdebf6a7b 100644
--- a/Zend/zend_generators.c
+++ b/Zend/zend_generators.c
@@ -222,7 +222,6 @@ static zend_object *zend_generator_create(zend_class_entry *class_type TSRMLS_DC
generator->largest_used_integer_key = -1;
zend_object_std_init(&generator->std, class_type TSRMLS_CC);
- zend_objects_store_put(&generator->std TSRMLS_CC);
generator->std.handlers = &zend_generator_handlers;
return (zend_object*)generator;
diff --git a/Zend/zend_objects.c b/Zend/zend_objects.c
index 25f453a7e5..5b6bd5ebb8 100644
--- a/Zend/zend_objects.c
+++ b/Zend/zend_objects.c
@@ -36,6 +36,7 @@ ZEND_API void zend_object_std_init(zend_object *object, zend_class_entry *ce TSR
object->properties = NULL;
object->guards = NULL;
memset(object->properties_table, 0, sizeof(zval) * ce->default_properties_count);
+ zend_objects_store_put(object);
}
ZEND_API void zend_object_std_dtor(zend_object *object TSRMLS_DC)
@@ -132,7 +133,6 @@ ZEND_API zend_object *zend_objects_new(zend_class_entry *ce TSRMLS_DC)
zend_object *object = emalloc(sizeof(zend_object) + sizeof(zval) * (ce->default_properties_count - 1));
zend_object_std_init(object, ce);
- zend_objects_store_put(object);
object->handlers = &std_object_handlers;
return object;
}
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index 869d3f659b..d3426f944c 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -2108,7 +2108,6 @@ static inline zend_object *date_object_new_date_ex(zend_class_entry *class_type
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
object_properties_init(&intern->std, class_type);
intern->std.handlers = &date_object_handlers_date;
- zend_objects_store_put(&intern->std TSRMLS_CC);
return (zend_object*)intern;
}
@@ -2243,7 +2242,6 @@ static inline zend_object *date_object_new_timezone_ex(zend_class_entry *class_t
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
object_properties_init(&intern->std, class_type);
intern->std.handlers = &date_object_handlers_timezone;
- zend_objects_store_put(&intern->std TSRMLS_CC);
return (zend_object*)intern;
}
@@ -2335,7 +2333,6 @@ static inline zend_object *date_object_new_interval_ex(zend_class_entry *class_t
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
object_properties_init(&intern->std, class_type);
intern->std.handlers = &date_object_handlers_interval;
- zend_objects_store_put(&intern->std TSRMLS_CC);
return (zend_object*)intern;
}
@@ -2417,7 +2414,6 @@ static inline zend_object *date_object_new_period_ex(zend_class_entry *class_typ
object_properties_init(&intern->std, class_type);
//??? date_object_free_storage_period, NULL TSRMLS_CC);
intern->std.handlers = &date_object_handlers_period;
- zend_objects_store_put(&intern->std TSRMLS_CC);
return (zend_object*)intern;
}
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index 075a642f6d..e82e13248e 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -325,7 +325,6 @@ static zend_object *reflection_objects_new(zend_class_entry *class_type TSRMLS_D
intern->zo.ce = class_type;
zend_object_std_init(&intern->zo, class_type TSRMLS_CC);
- zend_objects_store_put(&intern->zo TSRMLS_CC);
object_properties_init(&intern->zo, class_type);
intern->zo.handlers = &reflection_object_handlers;
return (zend_object*)intern;
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c
index b9cba542e1..9244231222 100644
--- a/ext/spl/spl_array.c
+++ b/ext/spl/spl_array.c
@@ -180,7 +180,6 @@ static zend_object *spl_array_object_new_ex(zend_class_entry *class_type, zval *
memset(intern, 0, sizeof(spl_array_object));
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
- zend_objects_store_put(&intern->std TSRMLS_CC);
object_properties_init(&intern->std, class_type);
intern->ar_flags = 0;
diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c
index 957068d9f5..19edadd1bf 100644
--- a/ext/spl/spl_directory.c
+++ b/ext/spl/spl_directory.c
@@ -157,7 +157,6 @@ static zend_object *spl_filesystem_object_new_ex(zend_class_entry *class_type TS
intern->info_class = spl_ce_SplFileInfo;
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
- zend_objects_store_put(&intern->std TSRMLS_CC);
object_properties_init(&intern->std, class_type);
intern->std.handlers = &spl_filesystem_object_handlers;
diff --git a/ext/spl/spl_dllist.c b/ext/spl/spl_dllist.c
index c8e7e7cb9d..b00df3eb0d 100644
--- a/ext/spl/spl_dllist.c
+++ b/ext/spl/spl_dllist.c
@@ -375,7 +375,6 @@ static zend_object *spl_dllist_object_new_ex(zend_class_entry *class_type, zval
intern = ecalloc(1, sizeof(spl_dllist_object));
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
- zend_objects_store_put(&intern->std TSRMLS_CC);
object_properties_init(&intern->std, class_type);
intern->flags = 0;
diff --git a/ext/spl/spl_fixedarray.c b/ext/spl/spl_fixedarray.c
index 3e99cdaa85..758eec3e16 100644
--- a/ext/spl/spl_fixedarray.c
+++ b/ext/spl/spl_fixedarray.c
@@ -217,7 +217,6 @@ static zend_object *spl_fixedarray_object_new_ex(zend_class_entry *class_type, z
intern = ecalloc(1, sizeof(spl_fixedarray_object));
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
- zend_objects_store_put(&intern->std TSRMLS_CC);
object_properties_init(&intern->std, class_type);
intern->current = 0;
diff --git a/ext/spl/spl_heap.c b/ext/spl/spl_heap.c
index 7d69358b44..f74b1d4a10 100644
--- a/ext/spl/spl_heap.c
+++ b/ext/spl/spl_heap.c
@@ -384,7 +384,6 @@ static zend_object *spl_heap_object_new_ex(zend_class_entry *class_type, zval *o
intern = ecalloc(1, sizeof(spl_heap_object));
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
- zend_objects_store_put(&intern->std TSRMLS_CC);
object_properties_init(&intern->std, class_type);
intern->flags = 0;
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c
index f7629c4614..f4575d8350 100644
--- a/ext/spl/spl_iterators.c
+++ b/ext/spl/spl_iterators.c
@@ -905,7 +905,6 @@ static zend_object *spl_RecursiveIteratorIterator_new_ex(zend_class_entry *class
}
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
- zend_objects_store_put(&intern->std TSRMLS_CC);
object_properties_init(&intern->std, class_type);
intern->std.handlers = &spl_handlers_rec_it_it;
@@ -1283,14 +1282,14 @@ static union _zend_function *spl_dual_it_get_method(zval *object_ptr, zend_strin
function_handler = std_object_handlers.get_method(object_ptr, method, key TSRMLS_CC);
if (!function_handler && intern->inner.ce) {
if ((function_handler = zend_hash_find_ptr(&intern->inner.ce->function_table, method)) == NULL) {
- if (Z_OBJ_HT(intern->inner.zobject)->get_method) {
+ if (Z_OBJ_HT_P(intern->inner.zobject)->get_method) {
//!!! maybe we really need a zval ** here?
//*object_ptr = &intern->inner.zobject?
- object_ptr = &intern->inner.zobject;
+ object_ptr = intern->inner.zobject;
function_handler = Z_OBJ_HT_P(object_ptr)->get_method(object_ptr, method, key TSRMLS_CC);
}
} else {
- object_ptr = &intern->inner.zobject;
+ object_ptr = intern->inner.zobject;
}
}
return function_handler;
@@ -1520,11 +1519,11 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
zend_restore_error_handling(&error_handling TSRMLS_CC);
if (inc_refcount) {
- ZVAL_COPY(&intern->inner.zobject, zobject);
- } else {
- ZVAL_COPY_VALUE(&intern->inner.zobject, zobject);
+ Z_ADDREF_P(zobject);
}
+ intern->inner.zobject = zobject;
intern->inner.ce = dit_type == DIT_IteratorIterator ? ce : Z_OBJCE_P(zobject);
+ intern->inner.object = Z_OBJ_P(zobject);
intern->inner.iterator = intern->inner.ce->get_iterator(intern->inner.ce, zobject, 0 TSRMLS_CC);
return intern;
@@ -1559,8 +1558,8 @@ SPL_METHOD(dual_it, getInnerIterator)
SPL_FETCH_AND_CHECK_DUAL_IT(intern, getThis());
- if (!ZVAL_IS_UNDEF(&intern->inner.zobject)) {
- RETVAL_ZVAL(&intern->inner.zobject, 1, 0);
+ if (intern->inner.zobject) {
+ RETVAL_ZVAL(intern->inner.zobject, 1, 0);
} else {
RETURN_NULL();
}
@@ -1844,7 +1843,7 @@ SPL_METHOD(RecursiveFilterIterator, hasChildren)
SPL_FETCH_AND_CHECK_DUAL_IT(intern, getThis());
- zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "haschildren", &retval);
+ zend_call_method_with_0_params(intern->inner.zobject, intern->inner.ce, NULL, "haschildren", &retval);
if (Z_TYPE(retval) != IS_UNDEF) {
RETURN_ZVAL(&retval, 0, 1);
} else {
@@ -1865,7 +1864,7 @@ SPL_METHOD(RecursiveFilterIterator, getChildren)
SPL_FETCH_AND_CHECK_DUAL_IT(intern, getThis());
- zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &retval);
+ zend_call_method_with_0_params(intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &retval);
if (!EG(exception) && Z_TYPE(retval) != IS_UNDEF) {
spl_instantiate_arg_ex1(Z_OBJCE_P(getThis()), return_value, &retval TSRMLS_CC);
}
@@ -1885,7 +1884,7 @@ SPL_METHOD(RecursiveCallbackFilterIterator, getChildren)
intern = (spl_dual_it_object*)Z_OBJ_P(getThis());
- zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &retval);
+ zend_call_method_with_0_params(intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &retval);
if (!EG(exception) && Z_TYPE(retval) != IS_UNDEF) {
spl_instantiate_arg_ex2(Z_OBJCE_P(getThis()), return_value, &retval, &intern->u.cbfilter->fci.function_name TSRMLS_CC);
}
@@ -1926,7 +1925,7 @@ SPL_METHOD(CallbackFilterIterator, accept)
ZVAL_COPY_VALUE(&params[0], &intern->current.data);
ZVAL_COPY_VALUE(&params[1], &intern->current.key);
- ZVAL_COPY_VALUE(&params[2], &intern->inner.zobject);
+ ZVAL_COPY_VALUE(&params[2], intern->inner.zobject);
fci->retval = &result;
fci->param_count = 3;
@@ -2182,7 +2181,7 @@ SPL_METHOD(RecursiveRegexIterator, getChildren)
SPL_FETCH_AND_CHECK_DUAL_IT(intern, getThis());
- zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &retval);
+ zend_call_method_with_0_params(intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &retval);
if (!EG(exception)) {
ZVAL_STR(&regex, STR_COPY(intern->u.regex.regex));
spl_instantiate_arg_ex2(Z_OBJCE_P(getThis()), return_value, &retval, &regex TSRMLS_CC);
@@ -2196,7 +2195,7 @@ SPL_METHOD(RecursiveRegexIterator, getChildren)
/* {{{ spl_dual_it_dtor */
static void spl_dual_it_dtor(zend_object *_object TSRMLS_DC)
{
- spl_dual_it_object *object = (spl_dual_it_object *)_object;
+ spl_dual_it_object *object = (spl_dual_it_object *)_object;
/* call standard dtor */
zend_objects_destroy_object(_object TSRMLS_CC);
@@ -2212,11 +2211,11 @@ static void spl_dual_it_dtor(zend_object *_object TSRMLS_DC)
/* {{{ spl_dual_it_free_storage */
static void spl_dual_it_free_storage(zend_object *_object TSRMLS_DC)
{
- spl_dual_it_object *object = (spl_dual_it_object *)_object;
+ spl_dual_it_object *object = (spl_dual_it_object *)_object;
- if (!ZVAL_IS_UNDEF(&object->inner.zobject)) {
- zval_ptr_dtor(&object->inner.zobject);
+ if (object->inner.zobject) {
+ zval_ptr_dtor(object->inner.zobject);
}
if (object->dit_type == DIT_AppendIterator) {
@@ -2229,6 +2228,7 @@ static void spl_dual_it_free_storage(zend_object *_object TSRMLS_DC)
if (object->dit_type == DIT_CachingIterator || object->dit_type == DIT_RecursiveCachingIterator) {
if (Z_TYPE(object->u.caching.zcache) != IS_UNDEF) {
zval_ptr_dtor(&object->u.caching.zcache);
+ ZVAL_UNDEF(&object->u.caching.zcache);
}
}
@@ -2269,7 +2269,6 @@ static zend_object *spl_dual_it_new(zend_class_entry *class_type TSRMLS_DC)
intern->dit_type = DIT_Unknown;
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
- zend_objects_store_put(&intern->std TSRMLS_CC);
object_properties_init(&intern->std, class_type);
intern->std.handlers = &spl_handlers_dual_it;
@@ -2409,7 +2408,7 @@ static inline void spl_limit_it_seek(spl_dual_it_object *intern, long pos TSRMLS
if (pos != intern->current.pos && instanceof_function(intern->inner.ce, spl_ce_SeekableIterator TSRMLS_CC)) {
ZVAL_LONG(&zpos, pos);
spl_dual_it_free(intern TSRMLS_CC);
- zend_call_method_with_1_params(&intern->inner.zobject, intern->inner.ce, NULL, "seek", NULL, &zpos);
+ zend_call_method_with_1_params(intern->inner.zobject, intern->inner.ce, NULL, "seek", NULL, &zpos);
zval_ptr_dtor(&zpos);
if (!EG(exception)) {
intern->current.pos = pos;
@@ -2561,7 +2560,7 @@ static inline void spl_caching_it_next(spl_dual_it_object *intern TSRMLS_DC)
/* Recursion ? */
if (intern->dit_type == DIT_RecursiveCachingIterator) {
zval retval, zchildren, zflags;
- zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "haschildren", &retval);
+ zend_call_method_with_0_params(intern->inner.zobject, intern->inner.ce, NULL, "haschildren", &retval);
if (EG(exception)) {
zval_ptr_dtor(&retval);
if (intern->u.caching.flags & CIT_CATCH_GET_CHILD) {
@@ -2571,7 +2570,7 @@ static inline void spl_caching_it_next(spl_dual_it_object *intern TSRMLS_DC)
}
} else {
if (zend_is_true(&retval TSRMLS_CC)) {
- zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &zchildren);
+ zend_call_method_with_0_params(intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &zchildren);
if (EG(exception)) {
zval_ptr_dtor(&zchildren);
if (intern->u.caching.flags & CIT_CATCH_GET_CHILD) {
@@ -2600,7 +2599,7 @@ static inline void spl_caching_it_next(spl_dual_it_object *intern TSRMLS_DC)
int use_copy;
zval expr_copy;
if (intern->u.caching.flags & CIT_TOSTRING_USE_INNER) {
- ZVAL_COPY_VALUE(&intern->u.caching.zstr, &intern->inner.zobject);
+ ZVAL_COPY_VALUE(&intern->u.caching.zstr, intern->inner.zobject);
} else {
ZVAL_COPY_VALUE(&intern->u.caching.zstr, &intern->current.data);
}
@@ -3218,10 +3217,11 @@ int spl_append_it_next_iterator(spl_dual_it_object *intern TSRMLS_DC) /* {{{*/
{
spl_dual_it_free(intern TSRMLS_CC);
- if (!ZVAL_IS_UNDEF(&intern->inner.zobject)) {
- zval_ptr_dtor(&intern->inner.zobject);
- ZVAL_UNDEF(&intern->inner.zobject);
+ if (intern->inner.zobject) {
+ zval_ptr_dtor(intern->inner.zobject);
+ intern->inner.zobject = NULL;
intern->inner.ce = NULL;
+ intern->inner.object = NULL;
if (intern->inner.iterator) {
intern->inner.iterator->funcs->dtor(intern->inner.iterator TSRMLS_CC);
intern->inner.iterator = NULL;
@@ -3231,8 +3231,10 @@ int spl_append_it_next_iterator(spl_dual_it_object *intern TSRMLS_DC) /* {{{*/
zval *it;
it = intern->u.append.iterator->funcs->get_current_data(intern->u.append.iterator TSRMLS_CC);
- ZVAL_COPY(&intern->inner.zobject, it);
+ Z_ADDREF_P(it);
+ intern->inner.zobject = it;
intern->inner.ce = Z_OBJCE_P(it);
+ intern->inner.object = Z_OBJ_P(it);
intern->inner.iterator = intern->inner.ce->get_iterator(intern->inner.ce, it, 0 TSRMLS_CC);
spl_dual_it_rewind(intern TSRMLS_CC);
return SUCCESS;
@@ -3287,7 +3289,7 @@ SPL_METHOD(AppendIterator, append)
}
do {
spl_append_it_next_iterator(intern TSRMLS_CC);
- } while (&intern->inner.zobject != it);
+ } while (intern->inner.zobject != it);
spl_append_it_fetch(intern TSRMLS_CC);
}
} /* }}} */
diff --git a/ext/spl/spl_iterators.h b/ext/spl/spl_iterators.h
index 9c5b3e3b5d..1da5b85181 100644
--- a/ext/spl/spl_iterators.h
+++ b/ext/spl/spl_iterators.h
@@ -126,8 +126,9 @@ typedef struct _spl_cbfilter_it_intern {
typedef struct _spl_dual_it_object {
zend_object std;
struct {
- zval zobject;
+ zval *zobject;
zend_class_entry *ce;
+ zend_object *object;
zend_object_iterator *iterator;
} inner;
struct {
diff --git a/ext/spl/spl_observer.c b/ext/spl/spl_observer.c
index 098f250d4e..19037323ec 100644
--- a/ext/spl/spl_observer.c
+++ b/ext/spl/spl_observer.c
@@ -249,7 +249,6 @@ static zend_object *spl_object_storage_new_ex(zend_class_entry *class_type, zval
intern->pos = INVALID_IDX;
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
- zend_objects_store_put(&intern->std TSRMLS_CC);
object_properties_init(&intern->std, class_type);
zend_hash_init(&intern->storage, 0, NULL, spl_object_storage_dtor, 0);