summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Pena <felipe@php.net>2010-07-13 15:30:30 +0000
committerFelipe Pena <felipe@php.net>2010-07-13 15:30:30 +0000
commit75f32bdad21231c0f9be95238cc4af6cfd10656e (patch)
tree779a7a8d868f902de8f6133b73532a13fd82bf0c
parente0c7dbf30d98a3bde0f951c585fa87db02e1ef75 (diff)
downloadphp-git-75f32bdad21231c0f9be95238cc4af6cfd10656e.tar.gz
- Added missing tokens on ST_VAR_OFFSET state
-rw-r--r--Zend/zend_language_parser.y6
-rw-r--r--Zend/zend_language_scanner.c249
-rw-r--r--Zend/zend_language_scanner.l20
-rw-r--r--Zend/zend_language_scanner_defs.h2
4 files changed, 166 insertions, 111 deletions
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
index bf7334186f..21436f80fd 100644
--- a/Zend/zend_language_parser.y
+++ b/Zend/zend_language_parser.y
@@ -36,7 +36,11 @@
%name zend_lang_parse
%syntax_error {
- zend_error(E_PARSE, "syntax error, unexpected '%.*s'", LANG_SCNG(yy_leng), LANG_SCNG(yy_text));
+ if (LANG_SCNG(yy_cursor) > LANG_SCNG(yy_limit)) {
+ zend_error(E_PARSE, "syntax error, unexpected end of script");
+ } else {
+ zend_error(E_PARSE, "syntax error, unexpected '%.*s'", LANG_SCNG(yy_leng), LANG_SCNG(yy_text));
+ }
}
%stack_overflow {
diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c
index f5647dbf9d..d151f7553c 100644
--- a/Zend/zend_language_scanner.c
+++ b/Zend/zend_language_scanner.c
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 on Mon Jul 12 14:03:13 2010 */
+/* Generated by re2c 0.13.5 on Tue Jul 13 12:12:35 2010 */
#line 1 "Zend/zend_language_scanner.l"
/*
+----------------------------------------------------------------------+
@@ -1432,7 +1432,7 @@ yyc_ST_BACKQUOTE:
yy56:
YYDEBUG(56, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2191 "Zend/zend_language_scanner.l"
+#line 2207 "Zend/zend_language_scanner.l"
{
if (YYCURSOR > YYLIMIT) {
return 0;
@@ -1484,7 +1484,7 @@ yy58:
++YYCURSOR;
YYDEBUG(59, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2135 "Zend/zend_language_scanner.l"
+#line 2151 "Zend/zend_language_scanner.l"
{
BEGIN(ST_IN_SCRIPTING);
return T_BACKQUOTE;
@@ -1499,7 +1499,7 @@ yy61:
++YYCURSOR;
YYDEBUG(62, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2122 "Zend/zend_language_scanner.l"
+#line 2138 "Zend/zend_language_scanner.l"
{
zendlval->value.lval = (long) '{';
yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
@@ -1655,7 +1655,7 @@ yy77:
yy78:
YYDEBUG(78, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2141 "Zend/zend_language_scanner.l"
+#line 2157 "Zend/zend_language_scanner.l"
{
if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) {
YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1;
@@ -1715,7 +1715,7 @@ yy80:
++YYCURSOR;
YYDEBUG(81, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2130 "Zend/zend_language_scanner.l"
+#line 2146 "Zend/zend_language_scanner.l"
{
BEGIN(ST_IN_SCRIPTING);
return T_QUOTE;
@@ -1730,7 +1730,7 @@ yy83:
++YYCURSOR;
YYDEBUG(84, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2122 "Zend/zend_language_scanner.l"
+#line 2138 "Zend/zend_language_scanner.l"
{
zendlval->value.lval = (long) '{';
yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
@@ -1829,7 +1829,7 @@ yyc_ST_END_HEREDOC:
++YYCURSOR;
YYDEBUG(100, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2109 "Zend/zend_language_scanner.l"
+#line 2125 "Zend/zend_language_scanner.l"
{
YYCURSOR += CG(heredoc_len) - 1;
yyleng = CG(heredoc_len);
@@ -1903,7 +1903,7 @@ yy103:
yy104:
YYDEBUG(104, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2233 "Zend/zend_language_scanner.l"
+#line 2249 "Zend/zend_language_scanner.l"
{
int newline = 0;
@@ -1989,7 +1989,7 @@ yy107:
++YYCURSOR;
YYDEBUG(108, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2122 "Zend/zend_language_scanner.l"
+#line 2138 "Zend/zend_language_scanner.l"
{
zendlval->value.lval = (long) '{';
yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
@@ -2269,7 +2269,7 @@ yy125:
yy126:
YYDEBUG(126, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1843 "Zend/zend_language_scanner.l"
+#line 1859 "Zend/zend_language_scanner.l"
{
zend_copy_value(zendlval, yytext, yyleng);
zendlval->type = IS_STRING;
@@ -3056,7 +3056,7 @@ yy204:
yy205:
YYDEBUG(205, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1850 "Zend/zend_language_scanner.l"
+#line 1866 "Zend/zend_language_scanner.l"
{
while (YYCURSOR < YYLIMIT) {
switch (*YYCURSOR++) {
@@ -3097,7 +3097,7 @@ yy206:
yy207:
YYDEBUG(207, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1941 "Zend/zend_language_scanner.l"
+#line 1957 "Zend/zend_language_scanner.l"
{
register char *s, *t;
char *end;
@@ -3174,7 +3174,7 @@ yy208:
yy209:
YYDEBUG(209, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2012 "Zend/zend_language_scanner.l"
+#line 2028 "Zend/zend_language_scanner.l"
{
int bprefix = (yytext[0] != '"') ? 1 : 0;
@@ -3221,7 +3221,7 @@ yy210:
++YYCURSOR;
YYDEBUG(211, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2103 "Zend/zend_language_scanner.l"
+#line 2119 "Zend/zend_language_scanner.l"
{
BEGIN(ST_BACKQUOTE);
return T_BACKQUOTE;
@@ -3232,7 +3232,7 @@ yy212:
++YYCURSOR;
YYDEBUG(213, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2364 "Zend/zend_language_scanner.l"
+#line 2376 "Zend/zend_language_scanner.l"
{
if (YYCURSOR > YYLIMIT) {
return 0;
@@ -3492,7 +3492,7 @@ yy246:
yy247:
YYDEBUG(247, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1927 "Zend/zend_language_scanner.l"
+#line 1943 "Zend/zend_language_scanner.l"
{
if (CG(asp_tags)) {
BEGIN(INITIAL);
@@ -3533,7 +3533,7 @@ yy252:
yy253:
YYDEBUG(253, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1884 "Zend/zend_language_scanner.l"
+#line 1900 "Zend/zend_language_scanner.l"
{
int doc_com;
@@ -3734,7 +3734,7 @@ yy282:
yy283:
YYDEBUG(283, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1918 "Zend/zend_language_scanner.l"
+#line 1934 "Zend/zend_language_scanner.l"
{
zendlval->value.str.val = yytext; /* no copying - intentional */
zendlval->value.str.len = yyleng;
@@ -3866,7 +3866,7 @@ yy297:
yy298:
YYDEBUG(298, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2054 "Zend/zend_language_scanner.l"
+#line 2070 "Zend/zend_language_scanner.l"
{
char *s;
int bprefix = (yytext[0] != '<') ? 1 : 0;
@@ -8383,7 +8383,7 @@ yyc_ST_NOWDOC:
++YYCURSOR;
YYDEBUG(932, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2305 "Zend/zend_language_scanner.l"
+#line 2321 "Zend/zend_language_scanner.l"
{
int newline = 0;
@@ -8479,61 +8479,60 @@ yyc_ST_VAR_OFFSET:
YYDEBUG(933, *YYCURSOR);
YYFILL(3);
yych = *YYCURSOR;
- if (yych <= '/') {
- if (yych <= ' ') {
+ if (yych <= '0') {
+ if (yych <= '!') {
if (yych <= '\f') {
- if (yych <= 0x08) goto yy948;
+ if (yych <= 0x08) goto yy956;
if (yych <= '\n') goto yy944;
- goto yy948;
+ goto yy956;
} else {
if (yych <= '\r') goto yy944;
- if (yych <= 0x1F) goto yy948;
- goto yy944;
+ if (yych == ' ') goto yy944;
+ goto yy956;
}
} else {
if (yych <= '$') {
- if (yych <= '"') goto yy948;
+ if (yych <= '"') goto yy946;
if (yych <= '#') goto yy944;
goto yy938;
} else {
if (yych == '\'') goto yy944;
- goto yy948;
+ if (yych <= '/') goto yy956;
}
}
} else {
- if (yych <= '\\') {
- if (yych <= '@') {
- if (yych <= '0') goto yy935;
+ if (yych <= '^') {
+ if (yych <= 'Z') {
if (yych <= '9') goto yy937;
- goto yy948;
+ if (yych <= '@') goto yy956;
+ goto yy954;
} else {
- if (yych <= 'Z') goto yy946;
if (yych <= '[') goto yy940;
- goto yy944;
+ if (yych <= '\\') goto yy944;
+ if (yych <= ']') goto yy942;
+ goto yy956;
}
} else {
- if (yych <= '_') {
- if (yych <= ']') goto yy942;
- if (yych <= '^') goto yy948;
- goto yy946;
+ if (yych <= '{') {
+ if (yych == '`') goto yy952;
+ if (yych <= 'z') goto yy954;
+ goto yy948;
} else {
- if (yych <= '`') goto yy948;
- if (yych <= 'z') goto yy946;
- if (yych <= '~') goto yy948;
- goto yy946;
+ if (yych == '}') goto yy950;
+ if (yych <= '~') goto yy956;
+ goto yy954;
}
}
}
-yy935:
YYDEBUG(935, *YYCURSOR);
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if (yych <= 'W') {
if (yych <= '/') goto yy936;
- if (yych <= '9') goto yy958;
+ if (yych <= '9') goto yy966;
} else {
- if (yych <= 'X') goto yy956;
- if (yych == 'x') goto yy956;
+ if (yych <= 'X') goto yy964;
+ if (yych == 'x') goto yy964;
}
yy936:
YYDEBUG(936, *YYCURSOR);
@@ -8550,27 +8549,27 @@ yy936:
}
return T_NUM_STRING;
}
-#line 8554 "Zend/zend_language_scanner.c"
+#line 8553 "Zend/zend_language_scanner.c"
yy937:
YYDEBUG(937, *YYCURSOR);
yych = *++YYCURSOR;
- goto yy955;
+ goto yy963;
yy938:
YYDEBUG(938, *YYCURSOR);
++YYCURSOR;
if ((yych = *YYCURSOR) <= '_') {
if (yych <= '@') goto yy939;
- if (yych <= 'Z') goto yy951;
- if (yych >= '_') goto yy951;
+ if (yych <= 'Z') goto yy959;
+ if (yych >= '_') goto yy959;
} else {
if (yych <= '`') goto yy939;
- if (yych <= 'z') goto yy951;
- if (yych >= 0x7F) goto yy951;
+ if (yych <= 'z') goto yy959;
+ if (yych >= 0x7F) goto yy959;
}
yy939:
YYDEBUG(939, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2364 "Zend/zend_language_scanner.l"
+#line 2376 "Zend/zend_language_scanner.l"
{
if (YYCURSOR > YYLIMIT) {
return 0;
@@ -8579,7 +8578,7 @@ yy939:
zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
goto restart;
}
-#line 8583 "Zend/zend_language_scanner.c"
+#line 8582 "Zend/zend_language_scanner.c"
yy940:
YYDEBUG(940, *YYCURSOR);
++YYCURSOR;
@@ -8589,7 +8588,7 @@ yy940:
{
return T_LBRACKET;
}
-#line 8593 "Zend/zend_language_scanner.c"
+#line 8592 "Zend/zend_language_scanner.c"
yy942:
YYDEBUG(942, *YYCURSOR);
++YYCURSOR;
@@ -8600,7 +8599,7 @@ yy942:
yy_pop_state(TSRMLS_C);
return T_RBRACKET;
}
-#line 8604 "Zend/zend_language_scanner.c"
+#line 8603 "Zend/zend_language_scanner.c"
yy944:
YYDEBUG(944, *YYCURSOR);
++YYCURSOR;
@@ -8613,60 +8612,100 @@ yy944:
yy_pop_state(TSRMLS_C);
return T_ENCAPSED_AND_WHITESPACE;
}
-#line 8617 "Zend/zend_language_scanner.c"
+#line 8616 "Zend/zend_language_scanner.c"
yy946:
YYDEBUG(946, *YYCURSOR);
++YYCURSOR;
- yych = *YYCURSOR;
- goto yy950;
-yy947:
YYDEBUG(947, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
#line 1843 "Zend/zend_language_scanner.l"
{
+ return T_QUOTE;
+}
+#line 8626 "Zend/zend_language_scanner.c"
+yy948:
+ YYDEBUG(948, *YYCURSOR);
+ ++YYCURSOR;
+ YYDEBUG(949, *YYCURSOR);
+ yyleng = YYCURSOR - SCNG(yy_text);
+#line 1847 "Zend/zend_language_scanner.l"
+ {
+ return T_LBRACE;
+}
+#line 8636 "Zend/zend_language_scanner.c"
+yy950:
+ YYDEBUG(950, *YYCURSOR);
+ ++YYCURSOR;
+ YYDEBUG(951, *YYCURSOR);
+ yyleng = YYCURSOR - SCNG(yy_text);
+#line 1851 "Zend/zend_language_scanner.l"
+ {
+ return T_RBRACE;
+}
+#line 8646 "Zend/zend_language_scanner.c"
+yy952:
+ YYDEBUG(952, *YYCURSOR);
+ ++YYCURSOR;
+ YYDEBUG(953, *YYCURSOR);
+ yyleng = YYCURSOR - SCNG(yy_text);
+#line 1855 "Zend/zend_language_scanner.l"
+ {
+ return T_BACKQUOTE;
+}
+#line 8656 "Zend/zend_language_scanner.c"
+yy954:
+ YYDEBUG(954, *YYCURSOR);
+ ++YYCURSOR;
+ yych = *YYCURSOR;
+ goto yy958;
+yy955:
+ YYDEBUG(955, *YYCURSOR);
+ yyleng = YYCURSOR - SCNG(yy_text);
+#line 1859 "Zend/zend_language_scanner.l"
+ {
zend_copy_value(zendlval, yytext, yyleng);
zendlval->type = IS_STRING;
return T_STRING;
}
-#line 8632 "Zend/zend_language_scanner.c"
-yy948:
- YYDEBUG(948, *YYCURSOR);
+#line 8671 "Zend/zend_language_scanner.c"
+yy956:
+ YYDEBUG(956, *YYCURSOR);
yych = *++YYCURSOR;
goto yy939;
-yy949:
- YYDEBUG(949, *YYCURSOR);
+yy957:
+ YYDEBUG(957, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
-yy950:
- YYDEBUG(950, *YYCURSOR);
+yy958:
+ YYDEBUG(958, *YYCURSOR);
if (yybm[0+yych] & 32) {
- goto yy949;
+ goto yy957;
}
- goto yy947;
-yy951:
- YYDEBUG(951, *YYCURSOR);
+ goto yy955;
+yy959:
+ YYDEBUG(959, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
- YYDEBUG(952, *YYCURSOR);
+ YYDEBUG(960, *YYCURSOR);
if (yych <= '^') {
if (yych <= '9') {
- if (yych >= '0') goto yy951;
+ if (yych >= '0') goto yy959;
} else {
- if (yych <= '@') goto yy953;
- if (yych <= 'Z') goto yy951;
+ if (yych <= '@') goto yy961;
+ if (yych <= 'Z') goto yy959;
}
} else {
if (yych <= '`') {
- if (yych <= '_') goto yy951;
+ if (yych <= '_') goto yy959;
} else {
- if (yych <= 'z') goto yy951;
- if (yych >= 0x7F) goto yy951;
+ if (yych <= 'z') goto yy959;
+ if (yych >= 0x7F) goto yy959;
}
}
-yy953:
- YYDEBUG(953, *YYCURSOR);
+yy961:
+ YYDEBUG(961, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
#line 1821 "Zend/zend_language_scanner.l"
{
@@ -8674,37 +8713,37 @@ yy953:
zendlval->type = IS_STRING;
return T_VARIABLE;
}
-#line 8678 "Zend/zend_language_scanner.c"
-yy954:
- YYDEBUG(954, *YYCURSOR);
+#line 8717 "Zend/zend_language_scanner.c"
+yy962:
+ YYDEBUG(962, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
-yy955:
- YYDEBUG(955, *YYCURSOR);
+yy963:
+ YYDEBUG(963, *YYCURSOR);
if (yybm[0+yych] & 64) {
- goto yy954;
+ goto yy962;
}
goto yy936;
-yy956:
- YYDEBUG(956, *YYCURSOR);
+yy964:
+ YYDEBUG(964, *YYCURSOR);
yych = *++YYCURSOR;
if (yybm[0+yych] & 128) {
- goto yy961;
+ goto yy969;
}
- YYDEBUG(957, *YYCURSOR);
+ YYDEBUG(965, *YYCURSOR);
YYCURSOR = YYMARKER;
goto yy936;
-yy958:
- YYDEBUG(958, *YYCURSOR);
+yy966:
+ YYDEBUG(966, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
- YYDEBUG(959, *YYCURSOR);
- if (yych <= '/') goto yy960;
- if (yych <= '9') goto yy958;
-yy960:
- YYDEBUG(960, *YYCURSOR);
+ YYDEBUG(967, *YYCURSOR);
+ if (yych <= '/') goto yy968;
+ if (yych <= '9') goto yy966;
+yy968:
+ YYDEBUG(968, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
#line 1534 "Zend/zend_language_scanner.l"
{ /* Offset must be treated as a string */
@@ -8713,19 +8752,19 @@ yy960:
zendlval->type = IS_STRING;
return T_NUM_STRING;
}
-#line 8717 "Zend/zend_language_scanner.c"
-yy961:
- YYDEBUG(961, *YYCURSOR);
+#line 8756 "Zend/zend_language_scanner.c"
+yy969:
+ YYDEBUG(969, *YYCURSOR);
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
- YYDEBUG(962, *YYCURSOR);
+ YYDEBUG(970, *YYCURSOR);
if (yybm[0+yych] & 128) {
- goto yy961;
+ goto yy969;
}
- goto yy960;
+ goto yy968;
}
}
-#line 2373 "Zend/zend_language_scanner.l"
+#line 2385 "Zend/zend_language_scanner.l"
}
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index c22f16ec62..782bd3fa27 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -1840,6 +1840,22 @@ inline_html:
return T_ENCAPSED_AND_WHITESPACE;
}
+<ST_VAR_OFFSET>'"' {
+ return T_QUOTE;
+}
+
+<ST_VAR_OFFSET>'{' {
+ return T_LBRACE;
+}
+
+<ST_VAR_OFFSET>'}' {
+ return T_RBRACE;
+}
+
+<ST_VAR_OFFSET>'`' {
+ return T_BACKQUOTE;
+}
+
<ST_IN_SCRIPTING,ST_VAR_OFFSET>{LABEL} {
zend_copy_value(zendlval, yytext, yyleng);
zendlval->type = IS_STRING;
@@ -2357,10 +2373,6 @@ nowdoc_scan_done:
return T_ENCAPSED_AND_WHITESPACE;
}
-<ST_IN_SCRIPTING>'"' {
- return T_QUOTE;
-}
-
<ST_IN_SCRIPTING,ST_VAR_OFFSET>{ANY_CHAR} {
if (YYCURSOR > YYLIMIT) {
return 0;
diff --git a/Zend/zend_language_scanner_defs.h b/Zend/zend_language_scanner_defs.h
index e54e1f251b..35b814afd7 100644
--- a/Zend/zend_language_scanner_defs.h
+++ b/Zend/zend_language_scanner_defs.h
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 on Mon Jul 12 16:24:11 2010 */
+/* Generated by re2c 0.13.5 on Tue Jul 13 12:12:35 2010 */
#line 3 "Zend/zend_language_scanner_defs.h"
enum YYCONDTYPE {