ID: 22237 User updated by: peter at globalvision dot com dot au Reported By: peter at globalvision dot com dot au Status: Verified Bug Type: Zend Engine 2 problem Operating System: All PHP Version: 5CVS-2003-02-15 (dev) New Comment:
Well... I have not had the time to solve it, but I now know pretty well why it is caused. **can someone please have a crack at fixing this**? In zend_language_parser.y, the rule for object_property is either an object_dim_list (which can be a T_STRING) or it is a "variable_without_ibjects". object_dim_list works for $this->foo, but $this->$foo is matched by variable_without_objects. HOWEVER, variable_without_objects is the match for vanilla variables, so it consumes one '$' before it dereferences. in other words, $this->$foo sends the $foo part off to the standard variable compiler area which does not recognise that $foo is a reference. I experimented by placing a couple of rules in the lex scanner as follows: <ST_LOOKING_FOR_PROPERTY>"$" { fprintf(stderr,"xxx"); yy_push_state(ST_TEST) return '$'; } and <ST_TEST>";" { fprintf(stderr,"yyy"); yy_pop_state(TSRMLS_C); return ';'; } <ST_TEST>{LABEL} { fprintf(stderr,"zzz"); zendlval->value.str.val = (char *)estrndup(yytext,yyleng); zendlval->value.str.len = yyleng; zendlval->type = IS_STRING; return T_VARIABLE; } and suddenly, it all seems to parse, however I'm clearly missing something - it still does not display the forrect output for echo $this->$foo; What am I doing wrong? Previous Comments: ------------------------------------------------------------------------ [2003-02-22 17:08:49] peter at globalvision dot com dot au I'm assuming all OSes b/c my original report was MS Windows but a subsequent dup report was for Linux. I've narrowed it down a bit by running with debug mode on the ZE2 I'm 99% sure it is due to the way zend treats "$this" as special. I don't think it's putting all the required data on the stack. Specifically, when it processes the base_variable_without_objects bison rule after reading T_OBJECT_OPERATOR (ie -> ) it sets yyval.u.EA.type (see case 363 in zend_language_parser.c) but yyval.u is zero at that time when the LH operand is $this. Not sure why yet... EG the following modification causes no crash: <?php class myClass { var $foo = "hi"; var $bar = "foo"; function test() { $t = &$this; echo $t->$bar; //echo $this->foo; } } ?> ------------------------------------------------------------------------ [2003-02-19 06:26:45] root at kitten dot net This is pretty serious... it prevents pear from working. Can someone please take a look at it? Thanks ------------------------------------------------------------------------ [2003-02-15 19:15:01] [EMAIL PROTECTED] No crash with PHP 4.3.1-dev, does crash with PHP 5-dev. ------------------------------------------------------------------------ [2003-02-15 19:06:29] peter at globalvision dot com dot au <?php class myClass { var $foo = "hi"; var $bar = "foo"; function test() { echo $this->$bar; //line 1 //echo $this->foo; //line 2 } } ?> commenting out line 1 (and optionally including line 2) cause it to run normally. The crash occurs as soon as you include $this->$<something>. ---------------- >From a dos command line on Windows XP Pro SP1 (build 2600): >php c:\temp\t.php I get PHP Script Interpreter has encountered a problem and needs to close (pop up). I'm using the windows build from the snaps page. I've had this error over the past few days of snaps too. >php -m [PHP Modules] bcmath calendar com ctype ftp mysql odbc pcre rpc session standard tokenizer wddx xml zlib [Zend Modules] The crash details are: AppName: php.exe AppVer: 5.0.0.0 ModName: php4ts.dll ModVer: 5.0.0.0 Offset: 000b3bdc Exception Information: Code: 0xc0000005 Flags: 0x00000000 Record: 0x000000000000000 Address: 0x000000000100b3bdc ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=22237&edit=1