Hi,
I am new to the PHP internals, and I was just looking through the code
related to parsing break/continue statements. It looks that as of PHP
5.4, Zend/zend_language_parser.y accepts both "T_BREAK expr" and
"T_CONTINUE expr" and check to make sure "expr" is a positive integer
in the function zend_do_brk_cont. Doesn't it make more sense to
replace "T_BREAK expr" with "T_BREAK <positive integer>" (the same
goes for the continue statement)?
Thanks in advance!
kiyoto
Hi,
I am new to the PHP internals, and I was just looking through the code
related to parsing break/continue statements. It looks that as of PHP
5.4, Zend/zend_language_parser.y accepts both "T_BREAK expr" and
"T_CONTINUE expr" and check to make sure "expr" is a positive integer
in the function zend_do_brk_cont. Doesn't it make more sense to
replace "T_BREAK expr" with "T_BREAK <positive integer>" (the same
goes for the continue statement)?
T_BREAK
expr allows things like
$foo = rand(...);
break $foo;
but we've dropped that for performance reasons in 5.4.
johannes
Thanks in advance!
kiyoto
Hi Johannes,
Thanks for your reply :) What I meant was that why does the parser
still accept any expression after T_BREAK/CONTINUE and defer the error
check to zend_do_brk_cont? Isn't it clearer to only accept if the
expression following T_BREAK/CONTINUE is a positive integer (if there
is any expression at all)?
Kiyoto
2011/7/28 Johannes Schlüter johannes@schlueters.de:
Hi,
I am new to the PHP internals, and I was just looking through the code
related to parsing break/continue statements. It looks that as of PHP
5.4, Zend/zend_language_parser.y accepts both "T_BREAK expr" and
"T_CONTINUE expr" and check to make sure "expr" is a positive integer
in the function zend_do_brk_cont. Doesn't it make more sense to
replace "T_BREAK expr" with "T_BREAK <positive integer>" (the same
goes for the continue statement)?
T_BREAK
expr allows things like$foo = rand(...);
break $foo;but we've dropped that for performance reasons in 5.4.
johannes
Thanks in advance!
kiyoto
I guess to get a clear error message, because this is a BC change.
Many people would wonder why working scripts are causing parse errors
after upgrade of php. Makes sense to have error messages as clear as
possible ;)
Jan Dolecek
juzna.cz@gmail.com
2011/7/29 Kiyoto Tamura owenestea@gmail.com:
Hi Johannes,
Thanks for your reply :) What I meant was that why does the parser
still accept any expression after T_BREAK/CONTINUE and defer the error
check to zend_do_brk_cont? Isn't it clearer to only accept if the
expression following T_BREAK/CONTINUE is a positive integer (if there
is any expression at all)?Kiyoto
2011/7/28 Johannes Schlüter johannes@schlueters.de:
Hi,
I am new to the PHP internals, and I was just looking through the code
related to parsing break/continue statements. It looks that as of PHP
5.4, Zend/zend_language_parser.y accepts both "T_BREAK expr" and
"T_CONTINUE expr" and check to make sure "expr" is a positive integer
in the function zend_do_brk_cont. Doesn't it make more sense to
replace "T_BREAK expr" with "T_BREAK <positive integer>" (the same
goes for the continue statement)?
T_BREAK
expr allows things like$foo = rand(...);
break $foo;but we've dropped that for performance reasons in 5.4.
johannes
Thanks in advance!
kiyoto