#
de80e3ce |
| 22-Jul-2012 |
Nikita Popov |
Remove reference restrictions from foreach foreach only allowed variables to be traversed by reference. This never really made sense because a) Expressions like array(&$a, &
Remove reference restrictions from foreach foreach only allowed variables to be traversed by reference. This never really made sense because a) Expressions like array(&$a, &$b) can be meaningfully iterated by-ref b) Function calls can return by-ref (so they can also be meaningfully iterated) c) Iterators could at least in theory also be iterated by-ref (not sure if any iterator makes use of this) With by-ref generators the restriction makes even less sense, so I removed it altogether.
show more ...
|
#
80748631 |
| 21-Jul-2012 |
Nikita Popov |
Require parenthesis around yield expressions If yield is used in an expression context parenthesis are now required. This ensures that the code is unambiguos. Yield statements c
Require parenthesis around yield expressions If yield is used in an expression context parenthesis are now required. This ensures that the code is unambiguos. Yield statements can still be used without parenthesis (which should be the most common case). Also yield expressions without value can be used without parenthesis, too (this should be the most common case for coroutines). If the yield expression is used in a context where parenthesis are required anyway, no additional parenthesis have to be inserted. Examples: // Statements don't need parenthesis yield $foo; yield $foo => $bar; // Yield without value doesn't need parenthesis either $data = yield; // Parentheses don't have to be duplicated foo(yield $bar); if (yield $bar) { ... } // But we have to use parentheses here $foo = (yield $bar); This commit also fixes an issue with by-ref passing of $foo[0] like variables. They previously weren't properly fetched for write. Additionally this fixes valgrind warnings which were caused by access to uninitialized memory in zend_is_function_or_method_call().
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, php-5.3.15, php-5.3.15RC1, php-5.4.5RC1 |
|
#
a44a1dc1 |
| 26-Jun-2012 |
Xinchen Hui |
Fixed bug #62357 (compile failure: (S) Arguments missing for built-in function __memcmp). Any C library function may be a macro, We should avoid using ZEND_STRS(L) as their arguments
|
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.
|
Revision tags: php-5.3.14RC2, php-5.4.4RC2 |
|
#
bc08c2cf |
| 30-May-2012 |
Nikita Popov |
Add support for yielding keys Keys are yielded using the yield $key => $value syntax. Currently this is implemented as a statement only and not as an expression, be
Add support for yielding keys Keys are yielded using the yield $key => $value syntax. Currently this is implemented as a statement only and not as an expression, because conflicts arise considering nesting and use in arrays: yield yield $a => $b; // could be either yield (yield $a) => $b; // or yield (yield $a => $b); Once I find some way to resolve these conflicts this should be available as an expression too. Also the key yielding code is rather copy-and-past-y for the value yielding code, so that should be factored out.
show more ...
|
#
ad525c28 |
| 29-May-2012 |
Nikita Popov |
Allow to use yield without value If the generator is used as a coroutine it often doesn't make sense to yield anything. In this case one can simply receive values using $val
Allow to use yield without value If the generator is used as a coroutine it often doesn't make sense to yield anything. In this case one can simply receive values using $value = yield; The yield here will simply yield NULL.
show more ...
|
#
3600914c |
| 29-May-2012 |
Nikita Popov |
Add support for $generator->send() Yield now is an expression and the return value is the value passed to $generator->send(). By default (i.e. if ->next() is called) the value is NUL
Add support for $generator->send() Yield now is an expression and the return value is the value passed to $generator->send(). By default (i.e. if ->next() is called) the value is NULL. Unlike in Python ->send() can be run without priming the generator with a ->next() call first.
show more ...
|
#
e14cfafc |
| 19-May-2012 |
Nikita Popov |
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.
|
#
252f6234 |
| 19-May-2012 |
Nikita Popov |
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
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.
show more ...
|
Revision tags: php-5.3.14RC1, php-5.4.4RC1 |
|
#
9b101ac8 |
| 15-May-2012 |
Nikita Popov |
Add T_YIELD "yield" keyword
|
Revision tags: php-5.3.13, php-5.4.3, php-5.4.2, php-5.3.12, php-5.3.11, php-5.4.1 |
|
#
ec061a93 |
| 12-Apr-2012 |
Nikita Popov |
Allow arbitrary expressions for empty() This change is as per RFC https://wiki.php.net/rfc/empty_isset_exprs. The change allows passing the result of function calls and other ex
Allow arbitrary expressions for empty() This change is as per RFC https://wiki.php.net/rfc/empty_isset_exprs. The change allows passing the result of function calls and other expressions to the empty() language construct. This is accomplished by simply rewriting empty(expr) to !expr. The change does not affect the suppression of errors when using empty() on variables. empty($undefinedVar) will continue not to throw errors. When an expression is used inside empty() on the other hand, errors will not be suppressed. Thus empty($undefinedVar + $somethingElse) *will* throw a notice. The change also does not make empty() into a real function, so using 'empty' as a callback is still not possible. In addition to the empty() changes the commit adds nicer error messages when isset() is used on function call results or other expressions.
show more ...
|
#
565892d4 |
| 15-Apr-2012 |
Xinchen Hui |
Implement const array/string dereference RFC:https://wiki.php.net/rfc/constdereference
|
Revision tags: php-5.3.11RC2, php-5.4.1RC2 |
|
#
4cf90e06 |
| 30-Mar-2012 |
Nikita Popov |
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
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()).
show more ...
|
Revision tags: php-5.3.11RC1, php-5.4.1RC1, PHP-5.4.1-RC1, php-5.4.0, php-5.4.0RC8, php-5.3.10, php-5.4.0RC7, php-5.4.0RC6 |
|
#
b515bfbd |
| 17-Jan-2012 |
Dmitry Stogov |
Improved traits implementation. Now to support __CLASS__ constant in traits php doesn't have to copy the complete compiled method, but can reuse the same code. The resolution of __CLASS__ constants i
Improved traits implementation. Now to support __CLASS__ constant in traits php doesn't have to copy the complete compiled method, but can reuse the same code. The resolution of __CLASS__ constants in methods defined in traits are delayed till run-time. This approach also made possible to use __CLASS__ constant as default value for traits properties and method arguments.
show more ...
|
#
032d140f |
| 17-Jan-2012 |
Dmitry Stogov |
Improved traits implementation. Now to support __CLASS__ constant in traits php doesn't have to copy the complete compiled method, but can reuse the same code. The resolution of __CLASS__ constants i
Improved traits implementation. Now to support __CLASS__ constant in traits php doesn't have to copy the complete compiled method, but can reuse the same code. The resolution of __CLASS__ constants in methods defined in traits are delayed till run-time. This approach also made possible to use __CLASS__ constant as default value for traits properties and method arguments.
show more ...
|
Revision tags: php-5.3.9, php-5.4.0RC5 |
|
#
e4ca0ed0 |
| 01-Jan-2012 |
Felipe Pena |
- Year++
|
#
8775a375 |
| 01-Jan-2012 |
Felipe Pena |
- Year++
|
#
4e198252 |
| 01-Jan-2012 |
Felipe Pena |
- Year++
|
Revision tags: php-5.3.9RC4, php-5.4.0RC4, php-5.3.9RC3, php-5.4.0RC3, php-5.3.9RC2, php-5.4.0RC2, php-5.4.0RC1 |
|
#
eebaaf42 |
| 06-Nov-2011 |
Felipe Pena |
- Added class member access on instantiation (e.g. (new foo)->bar()) support
|
#
ff48763f |
| 06-Nov-2011 |
Felipe Pena |
- Added class member access on instantiation (e.g. (new foo)->bar()) support
|
Revision tags: php-5.3.9RC1, php-5.4.0beta2, php-5.4.0beta1, yaf-2.1.0, php-5.3.8, php-5.3.7 |
|
#
8db63e88 |
| 16-Aug-2011 |
Felipe Pena |
- Drop T_SCALAR_CAST
|
#
17abf879 |
| 16-Aug-2011 |
Felipe Pena |
- Drop T_SCALAR_CAST
|
#
306c4202 |
| 16-Aug-2011 |
Hannes Magnusson |
Callable typehint following the rules of is_callable($arg, false);
|
#
550980cf |
| 16-Aug-2011 |
Hannes Magnusson |
Callable typehint following the rules of is_callable($arg, false);
|