diff options
author | Dmitry Stogov <dmitry@zend.com> | 2016-11-28 12:30:16 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2016-11-28 12:30:16 +0300 |
commit | 3b4c9f18e04e622863831d9125e9ad596f32250a (patch) | |
tree | ebd3890519628bbf77c5d306185c6990167f01da | |
parent | 85a62d54b468c187e5c819e6d62cbafeaa7c96ca (diff) | |
parent | 458c732ed4fae4d174da727e6dadf8e014e3c93d (diff) | |
download | php-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.phpt | 24 | ||||
-rw-r--r-- | Zend/zend_vm_def.h | 3 | ||||
-rw-r--r-- | Zend/zend_vm_execute.h | 3 |
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); } |