summaryrefslogtreecommitdiff
path: root/ext/spl
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-06-17 12:34:04 +0200
committerNikita Popov <nikita.ppv@gmail.com>2020-06-17 16:36:56 +0200
commit15846ff115722b2f95d699abf07141d774b0e2cd (patch)
tree0be3155ce95856e82c4a0cf4c694ab0c6df49e62 /ext/spl
parentb516566b84c210ce6ceddeb238e45d4b1bcb32ce (diff)
downloadphp-git-15846ff115722b2f95d699abf07141d774b0e2cd.tar.gz
Add ZVAL_OBJ_COPY macro
For the common ZVAL_OBJ + GC_ADDREF pattern. This mirrors the existing ZVAL_STR_COPY API.
Diffstat (limited to 'ext/spl')
-rw-r--r--ext/spl/php_spl.c6
-rw-r--r--ext/spl/spl_array.c15
-rw-r--r--ext/spl/spl_directory.c18
-rw-r--r--ext/spl/spl_dllist.c3
-rw-r--r--ext/spl/spl_fixedarray.c3
-rw-r--r--ext/spl/spl_iterators.c3
6 files changed, 17 insertions, 31 deletions
diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c
index ced58ab20d..e2b361fb5b 100644
--- a/ext/spl/php_spl.c
+++ b/ext/spl/php_spl.c
@@ -609,8 +609,7 @@ PHP_FUNCTION(spl_autoload_functions)
ZEND_HASH_FOREACH_PTR(SPL_G(autoload_functions), alfi) {
if (alfi->closure) {
zval obj_zv;
- ZVAL_OBJ(&obj_zv, alfi->closure);
- Z_ADDREF(obj_zv);
+ ZVAL_OBJ_COPY(&obj_zv, alfi->closure);
add_next_index_zval(return_value, &obj_zv);
} else if (alfi->func_ptr->common.scope) {
zval tmp;
@@ -618,8 +617,7 @@ PHP_FUNCTION(spl_autoload_functions)
array_init(&tmp);
if (alfi->obj) {
zval obj_zv;
- ZVAL_OBJ(&obj_zv, alfi->obj);
- Z_ADDREF(obj_zv);
+ ZVAL_OBJ_COPY(&obj_zv, alfi->obj);
add_next_index_zval(&tmp, &obj_zv);
} else {
add_next_index_str(&tmp, zend_string_copy(alfi->ce->name));
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c
index ab263b6195..86a1ad501c 100644
--- a/ext/spl/spl_array.c
+++ b/ext/spl/spl_array.c
@@ -189,13 +189,11 @@ static zend_object *spl_array_object_new_ex(zend_class_entry *class_type, zend_o
zend_array_dup(spl_array_get_hash_table(other)));
} else {
ZEND_ASSERT(orig->handlers == &spl_handler_ArrayIterator);
- GC_ADDREF(orig);
- ZVAL_OBJ(&intern->array, orig);
+ ZVAL_OBJ_COPY(&intern->array, orig);
intern->ar_flags |= SPL_ARRAY_USE_OTHER;
}
} else {
- GC_ADDREF(orig);
- ZVAL_OBJ(&intern->array, orig);
+ ZVAL_OBJ_COPY(&intern->array, orig);
intern->ar_flags |= SPL_ARRAY_USE_OTHER;
}
} else {
@@ -1173,8 +1171,7 @@ zend_object_iterator *spl_array_get_iterator(zend_class_entry *ce, zval *object,
zend_iterator_init(&iterator->it);
- Z_ADDREF_P(object);
- ZVAL_OBJ(&iterator->it.data, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&iterator->it.data, Z_OBJ_P(object));
iterator->it.funcs = &spl_array_it_funcs;
iterator->ce = ce;
ZVAL_UNDEF(&iterator->value);
@@ -1333,7 +1330,7 @@ PHP_METHOD(ArrayObject, getIterator)
RETURN_THROWS();
}
- ZVAL_OBJ(return_value, spl_array_object_new_ex(intern->ce_get_iterator, Z_OBJ_P(object), 0));
+ RETURN_OBJ(spl_array_object_new_ex(intern->ce_get_iterator, Z_OBJ_P(object), 0));
}
/* }}} */
@@ -1652,9 +1649,7 @@ PHP_METHOD(RecursiveArrayIterator, getChildren)
return;
}
if (instanceof_function(Z_OBJCE_P(entry), Z_OBJCE_P(ZEND_THIS))) {
- ZVAL_OBJ(return_value, Z_OBJ_P(entry));
- Z_ADDREF_P(return_value);
- return;
+ RETURN_OBJ_COPY(Z_OBJ_P(entry));
}
}
diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c
index df33ae6548..f30d7fcf7f 100644
--- a/ext/spl/spl_directory.c
+++ b/ext/spl/spl_directory.c
@@ -457,7 +457,7 @@ static spl_filesystem_object *spl_filesystem_object_create_info(spl_filesystem_o
zend_update_class_constants(ce);
intern = spl_filesystem_from_obj(spl_filesystem_object_new_ex(ce));
- ZVAL_OBJ(return_value, &intern->std);
+ RETVAL_OBJ(&intern->std);
if (ce->constructor->common.scope != spl_ce_SplFileInfo) {
ZVAL_STRINGL(&arg1, file_path, file_path_len);
@@ -501,7 +501,7 @@ static spl_filesystem_object *spl_filesystem_object_create_type(int num_args, sp
}
intern = spl_filesystem_from_obj(spl_filesystem_object_new_ex(ce));
- ZVAL_OBJ(return_value, &intern->std);
+ RETVAL_OBJ(&intern->std);
spl_filesystem_object_get_file_name(source);
if (ce->constructor->common.scope != spl_ce_SplFileInfo) {
@@ -536,7 +536,7 @@ static spl_filesystem_object *spl_filesystem_object_create_type(int num_args, sp
intern = spl_filesystem_from_obj(spl_filesystem_object_new_ex(ce));
- ZVAL_OBJ(return_value, &intern->std);
+ RETVAL_OBJ(&intern->std);
spl_filesystem_object_get_file_name(source);
@@ -802,8 +802,7 @@ PHP_METHOD(DirectoryIterator, current)
if (zend_parse_parameters_none() == FAILURE) {
RETURN_THROWS();
}
- ZVAL_OBJ(return_value, Z_OBJ_P(ZEND_THIS));
- Z_ADDREF_P(return_value);
+ RETURN_OBJ_COPY(Z_OBJ_P(ZEND_THIS));
}
/* }}} */
@@ -1099,8 +1098,7 @@ PHP_METHOD(FilesystemIterator, current)
spl_filesystem_object_get_file_name(intern);
spl_filesystem_object_create_type(0, intern, SPL_FS_INFO, NULL, return_value);
} else {
- ZVAL_OBJ(return_value, Z_OBJ_P(ZEND_THIS));
- Z_ADDREF_P(return_value);
+ RETURN_OBJ_COPY(Z_OBJ_P(ZEND_THIS));
}
}
/* }}} */
@@ -1645,8 +1643,7 @@ zend_object_iterator *spl_filesystem_dir_get_iterator(zend_class_entry *ce, zval
}
dir_object = Z_SPLFILESYSTEM_P(object);
iterator = spl_filesystem_object_to_iterator(dir_object);
- Z_ADDREF_P(object);
- ZVAL_OBJ(&iterator->intern.data, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&iterator->intern.data, Z_OBJ_P(object));
iterator->intern.funcs = &spl_filesystem_dir_it_funcs;
/* ->current must be initialized; rewind doesn't set it and valid
* doesn't check whether it's set */
@@ -1847,8 +1844,7 @@ zend_object_iterator *spl_filesystem_tree_get_iterator(zend_class_entry *ce, zva
dir_object = Z_SPLFILESYSTEM_P(object);
iterator = spl_filesystem_object_to_iterator(dir_object);
- Z_ADDREF_P(object);
- ZVAL_OBJ(&iterator->intern.data, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&iterator->intern.data, Z_OBJ_P(object));
iterator->intern.funcs = &spl_filesystem_tree_it_funcs;
return &iterator->intern;
diff --git a/ext/spl/spl_dllist.c b/ext/spl/spl_dllist.c
index 0462c46aa4..adf3d354cc 100644
--- a/ext/spl/spl_dllist.c
+++ b/ext/spl/spl_dllist.c
@@ -1351,8 +1351,7 @@ zend_object_iterator *spl_dllist_get_iterator(zend_class_entry *ce, zval *object
zend_iterator_init((zend_object_iterator*)iterator);
- Z_ADDREF_P(object);
- ZVAL_OBJ(&iterator->intern.it.data, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&iterator->intern.it.data, Z_OBJ_P(object));
iterator->intern.it.funcs = &spl_dllist_it_funcs;
iterator->intern.ce = ce;
iterator->traverse_position = dllist_object->traverse_position;
diff --git a/ext/spl/spl_fixedarray.c b/ext/spl/spl_fixedarray.c
index 2b86a85d51..63a3ef78fa 100644
--- a/ext/spl/spl_fixedarray.c
+++ b/ext/spl/spl_fixedarray.c
@@ -980,8 +980,7 @@ zend_object_iterator *spl_fixedarray_get_iterator(zend_class_entry *ce, zval *ob
zend_iterator_init((zend_object_iterator*)iterator);
- Z_ADDREF_P(object);
- ZVAL_OBJ(&iterator->intern.it.data, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&iterator->intern.it.data, Z_OBJ_P(object));
iterator->intern.it.funcs = &spl_fixedarray_it_funcs;
iterator->intern.ce = ce;
ZVAL_UNDEF(&iterator->intern.value);
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c
index a6ccc855c0..8ddd413cf3 100644
--- a/ext/spl/spl_iterators.c
+++ b/ext/spl/spl_iterators.c
@@ -459,8 +459,7 @@ static zend_object_iterator *spl_recursive_it_get_iterator(zend_class_entry *ce,
zend_iterator_init((zend_object_iterator*)iterator);
- Z_ADDREF_P(zobject);
- ZVAL_OBJ(&iterator->intern.data, Z_OBJ_P(zobject));
+ ZVAL_OBJ_COPY(&iterator->intern.data, Z_OBJ_P(zobject));
iterator->intern.funcs = &spl_recursive_it_iterator_funcs;
return (zend_object_iterator*)iterator;
}