From: Nikita Popov Date: Thu, 23 Jul 2020 13:53:15 +0000 (+0200) Subject: Cleanup SPL instantiation code X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dc30e1d812b616fd83a10e04124ecab3e789128f;p=php Cleanup SPL instantiation code --- diff --git a/ext/spl/spl_engine.c b/ext/spl/spl_engine.c index 2420e8d49a..c554e69869 100644 --- a/ext/spl/spl_engine.c +++ b/ext/spl/spl_engine.c @@ -29,13 +29,6 @@ #include "spl_array.h" -/* {{{ spl_instantiate */ -PHPAPI void spl_instantiate(zend_class_entry *pce, zval *object) -{ - object_init_ex(object, pce); -} -/* }}} */ - PHPAPI zend_long spl_offset_convert_to_long(zval *offset) /* {{{ */ { zend_ulong idx; diff --git a/ext/spl/spl_engine.h b/ext/spl/spl_engine.h index b7fbb69f59..ef4da8b392 100644 --- a/ext/spl/spl_engine.h +++ b/ext/spl/spl_engine.h @@ -21,55 +21,27 @@ #include "php_spl.h" #include "zend_interfaces.h" -PHPAPI void spl_instantiate(zend_class_entry *pce, zval *object); - PHPAPI zend_long spl_offset_convert_to_long(zval *offset); -/* {{{ spl_instantiate_arg_ex1 */ -static inline int spl_instantiate_arg_ex1(zend_class_entry *pce, zval *retval, zval *arg1) +static inline void spl_instantiate_arg_ex1(zend_class_entry *pce, zval *retval, zval *arg1) { - zend_function *func = pce->constructor; - spl_instantiate(pce, retval); - - zend_call_method(Z_OBJ_P(retval), pce, &func, ZSTR_VAL(func->common.function_name), ZSTR_LEN(func->common.function_name), NULL, 1, arg1, NULL); - return 0; + object_init_ex(retval, pce); + zend_call_known_instance_method_with_1_params(pce->constructor, Z_OBJ_P(retval), NULL, arg1); } -/* }}} */ -/* {{{ spl_instantiate_arg_ex2 */ -static inline int spl_instantiate_arg_ex2(zend_class_entry *pce, zval *retval, zval *arg1, zval *arg2) +static inline void spl_instantiate_arg_ex2( + zend_class_entry *pce, zval *retval, zval *arg1, zval *arg2) { - zend_function *func = pce->constructor; - spl_instantiate(pce, retval); - - zend_call_method(Z_OBJ_P(retval), pce, &func, ZSTR_VAL(func->common.function_name), ZSTR_LEN(func->common.function_name), NULL, 2, arg1, arg2); - return 0; + object_init_ex(retval, pce); + zend_call_known_instance_method_with_2_params( + pce->constructor, Z_OBJ_P(retval), NULL, arg1, arg2); } -/* }}} */ -/* {{{ spl_instantiate_arg_n */ -static inline void spl_instantiate_arg_n(zend_class_entry *pce, zval *retval, int argc, zval *argv) +static inline void spl_instantiate_arg_n( + zend_class_entry *pce, zval *retval, uint32_t argc, zval *argv) { - zend_function *func = pce->constructor; - zend_fcall_info fci; - zend_fcall_info_cache fcc; - zval dummy; - - spl_instantiate(pce, retval); - - fci.size = sizeof(zend_fcall_info); - ZVAL_STR(&fci.function_name, func->common.function_name); - fci.object = Z_OBJ_P(retval); - fci.retval = &dummy; - fci.param_count = argc; - fci.params = argv; - - fcc.function_handler = func; - fcc.called_scope = pce; - fcc.object = Z_OBJ_P(retval); - - zend_call_function(&fci, &fcc); + object_init_ex(retval, pce); + zend_call_known_instance_method(pce->constructor, Z_OBJ_P(retval), NULL, argc, argv); } -/* }}} */ #endif /* SPL_ENGINE_H */ diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c index 311cc880b1..c71f3cb142 100644 --- a/ext/spl/spl_iterators.c +++ b/ext/spl/spl_iterators.c @@ -1365,7 +1365,7 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z } intern->dit_type = DIT_AppendIterator; zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling); - spl_instantiate(spl_ce_ArrayIterator, &intern->u.append.zarrayit); + object_init_ex(&intern->u.append.zarrayit, spl_ce_ArrayIterator); zend_call_method_with_0_params(Z_OBJ(intern->u.append.zarrayit), spl_ce_ArrayIterator, &spl_ce_ArrayIterator->constructor, "__construct", NULL); intern->u.append.iterator = spl_ce_ArrayIterator->get_iterator(spl_ce_ArrayIterator, &intern->u.append.zarrayit, 0); zend_restore_error_handling(&error_handling);