diff options
| author | Nikita Popov <nikita.ppv@gmail.com> | 2020-06-17 12:34:04 +0200 |
|---|---|---|
| committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-06-17 16:36:56 +0200 |
| commit | 15846ff115722b2f95d699abf07141d774b0e2cd (patch) | |
| tree | 0be3155ce95856e82c4a0cf4c694ab0c6df49e62 /ext/spl | |
| parent | b516566b84c210ce6ceddeb238e45d4b1bcb32ce (diff) | |
| download | php-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.c | 6 | ||||
| -rw-r--r-- | ext/spl/spl_array.c | 15 | ||||
| -rw-r--r-- | ext/spl/spl_directory.c | 18 | ||||
| -rw-r--r-- | ext/spl/spl_dllist.c | 3 | ||||
| -rw-r--r-- | ext/spl/spl_fixedarray.c | 3 | ||||
| -rw-r--r-- | ext/spl/spl_iterators.c | 3 |
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; } |
