summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeev Suraski <zeev@php.net>1999-04-30 17:29:18 +0000
committerZeev Suraski <zeev@php.net>1999-04-30 17:29:18 +0000
commit9dd66bc2aef5a38ab8a661d8ba20d2a249fec81a (patch)
treeed957d5fb2c0941b402b872f7a7f564f18285596
parentbc3686c14ad33e0f1479315fadd5e0bcc178ffb4 (diff)
downloadphp-git-9dd66bc2aef5a38ab8a661d8ba20d2a249fec81a.tar.gz
Fix Boris's problem (in my never ending struggle to show I never mean what I say
when I say something's not gonna happen :)
-rw-r--r--Zend/zend-parser.y2
-rw-r--r--Zend/zend-scanner.l21
2 files changed, 22 insertions, 1 deletions
diff --git a/Zend/zend-parser.y b/Zend/zend-parser.y
index 0b81ad4316..4aea58c91a 100644
--- a/Zend/zend-parser.y
+++ b/Zend/zend-parser.y
@@ -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; }
diff --git a/Zend/zend-scanner.l b/Zend/zend-scanner.l
index 28f8182bf3..ef494bb59e 100644
--- a/Zend/zend-scanner.l
+++ b/Zend/zend-scanner.l
@@ -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;