Bug #17899 Updated: (Probably) Bug in zend parser
| From: | andi@php.net | Date: | Sat, 22 Jun 2002 14:32:35 +0000 |
| Subject: | Bug #17899 Updated: (Probably) Bug in zend parser | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-11792@lists.php.net to get a copy of this message | ||
ID: 17899
Updated by: andi@php.net
Reported By: othalla@wp.pl
-Status: Feedback
+Status: Closed
Bug Type: Zend Engine 2 problem
Operating System: linux RH6.1
PHP Version: 4.2.1
New Comment:
This bug has been fixed in CVS. You can grab a snapshot of the
CVS version at http://snaps.php.net/. In case this was a
documentation
problem, the fix will show up soon at http://www.php.net/manual/.
In case this was a PHP.net website problem, the change will show
up on the PHP.net site and on the mirror sites.
Thank you for the report, and for helping us make PHP better.
Thanks for the bug report and fix.
Previous Comments:
------------------------------------------------------------------------
[2002-06-22 10:20:38] carldrinkwater@mac.com
This is in fact a bug, and changing the grammar file as
suggested by othalla@wp.pl fixes this problem. Here is a
diff to do it ...
--- zend_language_parser.y Sat Jun 22 15:12:41 2002
+++ zend_language_parser.old Sat Jun 22 15:18:26 2002
@@ -608,7 +608,7 @@
static_scalar: /* compile-time evaluated scalars */
common_scalar { $$ = $1; }
| T_STRING {
zend_do_fetch_constant(&$$, NULL, &$1, ZEND_CT TSRMLS_CC);
}
- | '+' static_scalar { $$ = $2; }
+ | '+' static_scalar { $$ = $1; }
| '-' static_scalar { zval minus_one;
minus_one.type = IS_LONG; minus_one.value.lval = -1;
mul_function(&$2.u.constant, &$2.u.constant, &minus_one
TSRMLS_CC); $$ = $2; }
| T_ARRAY '(' static_array_pair_list ')' { $$
= $3; $$.u.constant.type = IS_CONSTANT_ARRAY; }
| parse_class_name_entry T_STRING {
zend_do_fetch_constant(&$$, &$1, &$2, ZEND_CT TSRMLS_CC); }
------------------------------------------------------------------------
[2002-06-22 10:03:08] carldrinkwater@mac.com
Well, you would expect yacc to return the static_scalar
rather than the '+' of this rule ... Here is a script that
demonstrates the problem ...
<?
static $a = +1;
static $b = -1;
echo $a."\n";
echo $b."\n";
?>
This gives the output ...
2969616
-1
Which as you can see, isn't entirely correct!
------------------------------------------------------------------------
[2002-06-21 12:15:07] sander@php.net
This is a Zend Engine 2 problem I guess...
Can you elaborate on this 'bug'? Why do you think it's wrong? Can you
show us a script, etc...
------------------------------------------------------------------------
[2002-06-21 10:41:52] othalla@wp.pl
In zend_language_parser.y there is code:
[...]
static_scalar: /* compile-time evaluated scalars */
[...]
| '+' static_scalar { $$ = $1; }
[...]
but I think that schould be:
[...]
static_scalar: /* compile-time evaluated scalars */
[...]
| '+' static_scalar { $$ = $2; }
[...]
-----------------------------------------------------
$2 instead of $1
It's still in PHP 4.3.0-alpha tarball.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=17899&edit=1