]> granicus.if.org Git - php/commitdiff
Fix Boris's problem (in my never ending struggle to show I never mean what I say
authorZeev Suraski <zeev@php.net>
Fri, 30 Apr 1999 17:29:18 +0000 (17:29 +0000)
committerZeev Suraski <zeev@php.net>
Fri, 30 Apr 1999 17:29:18 +0000 (17:29 +0000)
when I say something's not gonna happen :)

Zend/zend-parser.y
Zend/zend-scanner.l

index 0b81ad431657f1ec95d608e7ddfef90604c73d38..4aea58c91a894fbe7c0fcc4c7eddf86ce0e3effc 100644 (file)
@@ -69,6 +69,7 @@
 %token T_LNUMBER
 %token T_DNUMBER
 %token T_STRING
+%token T_STRING_VARNAME
 %token T_VARIABLE
 %token T_NUM_STRING
 %token T_INLINE_HTML
@@ -452,6 +453,7 @@ static_scalar: /* compile-time evaluated scalars */
 
 scalar:
                T_STRING                                        { do_fetch_constant(&$$, &$1, ZEND_RT CLS_CC); }
+       |       T_STRING_VARNAME                        { $$ = $1; }
        |       common_scalar                   { $$ = $1; }
        |       '"' encaps_list '"'     { $$ = $2; }
        |       '\'' encaps_list '\''   { $$ = $2; }
index 28f8182bf34329bc95e167c2b02a1c52c46e85e9..ef494bb59e737547f5d6143611533c1c6d594973 100644 (file)
@@ -24,6 +24,7 @@
 %x BACKQUOTE
 %x HEREDOC
 %x LOOKING_FOR_PROPERTY
+%x LOOKING_FOR_VARNAME
 %option stack
 
 %{
@@ -825,7 +826,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
 
 
 <DOUBLE_QUOTES,BACKQUOTE,HEREDOC>"${" {
-       yy_push_state(IN_SCRIPTING);
+       yy_push_state(LOOKING_FOR_VARNAME);
        return T_DOLLAR_OPEN_CURLY_BRACES;
 }
 
@@ -836,6 +837,23 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
 }
 
 
+<LOOKING_FOR_VARNAME>{LABEL} {
+       zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
+       zendlval->value.str.len = yyleng;
+       zendlval->type = IS_STRING;
+       yy_pop_state();
+       yy_push_state(IN_SCRIPTING);
+       return T_STRING_VARNAME;
+}
+
+
+<LOOKING_FOR_VARNAME>. {
+       /*yyless(1);*/
+       unput(yytext[0]);
+       yy_pop_state();
+       yy_push_state(IN_SCRIPTING);
+}
+
 
 <IN_SCRIPTING>{LNUM}|{HNUM} {
        errno = 0;
@@ -1237,6 +1255,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
        return T_CURLY_OPEN;
 }
 
+
 <SINGLE_QUOTE>"\\'" {
        zendlval->value.chval='\'';
        return T_CHARACTER;