Re: [ZEND-ENGINE-CVS] cvs: ZendEngine2(PHP_5_2) / zend_compile.c
| From: | langwan | Date: | Tue, 06 Mar 2007 07:30:27 +0000 |
| Subject: | Re: [ZEND-ENGINE-CVS] cvs: ZendEngine2(PHP_5_2) / zend_compile.c | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-28264@lists.php.net to get a copy of this message | ||
"Sara Golemon" <pollita@php.net> ??????:45877A06.6080104@php.net...
> 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;
>>>