mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Zend: make zend_copy_parameters_array() private (#20265)
And slightly refactor implementation.
This commit is contained in:
committed by
GitHub
parent
bac62bf31a
commit
275ec6f335
@@ -34,6 +34,7 @@ PHP 8.6 INTERNALS UPGRADE NOTES
|
||||
printf family.
|
||||
. The zval_dtor() alias of zval_ptr_dtor_nogc() has been removed.
|
||||
Call zval_ptr_dtor_nogc() directly instead.
|
||||
. The internal zend_copy_parameters_array() function is no longer exposed.
|
||||
|
||||
========================
|
||||
2. Build system changes
|
||||
|
||||
@@ -76,28 +76,6 @@ ZEND_API zend_result zend_get_parameters_array_ex(uint32_t param_count, zval *ar
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
ZEND_API zend_result zend_copy_parameters_array(uint32_t param_count, zval *argument_array) /* {{{ */
|
||||
{
|
||||
zval *param_ptr;
|
||||
uint32_t arg_count;
|
||||
|
||||
param_ptr = ZEND_CALL_ARG(EG(current_execute_data), 1);
|
||||
arg_count = ZEND_CALL_NUM_ARGS(EG(current_execute_data));
|
||||
|
||||
if (param_count>arg_count) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
while (param_count-->0) {
|
||||
Z_TRY_ADDREF_P(param_ptr);
|
||||
zend_hash_next_index_insert_new(Z_ARRVAL_P(argument_array), param_ptr);
|
||||
param_ptr++;
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
ZEND_API ZEND_COLD void zend_wrong_param_count(void) /* {{{ */
|
||||
{
|
||||
const char *space;
|
||||
|
||||
@@ -347,9 +347,6 @@ ZEND_API void zend_set_dl_use_deepbind(bool use_deepbind);
|
||||
|
||||
ZEND_API zend_result zend_get_parameters_array_ex(uint32_t param_count, zval *argument_array);
|
||||
|
||||
/* internal function to efficiently copy parameters when executing __call() */
|
||||
ZEND_API zend_result zend_copy_parameters_array(uint32_t param_count, zval *argument_array);
|
||||
|
||||
#define zend_get_parameters_array(ht, param_count, argument_array) \
|
||||
zend_get_parameters_array_ex(param_count, argument_array)
|
||||
#define zend_parse_parameters_none() \
|
||||
|
||||
@@ -287,6 +287,19 @@ ZEND_METHOD(Closure, bindTo)
|
||||
do_closure_bind(return_value, ZEND_THIS, newthis, scope_obj, scope_str);
|
||||
}
|
||||
|
||||
static void zend_copy_parameters_array(const uint32_t param_count, HashTable *argument_array) /* {{{ */
|
||||
{
|
||||
zval *param_ptr = ZEND_CALL_ARG(EG(current_execute_data), 1);
|
||||
|
||||
ZEND_ASSERT(param_count <= ZEND_CALL_NUM_ARGS(EG(current_execute_data)));
|
||||
|
||||
for (uint32_t i = 0; i < param_count; i++) {
|
||||
Z_TRY_ADDREF_P(param_ptr);
|
||||
zend_hash_next_index_insert_new(argument_array, param_ptr);
|
||||
param_ptr++;
|
||||
}
|
||||
}
|
||||
|
||||
static ZEND_NAMED_FUNCTION(zend_closure_call_magic) /* {{{ */ {
|
||||
zend_fcall_info fci;
|
||||
zend_fcall_info_cache fcc;
|
||||
@@ -310,14 +323,14 @@ static ZEND_NAMED_FUNCTION(zend_closure_call_magic) /* {{{ */ {
|
||||
array_init_size(&fci.params[1], ZEND_NUM_ARGS() + zend_hash_num_elements(EX(extra_named_params)));
|
||||
/* Avoid conversion from packed to mixed later. */
|
||||
zend_hash_real_init_mixed(Z_ARRVAL(fci.params[1]));
|
||||
zend_copy_parameters_array(ZEND_NUM_ARGS(), &fci.params[1]);
|
||||
zend_copy_parameters_array(ZEND_NUM_ARGS(), Z_ARRVAL(fci.params[1]));
|
||||
ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, named_param_zval) {
|
||||
Z_TRY_ADDREF_P(named_param_zval);
|
||||
zend_hash_add_new(Z_ARRVAL(fci.params[1]), name, named_param_zval);
|
||||
} ZEND_HASH_FOREACH_END();
|
||||
} else if (ZEND_NUM_ARGS()) {
|
||||
array_init_size(&fci.params[1], ZEND_NUM_ARGS());
|
||||
zend_copy_parameters_array(ZEND_NUM_ARGS(), &fci.params[1]);
|
||||
zend_copy_parameters_array(ZEND_NUM_ARGS(), Z_ARRVAL(fci.params[1]));
|
||||
} else {
|
||||
ZVAL_EMPTY_ARRAY(&fci.params[1]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user