History log of /PHP-5.5/Zend/zend_generators.c (Results 26 – 50 of 75)
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
# 70f83f35 30-Nov-2012 Dmitry Stogov

. The VM stacks for passing function arguments and syntaticaly nested calls were merged into a single stack. The stack size needed for op_array execution is calculated at compile time and preallocate

. The VM stacks for passing function arguments and syntaticaly nested calls were merged into a single stack. The stack size needed for op_array execution is calculated at compile time and preallocated at once. As result all the stack push operatins don't require checks for stack overflow any more.
. Generators implementation was improved using the new VM stack. Now it's a bit more clear and faster.

show more ...


# 60871e51 24-Nov-2012 Nikita Popov

Fix bug #63596: finally in generators segfaults

EX(fast_ret) wasn't initialized in this case so the code ended up
dereferencing an invalid pointer after the jump.


# eb4825b5 22-Nov-2012 Dmitry Stogov

Improved "finally" im[plementation


Revision tags: php-5.3.19, php-5.4.9, php-5.5.0alpha1, php-5.3.19RC1, php-5.4.9RC1
# 7bcb8780 04-Nov-2012 Xinchen Hui

Fixed bug #63428 (The behavior of execute() changed)


Revision tags: php-5.3.18, php-5.4.8, php-5.3.18RC1, php-5.4.8RC1
# a31fa55b 22-Sep-2012 Nikita Popov

Fixed bug #63132

EG(arg_types_stack) is now also backed up when generators are used. This
allows the use of yield in nested method calls.

This commit adds two new functions to t

Fixed bug #63132

EG(arg_types_stack) is now also backed up when generators are used. This
allows the use of yield in nested method calls.

This commit adds two new functions to the zend_ptr_stack API:

zend_ptr_stack_push_from_memory
zend_ptr_stack_pop_into_memory

both taking the following arguments:

zend_ptr_stack *stack, int count, void **pointers

show more ...


# a47c11a1 16-Sep-2012 Nikita Popov

Fix two op_array -> function cast warnings


Revision tags: php-5.3.17, php-5.4.7
# 4a7d1b4e 05-Sep-2012 Pierre Joye

- fix build, declarations must be 1st in a contextgit checkout -f master


# 72473962 05-Sep-2012 Dmitry Stogov

Fixed bug #62991 (Segfault with generator and closure)


# dbc7809b 29-Aug-2012 Nikita Popov

Fix typos


# bef79588 29-Aug-2012 Nikita Popov

Fix segfault when traversing a by-ref generator twice

If you try to traverse an already closed generator an exception will now be
thrown.

Furthermore this changes the error for

Fix segfault when traversing a by-ref generator twice

If you try to traverse an already closed generator an exception will now be
thrown.

Furthermore this changes the error for traversing a by-val generator by-ref
from an E_ERROR to an Exception.

show more ...


# cc07038f 29-Aug-2012 Nikita Popov

Make sure that exception is thrown on rewind() after closing too


Revision tags: php-5.4.7RC1
# f53225a9 25-Aug-2012 Nikita Popov

Fix several issues and allow rewind only at/before first yield

* Trying to resume a generator while it is already running now throws a
fatal error.
* Trying to use yield in fina

Fix several issues and allow rewind only at/before first yield

* Trying to resume a generator while it is already running now throws a
fatal error.
* Trying to use yield in finally while the generator is being force-closed
(by GC) throws a fatal error.
* Rewinding after the first yield now throws an Exception

show more ...


# 4d8edda3 24-Aug-2012 Nikita Popov

Run finally if generator is closed before finishing


# f45a0f31 20-Aug-2012 Nikita Popov

Disallow serialization and unserialization


# 05f10480 20-Aug-2012 Nikita Popov

Drop Generator::close() method


Revision tags: php-5.3.16, php-5.4.6, php-5.4.6RC1
# 268740d9 26-Jul-2012 Nikita Popov

Fix implementation of Iterator interface

It looks like you have to implement the Iterator interface *before*
assigning get_iterator. Otherwise the structure for user iterators isn't

Fix implementation of Iterator interface

It looks like you have to implement the Iterator interface *before*
assigning get_iterator. Otherwise the structure for user iterators isn't
correctly zeroed out.

Additionaly I'm setting class_entry->iterator_funcs.funcs now. Not sure if
this is strictly necessary, but better safe than sorry ;)

show more ...


# 94b2ccae 22-Jul-2012 Nikita Popov

Fix throwing of exceptions within a generator

If a generator threw an exception and was iterated using foreach (i.e. not
manually) an infinite loop was triggered. The reason was that the

Fix throwing of exceptions within a generator

If a generator threw an exception and was iterated using foreach (i.e. not
manually) an infinite loop was triggered. The reason was that the exception
was not properly rethrown using zend_throw_exception_internal.

show more ...


# c9709bfb 19-Jul-2012 Nikita Popov

Remove asterix modifier (*) for generators

Generators are now automatically detected by the presence of a `yield`
expression in their body.

This removes the ZEND_SUSPEND_AND_RET

Remove asterix modifier (*) for generators

Generators are now automatically detected by the presence of a `yield`
expression in their body.

This removes the ZEND_SUSPEND_AND_RETURN_GENERATOR opcode. Instead
additional checks for ZEND_ACC_GENERATOR are added to the fcall_common
helper and zend_call_function.

This also adds a new function zend_generator_create_zval, which handles
the actual creation of the generator zval from an op array.

I feel like I should deglobalize the zend_create_execute_data_from_op_array
code a bit. It currently changes EG(current_execute_data) and
EG(opline_ptr) which is somewhat confusing (given the name).

show more ...


Revision tags: php-5.4.5
# 85f077ce 17-Jul-2012 Nikita Popov

Add support by yielding by-reference


Revision tags: php-5.3.15, php-5.3.15RC1, php-5.4.5RC1
# ab75ed6b 23-Jun-2012 Nikita Popov

Disallow closing a generator during its execution

If a generator is closed while it is running an E_WARNING is thrown and the
call is ignored. Maybe a fatal error should be thrown instea

Disallow closing a generator during its execution

If a generator is closed while it is running an E_WARNING is thrown and the
call is ignored. Maybe a fatal error should be thrown instead?

show more ...


# 14766e14 23-Jun-2012 Nikita Popov

Pass zend_generator directly to Zend VM

Previously the zval* of the generator was passed into the VM by misusing
EG(return_value_ptr_ptr). Now the zend_generator* itself is directly pass

Pass zend_generator directly to Zend VM

Previously the zval* of the generator was passed into the VM by misusing
EG(return_value_ptr_ptr). Now the zend_generator* itself is directly passed
in. This saves us from always having to pass the zval* around everywhere.

show more ...


# 04e781f0 22-Jun-2012 Nikita Popov

Implement get_iterator

This implements the get_iterator handler for Generator objects, thus making
direct foreach() iteration significantly faster.


# 6233408a 20-Jun-2012 Nikita Popov

Fix thread safe build


Revision tags: php-5.3.14, php-5.4.4
# d939d2de 11-Jun-2012 Nikita Popov

Add sceleton for yield* expression

This does not yet actually implement any delegation.


# f169b26d 08-Jun-2012 Nikita Popov

Fix backtraces and func_get_args()

To make the generator function show up in backtraces one has to insert an
additional execute_data into the chain, as prev_execute_data->function_state

Fix backtraces and func_get_args()

To make the generator function show up in backtraces one has to insert an
additional execute_data into the chain, as prev_execute_data->function_state
is used to determine the called function.

Adding the additional stack frame is also required for func_get_args(), as
the arguments are fetched from there too. The arguments have to be copied
in order to keep them around. Due to the way they are saved doing so is
quite ugly, so I added another function zend_copy_arguments to zend_execute.c
which handles this.

show more ...


123