Skip to content

Commit 1e1ea4f

Browse files
committed
Merge remote-tracking branch 'origin/PHP-8.2'
2 parents e5c7b5b + 94ee4f9 commit 1e1ea4f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+150
-184
lines changed

Zend/zend.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,8 @@ struct _zend_class_entry {
182182
zend_function *__serialize;
183183
zend_function *__unserialize;
184184

185+
const zend_object_handlers *default_object_handlers;
186+
185187
/* allocated only if class implements Iterator or IteratorAggregate interface */
186188
zend_class_iterator_funcs *iterator_funcs_ptr;
187189
/* allocated only if class implements ArrayAccess interface */

Zend/zend_API.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,11 +272,13 @@ typedef struct _zend_fcall_info_cache {
272272
{ \
273273
memset(&class_container, 0, sizeof(zend_class_entry)); \
274274
class_container.name = zend_string_init_interned(class_name, class_name_len, 1); \
275+
class_container.default_object_handlers = &std_object_handlers; \
275276
class_container.info.internal.builtin_functions = functions; \
276277
}
277278

278279
#define INIT_CLASS_ENTRY_INIT_METHODS(class_container, functions) \
279280
{ \
281+
class_container.default_object_handlers = &std_object_handlers; \
280282
class_container.constructor = NULL; \
281283
class_container.destructor = NULL; \
282284
class_container.clone = NULL; \

Zend/zend_attributes.c

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -131,18 +131,6 @@ ZEND_METHOD(SensitiveParameterValue, __debugInfo)
131131
RETURN_EMPTY_ARRAY();
132132
}
133133

134-
static zend_object *attributes_sensitive_parameter_value_new(zend_class_entry *ce)
135-
{
136-
zend_object *object;
137-
138-
object = zend_objects_new(ce);
139-
object->handlers = &attributes_object_handlers_sensitive_parameter_value;
140-
141-
object_properties_init(object, ce);
142-
143-
return object;
144-
}
145-
146134
static HashTable *attributes_sensitive_parameter_value_get_properties_for(zend_object *zobj, zend_prop_purpose purpose)
147135
{
148136
return NULL;
@@ -382,7 +370,7 @@ void zend_register_attribute_ce(void)
382370

383371
/* This is not an actual attribute, thus the zend_mark_internal_attribute() call is missing. */
384372
zend_ce_sensitive_parameter_value = register_class_SensitiveParameterValue();
385-
zend_ce_sensitive_parameter_value->create_object = attributes_sensitive_parameter_value_new;
373+
zend_ce_sensitive_parameter_value->default_object_handlers = &attributes_object_handlers_sensitive_parameter_value;
386374
}
387375

388376
void zend_attributes_shutdown(void)

Zend/zend_closures.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,6 @@ static zend_object *zend_closure_new(zend_class_entry *class_type) /* {{{ */
521521
memset(closure, 0, sizeof(zend_closure));
522522

523523
zend_object_std_init(&closure->std, class_type);
524-
closure->std.handlers = &closure_handlers;
525524

526525
return (zend_object*)closure;
527526
}
@@ -678,6 +677,7 @@ void zend_register_closure_ce(void) /* {{{ */
678677
{
679678
zend_ce_closure = register_class_Closure();
680679
zend_ce_closure->create_object = zend_closure_new;
680+
zend_ce_closure->default_object_handlers = &closure_handlers;
681681

682682
memcpy(&closure_handlers, &std_object_handlers, sizeof(zend_object_handlers));
683683
closure_handlers.free_obj = zend_closure_free_storage;

Zend/zend_compile.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1828,6 +1828,7 @@ ZEND_API void zend_initialize_class_data(zend_class_entry *ce, bool nullify_hand
18281828
ZEND_MAP_PTR_INIT(ce->static_members_table, NULL);
18291829
ZEND_MAP_PTR_INIT(ce->mutable_data, NULL);
18301830

1831+
ce->default_object_handlers = &std_object_handlers;
18311832
ce->default_properties_count = 0;
18321833
ce->default_static_members_count = 0;
18331834
ce->properties_info_table = NULL;

Zend/zend_enum.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,6 @@ zend_object *zend_enum_new(zval *result, zend_class_entry *ce, zend_string *case
4747
ZVAL_COPY(OBJ_PROP_NUM(zobj, 1), backing_value_zv);
4848
}
4949

50-
zobj->handlers = &enum_handlers;
51-
5250
return zobj;
5351
}
5452

@@ -184,6 +182,8 @@ void zend_enum_add_interfaces(zend_class_entry *ce)
184182
ce->interface_names[num_interfaces_before + 1].name = zend_string_copy(zend_ce_backed_enum->name);
185183
ce->interface_names[num_interfaces_before + 1].lc_name = zend_string_init("backedenum", sizeof("backedenum") - 1, 0);
186184
}
185+
186+
ce->default_object_handlers = &enum_handlers;
187187
}
188188

189189
zend_result zend_enum_build_backed_enum_table(zend_class_entry *ce)

Zend/zend_exceptions.c

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -240,21 +240,19 @@ ZEND_API void zend_clear_exception(void) /* {{{ */
240240
}
241241
/* }}} */
242242

243-
static zend_object *zend_default_exception_new_ex(zend_class_entry *class_type, bool skip_top_traces) /* {{{ */
243+
static zend_object *zend_default_exception_new(zend_class_entry *class_type) /* {{{ */
244244
{
245245
zval tmp;
246246
zval trace;
247247
zend_class_entry *base_ce;
248248
zend_string *filename;
249249

250250
zend_object *object = zend_objects_new(class_type);
251-
object->handlers = &default_exception_handlers;
252-
253251
object_properties_init(object, class_type);
254252

255253
if (EG(current_execute_data)) {
256254
zend_fetch_debug_backtrace(&trace,
257-
skip_top_traces,
255+
0,
258256
EG(exception_ignore_args) ? DEBUG_BACKTRACE_IGNORE_ARGS : 0, 0);
259257
} else {
260258
array_init(&trace);
@@ -282,18 +280,6 @@ static zend_object *zend_default_exception_new_ex(zend_class_entry *class_type,
282280
}
283281
/* }}} */
284282

285-
static zend_object *zend_default_exception_new(zend_class_entry *class_type) /* {{{ */
286-
{
287-
return zend_default_exception_new_ex(class_type, 0);
288-
}
289-
/* }}} */
290-
291-
static zend_object *zend_error_exception_new(zend_class_entry *class_type) /* {{{ */
292-
{
293-
return zend_default_exception_new_ex(class_type, 0);
294-
}
295-
/* }}} */
296-
297283
/* {{{ Clone the exception object */
298284
ZEND_COLD ZEND_METHOD(Exception, __clone)
299285
{
@@ -739,6 +725,11 @@ ZEND_METHOD(Exception, __toString)
739725
}
740726
/* }}} */
741727

728+
static void zend_init_exception_class_entry(zend_class_entry *ce) {
729+
ce->create_object = zend_default_exception_new;
730+
ce->default_object_handlers = &default_exception_handlers;
731+
}
732+
742733
void zend_register_default_exception(void) /* {{{ */
743734
{
744735
zend_ce_throwable = register_class_Throwable(zend_ce_stringable);
@@ -748,37 +739,37 @@ void zend_register_default_exception(void) /* {{{ */
748739
default_exception_handlers.clone_obj = NULL;
749740

750741
zend_ce_exception = register_class_Exception(zend_ce_throwable);
751-
zend_ce_exception->create_object = zend_default_exception_new;
742+
zend_init_exception_class_entry(zend_ce_exception);
752743

753744
zend_ce_error_exception = register_class_ErrorException(zend_ce_exception);
754-
zend_ce_error_exception->create_object = zend_error_exception_new;
745+
zend_init_exception_class_entry(zend_ce_error_exception);
755746

756747
zend_ce_error = register_class_Error(zend_ce_throwable);
757-
zend_ce_error->create_object = zend_default_exception_new;
748+
zend_init_exception_class_entry(zend_ce_error);
758749

759750
zend_ce_compile_error = register_class_CompileError(zend_ce_error);
760-
zend_ce_compile_error->create_object = zend_default_exception_new;
751+
zend_init_exception_class_entry(zend_ce_compile_error);
761752

762753
zend_ce_parse_error = register_class_ParseError(zend_ce_compile_error);
763-
zend_ce_parse_error->create_object = zend_default_exception_new;
754+
zend_init_exception_class_entry(zend_ce_parse_error);
764755

765756
zend_ce_type_error = register_class_TypeError(zend_ce_error);
766-
zend_ce_type_error->create_object = zend_default_exception_new;
757+
zend_init_exception_class_entry(zend_ce_type_error);
767758

768759
zend_ce_argument_count_error = register_class_ArgumentCountError(zend_ce_type_error);
769-
zend_ce_argument_count_error->create_object = zend_default_exception_new;
760+
zend_init_exception_class_entry(zend_ce_argument_count_error);
770761

771762
zend_ce_value_error = register_class_ValueError(zend_ce_error);
772-
zend_ce_value_error->create_object = zend_default_exception_new;
763+
zend_init_exception_class_entry(zend_ce_value_error);
773764

774765
zend_ce_arithmetic_error = register_class_ArithmeticError(zend_ce_error);
775-
zend_ce_arithmetic_error->create_object = zend_default_exception_new;
766+
zend_init_exception_class_entry(zend_ce_arithmetic_error);
776767

777768
zend_ce_division_by_zero_error = register_class_DivisionByZeroError(zend_ce_arithmetic_error);
778-
zend_ce_division_by_zero_error->create_object = zend_default_exception_new;
769+
zend_init_exception_class_entry(zend_ce_division_by_zero_error);
779770

780771
zend_ce_unhandled_match_error = register_class_UnhandledMatchError(zend_ce_error);
781-
zend_ce_unhandled_match_error->create_object = zend_default_exception_new;
772+
zend_init_exception_class_entry(zend_ce_unhandled_match_error);
782773

783774
INIT_CLASS_ENTRY(zend_ce_unwind_exit, "UnwindExit", NULL);
784775

Zend/zend_fibers.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -589,12 +589,9 @@ static zend_always_inline zend_fiber_transfer zend_fiber_suspend(zend_fiber *fib
589589
static zend_object *zend_fiber_object_create(zend_class_entry *ce)
590590
{
591591
zend_fiber *fiber = emalloc(sizeof(zend_fiber));
592-
593592
memset(fiber, 0, sizeof(zend_fiber));
594593

595594
zend_object_std_init(&fiber->std, ce);
596-
fiber->std.handlers = &zend_fiber_handlers;
597-
598595
return &fiber->std;
599596
}
600597

@@ -903,6 +900,7 @@ void zend_register_fiber_ce(void)
903900
{
904901
zend_ce_fiber = register_class_Fiber();
905902
zend_ce_fiber->create_object = zend_fiber_object_create;
903+
zend_ce_fiber->default_object_handlers = &zend_fiber_handlers;
906904

907905
zend_fiber_handlers = std_object_handlers;
908906
zend_fiber_handlers.dtor_obj = zend_fiber_object_destroy;

Zend/zend_generators.c

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -404,9 +404,7 @@ static HashTable *zend_generator_get_gc(zend_object *object, zval **table, int *
404404

405405
static zend_object *zend_generator_create(zend_class_entry *class_type) /* {{{ */
406406
{
407-
zend_generator *generator;
408-
409-
generator = emalloc(sizeof(zend_generator));
407+
zend_generator *generator = emalloc(sizeof(zend_generator));
410408
memset(generator, 0, sizeof(zend_generator));
411409

412410
/* The key will be incremented on first use, so it'll start at 0 */
@@ -421,8 +419,6 @@ static zend_object *zend_generator_create(zend_class_entry *class_type) /* {{{ *
421419
generator->node.ptr.root = NULL;
422420

423421
zend_object_std_init(&generator->std, class_type);
424-
generator->std.handlers = &zend_generator_handlers;
425-
426422
return (zend_object*)generator;
427423
}
428424
/* }}} */
@@ -1132,6 +1128,7 @@ void zend_register_generator_ce(void) /* {{{ */
11321128
zend_ce_generator->create_object = zend_generator_create;
11331129
/* get_iterator has to be assigned *after* implementing the interface */
11341130
zend_ce_generator->get_iterator = zend_generator_get_iterator;
1131+
zend_ce_generator->default_object_handlers = &zend_generator_handlers;
11351132

11361133
memcpy(&zend_generator_handlers, &std_object_handlers, sizeof(zend_object_handlers));
11371134
zend_generator_handlers.free_obj = zend_generator_free_storage;

Zend/zend_inheritance.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1472,6 +1472,7 @@ ZEND_API void zend_do_inheritance_ex(zend_class_entry *ce, zend_class_entry *par
14721472
zend_string_release_ex(ce->parent_name, 0);
14731473
}
14741474
ce->parent = parent_ce;
1475+
ce->default_object_handlers = parent_ce->default_object_handlers;
14751476
ce->ce_flags |= ZEND_ACC_RESOLVED_PARENT;
14761477

14771478
/* Inherit properties */

Zend/zend_interfaces.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,6 @@ typedef struct {
480480
static zend_object *zend_internal_iterator_create(zend_class_entry *ce) {
481481
zend_internal_iterator *intern = emalloc(sizeof(zend_internal_iterator));
482482
zend_object_std_init(&intern->std, ce);
483-
intern->std.handlers = &zend_internal_iterator_handlers;
484483
intern->iter = NULL;
485484
intern->rewind_called = 0;
486485
return &intern->std;
@@ -655,6 +654,7 @@ ZEND_API void zend_register_interfaces(void)
655654

656655
zend_ce_internal_iterator = register_class_InternalIterator(zend_ce_iterator);
657656
zend_ce_internal_iterator->create_object = zend_internal_iterator_create;
657+
zend_ce_internal_iterator->default_object_handlers = &zend_internal_iterator_handlers;
658658

659659
memcpy(&zend_internal_iterator_handlers, zend_get_std_object_handlers(),
660660
sizeof(zend_object_handlers));

Zend/zend_iterators.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ static const zend_object_handlers iterator_object_handlers = {
5757
ZEND_API void zend_register_iterator_wrapper(void)
5858
{
5959
INIT_CLASS_ENTRY(zend_iterator_class_entry, "__iterator_wrapper", NULL);
60+
zend_iterator_class_entry.default_object_handlers = &iterator_object_handlers;
6061
}
6162

6263
static void iter_wrapper_free(zend_object *object)
@@ -83,7 +84,6 @@ static HashTable *iter_wrapper_get_gc(zend_object *object, zval **table, int *n)
8384
ZEND_API void zend_iterator_init(zend_object_iterator *iter)
8485
{
8586
zend_object_std_init(&iter->std, &zend_iterator_class_entry);
86-
iter->std.handlers = &iterator_object_handlers;
8787
}
8888

8989
ZEND_API void zend_iterator_dtor(zend_object_iterator *iter)

Zend/zend_objects.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ static zend_always_inline void _zend_object_std_init(zend_object *object, zend_c
3131
GC_SET_REFCOUNT(object, 1);
3232
GC_TYPE_INFO(object) = GC_OBJECT;
3333
object->ce = ce;
34+
object->handlers = ce->default_object_handlers;
3435
object->properties = NULL;
3536
zend_objects_store_put(object);
3637
if (UNEXPECTED(ce->ce_flags & ZEND_ACC_USE_GUARDS)) {
@@ -186,7 +187,6 @@ ZEND_API zend_object* ZEND_FASTCALL zend_objects_new(zend_class_entry *ce)
186187
zend_object *object = emalloc(sizeof(zend_object) + zend_object_properties_size(ce));
187188

188189
_zend_object_std_init(object, ce);
189-
object->handlers = &std_object_handlers;
190190
return object;
191191
}
192192

Zend/zend_weakrefs.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -210,9 +210,6 @@ static zend_object* zend_weakref_new(zend_class_entry *ce) {
210210
zend_weakref *wr = zend_object_alloc(sizeof(zend_weakref), zend_ce_weakref);
211211

212212
zend_object_std_init(&wr->std, zend_ce_weakref);
213-
214-
wr->std.handlers = &zend_weakref_handlers;
215-
216213
return &wr->std;
217214
}
218215

@@ -304,7 +301,6 @@ static zend_object *zend_weakmap_create_object(zend_class_entry *ce)
304301
{
305302
zend_weakmap *wm = zend_object_alloc(sizeof(zend_weakmap), ce);
306303
zend_object_std_init(&wm->std, ce);
307-
wm->std.handlers = &zend_weakmap_handlers;
308304

309305
zend_hash_init(&wm->ht, 0, NULL, ZVAL_PTR_DTOR, 0);
310306
return &wm->std;
@@ -651,6 +647,7 @@ void zend_register_weakref_ce(void) /* {{{ */
651647
zend_ce_weakref = register_class_WeakReference();
652648

653649
zend_ce_weakref->create_object = zend_weakref_new;
650+
zend_ce_weakref->default_object_handlers = &zend_weakref_handlers;
654651

655652
memcpy(&zend_weakref_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
656653
zend_weakref_handlers.offset = XtOffsetOf(zend_weakref, std);
@@ -662,6 +659,7 @@ void zend_register_weakref_ce(void) /* {{{ */
662659

663660
zend_ce_weakmap->create_object = zend_weakmap_create_object;
664661
zend_ce_weakmap->get_iterator = zend_weakmap_get_iterator;
662+
zend_ce_weakmap->default_object_handlers = &zend_weakmap_handlers;
665663

666664
memcpy(&zend_weakmap_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
667665
zend_weakmap_handlers.offset = XtOffsetOf(zend_weakmap, std);

ext/com_dotnet/com_extension.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,18 +184,22 @@ PHP_MINIT_FUNCTION(com_dotnet)
184184

185185
php_com_saproxy_class_entry = register_class_com_safearray_proxy();
186186
/* php_com_saproxy_class_entry->constructor->common.fn_flags |= ZEND_ACC_PROTECTED; */
187+
php_com_saproxy_class_entry->default_object_handlers = &php_com_saproxy_handlers;
187188
php_com_saproxy_class_entry->get_iterator = php_com_saproxy_iter_get;
188189

189190
php_com_variant_class_entry = register_class_variant();
191+
php_com_variant_class_entry->default_object_handlers = &php_com_object_handlers;
190192
php_com_variant_class_entry->create_object = php_com_object_new;
191193
php_com_variant_class_entry->get_iterator = php_com_iter_get;
192194

193195
tmp = register_class_com(php_com_variant_class_entry);
196+
tmp->default_object_handlers = &php_com_object_handlers;
194197
tmp->create_object = php_com_object_new;
195198
tmp->get_iterator = php_com_iter_get;
196199

197200
#if HAVE_MSCOREE_H
198201
tmp = register_class_dotnet(php_com_variant_class_entry);
202+
tmp->default_object_handlers = &php_com_object_handlers;
199203
tmp->create_object = php_com_object_new;
200204
tmp->get_iterator = php_com_iter_get;
201205
#endif

ext/com_dotnet/com_handlers.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,6 @@ zend_object* php_com_object_new(zend_class_entry *ce)
627627
obj->ce = ce;
628628

629629
zend_object_std_init(&obj->zo, ce);
630-
obj->zo.handlers = &php_com_object_handlers;
631630

632631
obj->typeinfo = NULL;
633632

ext/com_dotnet/com_misc.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ PHP_COM_DOTNET_API void php_com_wrap_dispatch(zval *z, IDispatch *disp,
6161
IDispatch_GetTypeInfo(V_DISPATCH(&obj->v), 0, LANG_NEUTRAL, &obj->typeinfo);
6262

6363
zend_object_std_init(&obj->zo, php_com_variant_class_entry);
64-
obj->zo.handlers = &php_com_object_handlers;
6564
ZVAL_OBJ(z, &obj->zo);
6665
}
6766

@@ -85,7 +84,6 @@ PHP_COM_DOTNET_API void php_com_wrap_variant(zval *z, VARIANT *v,
8584
}
8685

8786
zend_object_std_init(&obj->zo, php_com_variant_class_entry);
88-
obj->zo.handlers = &php_com_object_handlers;
8987
ZVAL_OBJ(z, &obj->zo);
9088
}
9189

ext/com_dotnet/com_persist.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -709,7 +709,6 @@ static zend_object* helper_new(zend_class_entry *ce)
709709
memset(helper, 0, sizeof(*helper));
710710

711711
zend_object_std_init(&helper->std, helper_ce);
712-
helper->std.handlers = &helper_handlers;
713712

714713
return &helper->std;
715714
}
@@ -722,6 +721,7 @@ void php_com_persist_minit(INIT_FUNC_ARGS)
722721

723722
helper_ce = register_class_COMPersistHelper();
724723
helper_ce->create_object = helper_new;
724+
helper_ce->default_object_handlers = &helper_handlers;
725725

726726
le_istream = zend_register_list_destructors_ex(istream_dtor,
727727
NULL, "com_dotnet_istream_wrapper", module_number);

0 commit comments

Comments
 (0)