summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2016-11-28 12:30:01 +0300
committerDmitry Stogov <dmitry@zend.com>2016-11-28 12:30:01 +0300
commit458c732ed4fae4d174da727e6dadf8e014e3c93d (patch)
treea7b9e21deaf1d8b365b5c6353774bd110ed1532a
parent53655c5af12e68a9fdfa899152e1de8e7fe57431 (diff)
parent970f21be97980a18153f13d653f4132cce676158 (diff)
downloadphp-git-458c732ed4fae4d174da727e6dadf8e014e3c93d.tar.gz
Merge branch 'PHP-7.0' into PHP-7.1
* PHP-7.0: Fixed calling generators through magic __call()
-rw-r--r--Zend/tests/generators/generator_trampoline.phpt24
-rw-r--r--Zend/zend_vm_def.h3
-rw-r--r--Zend/zend_vm_execute.h3
3 files changed, 24 insertions, 6 deletions
diff --git a/Zend/tests/generators/generator_trampoline.phpt b/Zend/tests/generators/generator_trampoline.phpt
new file mode 100644
index 0000000000..a98dc9ee49
--- /dev/null
+++ b/Zend/tests/generators/generator_trampoline.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Calling generator through magic __call()
+--FILE--
+<?php
+class A {
+ public function __call($name, $args) {
+ for ($i = 0; $i < 5; $i++) {
+ yield $i;
+ }
+ }
+}
+
+$a = new A();
+foreach ($a->gen() as $n) {
+ var_dump($n);
+}
+$a->gen();
+?>
+--EXPECT--
+int(0)
+int(1)
+int(2)
+int(3)
+int(4)
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 6e82ddba8f..0f1d754f8c 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -7964,9 +7964,6 @@ ZEND_VM_HANDLER(158, ZEND_CALL_TRAMPOLINE, ANY, ANY)
fbc = call->func;
if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
-
- ZEND_ASSERT(!(fbc->common.fn_flags & ZEND_ACC_GENERATOR));
-
if (UNEXPECTED(!fbc->op_array.run_time_cache)) {
init_func_run_time_cache(&fbc->op_array);
}
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index fc1b7f571d..cb49393dd3 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -1976,9 +1976,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(Z
fbc = call->func;
if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
-
- ZEND_ASSERT(!(fbc->common.fn_flags & ZEND_ACC_GENERATOR));
-
if (UNEXPECTED(!fbc->op_array.run_time_cache)) {
init_func_run_time_cache(&fbc->op_array);
}