summaryrefslogtreecommitdiff
path: root/Zend/zend_objects.c
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-01-07 12:28:51 +0100
committerNikita Popov <nikita.ppv@gmail.com>2019-01-11 15:49:06 +0100
commite219ec144ef6682b71e135fd18654ee1bb4676b4 (patch)
treee4a3ae2b619cdc9fe50ee8e1fa5adb99d804dddf /Zend/zend_objects.c
parentfe8fdfa3bd588d80ce60f6b3848058239e0a760f (diff)
downloadphp-git-e219ec144ef6682b71e135fd18654ee1bb4676b4.tar.gz
Implement typed properties
RFC: https://wiki.php.net/rfc/typed_properties_v2 This is a squash of PR #3734, which is a squash of PR #3313. Co-authored-by: Bob Weinand <bobwei9@hotmail.com> Co-authored-by: Joe Watkins <krakjoe@php.net> Co-authored-by: Dmitry Stogov <dmitry@zend.com>
Diffstat (limited to 'Zend/zend_objects.c')
-rw-r--r--Zend/zend_objects.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/Zend/zend_objects.c b/Zend/zend_objects.c
index 0051ce8438..19d17dc9e9 100644
--- a/Zend/zend_objects.c
+++ b/Zend/zend_objects.c
@@ -57,7 +57,16 @@ ZEND_API void zend_object_std_dtor(zend_object *object)
if (EXPECTED(object->ce->default_properties_count)) {
end = p + object->ce->default_properties_count;
do {
- i_zval_ptr_dtor(p);
+ if (Z_REFCOUNTED_P(p)) {
+ if (UNEXPECTED(Z_ISREF_P(p)) &&
+ (ZEND_DEBUG || ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(p)))) {
+ zend_property_info *prop_info = zend_get_property_info_for_slot(object, p);
+ if (prop_info->type) {
+ ZEND_REF_DEL_TYPE_SOURCE(Z_REF_P(p), prop_info);
+ }
+ }
+ i_zval_ptr_dtor(p);
+ }
p++;
} while (p != end);
}
@@ -195,6 +204,13 @@ ZEND_API void ZEND_FASTCALL zend_objects_clone_members(zend_object *new_object,
i_zval_ptr_dtor(dst);
ZVAL_COPY_VALUE(dst, src);
zval_add_ref(dst);
+ if (UNEXPECTED(Z_ISREF_P(dst)) &&
+ (ZEND_DEBUG || ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(dst)))) {
+ zend_property_info *prop_info = zend_get_property_info_for_slot(new_object, dst);
+ if (prop_info->type) {
+ ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(dst), prop_info);
+ }
+ }
src++;
dst++;
} while (src != end);