]> granicus.if.org Git - php/commitdiff
Cleanup SPL instantiation code
authorNikita Popov <nikita.ppv@gmail.com>
Thu, 23 Jul 2020 13:53:15 +0000 (15:53 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Thu, 23 Jul 2020 14:00:12 +0000 (16:00 +0200)
ext/spl/spl_engine.c
ext/spl/spl_engine.h
ext/spl/spl_iterators.c

index 2420e8d49aa7d8d8758e28fbfa08ed1f1e4bc1d1..c554e69869f1bce3e6dbd7fd1ab09f16a5770cbf 100644 (file)
 
 #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;
index b7fbb69f5985e85fa22108fee4e3a138a95bd3d6..ef4da8b3920de46d3051fd2a41aff6fc23569e0b 100644 (file)
 #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 */
index 311cc880b1b805bc51c6289afc235a03f00c3d97..c71f3cb14292a5dc681a7955ddf75c4cefcd10f3 100644 (file)
@@ -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);