@@ -905,7 +905,6 @@ static zend_object *spl_RecursiveIteratorIterator_new_ex(zend_class_entry *class
905
905
}
906
906
907
907
zend_object_std_init (& intern -> std , class_type TSRMLS_CC );
908
- zend_objects_store_put (& intern -> std TSRMLS_CC );
909
908
object_properties_init (& intern -> std , class_type );
910
909
911
910
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
1283
1282
function_handler = std_object_handlers .get_method (object_ptr , method , key TSRMLS_CC );
1284
1283
if (!function_handler && intern -> inner .ce ) {
1285
1284
if ((function_handler = zend_hash_find_ptr (& intern -> inner .ce -> function_table , method )) == NULL ) {
1286
- if (Z_OBJ_HT (intern -> inner .zobject )-> get_method ) {
1285
+ if (Z_OBJ_HT_P (intern -> inner .zobject )-> get_method ) {
1287
1286
//!!! maybe we really need a zval ** here?
1288
1287
//*object_ptr = &intern->inner.zobject?
1289
- object_ptr = & intern -> inner .zobject ;
1288
+ object_ptr = intern -> inner .zobject ;
1290
1289
function_handler = Z_OBJ_HT_P (object_ptr )-> get_method (object_ptr , method , key TSRMLS_CC );
1291
1290
}
1292
1291
} else {
1293
- object_ptr = & intern -> inner .zobject ;
1292
+ object_ptr = intern -> inner .zobject ;
1294
1293
}
1295
1294
}
1296
1295
return function_handler ;
@@ -1520,11 +1519,11 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
1520
1519
zend_restore_error_handling (& error_handling TSRMLS_CC );
1521
1520
1522
1521
if (inc_refcount ) {
1523
- ZVAL_COPY (& intern -> inner .zobject , zobject );
1524
- } else {
1525
- ZVAL_COPY_VALUE (& intern -> inner .zobject , zobject );
1522
+ Z_ADDREF_P (zobject );
1526
1523
}
1524
+ intern -> inner .zobject = zobject ;
1527
1525
intern -> inner .ce = dit_type == DIT_IteratorIterator ? ce : Z_OBJCE_P (zobject );
1526
+ intern -> inner .object = Z_OBJ_P (zobject );
1528
1527
intern -> inner .iterator = intern -> inner .ce -> get_iterator (intern -> inner .ce , zobject , 0 TSRMLS_CC );
1529
1528
1530
1529
return intern ;
@@ -1559,8 +1558,8 @@ SPL_METHOD(dual_it, getInnerIterator)
1559
1558
1560
1559
SPL_FETCH_AND_CHECK_DUAL_IT (intern , getThis ());
1561
1560
1562
- if (! ZVAL_IS_UNDEF ( & intern -> inner .zobject ) ) {
1563
- RETVAL_ZVAL (& intern -> inner .zobject , 1 , 0 );
1561
+ if (intern -> inner .zobject ) {
1562
+ RETVAL_ZVAL (intern -> inner .zobject , 1 , 0 );
1564
1563
} else {
1565
1564
RETURN_NULL ();
1566
1565
}
@@ -1844,7 +1843,7 @@ SPL_METHOD(RecursiveFilterIterator, hasChildren)
1844
1843
1845
1844
SPL_FETCH_AND_CHECK_DUAL_IT (intern , getThis ());
1846
1845
1847
- zend_call_method_with_0_params (& intern -> inner .zobject , intern -> inner .ce , NULL , "haschildren" , & retval );
1846
+ zend_call_method_with_0_params (intern -> inner .zobject , intern -> inner .ce , NULL , "haschildren" , & retval );
1848
1847
if (Z_TYPE (retval ) != IS_UNDEF ) {
1849
1848
RETURN_ZVAL (& retval , 0 , 1 );
1850
1849
} else {
@@ -1865,7 +1864,7 @@ SPL_METHOD(RecursiveFilterIterator, getChildren)
1865
1864
1866
1865
SPL_FETCH_AND_CHECK_DUAL_IT (intern , getThis ());
1867
1866
1868
- zend_call_method_with_0_params (& intern -> inner .zobject , intern -> inner .ce , NULL , "getchildren" , & retval );
1867
+ zend_call_method_with_0_params (intern -> inner .zobject , intern -> inner .ce , NULL , "getchildren" , & retval );
1869
1868
if (!EG (exception ) && Z_TYPE (retval ) != IS_UNDEF ) {
1870
1869
spl_instantiate_arg_ex1 (Z_OBJCE_P (getThis ()), return_value , & retval TSRMLS_CC );
1871
1870
}
@@ -1885,7 +1884,7 @@ SPL_METHOD(RecursiveCallbackFilterIterator, getChildren)
1885
1884
1886
1885
intern = (spl_dual_it_object * )Z_OBJ_P (getThis ());
1887
1886
1888
- zend_call_method_with_0_params (& intern -> inner .zobject , intern -> inner .ce , NULL , "getchildren" , & retval );
1887
+ zend_call_method_with_0_params (intern -> inner .zobject , intern -> inner .ce , NULL , "getchildren" , & retval );
1889
1888
if (!EG (exception ) && Z_TYPE (retval ) != IS_UNDEF ) {
1890
1889
spl_instantiate_arg_ex2 (Z_OBJCE_P (getThis ()), return_value , & retval , & intern -> u .cbfilter -> fci .function_name TSRMLS_CC );
1891
1890
}
@@ -1926,7 +1925,7 @@ SPL_METHOD(CallbackFilterIterator, accept)
1926
1925
1927
1926
ZVAL_COPY_VALUE (& params [0 ], & intern -> current .data );
1928
1927
ZVAL_COPY_VALUE (& params [1 ], & intern -> current .key );
1929
- ZVAL_COPY_VALUE (& params [2 ], & intern -> inner .zobject );
1928
+ ZVAL_COPY_VALUE (& params [2 ], intern -> inner .zobject );
1930
1929
1931
1930
fci -> retval = & result ;
1932
1931
fci -> param_count = 3 ;
@@ -2182,7 +2181,7 @@ SPL_METHOD(RecursiveRegexIterator, getChildren)
2182
2181
2183
2182
SPL_FETCH_AND_CHECK_DUAL_IT (intern , getThis ());
2184
2183
2185
- zend_call_method_with_0_params (& intern -> inner .zobject , intern -> inner .ce , NULL , "getchildren" , & retval );
2184
+ zend_call_method_with_0_params (intern -> inner .zobject , intern -> inner .ce , NULL , "getchildren" , & retval );
2186
2185
if (!EG (exception )) {
2187
2186
ZVAL_STR (& regex , STR_COPY (intern -> u .regex .regex ));
2188
2187
spl_instantiate_arg_ex2 (Z_OBJCE_P (getThis ()), return_value , & retval , & regex TSRMLS_CC );
@@ -2196,7 +2195,7 @@ SPL_METHOD(RecursiveRegexIterator, getChildren)
2196
2195
/* {{{ spl_dual_it_dtor */
2197
2196
static void spl_dual_it_dtor (zend_object * _object TSRMLS_DC )
2198
2197
{
2199
- spl_dual_it_object * object = (spl_dual_it_object * )_object ;
2198
+ spl_dual_it_object * object = (spl_dual_it_object * )_object ;
2200
2199
2201
2200
/* call standard dtor */
2202
2201
zend_objects_destroy_object (_object TSRMLS_CC );
@@ -2212,11 +2211,11 @@ static void spl_dual_it_dtor(zend_object *_object TSRMLS_DC)
2212
2211
/* {{{ spl_dual_it_free_storage */
2213
2212
static void spl_dual_it_free_storage (zend_object * _object TSRMLS_DC )
2214
2213
{
2215
- spl_dual_it_object * object = (spl_dual_it_object * )_object ;
2214
+ spl_dual_it_object * object = (spl_dual_it_object * )_object ;
2216
2215
2217
2216
2218
- if (! ZVAL_IS_UNDEF ( & object -> inner .zobject ) ) {
2219
- zval_ptr_dtor (& object -> inner .zobject );
2217
+ if (object -> inner .zobject ) {
2218
+ zval_ptr_dtor (object -> inner .zobject );
2220
2219
}
2221
2220
2222
2221
if (object -> dit_type == DIT_AppendIterator ) {
@@ -2229,6 +2228,7 @@ static void spl_dual_it_free_storage(zend_object *_object TSRMLS_DC)
2229
2228
if (object -> dit_type == DIT_CachingIterator || object -> dit_type == DIT_RecursiveCachingIterator ) {
2230
2229
if (Z_TYPE (object -> u .caching .zcache ) != IS_UNDEF ) {
2231
2230
zval_ptr_dtor (& object -> u .caching .zcache );
2231
+ ZVAL_UNDEF (& object -> u .caching .zcache );
2232
2232
}
2233
2233
}
2234
2234
@@ -2269,7 +2269,6 @@ static zend_object *spl_dual_it_new(zend_class_entry *class_type TSRMLS_DC)
2269
2269
intern -> dit_type = DIT_Unknown ;
2270
2270
2271
2271
zend_object_std_init (& intern -> std , class_type TSRMLS_CC );
2272
- zend_objects_store_put (& intern -> std TSRMLS_CC );
2273
2272
object_properties_init (& intern -> std , class_type );
2274
2273
2275
2274
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
2409
2408
if (pos != intern -> current .pos && instanceof_function (intern -> inner .ce , spl_ce_SeekableIterator TSRMLS_CC )) {
2410
2409
ZVAL_LONG (& zpos , pos );
2411
2410
spl_dual_it_free (intern TSRMLS_CC );
2412
- zend_call_method_with_1_params (& intern -> inner .zobject , intern -> inner .ce , NULL , "seek" , NULL , & zpos );
2411
+ zend_call_method_with_1_params (intern -> inner .zobject , intern -> inner .ce , NULL , "seek" , NULL , & zpos );
2413
2412
zval_ptr_dtor (& zpos );
2414
2413
if (!EG (exception )) {
2415
2414
intern -> current .pos = pos ;
@@ -2561,7 +2560,7 @@ static inline void spl_caching_it_next(spl_dual_it_object *intern TSRMLS_DC)
2561
2560
/* Recursion ? */
2562
2561
if (intern -> dit_type == DIT_RecursiveCachingIterator ) {
2563
2562
zval retval , zchildren , zflags ;
2564
- zend_call_method_with_0_params (& intern -> inner .zobject , intern -> inner .ce , NULL , "haschildren" , & retval );
2563
+ zend_call_method_with_0_params (intern -> inner .zobject , intern -> inner .ce , NULL , "haschildren" , & retval );
2565
2564
if (EG (exception )) {
2566
2565
zval_ptr_dtor (& retval );
2567
2566
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)
2571
2570
}
2572
2571
} else {
2573
2572
if (zend_is_true (& retval TSRMLS_CC )) {
2574
- zend_call_method_with_0_params (& intern -> inner .zobject , intern -> inner .ce , NULL , "getchildren" , & zchildren );
2573
+ zend_call_method_with_0_params (intern -> inner .zobject , intern -> inner .ce , NULL , "getchildren" , & zchildren );
2575
2574
if (EG (exception )) {
2576
2575
zval_ptr_dtor (& zchildren );
2577
2576
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)
2600
2599
int use_copy ;
2601
2600
zval expr_copy ;
2602
2601
if (intern -> u .caching .flags & CIT_TOSTRING_USE_INNER ) {
2603
- ZVAL_COPY_VALUE (& intern -> u .caching .zstr , & intern -> inner .zobject );
2602
+ ZVAL_COPY_VALUE (& intern -> u .caching .zstr , intern -> inner .zobject );
2604
2603
} else {
2605
2604
ZVAL_COPY_VALUE (& intern -> u .caching .zstr , & intern -> current .data );
2606
2605
}
@@ -3218,10 +3217,11 @@ int spl_append_it_next_iterator(spl_dual_it_object *intern TSRMLS_DC) /* {{{*/
3218
3217
{
3219
3218
spl_dual_it_free (intern TSRMLS_CC );
3220
3219
3221
- if (! ZVAL_IS_UNDEF ( & intern -> inner .zobject ) ) {
3222
- zval_ptr_dtor (& intern -> inner .zobject );
3223
- ZVAL_UNDEF ( & intern -> inner .zobject ) ;
3220
+ if (intern -> inner .zobject ) {
3221
+ zval_ptr_dtor (intern -> inner .zobject );
3222
+ intern -> inner .zobject = NULL ;
3224
3223
intern -> inner .ce = NULL ;
3224
+ intern -> inner .object = NULL ;
3225
3225
if (intern -> inner .iterator ) {
3226
3226
intern -> inner .iterator -> funcs -> dtor (intern -> inner .iterator TSRMLS_CC );
3227
3227
intern -> inner .iterator = NULL ;
@@ -3231,8 +3231,10 @@ int spl_append_it_next_iterator(spl_dual_it_object *intern TSRMLS_DC) /* {{{*/
3231
3231
zval * it ;
3232
3232
3233
3233
it = intern -> u .append .iterator -> funcs -> get_current_data (intern -> u .append .iterator TSRMLS_CC );
3234
- ZVAL_COPY (& intern -> inner .zobject , it );
3234
+ Z_ADDREF_P (it );
3235
+ intern -> inner .zobject = it ;
3235
3236
intern -> inner .ce = Z_OBJCE_P (it );
3237
+ intern -> inner .object = Z_OBJ_P (it );
3236
3238
intern -> inner .iterator = intern -> inner .ce -> get_iterator (intern -> inner .ce , it , 0 TSRMLS_CC );
3237
3239
spl_dual_it_rewind (intern TSRMLS_CC );
3238
3240
return SUCCESS ;
@@ -3287,7 +3289,7 @@ SPL_METHOD(AppendIterator, append)
3287
3289
}
3288
3290
do {
3289
3291
spl_append_it_next_iterator (intern TSRMLS_CC );
3290
- } while (& intern -> inner .zobject != it );
3292
+ } while (intern -> inner .zobject != it );
3291
3293
spl_append_it_fetch (intern TSRMLS_CC );
3292
3294
}
3293
3295
} /* }}} */
0 commit comments