Skip to content

Commit a5ce7d5

Browse files
committed
Revert "Move zend_objects_store_put out of zend_object_std_init"
This reverts commit 8ced4f0.
1 parent 3231174 commit a5ce7d5

13 files changed

+33
-43
lines changed

Zend/zend_closures.c

-1
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,6 @@ static zend_object *zend_closure_new(zend_class_entry *class_type TSRMLS_DC) /*
254254

255255
zend_object_std_init(&closure->std, class_type TSRMLS_CC);
256256
closure->std.handlers = &closure_handlers;
257-
zend_objects_store_put(&closure->std);
258257

259258
return (zend_object*)closure;
260259
}

Zend/zend_generators.c

-1
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,6 @@ static zend_object *zend_generator_create(zend_class_entry *class_type TSRMLS_DC
222222
generator->largest_used_integer_key = -1;
223223

224224
zend_object_std_init(&generator->std, class_type TSRMLS_CC);
225-
zend_objects_store_put(&generator->std TSRMLS_CC);
226225
generator->std.handlers = &zend_generator_handlers;
227226

228227
return (zend_object*)generator;

Zend/zend_objects.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ ZEND_API void zend_object_std_init(zend_object *object, zend_class_entry *ce TSR
3636
object->properties = NULL;
3737
object->guards = NULL;
3838
memset(object->properties_table, 0, sizeof(zval) * ce->default_properties_count);
39+
zend_objects_store_put(object);
3940
}
4041

4142
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)
132133
zend_object *object = emalloc(sizeof(zend_object) + sizeof(zval) * (ce->default_properties_count - 1));
133134

134135
zend_object_std_init(object, ce);
135-
zend_objects_store_put(object);
136136
object->handlers = &std_object_handlers;
137137
return object;
138138
}

ext/date/php_date.c

-4
Original file line numberDiff line numberDiff line change
@@ -2108,7 +2108,6 @@ static inline zend_object *date_object_new_date_ex(zend_class_entry *class_type
21082108
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
21092109
object_properties_init(&intern->std, class_type);
21102110
intern->std.handlers = &date_object_handlers_date;
2111-
zend_objects_store_put(&intern->std TSRMLS_CC);
21122111

21132112
return (zend_object*)intern;
21142113
}
@@ -2243,7 +2242,6 @@ static inline zend_object *date_object_new_timezone_ex(zend_class_entry *class_t
22432242
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
22442243
object_properties_init(&intern->std, class_type);
22452244
intern->std.handlers = &date_object_handlers_timezone;
2246-
zend_objects_store_put(&intern->std TSRMLS_CC);
22472245

22482246
return (zend_object*)intern;
22492247
}
@@ -2335,7 +2333,6 @@ static inline zend_object *date_object_new_interval_ex(zend_class_entry *class_t
23352333
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
23362334
object_properties_init(&intern->std, class_type);
23372335
intern->std.handlers = &date_object_handlers_interval;
2338-
zend_objects_store_put(&intern->std TSRMLS_CC);
23392336

23402337
return (zend_object*)intern;
23412338
}
@@ -2417,7 +2414,6 @@ static inline zend_object *date_object_new_period_ex(zend_class_entry *class_typ
24172414
object_properties_init(&intern->std, class_type);
24182415
//??? date_object_free_storage_period, NULL TSRMLS_CC);
24192416
intern->std.handlers = &date_object_handlers_period;
2420-
zend_objects_store_put(&intern->std TSRMLS_CC);
24212417

24222418
return (zend_object*)intern;
24232419
}

ext/reflection/php_reflection.c

-1
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,6 @@ static zend_object *reflection_objects_new(zend_class_entry *class_type TSRMLS_D
325325
intern->zo.ce = class_type;
326326

327327
zend_object_std_init(&intern->zo, class_type TSRMLS_CC);
328-
zend_objects_store_put(&intern->zo TSRMLS_CC);
329328
object_properties_init(&intern->zo, class_type);
330329
intern->zo.handlers = &reflection_object_handlers;
331330
return (zend_object*)intern;

ext/spl/spl_array.c

-1
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,6 @@ static zend_object *spl_array_object_new_ex(zend_class_entry *class_type, zval *
180180
memset(intern, 0, sizeof(spl_array_object));
181181

182182
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
183-
zend_objects_store_put(&intern->std TSRMLS_CC);
184183
object_properties_init(&intern->std, class_type);
185184

186185
intern->ar_flags = 0;

ext/spl/spl_directory.c

-1
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,6 @@ static zend_object *spl_filesystem_object_new_ex(zend_class_entry *class_type TS
157157
intern->info_class = spl_ce_SplFileInfo;
158158

159159
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
160-
zend_objects_store_put(&intern->std TSRMLS_CC);
161160
object_properties_init(&intern->std, class_type);
162161

163162
intern->std.handlers = &spl_filesystem_object_handlers;

ext/spl/spl_dllist.c

-1
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,6 @@ static zend_object *spl_dllist_object_new_ex(zend_class_entry *class_type, zval
375375
intern = ecalloc(1, sizeof(spl_dllist_object));
376376

377377
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
378-
zend_objects_store_put(&intern->std TSRMLS_CC);
379378
object_properties_init(&intern->std, class_type);
380379

381380
intern->flags = 0;

ext/spl/spl_fixedarray.c

-1
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,6 @@ static zend_object *spl_fixedarray_object_new_ex(zend_class_entry *class_type, z
217217
intern = ecalloc(1, sizeof(spl_fixedarray_object));
218218

219219
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
220-
zend_objects_store_put(&intern->std TSRMLS_CC);
221220
object_properties_init(&intern->std, class_type);
222221

223222
intern->current = 0;

ext/spl/spl_heap.c

-1
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,6 @@ static zend_object *spl_heap_object_new_ex(zend_class_entry *class_type, zval *o
384384
intern = ecalloc(1, sizeof(spl_heap_object));
385385

386386
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
387-
zend_objects_store_put(&intern->std TSRMLS_CC);
388387
object_properties_init(&intern->std, class_type);
389388

390389
intern->flags = 0;

ext/spl/spl_iterators.c

+30-28
Original file line numberDiff line numberDiff line change
@@ -905,7 +905,6 @@ static zend_object *spl_RecursiveIteratorIterator_new_ex(zend_class_entry *class
905905
}
906906

907907
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
908-
zend_objects_store_put(&intern->std TSRMLS_CC);
909908
object_properties_init(&intern->std, class_type);
910909

911910
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
12831282
function_handler = std_object_handlers.get_method(object_ptr, method, key TSRMLS_CC);
12841283
if (!function_handler && intern->inner.ce) {
12851284
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) {
12871286
//!!! maybe we really need a zval ** here?
12881287
//*object_ptr = &intern->inner.zobject?
1289-
object_ptr = &intern->inner.zobject;
1288+
object_ptr = intern->inner.zobject;
12901289
function_handler = Z_OBJ_HT_P(object_ptr)->get_method(object_ptr, method, key TSRMLS_CC);
12911290
}
12921291
} else {
1293-
object_ptr = &intern->inner.zobject;
1292+
object_ptr = intern->inner.zobject;
12941293
}
12951294
}
12961295
return function_handler;
@@ -1520,11 +1519,11 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
15201519
zend_restore_error_handling(&error_handling TSRMLS_CC);
15211520

15221521
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);
15261523
}
1524+
intern->inner.zobject = zobject;
15271525
intern->inner.ce = dit_type == DIT_IteratorIterator ? ce : Z_OBJCE_P(zobject);
1526+
intern->inner.object = Z_OBJ_P(zobject);
15281527
intern->inner.iterator = intern->inner.ce->get_iterator(intern->inner.ce, zobject, 0 TSRMLS_CC);
15291528

15301529
return intern;
@@ -1559,8 +1558,8 @@ SPL_METHOD(dual_it, getInnerIterator)
15591558

15601559
SPL_FETCH_AND_CHECK_DUAL_IT(intern, getThis());
15611560

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);
15641563
} else {
15651564
RETURN_NULL();
15661565
}
@@ -1844,7 +1843,7 @@ SPL_METHOD(RecursiveFilterIterator, hasChildren)
18441843

18451844
SPL_FETCH_AND_CHECK_DUAL_IT(intern, getThis());
18461845

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);
18481847
if (Z_TYPE(retval) != IS_UNDEF) {
18491848
RETURN_ZVAL(&retval, 0, 1);
18501849
} else {
@@ -1865,7 +1864,7 @@ SPL_METHOD(RecursiveFilterIterator, getChildren)
18651864

18661865
SPL_FETCH_AND_CHECK_DUAL_IT(intern, getThis());
18671866

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);
18691868
if (!EG(exception) && Z_TYPE(retval) != IS_UNDEF) {
18701869
spl_instantiate_arg_ex1(Z_OBJCE_P(getThis()), return_value, &retval TSRMLS_CC);
18711870
}
@@ -1885,7 +1884,7 @@ SPL_METHOD(RecursiveCallbackFilterIterator, getChildren)
18851884

18861885
intern = (spl_dual_it_object*)Z_OBJ_P(getThis());
18871886

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);
18891888
if (!EG(exception) && Z_TYPE(retval) != IS_UNDEF) {
18901889
spl_instantiate_arg_ex2(Z_OBJCE_P(getThis()), return_value, &retval, &intern->u.cbfilter->fci.function_name TSRMLS_CC);
18911890
}
@@ -1926,7 +1925,7 @@ SPL_METHOD(CallbackFilterIterator, accept)
19261925

19271926
ZVAL_COPY_VALUE(&params[0], &intern->current.data);
19281927
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);
19301929

19311930
fci->retval = &result;
19321931
fci->param_count = 3;
@@ -2182,7 +2181,7 @@ SPL_METHOD(RecursiveRegexIterator, getChildren)
21822181

21832182
SPL_FETCH_AND_CHECK_DUAL_IT(intern, getThis());
21842183

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);
21862185
if (!EG(exception)) {
21872186
ZVAL_STR(&regex, STR_COPY(intern->u.regex.regex));
21882187
spl_instantiate_arg_ex2(Z_OBJCE_P(getThis()), return_value, &retval, &regex TSRMLS_CC);
@@ -2196,7 +2195,7 @@ SPL_METHOD(RecursiveRegexIterator, getChildren)
21962195
/* {{{ spl_dual_it_dtor */
21972196
static void spl_dual_it_dtor(zend_object *_object TSRMLS_DC)
21982197
{
2199-
spl_dual_it_object *object = (spl_dual_it_object *)_object;
2198+
spl_dual_it_object *object = (spl_dual_it_object *)_object;
22002199

22012200
/* call standard dtor */
22022201
zend_objects_destroy_object(_object TSRMLS_CC);
@@ -2212,11 +2211,11 @@ static void spl_dual_it_dtor(zend_object *_object TSRMLS_DC)
22122211
/* {{{ spl_dual_it_free_storage */
22132212
static void spl_dual_it_free_storage(zend_object *_object TSRMLS_DC)
22142213
{
2215-
spl_dual_it_object *object = (spl_dual_it_object *)_object;
2214+
spl_dual_it_object *object = (spl_dual_it_object *)_object;
22162215

22172216

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);
22202219
}
22212220

22222221
if (object->dit_type == DIT_AppendIterator) {
@@ -2229,6 +2228,7 @@ static void spl_dual_it_free_storage(zend_object *_object TSRMLS_DC)
22292228
if (object->dit_type == DIT_CachingIterator || object->dit_type == DIT_RecursiveCachingIterator) {
22302229
if (Z_TYPE(object->u.caching.zcache) != IS_UNDEF) {
22312230
zval_ptr_dtor(&object->u.caching.zcache);
2231+
ZVAL_UNDEF(&object->u.caching.zcache);
22322232
}
22332233
}
22342234

@@ -2269,7 +2269,6 @@ static zend_object *spl_dual_it_new(zend_class_entry *class_type TSRMLS_DC)
22692269
intern->dit_type = DIT_Unknown;
22702270

22712271
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
2272-
zend_objects_store_put(&intern->std TSRMLS_CC);
22732272
object_properties_init(&intern->std, class_type);
22742273

22752274
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
24092408
if (pos != intern->current.pos && instanceof_function(intern->inner.ce, spl_ce_SeekableIterator TSRMLS_CC)) {
24102409
ZVAL_LONG(&zpos, pos);
24112410
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);
24132412
zval_ptr_dtor(&zpos);
24142413
if (!EG(exception)) {
24152414
intern->current.pos = pos;
@@ -2561,7 +2560,7 @@ static inline void spl_caching_it_next(spl_dual_it_object *intern TSRMLS_DC)
25612560
/* Recursion ? */
25622561
if (intern->dit_type == DIT_RecursiveCachingIterator) {
25632562
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);
25652564
if (EG(exception)) {
25662565
zval_ptr_dtor(&retval);
25672566
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)
25712570
}
25722571
} else {
25732572
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);
25752574
if (EG(exception)) {
25762575
zval_ptr_dtor(&zchildren);
25772576
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)
26002599
int use_copy;
26012600
zval expr_copy;
26022601
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);
26042603
} else {
26052604
ZVAL_COPY_VALUE(&intern->u.caching.zstr, &intern->current.data);
26062605
}
@@ -3218,10 +3217,11 @@ int spl_append_it_next_iterator(spl_dual_it_object *intern TSRMLS_DC) /* {{{*/
32183217
{
32193218
spl_dual_it_free(intern TSRMLS_CC);
32203219

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;
32243223
intern->inner.ce = NULL;
3224+
intern->inner.object = NULL;
32253225
if (intern->inner.iterator) {
32263226
intern->inner.iterator->funcs->dtor(intern->inner.iterator TSRMLS_CC);
32273227
intern->inner.iterator = NULL;
@@ -3231,8 +3231,10 @@ int spl_append_it_next_iterator(spl_dual_it_object *intern TSRMLS_DC) /* {{{*/
32313231
zval *it;
32323232

32333233
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;
32353236
intern->inner.ce = Z_OBJCE_P(it);
3237+
intern->inner.object = Z_OBJ_P(it);
32363238
intern->inner.iterator = intern->inner.ce->get_iterator(intern->inner.ce, it, 0 TSRMLS_CC);
32373239
spl_dual_it_rewind(intern TSRMLS_CC);
32383240
return SUCCESS;
@@ -3287,7 +3289,7 @@ SPL_METHOD(AppendIterator, append)
32873289
}
32883290
do {
32893291
spl_append_it_next_iterator(intern TSRMLS_CC);
3290-
} while (&intern->inner.zobject != it);
3292+
} while (intern->inner.zobject != it);
32913293
spl_append_it_fetch(intern TSRMLS_CC);
32923294
}
32933295
} /* }}} */

ext/spl/spl_iterators.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,9 @@ typedef struct _spl_cbfilter_it_intern {
126126
typedef struct _spl_dual_it_object {
127127
zend_object std;
128128
struct {
129-
zval zobject;
129+
zval *zobject;
130130
zend_class_entry *ce;
131+
zend_object *object;
131132
zend_object_iterator *iterator;
132133
} inner;
133134
struct {

ext/spl/spl_observer.c

-1
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,6 @@ static zend_object *spl_object_storage_new_ex(zend_class_entry *class_type, zval
249249
intern->pos = INVALID_IDX;
250250

251251
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
252-
zend_objects_store_put(&intern->std TSRMLS_CC);
253252
object_properties_init(&intern->std, class_type);
254253

255254
zend_hash_init(&intern->storage, 0, NULL, spl_object_storage_dtor, 0);

0 commit comments

Comments
 (0)