From 7ef3db0e4eb7b772ca1fe42738f9230f01ca5b7a Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 26 Mar 2009 12:37:54 +0000 Subject: [PATCH] Fixed bug #47516 (nowdoc can not be embed in heredoc but can be embed in double quote) --- NEWS | 2 + Zend/tests/bug47516.phpt | 36 ++++ Zend/zend_language_parser.y | 6 +- Zend/zend_language_scanner.c | 278 +++++++++++++++--------------- Zend/zend_language_scanner.l | 4 + Zend/zend_language_scanner_defs.h | 2 +- 6 files changed, 187 insertions(+), 141 deletions(-) create mode 100644 Zend/tests/bug47516.phpt diff --git a/NEWS b/NEWS index c66eaa11b7..fef74ba1ca 100644 --- a/NEWS +++ b/NEWS @@ -8,6 +8,8 @@ PHP NEWS - Fixed bug #47714 (autoloading classes inside exception_handler leads to crashes). (Dmitry) - Fixed bug #47699 (autoload and late static binding). (Dmitry) +- Fixed bug #47516 (nowdoc can not be embed in heredoc but can be embed in + double quote). (Dmitry) - Fixed bug #47038 (Memory leak in include). (Dmitry) - Fixed bug #44409 (PDO::FETCH_SERIALIZE calls __construct()). (Matteo) - Fixed bug #42362 (HTTP status codes 204 and 304 should not be gzipped). diff --git a/Zend/tests/bug47516.phpt b/Zend/tests/bug47516.phpt new file mode 100644 index 0000000000..66304fe3be --- /dev/null +++ b/Zend/tests/bug47516.phpt @@ -0,0 +1,36 @@ +--TEST-- +Bug #47516 (nowdoc can not be embed in heredoc but can be embed in double quote) +--FILE-- + +--EXPECT--- +abc +abc +abc diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 3e284e93bf..6ba7852ea2 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -763,8 +763,8 @@ common_scalar: | T_METHOD_C { $$ = $1; } | T_FUNC_C { $$ = $1; } | T_NS_C { $$ = $1; } - | T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC { $$ = $2; } - | T_START_HEREDOC T_END_HEREDOC { ZVAL_EMPTY_STRING(&$$.u.constant); INIT_PZVAL(&$$.u.constant); $$.op_type = IS_CONST; } + | T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC { $$ = $2; CG(heredoc) = Z_STRVAL($1.u.constant); CG(heredoc_len) = Z_STRLEN($1.u.constant); } + | T_START_HEREDOC T_END_HEREDOC { ZVAL_EMPTY_STRING(&$$.u.constant); INIT_PZVAL(&$$.u.constant); $$.op_type = IS_CONST; CG(heredoc) = Z_STRVAL($1.u.constant); CG(heredoc_len) = Z_STRLEN($1.u.constant); } ; @@ -791,7 +791,7 @@ scalar: | T_NS_SEPARATOR namespace_name { char *tmp = estrndup(Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); memcpy(&(tmp[1]), Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); tmp[0] = '\\'; efree(Z_STRVAL($2.u.constant)); Z_STRVAL($2.u.constant) = tmp; ++Z_STRLEN($2.u.constant); zend_do_fetch_constant(&$$, NULL, &$2, ZEND_RT, 0 TSRMLS_CC); } | common_scalar { $$ = $1; } | '"' encaps_list '"' { $$ = $2; } - | T_START_HEREDOC encaps_list T_END_HEREDOC { $$ = $2; } + | T_START_HEREDOC encaps_list T_END_HEREDOC { $$ = $2; CG(heredoc) = Z_STRVAL($1.u.constant); CG(heredoc_len) = Z_STRLEN($1.u.constant); } ; diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c index b8635084b3..aa50dec95f 100644 --- a/Zend/zend_language_scanner.c +++ b/Zend/zend_language_scanner.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.13.5 on Wed Mar 25 18:23:22 2009 */ +/* Generated by re2c 0.13.5 on Thu Mar 26 15:37:35 2009 */ #line 1 "Zend/zend_language_scanner.l" /* +----------------------------------------------------------------------+ @@ -930,7 +930,7 @@ yy2: ++YYCURSOR; YYDEBUG(3, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2096 "Zend/zend_language_scanner.l" +#line 2100 "Zend/zend_language_scanner.l" { return 0; } #line 936 "Zend/zend_language_scanner.c" yy4: @@ -1404,7 +1404,7 @@ yyc_ST_BACKQUOTE: yy58: YYDEBUG(58, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2013 "Zend/zend_language_scanner.l" +#line 2017 "Zend/zend_language_scanner.l" { zend_scan_escape_string(zendlval, yytext, yyleng, '`' TSRMLS_CC); return T_ENCAPSED_AND_WHITESPACE; @@ -1447,7 +1447,7 @@ yy60: yy61: YYDEBUG(61, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1988 "Zend/zend_language_scanner.l" +#line 1992 "Zend/zend_language_scanner.l" { zendlval->value.lval = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); @@ -1496,7 +1496,7 @@ yy66: ++YYCURSOR; YYDEBUG(67, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2091 "Zend/zend_language_scanner.l" +#line 2095 "Zend/zend_language_scanner.l" { BEGIN(ST_IN_SCRIPTING); return '`'; @@ -1574,7 +1574,7 @@ yy71: yy73: YYDEBUG(73, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2018 "Zend/zend_language_scanner.l" +#line 2022 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); zend_scan_escape_string(zendlval, yytext, yyleng, '`' TSRMLS_CC); @@ -1938,7 +1938,7 @@ yyc_ST_DOUBLE_QUOTES: yy113: YYDEBUG(113, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1995 "Zend/zend_language_scanner.l" +#line 1999 "Zend/zend_language_scanner.l" { zend_scan_escape_string(zendlval, yytext, yyleng, '"' TSRMLS_CC); return T_ENCAPSED_AND_WHITESPACE; @@ -1982,7 +1982,7 @@ yy115: yy116: YYDEBUG(116, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1988 "Zend/zend_language_scanner.l" +#line 1992 "Zend/zend_language_scanner.l" { zendlval->value.lval = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); @@ -2030,7 +2030,7 @@ yy121: ++YYCURSOR; YYDEBUG(122, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2085 "Zend/zend_language_scanner.l" +#line 2089 "Zend/zend_language_scanner.l" { BEGIN(ST_IN_SCRIPTING); return '"'; @@ -2111,7 +2111,7 @@ yy126: yy128: YYDEBUG(128, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2006 "Zend/zend_language_scanner.l" +#line 2010 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); zend_scan_escape_string(zendlval, yytext, yyleng, '"' TSRMLS_CC); @@ -2225,7 +2225,7 @@ yyc_ST_END_HEREDOC: ++YYCURSOR; YYDEBUG(146, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2096 "Zend/zend_language_scanner.l" +#line 2100 "Zend/zend_language_scanner.l" { return 0; } #line 2231 "Zend/zend_language_scanner.c" yy147: @@ -2233,7 +2233,7 @@ yy147: ++YYCURSOR; YYDEBUG(148, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1974 "Zend/zend_language_scanner.l" +#line 1978 "Zend/zend_language_scanner.l" { YYCURSOR += CG(heredoc_len) - 1; yyleng = CG(heredoc_len); @@ -2315,7 +2315,7 @@ yyc_ST_HEREDOC: yy151: YYDEBUG(151, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2032 "Zend/zend_language_scanner.l" +#line 2036 "Zend/zend_language_scanner.l" { zend_scan_escape_string(zendlval, yytext, yyleng, 0 TSRMLS_CC); return T_ENCAPSED_AND_WHITESPACE; @@ -2371,7 +2371,7 @@ yy154: yy155: YYDEBUG(155, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1988 "Zend/zend_language_scanner.l" +#line 1992 "Zend/zend_language_scanner.l" { zendlval->value.lval = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); @@ -2628,7 +2628,7 @@ yy172: yy174: YYDEBUG(174, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2037 "Zend/zend_language_scanner.l" +#line 2041 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); zend_scan_escape_string(zendlval, yytext, yyleng, 0 TSRMLS_CC); @@ -2733,7 +2733,7 @@ yy181: ++YYCURSOR; YYDEBUG(182, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1937 "Zend/zend_language_scanner.l" +#line 1941 "Zend/zend_language_scanner.l" { char *end = yytext + yyleng - 1; @@ -3290,7 +3290,7 @@ yy215: ++YYCURSOR; YYDEBUG(216, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2096 "Zend/zend_language_scanner.l" +#line 2100 "Zend/zend_language_scanner.l" { return 0; } #line 3296 "Zend/zend_language_scanner.c" yy217: @@ -3951,7 +3951,7 @@ yy273: yy274: YYDEBUG(274, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2098 "Zend/zend_language_scanner.l" +#line 2102 "Zend/zend_language_scanner.l" { zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); goto restart; @@ -3962,7 +3962,7 @@ yy275: ++YYCURSOR; YYDEBUG(276, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1925 "Zend/zend_language_scanner.l" +#line 1929 "Zend/zend_language_scanner.l" { BEGIN(ST_BACKQUOTE); return '`'; @@ -4777,6 +4777,10 @@ yy384: char *s; int bprefix = (yytext[0] != '<') ? 1 : 0; + /* save old heredoc label */ + Z_STRVAL_P(zendlval) = CG(heredoc); + Z_STRLEN_P(zendlval) = CG(heredoc_len); + CG(zend_lineno)++; CG(heredoc_len) = yyleng-bprefix-3-1-(yytext[yyleng-2]=='\r'?1:0); s = yytext+bprefix+3; @@ -4816,7 +4820,7 @@ yy384: return T_START_HEREDOC; } -#line 4820 "Zend/zend_language_scanner.c" +#line 4824 "Zend/zend_language_scanner.c" yy385: YYDEBUG(385, *YYCURSOR); yych = *++YYCURSOR; @@ -4860,7 +4864,7 @@ yy388: { return T_IS_NOT_IDENTICAL; } -#line 4864 "Zend/zend_language_scanner.c" +#line 4868 "Zend/zend_language_scanner.c" yy391: YYDEBUG(391, *YYCURSOR); ++YYCURSOR; @@ -4870,7 +4874,7 @@ yy391: { return T_PLUS_EQUAL; } -#line 4874 "Zend/zend_language_scanner.c" +#line 4878 "Zend/zend_language_scanner.c" yy393: YYDEBUG(393, *YYCURSOR); ++YYCURSOR; @@ -4880,7 +4884,7 @@ yy393: { return T_INC; } -#line 4884 "Zend/zend_language_scanner.c" +#line 4888 "Zend/zend_language_scanner.c" yy395: YYDEBUG(395, *YYCURSOR); yych = *++YYCURSOR; @@ -4903,7 +4907,7 @@ yy397: { return T_LIST; } -#line 4907 "Zend/zend_language_scanner.c" +#line 4911 "Zend/zend_language_scanner.c" yy399: YYDEBUG(399, *YYCURSOR); ++YYCURSOR; @@ -4914,7 +4918,7 @@ yy399: { return T_IS_EQUAL; } -#line 4918 "Zend/zend_language_scanner.c" +#line 4922 "Zend/zend_language_scanner.c" yy401: YYDEBUG(401, *YYCURSOR); ++YYCURSOR; @@ -4924,7 +4928,7 @@ yy401: { return T_DOUBLE_ARROW; } -#line 4928 "Zend/zend_language_scanner.c" +#line 4932 "Zend/zend_language_scanner.c" yy403: YYDEBUG(403, *YYCURSOR); ++YYCURSOR; @@ -4934,7 +4938,7 @@ yy403: { return T_IS_IDENTICAL; } -#line 4938 "Zend/zend_language_scanner.c" +#line 4942 "Zend/zend_language_scanner.c" yy405: YYDEBUG(405, *YYCURSOR); yych = *++YYCURSOR; @@ -5066,7 +5070,7 @@ yy420: } return T_NS_C; } -#line 5070 "Zend/zend_language_scanner.c" +#line 5074 "Zend/zend_language_scanner.c" yy424: YYDEBUG(424, *YYCURSOR); yych = *++YYCURSOR; @@ -5113,7 +5117,7 @@ yy425: zendlval->type = IS_STRING; return T_DIR; } -#line 5117 "Zend/zend_language_scanner.c" +#line 5121 "Zend/zend_language_scanner.c" yy429: YYDEBUG(429, *YYCURSOR); yych = *++YYCURSOR; @@ -5144,7 +5148,7 @@ yy431: zendlval->type = IS_LONG; return T_LINE; } -#line 5148 "Zend/zend_language_scanner.c" +#line 5152 "Zend/zend_language_scanner.c" yy435: YYDEBUG(435, *YYCURSOR); yych = *++YYCURSOR; @@ -5200,7 +5204,7 @@ yy439: zendlval->type = IS_STRING; return T_METHOD_C; } -#line 5204 "Zend/zend_language_scanner.c" +#line 5208 "Zend/zend_language_scanner.c" yy443: YYDEBUG(443, *YYCURSOR); yych = *++YYCURSOR; @@ -5267,7 +5271,7 @@ yy450: zendlval->type = IS_STRING; return T_FUNC_C; } -#line 5271 "Zend/zend_language_scanner.c" +#line 5275 "Zend/zend_language_scanner.c" yy454: YYDEBUG(454, *YYCURSOR); yych = *++YYCURSOR; @@ -5299,7 +5303,7 @@ yy455: zendlval->type = IS_STRING; return T_FILE; } -#line 5303 "Zend/zend_language_scanner.c" +#line 5307 "Zend/zend_language_scanner.c" yy459: YYDEBUG(459, *YYCURSOR); yych = *++YYCURSOR; @@ -5345,7 +5349,7 @@ yy462: zendlval->type = IS_STRING; return T_CLASS_C; } -#line 5349 "Zend/zend_language_scanner.c" +#line 5353 "Zend/zend_language_scanner.c" yy466: YYDEBUG(466, *YYCURSOR); yych = *++YYCURSOR; @@ -5411,7 +5415,7 @@ yy477: { return T_HALT_COMPILER; } -#line 5415 "Zend/zend_language_scanner.c" +#line 5419 "Zend/zend_language_scanner.c" yy479: YYDEBUG(479, *YYCURSOR); yych = *++YYCURSOR; @@ -5435,7 +5439,7 @@ yy481: { return T_USE; } -#line 5439 "Zend/zend_language_scanner.c" +#line 5443 "Zend/zend_language_scanner.c" yy483: YYDEBUG(483, *YYCURSOR); yych = *++YYCURSOR; @@ -5458,7 +5462,7 @@ yy485: { return T_UNSET; } -#line 5462 "Zend/zend_language_scanner.c" +#line 5466 "Zend/zend_language_scanner.c" yy487: YYDEBUG(487, *YYCURSOR); ++YYCURSOR; @@ -5634,7 +5638,7 @@ yy502: { return T_INT_CAST; } -#line 5638 "Zend/zend_language_scanner.c" +#line 5642 "Zend/zend_language_scanner.c" yy505: YYDEBUG(505, *YYCURSOR); yych = *++YYCURSOR; @@ -5682,7 +5686,7 @@ yy510: { return T_DOUBLE_CAST; } -#line 5686 "Zend/zend_language_scanner.c" +#line 5690 "Zend/zend_language_scanner.c" yy514: YYDEBUG(514, *YYCURSOR); yych = *++YYCURSOR; @@ -5756,7 +5760,7 @@ yy524: { return T_STRING_CAST; } -#line 5760 "Zend/zend_language_scanner.c" +#line 5764 "Zend/zend_language_scanner.c" yy528: YYDEBUG(528, *YYCURSOR); yych = *++YYCURSOR; @@ -5793,7 +5797,7 @@ yy531: { return T_ARRAY_CAST; } -#line 5797 "Zend/zend_language_scanner.c" +#line 5801 "Zend/zend_language_scanner.c" yy535: YYDEBUG(535, *YYCURSOR); yych = *++YYCURSOR; @@ -5835,7 +5839,7 @@ yy539: { return T_OBJECT_CAST; } -#line 5839 "Zend/zend_language_scanner.c" +#line 5843 "Zend/zend_language_scanner.c" yy543: YYDEBUG(543, *YYCURSOR); yych = *++YYCURSOR; @@ -5880,7 +5884,7 @@ yy548: { return T_BOOL_CAST; } -#line 5884 "Zend/zend_language_scanner.c" +#line 5888 "Zend/zend_language_scanner.c" yy551: YYDEBUG(551, *YYCURSOR); yych = *++YYCURSOR; @@ -5928,7 +5932,7 @@ yy556: { return T_STRING_CAST; } -#line 5932 "Zend/zend_language_scanner.c" +#line 5936 "Zend/zend_language_scanner.c" yy560: YYDEBUG(560, *YYCURSOR); yych = *++YYCURSOR; @@ -5965,7 +5969,7 @@ yy563: { return T_UNSET_CAST; } -#line 5969 "Zend/zend_language_scanner.c" +#line 5973 "Zend/zend_language_scanner.c" yy567: YYDEBUG(567, *YYCURSOR); yych = *++YYCURSOR; @@ -5983,7 +5987,7 @@ yy568: { return T_VAR; } -#line 5987 "Zend/zend_language_scanner.c" +#line 5991 "Zend/zend_language_scanner.c" yy570: YYDEBUG(570, *YYCURSOR); yych = *++YYCURSOR; @@ -6007,7 +6011,7 @@ yy572: { return T_NEW; } -#line 6011 "Zend/zend_language_scanner.c" +#line 6015 "Zend/zend_language_scanner.c" yy574: YYDEBUG(574, *YYCURSOR); yych = *++YYCURSOR; @@ -6050,7 +6054,7 @@ yy580: { return T_NAMESPACE; } -#line 6054 "Zend/zend_language_scanner.c" +#line 6058 "Zend/zend_language_scanner.c" yy582: YYDEBUG(582, *YYCURSOR); ++YYCURSOR; @@ -6060,7 +6064,7 @@ yy582: { return T_PAAMAYIM_NEKUDOTAYIM; } -#line 6064 "Zend/zend_language_scanner.c" +#line 6068 "Zend/zend_language_scanner.c" yy584: YYDEBUG(584, *YYCURSOR); ++YYCURSOR; @@ -6086,7 +6090,7 @@ yy586: { return T_MINUS_EQUAL; } -#line 6090 "Zend/zend_language_scanner.c" +#line 6094 "Zend/zend_language_scanner.c" yy588: YYDEBUG(588, *YYCURSOR); ++YYCURSOR; @@ -6096,7 +6100,7 @@ yy588: { return T_DEC; } -#line 6100 "Zend/zend_language_scanner.c" +#line 6104 "Zend/zend_language_scanner.c" yy590: YYDEBUG(590, *YYCURSOR); ++YYCURSOR; @@ -6107,7 +6111,7 @@ yy590: yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); return T_OBJECT_OPERATOR; } -#line 6111 "Zend/zend_language_scanner.c" +#line 6115 "Zend/zend_language_scanner.c" yy592: YYDEBUG(592, *YYCURSOR); yych = *++YYCURSOR; @@ -6156,7 +6160,7 @@ yy597: { return T_PUBLIC; } -#line 6160 "Zend/zend_language_scanner.c" +#line 6164 "Zend/zend_language_scanner.c" yy599: YYDEBUG(599, *YYCURSOR); yych = *++YYCURSOR; @@ -6215,7 +6219,7 @@ yy606: { return T_PROTECTED; } -#line 6219 "Zend/zend_language_scanner.c" +#line 6223 "Zend/zend_language_scanner.c" yy608: YYDEBUG(608, *YYCURSOR); yych = *++YYCURSOR; @@ -6249,7 +6253,7 @@ yy612: { return T_PRIVATE; } -#line 6253 "Zend/zend_language_scanner.c" +#line 6257 "Zend/zend_language_scanner.c" yy614: YYDEBUG(614, *YYCURSOR); ++YYCURSOR; @@ -6262,7 +6266,7 @@ yy614: { return T_PRINT; } -#line 6266 "Zend/zend_language_scanner.c" +#line 6270 "Zend/zend_language_scanner.c" yy616: YYDEBUG(616, *YYCURSOR); yych = *++YYCURSOR; @@ -6291,7 +6295,7 @@ yy619: { return T_GOTO; } -#line 6295 "Zend/zend_language_scanner.c" +#line 6299 "Zend/zend_language_scanner.c" yy621: YYDEBUG(621, *YYCURSOR); yych = *++YYCURSOR; @@ -6319,7 +6323,7 @@ yy624: { return T_GLOBAL; } -#line 6323 "Zend/zend_language_scanner.c" +#line 6327 "Zend/zend_language_scanner.c" yy626: YYDEBUG(626, *YYCURSOR); yych = *++YYCURSOR; @@ -6357,7 +6361,7 @@ yy631: { return T_BREAK; } -#line 6361 "Zend/zend_language_scanner.c" +#line 6365 "Zend/zend_language_scanner.c" yy633: YYDEBUG(633, *YYCURSOR); yych = *++YYCURSOR; @@ -6401,7 +6405,7 @@ yy639: { return T_SWITCH; } -#line 6405 "Zend/zend_language_scanner.c" +#line 6409 "Zend/zend_language_scanner.c" yy641: YYDEBUG(641, *YYCURSOR); yych = *++YYCURSOR; @@ -6429,7 +6433,7 @@ yy644: { return T_STATIC; } -#line 6433 "Zend/zend_language_scanner.c" +#line 6437 "Zend/zend_language_scanner.c" yy646: YYDEBUG(646, *YYCURSOR); yych = *++YYCURSOR; @@ -6460,7 +6464,7 @@ yy649: { return T_AS; } -#line 6464 "Zend/zend_language_scanner.c" +#line 6468 "Zend/zend_language_scanner.c" yy651: YYDEBUG(651, *YYCURSOR); yych = *++YYCURSOR; @@ -6483,7 +6487,7 @@ yy653: { return T_ARRAY; } -#line 6487 "Zend/zend_language_scanner.c" +#line 6491 "Zend/zend_language_scanner.c" yy655: YYDEBUG(655, *YYCURSOR); ++YYCURSOR; @@ -6496,7 +6500,7 @@ yy655: { return T_LOGICAL_AND; } -#line 6500 "Zend/zend_language_scanner.c" +#line 6504 "Zend/zend_language_scanner.c" yy657: YYDEBUG(657, *YYCURSOR); yych = *++YYCURSOR; @@ -6534,7 +6538,7 @@ yy662: { return T_ABSTRACT; } -#line 6538 "Zend/zend_language_scanner.c" +#line 6542 "Zend/zend_language_scanner.c" yy664: YYDEBUG(664, *YYCURSOR); yych = *++YYCURSOR; @@ -6562,7 +6566,7 @@ yy667: { return T_WHILE; } -#line 6566 "Zend/zend_language_scanner.c" +#line 6570 "Zend/zend_language_scanner.c" yy669: YYDEBUG(669, *YYCURSOR); ++YYCURSOR; @@ -6575,7 +6579,7 @@ yy669: { return T_IF; } -#line 6579 "Zend/zend_language_scanner.c" +#line 6583 "Zend/zend_language_scanner.c" yy671: YYDEBUG(671, *YYCURSOR); yych = *++YYCURSOR; @@ -6631,7 +6635,7 @@ yy676: { return T_ISSET; } -#line 6635 "Zend/zend_language_scanner.c" +#line 6639 "Zend/zend_language_scanner.c" yy678: YYDEBUG(678, *YYCURSOR); yych = *++YYCURSOR; @@ -6689,7 +6693,7 @@ yy685: { return T_INCLUDE; } -#line 6693 "Zend/zend_language_scanner.c" +#line 6697 "Zend/zend_language_scanner.c" yy686: YYDEBUG(686, *YYCURSOR); yych = *++YYCURSOR; @@ -6722,7 +6726,7 @@ yy690: { return T_INCLUDE_ONCE; } -#line 6726 "Zend/zend_language_scanner.c" +#line 6730 "Zend/zend_language_scanner.c" yy692: YYDEBUG(692, *YYCURSOR); yych = *++YYCURSOR; @@ -6760,7 +6764,7 @@ yy697: { return T_INTERFACE; } -#line 6764 "Zend/zend_language_scanner.c" +#line 6768 "Zend/zend_language_scanner.c" yy699: YYDEBUG(699, *YYCURSOR); yych = *++YYCURSOR; @@ -6803,7 +6807,7 @@ yy705: { return T_INSTANCEOF; } -#line 6807 "Zend/zend_language_scanner.c" +#line 6811 "Zend/zend_language_scanner.c" yy707: YYDEBUG(707, *YYCURSOR); yych = *++YYCURSOR; @@ -6851,7 +6855,7 @@ yy714: { return T_IMPLEMENTS; } -#line 6855 "Zend/zend_language_scanner.c" +#line 6859 "Zend/zend_language_scanner.c" yy716: YYDEBUG(716, *YYCURSOR); yych = *++YYCURSOR; @@ -6875,7 +6879,7 @@ yy718: { return T_TRY; } -#line 6879 "Zend/zend_language_scanner.c" +#line 6883 "Zend/zend_language_scanner.c" yy720: YYDEBUG(720, *YYCURSOR); yych = *++YYCURSOR; @@ -6898,7 +6902,7 @@ yy722: { return T_THROW; } -#line 6902 "Zend/zend_language_scanner.c" +#line 6906 "Zend/zend_language_scanner.c" yy724: YYDEBUG(724, *YYCURSOR); yych = *++YYCURSOR; @@ -6963,7 +6967,7 @@ yy731: { return T_REQUIRE; } -#line 6967 "Zend/zend_language_scanner.c" +#line 6971 "Zend/zend_language_scanner.c" yy732: YYDEBUG(732, *YYCURSOR); yych = *++YYCURSOR; @@ -6996,7 +7000,7 @@ yy736: { return T_REQUIRE_ONCE; } -#line 7000 "Zend/zend_language_scanner.c" +#line 7004 "Zend/zend_language_scanner.c" yy738: YYDEBUG(738, *YYCURSOR); yych = *++YYCURSOR; @@ -7019,7 +7023,7 @@ yy740: { return T_RETURN; } -#line 7023 "Zend/zend_language_scanner.c" +#line 7027 "Zend/zend_language_scanner.c" yy742: YYDEBUG(742, *YYCURSOR); yych = *++YYCURSOR; @@ -7104,7 +7108,7 @@ yy751: { return T_CONTINUE; } -#line 7108 "Zend/zend_language_scanner.c" +#line 7112 "Zend/zend_language_scanner.c" yy753: YYDEBUG(753, *YYCURSOR); ++YYCURSOR; @@ -7117,7 +7121,7 @@ yy753: { return T_CONST; } -#line 7121 "Zend/zend_language_scanner.c" +#line 7125 "Zend/zend_language_scanner.c" yy755: YYDEBUG(755, *YYCURSOR); yych = *++YYCURSOR; @@ -7146,7 +7150,7 @@ yy758: { return T_CLONE; } -#line 7150 "Zend/zend_language_scanner.c" +#line 7154 "Zend/zend_language_scanner.c" yy760: YYDEBUG(760, *YYCURSOR); yych = *++YYCURSOR; @@ -7164,7 +7168,7 @@ yy761: { return T_CLASS; } -#line 7168 "Zend/zend_language_scanner.c" +#line 7172 "Zend/zend_language_scanner.c" yy763: YYDEBUG(763, *YYCURSOR); yych = *++YYCURSOR; @@ -7188,7 +7192,7 @@ yy765: { return T_CASE; } -#line 7192 "Zend/zend_language_scanner.c" +#line 7196 "Zend/zend_language_scanner.c" yy767: YYDEBUG(767, *YYCURSOR); yych = *++YYCURSOR; @@ -7206,7 +7210,7 @@ yy768: { return T_CATCH; } -#line 7210 "Zend/zend_language_scanner.c" +#line 7214 "Zend/zend_language_scanner.c" yy770: YYDEBUG(770, *YYCURSOR); yych = *++YYCURSOR; @@ -7261,7 +7265,7 @@ yy778: { return T_FUNCTION; } -#line 7265 "Zend/zend_language_scanner.c" +#line 7269 "Zend/zend_language_scanner.c" yy780: YYDEBUG(780, *YYCURSOR); ++YYCURSOR; @@ -7289,7 +7293,7 @@ yy781: { return T_FOR; } -#line 7293 "Zend/zend_language_scanner.c" +#line 7297 "Zend/zend_language_scanner.c" yy782: YYDEBUG(782, *YYCURSOR); yych = *++YYCURSOR; @@ -7317,7 +7321,7 @@ yy785: { return T_FOREACH; } -#line 7321 "Zend/zend_language_scanner.c" +#line 7325 "Zend/zend_language_scanner.c" yy787: YYDEBUG(787, *YYCURSOR); yych = *++YYCURSOR; @@ -7340,7 +7344,7 @@ yy789: { return T_FINAL; } -#line 7344 "Zend/zend_language_scanner.c" +#line 7348 "Zend/zend_language_scanner.c" yy791: YYDEBUG(791, *YYCURSOR); yych = *++YYCURSOR; @@ -7375,7 +7379,7 @@ yy793: { return T_DO; } -#line 7379 "Zend/zend_language_scanner.c" +#line 7383 "Zend/zend_language_scanner.c" yy795: YYDEBUG(795, *YYCURSOR); ++YYCURSOR; @@ -7388,7 +7392,7 @@ yy795: { return T_EXIT; } -#line 7392 "Zend/zend_language_scanner.c" +#line 7396 "Zend/zend_language_scanner.c" yy797: YYDEBUG(797, *YYCURSOR); yych = *++YYCURSOR; @@ -7427,7 +7431,7 @@ yy802: { return T_DEFAULT; } -#line 7431 "Zend/zend_language_scanner.c" +#line 7435 "Zend/zend_language_scanner.c" yy804: YYDEBUG(804, *YYCURSOR); yych = *++YYCURSOR; @@ -7455,7 +7459,7 @@ yy807: { return T_DECLARE; } -#line 7459 "Zend/zend_language_scanner.c" +#line 7463 "Zend/zend_language_scanner.c" yy809: YYDEBUG(809, *YYCURSOR); yych = *++YYCURSOR; @@ -7539,7 +7543,7 @@ yy820: { return T_EXTENDS; } -#line 7543 "Zend/zend_language_scanner.c" +#line 7547 "Zend/zend_language_scanner.c" yy822: YYDEBUG(822, *YYCURSOR); ++YYCURSOR; @@ -7552,7 +7556,7 @@ yy822: { return T_EXIT; } -#line 7556 "Zend/zend_language_scanner.c" +#line 7560 "Zend/zend_language_scanner.c" yy824: YYDEBUG(824, *YYCURSOR); yych = *++YYCURSOR; @@ -7570,7 +7574,7 @@ yy825: { return T_EVAL; } -#line 7574 "Zend/zend_language_scanner.c" +#line 7578 "Zend/zend_language_scanner.c" yy827: YYDEBUG(827, *YYCURSOR); yych = *++YYCURSOR; @@ -7644,7 +7648,7 @@ yy836: { return T_ENDWHILE; } -#line 7648 "Zend/zend_language_scanner.c" +#line 7652 "Zend/zend_language_scanner.c" yy838: YYDEBUG(838, *YYCURSOR); yych = *++YYCURSOR; @@ -7677,7 +7681,7 @@ yy842: { return T_ENDSWITCH; } -#line 7681 "Zend/zend_language_scanner.c" +#line 7685 "Zend/zend_language_scanner.c" yy844: YYDEBUG(844, *YYCURSOR); ++YYCURSOR; @@ -7690,7 +7694,7 @@ yy844: { return T_ENDIF; } -#line 7694 "Zend/zend_language_scanner.c" +#line 7698 "Zend/zend_language_scanner.c" yy846: YYDEBUG(846, *YYCURSOR); yych = *++YYCURSOR; @@ -7723,7 +7727,7 @@ yy848: { return T_ENDFOR; } -#line 7727 "Zend/zend_language_scanner.c" +#line 7731 "Zend/zend_language_scanner.c" yy849: YYDEBUG(849, *YYCURSOR); yych = *++YYCURSOR; @@ -7751,7 +7755,7 @@ yy852: { return T_ENDFOREACH; } -#line 7755 "Zend/zend_language_scanner.c" +#line 7759 "Zend/zend_language_scanner.c" yy854: YYDEBUG(854, *YYCURSOR); yych = *++YYCURSOR; @@ -7789,7 +7793,7 @@ yy859: { return T_ENDDECLARE; } -#line 7793 "Zend/zend_language_scanner.c" +#line 7797 "Zend/zend_language_scanner.c" yy861: YYDEBUG(861, *YYCURSOR); yych = *++YYCURSOR; @@ -7812,7 +7816,7 @@ yy863: { return T_EMPTY; } -#line 7816 "Zend/zend_language_scanner.c" +#line 7820 "Zend/zend_language_scanner.c" yy865: YYDEBUG(865, *YYCURSOR); yych = *++YYCURSOR; @@ -7845,7 +7849,7 @@ yy867: { return T_ELSE; } -#line 7849 "Zend/zend_language_scanner.c" +#line 7853 "Zend/zend_language_scanner.c" yy868: YYDEBUG(868, *YYCURSOR); yych = *++YYCURSOR; @@ -7863,7 +7867,7 @@ yy869: { return T_ELSEIF; } -#line 7867 "Zend/zend_language_scanner.c" +#line 7871 "Zend/zend_language_scanner.c" yy871: YYDEBUG(871, *YYCURSOR); yych = *++YYCURSOR; @@ -7881,7 +7885,7 @@ yy872: { return T_ECHO; } -#line 7885 "Zend/zend_language_scanner.c" +#line 7889 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_LOOKING_FOR_PROPERTY: @@ -7956,9 +7960,9 @@ yy876: ++YYCURSOR; YYDEBUG(877, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2096 "Zend/zend_language_scanner.l" +#line 2100 "Zend/zend_language_scanner.l" { return 0; } -#line 7962 "Zend/zend_language_scanner.c" +#line 7966 "Zend/zend_language_scanner.c" yy878: YYDEBUG(878, *YYCURSOR); ++YYCURSOR; @@ -7975,7 +7979,7 @@ yy879: HANDLE_NEWLINES(yytext, yyleng); return T_WHITESPACE; } -#line 7979 "Zend/zend_language_scanner.c" +#line 7983 "Zend/zend_language_scanner.c" yy880: YYDEBUG(880, *YYCURSOR); ++YYCURSOR; @@ -7989,7 +7993,7 @@ yy881: yy_pop_state(TSRMLS_C); goto restart; } -#line 7993 "Zend/zend_language_scanner.c" +#line 7997 "Zend/zend_language_scanner.c" yy882: YYDEBUG(882, *YYCURSOR); ++YYCURSOR; @@ -8005,7 +8009,7 @@ yy883: zendlval->type = IS_STRING; return T_STRING; } -#line 8009 "Zend/zend_language_scanner.c" +#line 8013 "Zend/zend_language_scanner.c" yy884: YYDEBUG(884, *YYCURSOR); yych = *++YYCURSOR; @@ -8030,7 +8034,7 @@ yy887: { return T_OBJECT_OPERATOR; } -#line 8034 "Zend/zend_language_scanner.c" +#line 8038 "Zend/zend_language_scanner.c" yy889: YYDEBUG(889, *YYCURSOR); ++YYCURSOR; @@ -8103,9 +8107,9 @@ yy893: ++YYCURSOR; YYDEBUG(894, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2096 "Zend/zend_language_scanner.l" +#line 2100 "Zend/zend_language_scanner.l" { return 0; } -#line 8109 "Zend/zend_language_scanner.c" +#line 8113 "Zend/zend_language_scanner.c" yy895: YYDEBUG(895, *YYCURSOR); ++YYCURSOR; @@ -8122,7 +8126,7 @@ yy896: yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); return T_STRING_VARNAME; } -#line 8126 "Zend/zend_language_scanner.c" +#line 8130 "Zend/zend_language_scanner.c" yy897: YYDEBUG(897, *YYCURSOR); ++YYCURSOR; @@ -8135,7 +8139,7 @@ yy897: yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); goto restart; } -#line 8139 "Zend/zend_language_scanner.c" +#line 8143 "Zend/zend_language_scanner.c" yy899: YYDEBUG(899, *YYCURSOR); ++YYCURSOR; @@ -8201,9 +8205,9 @@ yy903: goto yy906; YYDEBUG(904, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2096 "Zend/zend_language_scanner.l" +#line 2100 "Zend/zend_language_scanner.l" { return 0; } -#line 8207 "Zend/zend_language_scanner.c" +#line 8211 "Zend/zend_language_scanner.c" yy905: YYDEBUG(905, *YYCURSOR); ++YYCURSOR; @@ -8296,7 +8300,7 @@ yy914: ++YYCURSOR; YYDEBUG(915, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2044 "Zend/zend_language_scanner.l" +#line 2048 "Zend/zend_language_scanner.l" { char *end = yytext + yyleng - 1; @@ -8336,7 +8340,7 @@ yy914: yymore(); } } -#line 8340 "Zend/zend_language_scanner.c" +#line 8344 "Zend/zend_language_scanner.c" yy916: YYDEBUG(916, *YYCURSOR); ++YYCURSOR; @@ -8447,9 +8451,9 @@ yy922: goto yy937; YYDEBUG(923, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2096 "Zend/zend_language_scanner.l" +#line 2100 "Zend/zend_language_scanner.l" { return 0; } -#line 8453 "Zend/zend_language_scanner.c" +#line 8457 "Zend/zend_language_scanner.c" yy924: YYDEBUG(924, *YYCURSOR); ++YYCURSOR; @@ -8461,7 +8465,7 @@ yy925: { yymore(); } -#line 8465 "Zend/zend_language_scanner.c" +#line 8469 "Zend/zend_language_scanner.c" yy926: YYDEBUG(926, *YYCURSOR); yych = *++YYCURSOR; @@ -8516,7 +8520,7 @@ yy930: return T_COMMENT; } } -#line 8520 "Zend/zend_language_scanner.c" +#line 8524 "Zend/zend_language_scanner.c" yy931: YYDEBUG(931, *YYCURSOR); yych = *++YYCURSOR; @@ -8538,7 +8542,7 @@ yy932: CG(zend_lineno)++; return T_COMMENT; } -#line 8542 "Zend/zend_language_scanner.c" +#line 8546 "Zend/zend_language_scanner.c" yy935: YYDEBUG(935, *YYCURSOR); yych = *++YYCURSOR; @@ -8585,7 +8589,7 @@ yy938: yymore(); } } -#line 8589 "Zend/zend_language_scanner.c" +#line 8593 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_VAR_OFFSET: @@ -8677,9 +8681,9 @@ yy942: ++YYCURSOR; YYDEBUG(943, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2096 "Zend/zend_language_scanner.l" +#line 2100 "Zend/zend_language_scanner.l" { return 0; } -#line 8683 "Zend/zend_language_scanner.c" +#line 8687 "Zend/zend_language_scanner.c" yy944: YYDEBUG(944, *YYCURSOR); yyaccept = 0; @@ -8706,7 +8710,7 @@ yy945: } return T_NUM_STRING; } -#line 8710 "Zend/zend_language_scanner.c" +#line 8714 "Zend/zend_language_scanner.c" yy946: YYDEBUG(946, *YYCURSOR); yych = *++YYCURSOR; @@ -8731,7 +8735,7 @@ yy948: /* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */ return yytext[0]; } -#line 8735 "Zend/zend_language_scanner.c" +#line 8739 "Zend/zend_language_scanner.c" yy949: YYDEBUG(949, *YYCURSOR); ++YYCURSOR; @@ -8742,7 +8746,7 @@ yy949: yy_pop_state(TSRMLS_C); return ']'; } -#line 8746 "Zend/zend_language_scanner.c" +#line 8750 "Zend/zend_language_scanner.c" yy951: YYDEBUG(951, *YYCURSOR); yych = *++YYCURSOR; @@ -8760,7 +8764,7 @@ yy952: ZVAL_EMPTY_STRING(zendlval); /* Empty since it won't be used */ return T_ENCAPSED_AND_WHITESPACE; } -#line 8764 "Zend/zend_language_scanner.c" +#line 8768 "Zend/zend_language_scanner.c" yy954: YYDEBUG(954, *YYCURSOR); ++YYCURSOR; @@ -8775,18 +8779,18 @@ yy955: zendlval->type = IS_STRING; return T_STRING; } -#line 8779 "Zend/zend_language_scanner.c" +#line 8783 "Zend/zend_language_scanner.c" yy956: YYDEBUG(956, *YYCURSOR); ++YYCURSOR; YYDEBUG(957, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2098 "Zend/zend_language_scanner.l" +#line 2102 "Zend/zend_language_scanner.l" { zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); goto restart; } -#line 8790 "Zend/zend_language_scanner.c" +#line 8794 "Zend/zend_language_scanner.c" yy958: YYDEBUG(958, *YYCURSOR); ++YYCURSOR; @@ -8828,7 +8832,7 @@ yy962: zendlval->type = IS_STRING; return T_VARIABLE; } -#line 8832 "Zend/zend_language_scanner.c" +#line 8836 "Zend/zend_language_scanner.c" yy963: YYDEBUG(963, *YYCURSOR); ++YYCURSOR; @@ -8867,7 +8871,7 @@ yy969: zendlval->type = IS_STRING; return T_NUM_STRING; } -#line 8871 "Zend/zend_language_scanner.c" +#line 8875 "Zend/zend_language_scanner.c" yy970: YYDEBUG(970, *YYCURSOR); ++YYCURSOR; @@ -8880,6 +8884,6 @@ yy970: goto yy969; } } -#line 2103 "Zend/zend_language_scanner.l" +#line 2107 "Zend/zend_language_scanner.l" } diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index 34cec312f8..052c39084a 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -1881,6 +1881,10 @@ inline_char_handler: char *s; int bprefix = (yytext[0] != '<') ? 1 : 0; + /* save old heredoc label */ + Z_STRVAL_P(zendlval) = CG(heredoc); + Z_STRLEN_P(zendlval) = CG(heredoc_len); + CG(zend_lineno)++; CG(heredoc_len) = yyleng-bprefix-3-1-(yytext[yyleng-2]=='\r'?1:0); s = yytext+bprefix+3; diff --git a/Zend/zend_language_scanner_defs.h b/Zend/zend_language_scanner_defs.h index d2546df11f..b04126ecf0 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 Wed Mar 25 18:23:22 2009 */ +/* Generated by re2c 0.13.5 on Thu Mar 26 15:37:35 2009 */ #line 3 "Zend/zend_language_scanner_defs.h" enum YYCONDTYPE { -- 2.50.1