summaryrefslogtreecommitdiff
path: root/Zend/zend_objects.c
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_objects.c')
-rw-r--r--Zend/zend_objects.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/Zend/zend_objects.c b/Zend/zend_objects.c
index 2feff81ea4..2826c322a9 100644
--- a/Zend/zend_objects.c
+++ b/Zend/zend_objects.c
@@ -151,14 +151,18 @@ ZEND_API zend_object *zend_objects_new(zend_class_entry *ce)
ZEND_API void zend_objects_clone_members(zend_object *new_object, zend_object *old_object)
{
- int i;
-
if (old_object->ce->default_properties_count) {
- for (i = 0; i < old_object->ce->default_properties_count; i++) {
- zval_ptr_dtor(&new_object->properties_table[i]);
- ZVAL_COPY_VALUE(&new_object->properties_table[i], &old_object->properties_table[i]);
- zval_add_ref(&new_object->properties_table[i]);
- }
+ zval *src = old_object->properties_table;
+ zval *dst = new_object->properties_table;
+ zval *end = src + old_object->ce->default_properties_count;
+
+ do {
+ i_zval_ptr_dtor(dst ZEND_FILE_LINE_CC);
+ ZVAL_COPY_VALUE(dst, src);
+ zval_add_ref(dst);
+ src++;
+ dst++;
+ } while (src != end);
}
if (old_object->properties) {
zval *prop, new_prop;