[php-src] master: Zend: add _ex variants for calling known functions/FCC (#22910)

From: Date: Tue, 28 Jul 2026 16:29:14 +0000
Subject: [php-src] master: Zend: add _ex variants for calling known functions/FCC (#22910)
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-140282@lists.php.net to get a copy of this message
Author: Gina Peter Banyard (Girgias) Committer: GitHub (web-flow) Pusher: Girgias Date: 2026-07-28T17:29:11+01:00 Commit: https://github.com/php/php-src/commit/9518d49da0f56aa806a8c4c0e364de2802bf6bcf Raw diff: https://github.com/php/php-src/commit/9518d49da0f56aa806a8c4c0e364de2802bf6bcf.diff Zend: add _ex variants for calling known functions/FCC (#22910) To permit setting the consumed_arg FCI field Changed paths: M Zend/zend_API.h M Zend/zend_execute_API.c Diff: diff --git a/Zend/zend_API.h b/Zend/zend_API.h index 2c0b892d1941..622e90da59b2 100644 --- a/Zend/zend_API.h +++ b/Zend/zend_API.h @@ -854,12 +854,19 @@ static zend_always_inline zend_result zend_call_function_with_return_value( * If retval_ptr is NULL, the return value is discarded. * If object is NULL, this must be a free function or static call. * called_scope must be provided for instance and static method calls. */ -ZEND_API void zend_call_known_function( +ZEND_API void zend_call_known_function_ex( zend_function *fn, zend_object *object, zend_class_entry *called_scope, zval *retval_ptr, - uint32_t param_count, zval *params, HashTable *named_params); + uint32_t param_count, zval *params, HashTable *named_params, uint32_t consumed_args); -static zend_always_inline void zend_call_known_fcc( - const zend_fcall_info_cache *fcc, zval *retval_ptr, uint32_t param_count, zval *params, HashTable *named_params) +static zend_always_inline void zend_call_known_function( + zend_function *fn, zend_object *object, zend_class_entry *called_scope, zval *retval_ptr, + uint32_t param_count, zval *params, HashTable *named_params) { + zend_call_known_function_ex(fn, object, called_scope, retval_ptr, param_count, params, named_params, 0); +} + +static zend_always_inline void zend_call_known_fcc_ex( + const zend_fcall_info_cache *fcc, zval *retval_ptr, + uint32_t param_count, zval *params, HashTable *named_params, uint32_t consumed_args) { zend_function *func = fcc->function_handler; /* Need to copy trampolines as they get released after they are called */ @@ -868,7 +875,13 @@ static zend_always_inline void zend_call_known_fcc( memcpy(func, fcc->function_handler, sizeof(zend_function)); zend_string_addref(func->op_array.function_name); } - zend_call_known_function(func, fcc->object, fcc->called_scope, retval_ptr, param_count, params, named_params); + zend_call_known_function_ex(func, fcc->object, fcc->called_scope, retval_ptr, param_count, params, named_params, consumed_args); +} + +static zend_always_inline void zend_call_known_fcc( + const zend_fcall_info_cache *fcc, zval *retval_ptr, uint32_t param_count, zval *params, HashTable *named_params) +{ + zend_call_known_fcc_ex(fcc, retval_ptr, param_count, params, named_params, 0); } /* Call the provided zend_function instance method on an object. */ diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index 88b0a485750a..83ba5e7490cf 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -1100,9 +1100,9 @@ zend_result zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_ } /* }}} */ -ZEND_API void zend_call_known_function( +ZEND_API void zend_call_known_function_ex( zend_function *fn, zend_object *object, zend_class_entry *called_scope, zval *retval_ptr, - uint32_t param_count, zval *params, HashTable *named_params) + uint32_t param_count, zval *params, HashTable *named_params, uint32_t consumed_args) { zval retval; zend_fcall_info fci; @@ -1116,7 +1116,7 @@ ZEND_API void zend_call_known_function( fci.param_count = param_count; fci.params = params; fci.named_params = named_params; - fci.consumed_args = 0; + fci.consumed_args = consumed_args; ZVAL_UNDEF(&fci.function_name); /* Unused */ fcic.function_handler = fn;

« previous php.cvs (#140282) next »