summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-07-23 15:53:15 +0200
committerNikita Popov <nikita.ppv@gmail.com>2020-07-23 16:00:12 +0200
commitdc30e1d812b616fd83a10e04124ecab3e789128f (patch)
tree8a3eaa253b36d0ec2e4303eeb987a96b944fe9c5
parentfc4d462e947828fdbeac6020ac8f34704a218834 (diff)
downloadphp-git-dc30e1d812b616fd83a10e04124ecab3e789128f.tar.gz
Cleanup SPL instantiation code
-rw-r--r--ext/spl/spl_engine.c7
-rw-r--r--ext/spl/spl_engine.h52
-rw-r--r--ext/spl/spl_iterators.c2
3 files changed, 13 insertions, 48 deletions
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);