summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2016-11-28 12:30:16 +0300
committerDmitry Stogov <dmitry@zend.com>2016-11-28 12:30:16 +0300
commit3b4c9f18e04e622863831d9125e9ad596f32250a (patch)
treeebd3890519628bbf77c5d306185c6990167f01da
parent85a62d54b468c187e5c819e6d62cbafeaa7c96ca (diff)
parent458c732ed4fae4d174da727e6dadf8e014e3c93d (diff)
downloadphp-git-3b4c9f18e04e622863831d9125e9ad596f32250a.tar.gz
Merge branch 'PHP-7.1'
* PHP-7.1: 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 8c94319570..cb2b617857 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -7937,9 +7937,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 338d194279..1e601c46c7 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);
}