RE: [ZEND-ENGINE-CVS] cvs: ZendEngine2(PHP_5_2) / zend_compile.c
| From: | Andi Gutmans | Date: | Tue, 19 Dec 2006 05:41:04 +0000 |
| Subject: | RE: [ZEND-ENGINE-CVS] cvs: ZendEngine2(PHP_5_2) / zend_compile.c | ||
| References: | 1 | Groups: | php.zend-engine.cvs |
| Request: | Send a blank email to php-zend-engine-cvs+get-5480@lists.php.net to get a copy of this message | ||
It's probably more consistent. Very few places check outside the parser and
it's usually in cases which are just hard to implement in the rules.
I haven't tested but I could guess this test doesn't do well with something
like (2+2) instanceof foo (not IS_CONST).
Andi
> -----Original Message-----
> From: Sara Golemon [mailto:pollita@php.net]
> Sent: Monday, December 18, 2006 9:35 PM
> To: andi@zend.com
> Cc: zend-engine-cvs@lists.php.net
> Subject: Re: [ZEND-ENGINE-CVS] cvs: ZendEngine2(PHP_5_2) /
> zend_compile.c
>
> The primary reason I went this route rather than handling it
> in the parser (I did consider it), was so that a clearer
> error message could be given than "Unexpected T_STRING". If
> you'd rather, I'd be happy to move this fix over there...
>
> -Sara
>
> >
> > Not sure this is the right fix. It probably makes more sense to fix
> > the parser itself and use r_variable instead of expr for
> the instanceof rule.
> > Did you try and have problems doing so? I just took a quick
> look so it
> > might be a bit more involved than that.
> >
> >> -----Original Message-----
> >> From: Sara Golemon [mailto:pollita@php.net]
> >> Sent: Tuesday, December 12, 2006 3:25 PM
> >> To: zend-engine-cvs@lists.php.net
> >> Subject: [ZEND-ENGINE-CVS] cvs: ZendEngine2(PHP_5_2) /
> zend_compile.c
> >>
> >> pollita Tue Dec 12 23:25:23 2006 UTC
> >>
> >> Modified files: (Branch: PHP_5_2)
> >> /ZendEngine2 zend_compile.c
> >> Log:
> >> MFH: Bugfix# 39435: 'foo' instanceof bar gives invalid
> opcode error
> >>
> >>
> >> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_compile.c?r1=1.
> > 647.2.27.2.21&r2=1.647.2.27.2.22&diff_format=u
> >> Index: ZendEngine2/zend_compile.c
> >> diff -u ZendEngine2/zend_compile.c:1.647.2.27.2.21
> >> ZendEngine2/zend_compile.c:1.647.2.27.2.22
> >> --- ZendEngine2/zend_compile.c:1.647.2.27.2.21 Tue Dec
> >> 5 19:03:51 2006
> >> +++ ZendEngine2/zend_compile.c Tue Dec 12 23:25:23 2006
> >> @@ -17,7 +17,7 @@
> >>
> >> +-------------------------------------------------------------
> >> ---------+
> >> */
> >>
> >> -/* $Id: zend_compile.c,v 1.647.2.27.2.21 2006/12/05
> 19:03:51 dmitry
> >> Exp $ */
> >> +/* $Id: zend_compile.c,v 1.647.2.27.2.22 2006/12/12
> 23:25:23 pollita
> >> +Exp $ */
> >>
> >> #include <zend_language_parser.h>
> >> #include "zend.h"
> >> @@ -3627,6 +3627,10 @@
> >> }
> >> }
> >>
> >> + if (expr->op_type == IS_CONST) {
> >> + zend_error(E_COMPILE_ERROR, "instanceof expects
> >> an object instance, constant given");
> >> + }
> >> +
> >> opline = get_next_op(CG(active_op_array) TSRMLS_CC);
> >> opline->opcode = ZEND_INSTANCEOF;
> >> opline->result.op_type = IS_TMP_VAR;
> >>
>