This commit was manufactured by cvs2svn to create tag 'NEWS'.
Fix lexing of nested heredoc strings in token_get_all()

This fixes bug #60097.

Before two global variables CG(heredoc) and CG(heredoc_len) were used to
track the current heredoc label. In order to support nested heredoc
strings the *previous* heredoc label was assigned as the token value of
T_START_HEREDOC and the language_parser.y assigned that to CG(heredoc).

This created a dependency of the lexer on the parser. Thus the
token_get_all() function, which accesses the lexer directly without
also running the parser, was not able to tokenize nested heredoc strings
(and leaked memory). Same applies for the source-code highlighting
functions.

The new approach is to maintain a heredoc_label_stack in the lexer, which
contains all active heredoc labels.

As it is no longer required, T_START_HEREDOC and T_END_HEREDOC now don't
carry a token value anymore.

In order to make the work with zend_ptr_stack in this context more
convenient I added a new function zend_ptr_stack_top(), which retrieves the
top element of the stack (similar to zend_stack_top()).
Add T_YIELD "yield" keyword
Add flag for generator functions

Generator functions have to specify the * (asterix) modifier after the
function keyword. If they do so the ZEND_ACC_GENERATOR flag is added to
the fn_flags.
Minor code cleanup

The block for the foreach separator was nested unnecessary. This commit
simply removes that nesting.
Add error if yield is used outside a generator

The yield statement can only be used in generator functions, which are
marked with an asterix.
Add zend_do_suspend_if_generator calls

The execution of generator functions will be suspended right after the
arguments were RECVed. This will be done in zend_do_suspend_if_generator.
Add ZEND_SUSPEND_AND_RETURN_GENERATOR opcode

If the function is a generator this opcode will be invoked right after
receiving the function arguments.

The current implementation is just a dummy.
Add empty Generator class
Add some boilerplate code for Generator class

The Generator class now uses a zend_generator struct, so it'll be able to
store additional info.

This commit also ensures that Generator cannot be directly instantiated
and extended. The error tests are now in a separate folder from the
(yet-to-come) functional tests.
Make generator functions return a Generator object

Right now generator functions simply immediately return a new Generator
object (no suspension yet).
Allocate execute_data using malloc for generators

Generators need to switch the execute_data very often. If the execute_data
is allocated on the VM stack this operation would require to always copy
the structure (which is quite large). That's why the execution context is
allocated on the heap instead (only for generators obviously).
Add initial code for suspending execution

This is just some initial code, which is still quite broken (and needs to be
moved so it can be reused.)
Add dummy Iterator implementation

This simply adds dummy rewind/valid/current/key/next methods to Generator.
Allow calling zend_vm_gen from everywhere

Before one could only call it with cwd=Zend.
Fixed bug #61964 (finfo_open with directory cause invalid free)
Add support for executing a zend_execute_data

This adds another function execute_ex(), which accepts a zend_execute_data
struct to run (contrary to execute(), which accepts a zend_op_array from
which it initialized the execute_data).

This needs a bit more cleanup.
Add way to pass generator object to opcode handlers

The generator zval is put into the return_value_ptr_ptr.
Add YIELD opcode implementation
Implement return for generators

For generators ZEND_RETURN directly calls ZEND_VM_RETURN(), thus passing
execution back to the caller (zend_generator_resume).

This commit also adds a check that only return; is used in generators and
not return $value;.