summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-07-07 22:18:48 +0400
committerDmitry Stogov <dmitry@zend.com>2014-07-07 22:18:48 +0400
commitd9585f019fd893dea2c53c8da97fbe1164cfdf36 (patch)
treecf50aef6ada613d7f47e7c27976730ecf8885cdb
parent21acbd5b75b3c77babbfe792e53d790d6c191182 (diff)
downloadphp-git-d9585f019fd893dea2c53c8da97fbe1164cfdf36.tar.gz
Skip useless ZEND_RECV opcodes
-rw-r--r--Zend/zend_execute.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 07be2e2f9b..fc5e556645 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -1547,10 +1547,14 @@ static zend_always_inline void i_init_func_execute_data(zend_execute_data *execu
EX(call) = NULL;
EX(opline) = op_array->opcodes;
+ if (EXPECTED((op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) == 0)) {
+ /* Skip useless ZEND_RECV opcodes */
+ EX(opline) += MIN(EX(num_args), op_array->required_num_args);
+ }
EX(scope) = EG(scope);
first_extra_arg = op_array->num_args;
-
+
if (UNEXPECTED((op_array->fn_flags & ZEND_ACC_VARIADIC) != 0)) {
first_extra_arg--;
}