On 01/22/2016 10:29 PM, Bob Weinand wrote:
>> Am 22.01.2016 um 15:43 schrieb Dmitry Stogov <dmitry@zend.com
>> <mailto:dmitry@zend.com>>:
>>
>>
>> Hi,
>>
>> Could you please, take a look into the PoC.
>> It's incomplete, but may be you get ideas how to fix this.
>>
>> https://gist.github.com/dstogov/285024375d15cacf2a9b
>>
>> Few tests are failed, because YIELD may be used as expression in
>> nested calls (between INIT_FCALL/DO_FCALL), and the caller function
>> restores EG(vm_stack_top), loosing and overwriting that active frame.
>>
>> <?php
>> function gen() {
>> var_dump(yield 1);
>> }
>>
>> for ($gen = gen(); $gen->valid(); $gen->send(0)) {
>> var_dump($gen->current());
>> }
>> ?>
>>
>> Thanks. Dmitry.
>
> Hey, that's pretty similar to what I did
> https://github.com/php/php-src/commit/0f0471a9893230918084798d4e35db37d7b4519d
> <https://github.com/php/php-src/compare/master...bwoebi:stackless_generators> in
> that old patch, which you rejected because we hadn't found any
> solution for that issue with yield inside calls.
yes, this is similar.
>
> We basically need a way to properly first fetch the args (beware:
> func_arg fetches...) before instantiating the call frame, an issue
> which for example could be solved if we applied my
> vm_stack_restructuring patch (because it only installs call frames
> after all args were fetched).
I thought about that approach, but the amount of changes doesn't worth
the result. Doing this only for generators doesn't make a lot of sense.
>
> I believe this patch won't work without significant refactoring (like
> vm_stack_refactoring branch) … so, either we bite the bullet and look
> at that patch again, or we can forget this idea too.
most probably, you are right.
Thanks. Dmitry.