Use zend_std_build_properties() to access zend_object.properties

The zend_object.properties HashTable needs to be built just in time by calling
rebuild_object_properties() on the object before accessing it. Normally this is
done automatically in zend_std_get_properties(), but we do it manually in a few
places.

In this change I introduce an inline variant of zend_std_build_properties(), and
refactor these places to use it instead of calling rebuild_object_properties()
manually.

rebuild_object_properties() renamed as rebuild_object_properties_internal(), to
enforce usage of zend_std_get_properties() or zend_std_build_properties_ex().

Closes GH-14996
This commit is contained in:
Arnaud Le Blanc 2024-07-17 20:41:36 +02:00
parent 436baae172
commit 1fbb666545
No known key found for this signature in database
GPG key ID: 0098C05DD15ABC13
14 changed files with 124 additions and 257 deletions

View file

@ -94,6 +94,11 @@ PHP 8.4 INTERNALS UPGRADE NOTES
* Added zend_hash_get_current_pos_ex() variant of zend_hash_get_current_pos(). * Added zend_hash_get_current_pos_ex() variant of zend_hash_get_current_pos().
* Renamed rebuild_object_properties() to rebuild_object_properties_internal().
This function should not be used outside of zend_std_get_properties_ex() and
zend_std_get_properties(). Use zend_std_get_properties_ex() or
zend_std_get_properties() instead.
======================== ========================
2. Build system changes 2. Build system changes
======================== ========================

View file

@ -31,6 +31,7 @@
#include "zend_inheritance.h" #include "zend_inheritance.h"
#include "zend_ini.h" #include "zend_ini.h"
#include "zend_enum.h" #include "zend_enum.h"
#include "zend_object_handlers.h"
#include "zend_observer.h" #include "zend_observer.h"
#include <stdarg.h> #include <stdarg.h>
@ -1764,10 +1765,7 @@ ZEND_API void object_properties_load(zend_object *object, HashTable *properties)
ZSTR_VAL(object->ce->name), property_info != ZEND_WRONG_PROPERTY_INFO ? zend_get_unmangled_property_name(key): ""); ZSTR_VAL(object->ce->name), property_info != ZEND_WRONG_PROPERTY_INFO ? zend_get_unmangled_property_name(key): "");
} }
if (!object->properties) { prop = zend_hash_update(zend_std_get_properties_ex(object), key, prop);
rebuild_object_properties(object);
}
prop = zend_hash_update(object->properties, key, prop);
zval_add_ref(prop); zval_add_ref(prop);
} }
} else { } else {
@ -1779,10 +1777,7 @@ ZEND_API void object_properties_load(zend_object *object, HashTable *properties)
ZSTR_VAL(object->ce->name), h); ZSTR_VAL(object->ce->name), h);
} }
if (!object->properties) { prop = zend_hash_index_update(zend_std_get_properties_ex(object), h, prop);
rebuild_object_properties(object);
}
prop = zend_hash_index_update(object->properties, h, prop);
zval_add_ref(prop); zval_add_ref(prop);
} }
} ZEND_HASH_FOREACH_END(); } ZEND_HASH_FOREACH_END();

View file

@ -62,7 +62,7 @@
called, we cal __call handler. called, we cal __call handler.
*/ */
ZEND_API void rebuild_object_properties(zend_object *zobj) /* {{{ */ ZEND_API void rebuild_object_properties_internal(zend_object *zobj) /* {{{ */
{ {
if (!zobj->properties) { if (!zobj->properties) {
zend_property_info *prop_info; zend_property_info *prop_info;
@ -130,7 +130,7 @@ ZEND_API HashTable *zend_std_build_object_properties_array(zend_object *zobj) /*
ZEND_API HashTable *zend_std_get_properties(zend_object *zobj) /* {{{ */ ZEND_API HashTable *zend_std_get_properties(zend_object *zobj) /* {{{ */
{ {
if (!zobj->properties) { if (!zobj->properties) {
rebuild_object_properties(zobj); rebuild_object_properties_internal(zobj);
} }
return zobj->properties; return zobj->properties;
} }
@ -1124,10 +1124,7 @@ write_std_property:
} }
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
if (!zobj->properties) { variable_ptr = zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
rebuild_object_properties(zobj);
}
variable_ptr = zend_hash_add_new(zobj->properties, name, value);
} }
} }
@ -1312,7 +1309,7 @@ ZEND_API zval *zend_std_get_property_ptr_ptr(zend_object *zobj, zend_string *nam
} }
} }
if (UNEXPECTED(!zobj->properties)) { if (UNEXPECTED(!zobj->properties)) {
rebuild_object_properties(zobj); rebuild_object_properties_internal(zobj);
} }
if (UNEXPECTED(type == BP_VAR_RW || type == BP_VAR_R)) { if (UNEXPECTED(type == BP_VAR_RW || type == BP_VAR_R)) {
zend_error(E_WARNING, "Undefined property: %s::$%s", ZSTR_VAL(zobj->ce->name), ZSTR_VAL(name)); zend_error(E_WARNING, "Undefined property: %s::$%s", ZSTR_VAL(zobj->ce->name), ZSTR_VAL(name));
@ -2028,13 +2025,9 @@ ZEND_API int zend_std_compare_objects(zval *o1, zval *o2) /* {{{ */
Z_UNPROTECT_RECURSION_P(o1); Z_UNPROTECT_RECURSION_P(o1);
return 0; return 0;
} else { } else {
if (!zobj1->properties) { return zend_compare_symbol_tables(
rebuild_object_properties(zobj1); zend_std_get_properties_ex(zobj1),
} zend_std_get_properties_ex(zobj2));
if (!zobj2->properties) {
rebuild_object_properties(zobj2);
}
return zend_compare_symbol_tables(zobj1->properties, zobj2->properties);
} }
} }
/* }}} */ /* }}} */

View file

@ -267,7 +267,16 @@ ZEND_API zend_function *zend_std_get_method(zend_object **obj_ptr, zend_string *
ZEND_API zend_string *zend_std_get_class_name(const zend_object *zobj); ZEND_API zend_string *zend_std_get_class_name(const zend_object *zobj);
ZEND_API int zend_std_compare_objects(zval *o1, zval *o2); ZEND_API int zend_std_compare_objects(zval *o1, zval *o2);
ZEND_API zend_result zend_std_get_closure(zend_object *obj, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zend_object **obj_ptr, bool check_only); ZEND_API zend_result zend_std_get_closure(zend_object *obj, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zend_object **obj_ptr, bool check_only);
ZEND_API void rebuild_object_properties(zend_object *zobj); /* Use zend_std_get_properties_ex() */
ZEND_API void rebuild_object_properties_internal(zend_object *zobj);
static inline HashTable *zend_std_get_properties_ex(zend_object *object)
{
if (!object->properties) {
rebuild_object_properties_internal(object);
}
return object->properties;
}
ZEND_API HashTable *zend_std_build_object_properties_array(zend_object *zobj); ZEND_API HashTable *zend_std_build_object_properties_array(zend_object *zobj);

View file

@ -2495,9 +2495,6 @@ ZEND_VM_C_LABEL(fast_assign_obj):
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (OP_DATA_TYPE == IS_CONST) { if (OP_DATA_TYPE == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -2522,7 +2519,7 @@ ZEND_VM_C_LABEL(fast_assign_obj):
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }

180
Zend/zend_vm_execute.h generated
View file

@ -24072,9 +24072,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_CONST == IS_CONST) { if (IS_CONST == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -24099,7 +24096,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -24219,9 +24216,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_TMP_VAR == IS_CONST) { if (IS_TMP_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -24246,7 +24240,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -24366,9 +24360,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_VAR == IS_CONST) { if (IS_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -24393,7 +24384,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -24513,9 +24504,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_CV == IS_CONST) { if (IS_CV == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -24540,7 +24528,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -27050,9 +27038,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_CONST == IS_CONST) { if (IS_CONST == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -27077,7 +27062,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -27197,9 +27182,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_TMP_VAR == IS_CONST) { if (IS_TMP_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -27224,7 +27206,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -27344,9 +27326,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_VAR == IS_CONST) { if (IS_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -27371,7 +27350,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -27491,9 +27470,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_CV == IS_CONST) { if (IS_CV == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -27518,7 +27494,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -31394,9 +31370,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_CONST == IS_CONST) { if (IS_CONST == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -31421,7 +31394,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -31541,9 +31514,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_TMP_VAR == IS_CONST) { if (IS_TMP_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -31568,7 +31538,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -31688,9 +31658,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_VAR == IS_CONST) { if (IS_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -31715,7 +31682,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -31835,9 +31802,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_CV == IS_CONST) { if (IS_CV == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -31862,7 +31826,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -34128,9 +34092,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_CONST == IS_CONST) { if (IS_CONST == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -34155,7 +34116,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -34275,9 +34236,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_TMP_VAR == IS_CONST) { if (IS_TMP_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -34302,7 +34260,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -34422,9 +34380,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_VAR == IS_CONST) { if (IS_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -34449,7 +34404,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -34569,9 +34524,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_CV == IS_CONST) { if (IS_CV == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -34596,7 +34548,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -36283,9 +36235,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_CONST == IS_CONST) { if (IS_CONST == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -36310,7 +36259,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -36430,9 +36379,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_TMP_VAR == IS_CONST) { if (IS_TMP_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -36457,7 +36403,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -36577,9 +36523,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_VAR == IS_CONST) { if (IS_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -36604,7 +36547,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -36724,9 +36667,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_CV == IS_CONST) { if (IS_CV == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -36751,7 +36691,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -38920,9 +38860,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_CONST == IS_CONST) { if (IS_CONST == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -38947,7 +38884,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -39067,9 +39004,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_TMP_VAR == IS_CONST) { if (IS_TMP_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -39094,7 +39028,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -39214,9 +39148,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_VAR == IS_CONST) { if (IS_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -39241,7 +39172,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -39361,9 +39292,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_CV == IS_CONST) { if (IS_CV == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -39388,7 +39316,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -43296,9 +43224,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_CONST == IS_CONST) { if (IS_CONST == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -43323,7 +43248,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -43443,9 +43368,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_TMP_VAR == IS_CONST) { if (IS_TMP_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -43470,7 +43392,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -43590,9 +43512,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_VAR == IS_CONST) { if (IS_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -43617,7 +43536,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -43737,9 +43656,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_CV == IS_CONST) { if (IS_CV == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -43764,7 +43680,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -47236,9 +47152,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_CONST == IS_CONST) { if (IS_CONST == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -47263,7 +47176,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -47383,9 +47296,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_TMP_VAR == IS_CONST) { if (IS_TMP_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -47410,7 +47320,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -47530,9 +47440,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_VAR == IS_CONST) { if (IS_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -47557,7 +47464,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -47677,9 +47584,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_CV == IS_CONST) { if (IS_CV == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -47704,7 +47608,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -52727,9 +52631,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_CONST == IS_CONST) { if (IS_CONST == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -52754,7 +52655,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -52874,9 +52775,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_TMP_VAR == IS_CONST) { if (IS_TMP_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -52901,7 +52799,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -53021,9 +52919,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_VAR == IS_CONST) { if (IS_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -53048,7 +52943,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }
@ -53168,9 +53063,6 @@ fast_assign_obj:
} }
if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) { if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
if (EXPECTED(zobj->properties == NULL)) {
rebuild_object_properties(zobj);
}
if (IS_CV == IS_CONST) { if (IS_CV == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
Z_ADDREF_P(value); Z_ADDREF_P(value);
@ -53195,7 +53087,7 @@ fast_assign_obj:
Z_TRY_ADDREF_P(value); Z_TRY_ADDREF_P(value);
} }
} }
zend_hash_add_new(zobj->properties, name, value); zend_hash_add_new(zend_std_get_properties_ex(zobj), name, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value); ZVAL_COPY(EX_VAR(opline->result.var), value);
} }

View file

@ -1515,9 +1515,8 @@ static void initialize_date_period_properties(php_period_obj *period_obj)
{ {
zval zv; zval zv;
if (UNEXPECTED(!period_obj->std.properties)) { /* rebuild properties */
rebuild_object_properties(&period_obj->std); zend_std_get_properties_ex(&period_obj->std);
}
create_date_period_datetime(period_obj->start, period_obj->start_ce, &zv); create_date_period_datetime(period_obj->start, period_obj->start_ce, &zv);
write_date_period_property(&period_obj->std, "start", sizeof("start") - 1, &zv); write_date_period_property(&period_obj->std, "start", sizeof("start") - 1, &zv);
@ -1652,9 +1651,8 @@ static void date_period_it_move_forward(zend_object_iterator *iter)
date_period_advance(it_time, object->interval); date_period_advance(it_time, object->interval);
if (UNEXPECTED(!object->std.properties)) { /* rebuild properties */
rebuild_object_properties(&object->std); zend_std_get_properties_ex(&object->std);
}
create_date_period_datetime(object->current, object->start_ce, &current_zv); create_date_period_datetime(object->current, object->start_ce, &current_zv);
zend_string *property_name = ZSTR_INIT_LITERAL("current", 0); zend_string *property_name = ZSTR_INIT_LITERAL("current", 0);

View file

@ -1505,7 +1505,8 @@ zend_object *pdo_dbh_new(zend_class_entry *ce)
dbh = zend_object_alloc(sizeof(pdo_dbh_object_t), ce); dbh = zend_object_alloc(sizeof(pdo_dbh_object_t), ce);
zend_object_std_init(&dbh->std, ce); zend_object_std_init(&dbh->std, ce);
object_properties_init(&dbh->std, ce); object_properties_init(&dbh->std, ce);
rebuild_object_properties(&dbh->std); /* rebuild properties */
zend_std_get_properties_ex(&dbh->std);
dbh->inner = ecalloc(1, sizeof(pdo_dbh_t)); dbh->inner = ecalloc(1, sizeof(pdo_dbh_t));
dbh->inner->def_stmt_ce = pdo_dbstmt_ce; dbh->inner->def_stmt_ce = pdo_dbstmt_ce;

View file

@ -2426,10 +2426,7 @@ static HashTable *row_get_properties_for(zend_object *object, zend_prop_purpose
return zend_std_get_properties_for(object, purpose); return zend_std_get_properties_for(object, purpose);
} }
if (!stmt->std.properties) { props = zend_array_dup(zend_std_get_properties_ex(&stmt->std));
rebuild_object_properties(&stmt->std);
}
props = zend_array_dup(stmt->std.properties);
for (i = 0; i < stmt->column_count; i++) { for (i = 0; i < stmt->column_count; i++) {
if (zend_string_equals_literal(stmt->columns[i].name, "queryString")) { if (zend_string_equals_literal(stmt->columns[i].name, "queryString")) {
continue; continue;

View file

@ -388,10 +388,7 @@ PHP_METHOD(Random_Engine_Mt19937, __debugInfo)
ZEND_PARSE_PARAMETERS_NONE(); ZEND_PARSE_PARAMETERS_NONE();
if (!engine->std.properties) { ZVAL_ARR(return_value, zend_array_dup(zend_std_get_properties_ex(&engine->std)));
rebuild_object_properties(&engine->std);
}
ZVAL_ARR(return_value, zend_array_dup(engine->std.properties));
if (engine->engine.algo->serialize) { if (engine->engine.algo->serialize) {
array_init(&t); array_init(&t);

View file

@ -64,9 +64,8 @@ static inline spl_array_object *spl_array_from_obj(zend_object *obj) /* {{{ */ {
static inline HashTable **spl_array_get_hash_table_ptr(spl_array_object* intern) { /* {{{ */ static inline HashTable **spl_array_get_hash_table_ptr(spl_array_object* intern) { /* {{{ */
//??? TODO: Delay duplication for arrays; only duplicate for write operations //??? TODO: Delay duplication for arrays; only duplicate for write operations
if (intern->ar_flags & SPL_ARRAY_IS_SELF) { if (intern->ar_flags & SPL_ARRAY_IS_SELF) {
if (!intern->std.properties) { /* rebuild properties */
rebuild_object_properties(&intern->std); zend_std_get_properties_ex(&intern->std);
}
return &intern->std.properties; return &intern->std.properties;
} else if (intern->ar_flags & SPL_ARRAY_USE_OTHER) { } else if (intern->ar_flags & SPL_ARRAY_USE_OTHER) {
spl_array_object *other = Z_SPLARRAY_P(&intern->array); spl_array_object *other = Z_SPLARRAY_P(&intern->array);
@ -75,9 +74,9 @@ static inline HashTable **spl_array_get_hash_table_ptr(spl_array_object* intern)
return &Z_ARRVAL(intern->array); return &Z_ARRVAL(intern->array);
} else { } else {
zend_object *obj = Z_OBJ(intern->array); zend_object *obj = Z_OBJ(intern->array);
if (!obj->properties) { /* rebuild properties */
rebuild_object_properties(obj); zend_std_get_properties_ex(obj);
} else if (GC_REFCOUNT(obj->properties) > 1) { if (GC_REFCOUNT(obj->properties) > 1) {
if (EXPECTED(!(GC_FLAGS(obj->properties) & IS_ARRAY_IMMUTABLE))) { if (EXPECTED(!(GC_FLAGS(obj->properties) & IS_ARRAY_IMMUTABLE))) {
GC_DELREF(obj->properties); GC_DELREF(obj->properties);
} }
@ -770,18 +769,15 @@ static HashTable *spl_array_get_properties_for(zend_object *object, zend_prop_pu
static inline HashTable* spl_array_get_debug_info(zend_object *obj) /* {{{ */ static inline HashTable* spl_array_get_debug_info(zend_object *obj) /* {{{ */
{ {
spl_array_object *intern = spl_array_from_obj(obj); spl_array_object *intern = spl_array_from_obj(obj);
HashTable *properties = zend_std_get_properties_ex(&intern->std);
if (!intern->std.properties) {
rebuild_object_properties(&intern->std);
}
if (intern->ar_flags & SPL_ARRAY_IS_SELF) { if (intern->ar_flags & SPL_ARRAY_IS_SELF) {
return zend_array_dup(intern->std.properties); return zend_array_dup(properties);
} else { } else {
HashTable *debug_info; HashTable *debug_info;
debug_info = zend_new_array(zend_hash_num_elements(intern->std.properties) + 1); debug_info = zend_new_array(zend_hash_num_elements(properties) + 1);
zend_hash_copy(debug_info, intern->std.properties, (copy_ctor_func_t) zval_add_ref); zend_hash_copy(debug_info, properties, (copy_ctor_func_t) zval_add_ref);
zval *storage = &intern->array; zval *storage = &intern->array;
Z_TRY_ADDREF_P(storage); Z_TRY_ADDREF_P(storage);
@ -1266,11 +1262,8 @@ PHP_METHOD(ArrayObject, serialize)
/* members */ /* members */
smart_str_appendl(&buf, "m:", 2); smart_str_appendl(&buf, "m:", 2);
if (!intern->std.properties) {
rebuild_object_properties(&intern->std);
}
ZVAL_ARR(&members, intern->std.properties); ZVAL_ARR(&members, zend_std_get_properties_ex(&intern->std));
php_var_serialize(&buf, &members, &var_hash); /* finishes the string */ php_var_serialize(&buf, &members, &var_hash); /* finishes the string */

View file

@ -601,12 +601,8 @@ static inline HashTable *spl_filesystem_object_get_debug_info(zend_object *objec
HashTable *debug_info; HashTable *debug_info;
zend_string *path_name; zend_string *path_name;
if (!intern->std.properties) {
rebuild_object_properties(&intern->std);
}
// TODO Do zend_new_array() + zend_hash_copy() trick? // TODO Do zend_new_array() + zend_hash_copy() trick?
debug_info = zend_array_dup(intern->std.properties); debug_info = zend_array_dup(zend_std_get_properties_ex(&intern->std));
path_name = spl_filesystem_object_get_pathname(intern); path_name = spl_filesystem_object_get_pathname(intern);
if (path_name) { if (path_name) {

View file

@ -427,14 +427,11 @@ static inline HashTable* spl_dllist_object_get_debug_info(zend_object *obj) /* {
spl_ptr_llist_element *current = intern->llist->head; spl_ptr_llist_element *current = intern->llist->head;
zval tmp, dllist_array; zval tmp, dllist_array;
HashTable *debug_info; HashTable *debug_info;
HashTable *properties = zend_std_get_properties_ex(&intern->std);
if (!intern->std.properties) {
rebuild_object_properties(&intern->std);
}
/* +2 As we are adding 2 additional key-entries */ /* +2 As we are adding 2 additional key-entries */
debug_info = zend_new_array(zend_hash_num_elements(intern->std.properties) + 2); debug_info = zend_new_array(zend_hash_num_elements(properties) + 2);
zend_hash_copy(debug_info, intern->std.properties, (copy_ctor_func_t) zval_add_ref); zend_hash_copy(debug_info, properties, (copy_ctor_func_t) zval_add_ref);
ZVAL_LONG(&tmp, intern->flags); ZVAL_LONG(&tmp, intern->flags);
spl_set_private_debug_info_property(spl_ce_SplDoublyLinkedList, "flags", strlen("flags"), debug_info, &tmp); spl_set_private_debug_info_property(spl_ce_SplDoublyLinkedList, "flags", strlen("flags"), debug_info, &tmp);

View file

@ -507,14 +507,11 @@ static inline HashTable* spl_heap_object_get_debug_info(const zend_class_entry *
spl_heap_object *intern = spl_heap_from_obj(obj); spl_heap_object *intern = spl_heap_from_obj(obj);
zval tmp, heap_array; zval tmp, heap_array;
HashTable *debug_info; HashTable *debug_info;
HashTable *properties = zend_std_get_properties_ex(&intern->std);
if (!intern->std.properties) {
rebuild_object_properties(&intern->std);
}
/* +3 As we are adding 3 additional key-entries */ /* +3 As we are adding 3 additional key-entries */
debug_info = zend_new_array(zend_hash_num_elements(intern->std.properties) + 3); debug_info = zend_new_array(zend_hash_num_elements(properties) + 3);
zend_hash_copy(debug_info, intern->std.properties, (copy_ctor_func_t) zval_add_ref); zend_hash_copy(debug_info, properties, (copy_ctor_func_t) zval_add_ref);
ZVAL_LONG(&tmp, intern->flags); ZVAL_LONG(&tmp, intern->flags);
spl_set_private_debug_info_property(ce, "flags", strlen("flags"), debug_info, &tmp); spl_set_private_debug_info_property(ce, "flags", strlen("flags"), debug_info, &tmp);