]> granicus.if.org Git - php/commitdiff
Move zend_objects_store_put out of zend_object_std_init
authorXinchen Hui <laruence@gmail.com>
Fri, 28 Feb 2014 04:59:51 +0000 (12:59 +0800)
committerXinchen Hui <laruence@gmail.com>
Fri, 28 Feb 2014 04:59:51 +0000 (12:59 +0800)
13 files changed:
Zend/zend_closures.c
Zend/zend_generators.c
Zend/zend_objects.c
ext/date/php_date.c
ext/reflection/php_reflection.c
ext/spl/spl_array.c
ext/spl/spl_directory.c
ext/spl/spl_dllist.c
ext/spl/spl_fixedarray.c
ext/spl/spl_heap.c
ext/spl/spl_iterators.c
ext/spl/spl_iterators.h
ext/spl/spl_observer.c

index 46894c6106a10510c1c6b77e9e8ad7ebd81076ca..00555564a3b2186331a764d40379d3f22b7f4833 100644 (file)
@@ -254,6 +254,7 @@ 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;
 }
index 7bdebf6a7b64358539343450e533c54adc9532ac..b1636469704e174ec7cb1ca313e45760733fe0bc 100644 (file)
@@ -222,6 +222,7 @@ 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;
index 5b6bd5ebb84f59ca4643f1ad77c18e48a62a05d6..25f453a7e5d26753d30244e637041eca268a35d1 100644 (file)
@@ -36,7 +36,6 @@ 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)
@@ -133,6 +132,7 @@ 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;
 }
index d3426f944cae1913919715311084e9d2e6e39ddd..869d3f659bf5f24ce1a0141b9e7163d617359a93 100644 (file)
@@ -2108,6 +2108,7 @@ 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;
 }
@@ -2242,6 +2243,7 @@ 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;
 }
@@ -2333,6 +2335,7 @@ 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;
 }
@@ -2414,6 +2417,7 @@ 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;
 }
index e82e13248e42f54a57a6eab43efd3999569db870..075a642f6d5f71aeb6c735b09dca438e7394052a 100644 (file)
@@ -325,6 +325,7 @@ 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;
index 924423122248d5d5f9162d2f307d811e719f63ec..b9cba542e1c40b97c1a1eea25d7cd5f3a38b4b32 100644 (file)
@@ -180,6 +180,7 @@ 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;
index 19edadd1bf2ea5fc2b20225ab02f196eaeb8fd1c..957068d9f562a473f3005f375bc6441ea5c5bb92 100644 (file)
@@ -157,6 +157,7 @@ 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;
index b00df3eb0d31213383d13ed0573bd354ae045827..c8e7e7cb9d01d8f3426f4a0f189df43b9ef5bd26 100644 (file)
@@ -375,6 +375,7 @@ 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;
index 758eec3e1615e2e64e3f32d3b3ac7cf449572b05..3e99cdaa8559347fa61158713ae815e2a8b49b4f 100644 (file)
@@ -217,6 +217,7 @@ 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;
index f74b1d4a10ad8596c75594437fdfbe3f7b45e3f4..7d69358b44231ddb0e03de62614fa7690ec674e8 100644 (file)
@@ -384,6 +384,7 @@ 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;
index f4575d8350fb7d5bb264135b5c9302d197f7268d..f7629c4614d4c4f215833cc421fd60d8e56cfc26 100644 (file)
@@ -905,6 +905,7 @@ 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;
@@ -1282,14 +1283,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_P(intern->inner.zobject)->get_method) {
+                       if (Z_OBJ_HT(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;
@@ -1519,11 +1520,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) {
-               Z_ADDREF_P(zobject);
+               ZVAL_COPY(&intern->inner.zobject, zobject);
+       } else {
+               ZVAL_COPY_VALUE(&intern->inner.zobject, 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;
@@ -1558,8 +1559,8 @@ SPL_METHOD(dual_it, getInnerIterator)
        
        SPL_FETCH_AND_CHECK_DUAL_IT(intern, getThis());
 
-       if (intern->inner.zobject) {
-               RETVAL_ZVAL(intern->inner.zobject, 1, 0);
+       if (!ZVAL_IS_UNDEF(&intern->inner.zobject)) {
+               RETVAL_ZVAL(&intern->inner.zobject, 1, 0);
        } else {
                RETURN_NULL();
        }
@@ -1843,7 +1844,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 {
@@ -1864,7 +1865,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);
        }
@@ -1884,7 +1885,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);
        }
@@ -1925,7 +1926,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;
@@ -2181,7 +2182,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);
@@ -2195,7 +2196,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);
@@ -2211,11 +2212,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 (object->inner.zobject) {
-               zval_ptr_dtor(object->inner.zobject);
+       if (!ZVAL_IS_UNDEF(&object->inner.zobject)) {
+               zval_ptr_dtor(&object->inner.zobject);
        }
        
        if (object->dit_type == DIT_AppendIterator) {
@@ -2228,7 +2229,6 @@ 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,6 +2269,7 @@ 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;
@@ -2408,7 +2409,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;
@@ -2560,7 +2561,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) {
@@ -2570,7 +2571,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) {
@@ -2599,7 +2600,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);
                        }
@@ -3217,11 +3218,10 @@ int spl_append_it_next_iterator(spl_dual_it_object *intern TSRMLS_DC) /* {{{*/
 {
        spl_dual_it_free(intern TSRMLS_CC);
 
-       if (intern->inner.zobject) {
-               zval_ptr_dtor(intern->inner.zobject);
-               intern->inner.zobject = NULL;
+       if (!ZVAL_IS_UNDEF(&intern->inner.zobject)) {
+               zval_ptr_dtor(&intern->inner.zobject);
+               ZVAL_UNDEF(&intern->inner.zobject);
                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,10 +3231,8 @@ 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);
-               Z_ADDREF_P(it);
-               intern->inner.zobject = it;
+               ZVAL_COPY(&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;
@@ -3289,7 +3287,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);
        }
 } /* }}} */
index 1da5b851819c923f57a7fc92e832c3f24a4c9aff..9c5b3e3b5d2ee8a0fed6214cd3938435d3998917 100644 (file)
@@ -126,9 +126,8 @@ 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 {
index 19037323ec23d69d96bfb44ca64de949a39de37d..098f250d4e5dcbdb52fcf993d576b895914640d6 100644 (file)
@@ -249,6 +249,7 @@ 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);