Re: ZEND_ADD_STRING patch
| From: | George Schlossnagle | Date: | Fri, 15 Nov 2002 20:23:12 +0000 |
| Subject: | Re: ZEND_ADD_STRING patch | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-91115@lists.php.net to get a copy of this message | ||
George Schlossnagle wrote:
I'm a tool. I sent the wrong patch to the list. Thanks to Andrei for pointing it out. Here is the _right_ patch (finally).
diff -u -3 -r1.53 zend_language_scanner.l
--- zend_language_scanner.l 8 Nov 2002 13:40:54 -0000 1.53 +++ zend_language_scanner.l 15 Nov 2002 20:20:33 -0000@@ -37,6 +37,7 @@ %x ST_BACKQUOTE %x ST_HEREDOC %x ST_LOOKING_FOR_PROPERTY +%x ST_EXPECTING_OBJECT %x ST_LOOKING_FOR_VARNAME %x ST_COMMENT %x ST_ONE_LINE_COMMENT @@ -692,6 +693,7 @@
HNUM "0x"[0-9a-fA-F]+ LABEL [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*WHITESPACE [ \n\r\t]+ +LABEL_OR_WHITESPACE [a-zA-Z0-9_\x7f-\xff \t\n\r #'.:;,()|^&+-/*=%!~<>?@]+ TABS_AND_SPACES [ \t]* TOKENS [;:,.\[\]()|^&+-/*=%!~$<>?@] ENCAPSED_TOKENS [\[\]{}$] @@ -823,13 +825,25 @@
return T_EXTENDS;} -<ST_IN_SCRIPTING,ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>"->" { +<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>"$"{LABEL}"->"{LABEL} {
+ yy_push_state(ST_EXPECTING_OBJECT TSRMLS_CC); + yyless(0);+} + + +<ST_IN_SCRIPTING,ST_EXPECTING_OBJECT>"->" {
yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
return T_OBJECT_OPERATOR;
}
<ST_LOOKING_FOR_PROPERTY>{LABEL} {
- yy_pop_state(TSRMLS_C);
+ if(yy_top_state(TSRMLS_C) == ST_EXPECTING_OBJECT) {
+ yy_pop_state(TSRMLS_C);
+ yy_pop_state(TSRMLS_C);
+ }
+ else {
+ yy_pop_state(TSRMLS_C);
+ }
zend_copy_value(zendlval, yytext, yyleng);
zendlval->value.str.len = yyleng;
zendlval->type = IS_STRING;
@@ -1265,7 +1279,7 @@
return T_INLINE_HTML;} -<ST_IN_SCRIPTING,ST_DOUBLE_QUOTES,ST_HEREDOC,ST_BACKQUOTE>"$"{LABEL} { +<ST_EXPECTING_OBJECT,ST_IN_SCRIPTING,ST_DOUBLE_QUOTES,ST_HEREDOC,ST_BACKQUOTE>"$"{LABEL} {
zend_copy_value(zendlval, (yytext+1), (yyleng-1));
zendlval->type = IS_STRING;
return T_VARIABLE;
@@ -1278,13 +1292,26 @@
return T_STRING;} - -<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>{LABEL} { +<ST_DOUBLE_QUOTES,ST_BACKQUOTE>{LABEL_OR_WHITESPACE} {
+ HANDLE_NEWLINES(yytext, yyleng);
zend_copy_value(zendlval, yytext, yyleng);
zendlval->type = IS_STRING;
return T_STRING;
}
+<ST_HEREDOC>{LABEL} {
+ zend_copy_value(zendlval, yytext, yyleng); + zendlval->type = IS_STRING; + return T_STRING;+} + +<ST_HEREDOC>{ESCAPED_AND_WHITESPACE} {
+ HANDLE_NEWLINES(yytext, yyleng); + zendlval->value.str.val = (char *) estrndup(yytext, yyleng); + zendlval->value.str.len = yyleng; + zendlval->type = IS_STRING; + return T_ENCAPSED_AND_WHITESPACE;+} <ST_IN_SCRIPTING>{WHITESPACE} {
zendlval->value.str.val = yytext; /* no copying - intentional */@@ -1581,14 +1608,6 @@
}} - -<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>{ESCAPED_AND_WHITESPACE} {
- HANDLE_NEWLINES(yytext, yyleng); - zendlval->value.str.val = (char *) estrndup(yytext, yyleng); - zendlval->value.str.len = yyleng; - zendlval->type = IS_STRING; - return T_ENCAPSED_AND_WHITESPACE;-} <ST_SINGLE_QUOTE>([^'\\]|\\[^'\\])+ {
HANDLE_NEWLINES(yytext, yyleng);