com php-src: Also handle nested function calls via variable: Zend/tests/methods-on-non-objects-nested-calls.phpt Zend/zend_vm_def.h
Zend/zend_vm_execute.h
| From: | Tjerk Anne Meesters | Date: | Sun, 06 Jul 2014 10:44:02 +0000 |
| Subject: | com php-src: Also handle nested function calls via variable: Zend/tests/methods-on-non-objects-nested-calls.phpt Zend/zend_vm_def.h Zend/zend_vm_execute.h |
||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-82144@lists.php.net to get a copy of this message | ||
Commit: a782f697df9c944f0645d56c078847d8316f8b9b
Author: Timm Friebe <thekid@thekid.de> Sun, 6 Jul 2014 12:44:02 +0200
Parents: abd42ea4c2d5e10fd88d6f89c6fcad9bc79d2f1b
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=a782f697df9c944f0645d56c078847d8316f8b9b
Log:
Also handle nested function calls via variable
Changed paths:
M Zend/tests/methods-on-non-objects-nested-calls.phpt
M Zend/zend_vm_def.h
M Zend/zend_vm_execute.h
Diff:
diff --git a/Zend/tests/methods-on-non-objects-nested-calls.phpt
b/Zend/tests/methods-on-non-objects-nested-calls.phpt
index e1fee51..117e29f 100644
--- a/Zend/tests/methods-on-non-objects-nested-calls.phpt
+++ b/Zend/tests/methods-on-non-objects-nested-calls.phpt
@@ -11,6 +11,8 @@ set_error_handler(function($code, $message) {
});
$x= null;
+$ref= 'nested';
+$func= function() { return nested(); };
var_dump($x->method(nested()));
var_dump($x->method(nested(), nested()));
var_dump($x->method(nested(nested())));
@@ -20,6 +22,8 @@ var_dump($x->method($x->nested(nested())));
var_dump($x->method($x->nested($x->deep())));
var_dump($x->method($x->nested(nested($x->deep()))));
var_dump($x->method(nested(nested($x->nested()))));
+var_dump($x->method($ref()));
+var_dump($x->method($func()));
echo "Alive\n";
?>
--EXPECTF--
@@ -41,4 +45,8 @@ Called #8
NULL
Called #9
NULL
+Called #10
+NULL
+Called #11
+NULL
Alive
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 19dbd94..32b910f 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -2475,7 +2475,7 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, TMP|VAR|UNUSED|CV,
CONST|TMP|VAR|CV)
do {
ZEND_VM_INC_OPCODE();
opline++;
- if (opline->opcode == ZEND_INIT_METHOD_CALL) {
+ if (opline->opcode == ZEND_INIT_METHOD_CALL || opline->opcode == ZEND_INIT_FCALL_BY_NAME)
{
nested++;
} else if (opline->opcode == ZEND_DO_FCALL_BY_NAME) {
nested--;
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index a4492bc..f323381 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -9318,7 +9318,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_TMP_CONST_HANDLER(ZEND_OPCO
do {
ZEND_VM_INC_OPCODE();
opline++;
- if (opline->opcode == ZEND_INIT_METHOD_CALL) {
+ if (opline->opcode == ZEND_INIT_METHOD_CALL || opline->opcode == ZEND_INIT_FCALL_BY_NAME)
{
nested++;
} else if (opline->opcode == ZEND_DO_FCALL_BY_NAME) {
nested--;
@@ -10205,7 +10205,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE
do {
ZEND_VM_INC_OPCODE();
opline++;
- if (opline->opcode == ZEND_INIT_METHOD_CALL) {
+ if (opline->opcode == ZEND_INIT_METHOD_CALL || opline->opcode == ZEND_INIT_FCALL_BY_NAME)
{
nested++;
} else if (opline->opcode == ZEND_DO_FCALL_BY_NAME) {
nested--;
@@ -11093,7 +11093,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE
do {
ZEND_VM_INC_OPCODE();
opline++;
- if (opline->opcode == ZEND_INIT_METHOD_CALL) {
+ if (opline->opcode == ZEND_INIT_METHOD_CALL || opline->opcode == ZEND_INIT_FCALL_BY_NAME)
{
nested++;
} else if (opline->opcode == ZEND_DO_FCALL_BY_NAME) {
nested--;
@@ -12561,7 +12561,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_
do {
ZEND_VM_INC_OPCODE();
opline++;
- if (opline->opcode == ZEND_INIT_METHOD_CALL) {
+ if (opline->opcode == ZEND_INIT_METHOD_CALL || opline->opcode == ZEND_INIT_FCALL_BY_NAME)
{
nested++;
} else if (opline->opcode == ZEND_DO_FCALL_BY_NAME) {
nested--;
@@ -15821,7 +15821,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCO
do {
ZEND_VM_INC_OPCODE();
opline++;
- if (opline->opcode == ZEND_INIT_METHOD_CALL) {
+ if (opline->opcode == ZEND_INIT_METHOD_CALL || opline->opcode == ZEND_INIT_FCALL_BY_NAME)
{
nested++;
} else if (opline->opcode == ZEND_DO_FCALL_BY_NAME) {
nested--;
@@ -18189,7 +18189,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE
do {
ZEND_VM_INC_OPCODE();
opline++;
- if (opline->opcode == ZEND_INIT_METHOD_CALL) {
+ if (opline->opcode == ZEND_INIT_METHOD_CALL || opline->opcode == ZEND_INIT_FCALL_BY_NAME)
{
nested++;
} else if (opline->opcode == ZEND_DO_FCALL_BY_NAME) {
nested--;
@@ -20518,7 +20518,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE
do {
ZEND_VM_INC_OPCODE();
opline++;
- if (opline->opcode == ZEND_INIT_METHOD_CALL) {
+ if (opline->opcode == ZEND_INIT_METHOD_CALL || opline->opcode == ZEND_INIT_FCALL_BY_NAME)
{
nested++;
} else if (opline->opcode == ZEND_DO_FCALL_BY_NAME) {
nested--;
@@ -23997,7 +23997,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_
do {
ZEND_VM_INC_OPCODE();
opline++;
- if (opline->opcode == ZEND_INIT_METHOD_CALL) {
+ if (opline->opcode == ZEND_INIT_METHOD_CALL || opline->opcode == ZEND_INIT_FCALL_BY_NAME)
{
nested++;
} else if (opline->opcode == ZEND_DO_FCALL_BY_NAME) {
nested--;
@@ -25661,7 +25661,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_O
do {
ZEND_VM_INC_OPCODE();
opline++;
- if (opline->opcode == ZEND_INIT_METHOD_CALL) {
+ if (opline->opcode == ZEND_INIT_METHOD_CALL || opline->opcode == ZEND_INIT_FCALL_BY_NAME)
{
nested++;
} else if (opline->opcode == ZEND_DO_FCALL_BY_NAME) {
nested--;
@@ -27091,7 +27091,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMP_HANDLER(ZEND_OPC
do {
ZEND_VM_INC_OPCODE();
opline++;
- if (opline->opcode == ZEND_INIT_METHOD_CALL) {
+ if (opline->opcode == ZEND_INIT_METHOD_CALL || opline->opcode == ZEND_INIT_FCALL_BY_NAME)
{
nested++;
} else if (opline->opcode == ZEND_DO_FCALL_BY_NAME) {
nested--;
@@ -28427,7 +28427,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_VAR_HANDLER(ZEND_OPC
do {
ZEND_VM_INC_OPCODE();
opline++;
- if (opline->opcode == ZEND_INIT_METHOD_CALL) {
+ if (opline->opcode == ZEND_INIT_METHOD_CALL || opline->opcode == ZEND_INIT_FCALL_BY_NAME)
{
nested++;
} else if (opline->opcode == ZEND_DO_FCALL_BY_NAME) {
nested--;
@@ -30191,7 +30191,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCO
do {
ZEND_VM_INC_OPCODE();
opline++;
- if (opline->opcode == ZEND_INIT_METHOD_CALL) {
+ if (opline->opcode == ZEND_INIT_METHOD_CALL || opline->opcode == ZEND_INIT_FCALL_BY_NAME)
{
nested++;
} else if (opline->opcode == ZEND_DO_FCALL_BY_NAME) {
nested--;
@@ -33452,7 +33452,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCOD
do {
ZEND_VM_INC_OPCODE();
opline++;
- if (opline->opcode == ZEND_INIT_METHOD_CALL) {
+ if (opline->opcode == ZEND_INIT_METHOD_CALL || opline->opcode == ZEND_INIT_FCALL_BY_NAME)
{
nested++;
} else if (opline->opcode == ZEND_DO_FCALL_BY_NAME) {
nested--;
@@ -35586,7 +35586,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_
do {
ZEND_VM_INC_OPCODE();
opline++;
- if (opline->opcode == ZEND_INIT_METHOD_CALL) {
+ if (opline->opcode == ZEND_INIT_METHOD_CALL || opline->opcode == ZEND_INIT_FCALL_BY_NAME)
{
nested++;
} else if (opline->opcode == ZEND_DO_FCALL_BY_NAME) {
nested--;
@@ -37775,7 +37775,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_
do {
ZEND_VM_INC_OPCODE();
opline++;
- if (opline->opcode == ZEND_INIT_METHOD_CALL) {
+ if (opline->opcode == ZEND_INIT_METHOD_CALL || opline->opcode == ZEND_INIT_FCALL_BY_NAME)
{
nested++;
} else if (opline->opcode == ZEND_DO_FCALL_BY_NAME) {
nested--;
@@ -40965,7 +40965,7 @@ static int ZEND_FASTCALL
ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_H
do {
ZEND_VM_INC_OPCODE();
opline++;
- if (opline->opcode == ZEND_INIT_METHOD_CALL) {
+ if (opline->opcode == ZEND_INIT_METHOD_CALL || opline->opcode == ZEND_INIT_FCALL_BY_NAME)
{
nested++;
} else if (opline->opcode == ZEND_DO_FCALL_BY_NAME) {
nested--;