diff options
author | Felipe Pena <felipe@php.net> | 2010-07-13 15:30:30 +0000 |
---|---|---|
committer | Felipe Pena <felipe@php.net> | 2010-07-13 15:30:30 +0000 |
commit | 75f32bdad21231c0f9be95238cc4af6cfd10656e (patch) | |
tree | 779a7a8d868f902de8f6133b73532a13fd82bf0c | |
parent | e0c7dbf30d98a3bde0f951c585fa87db02e1ef75 (diff) | |
download | php-git-75f32bdad21231c0f9be95238cc4af6cfd10656e.tar.gz |
- Added missing tokens on ST_VAR_OFFSET state
-rw-r--r-- | Zend/zend_language_parser.y | 6 | ||||
-rw-r--r-- | Zend/zend_language_scanner.c | 249 | ||||
-rw-r--r-- | Zend/zend_language_scanner.l | 20 | ||||
-rw-r--r-- | Zend/zend_language_scanner_defs.h | 2 |
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 { |