From: Dmitry Stogov Date: Thu, 26 Mar 2009 12:38:38 +0000 (+0000) Subject: Fixed bug #47516 (nowdoc can not be embed in heredoc but can be embed in double quote) X-Git-Tag: php-5.4.0alpha1~191^2~4051 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3b8a7eaff8edc81afc84b2bd1157a5e05fabece5;p=php Fixed bug #47516 (nowdoc can not be embed in heredoc but can be embed in double quote) --- 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 3718d01041..77864b5c33 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -768,13 +768,13 @@ common_scalar: | T_METHOD_C { $$ = $1; } | T_FUNC_C { $$ = $1; } | T_NS_C { $$ = $1; } - | start_heredoc T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC { $$ = $2; } - | start_heredoc T_END_HEREDOC { if (CG(literal_type) == IS_UNICODE) { ZVAL_EMPTY_UNICODE(&$$.u.constant); } else { ZVAL_EMPTY_STRING(&$$.u.constant); } INIT_PZVAL(&$$.u.constant); $$.op_type = IS_CONST; } + | 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); } + | start_heredoc T_END_HEREDOC { if (CG(literal_type) == IS_UNICODE) { ZVAL_EMPTY_UNICODE(&$$.u.constant); } else { 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); } ; start_heredoc: - T_START_HEREDOC { CG(literal_type) = UG(unicode)?IS_UNICODE:IS_STRING; } - | T_BINARY_HEREDOC { CG(literal_type) = IS_STRING; } + T_START_HEREDOC { CG(literal_type) = UG(unicode)?IS_UNICODE:IS_STRING; $$ = $1; } + | T_BINARY_HEREDOC { CG(literal_type) = IS_STRING; $$ = $1; } ; @@ -802,7 +802,7 @@ scalar: | common_scalar { $$ = $1; } | '"' { CG(literal_type) = UG(unicode)?IS_UNICODE:IS_STRING; } encaps_list '"' { $$ = $3; } | T_BINARY_DOUBLE { CG(literal_type) = IS_STRING; } encaps_list '"' { $$ = $3; } - | start_heredoc encaps_list T_END_HEREDOC { $$ = $2; } + | 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 e05d1be4e9..ee0d7386d2 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:24:36 2009 */ +/* Generated by re2c 0.13.5 on Thu Mar 26 15:38:15 2009 */ #line 1 "Zend/zend_language_scanner.l" /* +----------------------------------------------------------------------+ @@ -1425,7 +1425,7 @@ yy2: ++YYCURSOR; YYDEBUG(3, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2650 "Zend/zend_language_scanner.l" +#line 2654 "Zend/zend_language_scanner.l" { return 0; } #line 1431 "Zend/zend_language_scanner.c" yy4: @@ -1884,7 +1884,7 @@ yyc_ST_BACKQUOTE: yy58: YYDEBUG(58, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2548 "Zend/zend_language_scanner.l" +#line 2552 "Zend/zend_language_scanner.l" { if (CG(literal_type) == IS_UNICODE) { return zend_scan_unicode_escape_string(zendlval, yytext, yyleng, 0x60 /*'`'*/, T_ENCAPSED_AND_WHITESPACE TSRMLS_CC); @@ -1931,7 +1931,7 @@ yy60: yy61: YYDEBUG(61, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2514 "Zend/zend_language_scanner.l" +#line 2518 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); @@ -1980,7 +1980,7 @@ yy66: ++YYCURSOR; YYDEBUG(67, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2645 "Zend/zend_language_scanner.l" +#line 2649 "Zend/zend_language_scanner.l" { BEGIN(ST_IN_SCRIPTING); return '`'; @@ -2058,7 +2058,7 @@ yy71: yy73: YYDEBUG(73, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2557 "Zend/zend_language_scanner.l" +#line 2561 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); @@ -2446,7 +2446,7 @@ yyc_ST_DOUBLE_QUOTES: yy113: YYDEBUG(113, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2521 "Zend/zend_language_scanner.l" +#line 2525 "Zend/zend_language_scanner.l" { if (CG(literal_type) == IS_UNICODE) { return zend_scan_unicode_escape_string(zendlval, yytext, yyleng, 0x22 /*'"'*/, T_ENCAPSED_AND_WHITESPACE TSRMLS_CC); @@ -2494,7 +2494,7 @@ yy115: yy116: YYDEBUG(116, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2514 "Zend/zend_language_scanner.l" +#line 2518 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); @@ -2542,7 +2542,7 @@ yy121: ++YYCURSOR; YYDEBUG(122, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2639 "Zend/zend_language_scanner.l" +#line 2643 "Zend/zend_language_scanner.l" { BEGIN(ST_IN_SCRIPTING); return '"'; @@ -2623,7 +2623,7 @@ yy126: yy128: YYDEBUG(128, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2536 "Zend/zend_language_scanner.l" +#line 2540 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); @@ -2756,7 +2756,7 @@ yyc_ST_END_HEREDOC: ++YYCURSOR; YYDEBUG(146, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2650 "Zend/zend_language_scanner.l" +#line 2654 "Zend/zend_language_scanner.l" { return 0; } #line 2762 "Zend/zend_language_scanner.c" yy147: @@ -2764,7 +2764,7 @@ yy147: ++YYCURSOR; YYDEBUG(148, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2500 "Zend/zend_language_scanner.l" +#line 2504 "Zend/zend_language_scanner.l" { YYCURSOR += CG(heredoc_len) - 1; yyleng = CG(heredoc_len); @@ -2846,7 +2846,7 @@ yyc_ST_HEREDOC: yy151: YYDEBUG(151, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2576 "Zend/zend_language_scanner.l" +#line 2580 "Zend/zend_language_scanner.l" { if (CG(literal_type) == IS_UNICODE) { return zend_scan_unicode_escape_string(zendlval, yytext, yyleng, 0, T_ENCAPSED_AND_WHITESPACE TSRMLS_CC); @@ -2906,7 +2906,7 @@ yy154: yy155: YYDEBUG(155, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2514 "Zend/zend_language_scanner.l" +#line 2518 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); @@ -3163,7 +3163,7 @@ yy172: yy174: YYDEBUG(174, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2585 "Zend/zend_language_scanner.l" +#line 2589 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); @@ -3273,7 +3273,7 @@ yy181: ++YYCURSOR; YYDEBUG(182, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2458 "Zend/zend_language_scanner.l" +#line 2462 "Zend/zend_language_scanner.l" { char *end = yytext + yyleng - 1; @@ -3849,7 +3849,7 @@ yy215: ++YYCURSOR; YYDEBUG(216, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2650 "Zend/zend_language_scanner.l" +#line 2654 "Zend/zend_language_scanner.l" { return 0; } #line 3855 "Zend/zend_language_scanner.c" yy217: @@ -4514,7 +4514,7 @@ yy273: yy274: YYDEBUG(274, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2652 "Zend/zend_language_scanner.l" +#line 2656 "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; @@ -4525,7 +4525,7 @@ yy275: ++YYCURSOR; YYDEBUG(276, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2446 "Zend/zend_language_scanner.l" +#line 2450 "Zend/zend_language_scanner.l" { BEGIN(ST_BACKQUOTE); return '`'; @@ -5309,6 +5309,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; @@ -5348,7 +5352,7 @@ yy384: return bprefix ? T_BINARY_HEREDOC : T_START_HEREDOC; } -#line 5352 "Zend/zend_language_scanner.c" +#line 5356 "Zend/zend_language_scanner.c" yy385: YYDEBUG(385, *YYCURSOR); yych = *++YYCURSOR; @@ -5392,7 +5396,7 @@ yy388: { return T_IS_NOT_IDENTICAL; } -#line 5396 "Zend/zend_language_scanner.c" +#line 5400 "Zend/zend_language_scanner.c" yy391: YYDEBUG(391, *YYCURSOR); ++YYCURSOR; @@ -5402,7 +5406,7 @@ yy391: { return T_PLUS_EQUAL; } -#line 5406 "Zend/zend_language_scanner.c" +#line 5410 "Zend/zend_language_scanner.c" yy393: YYDEBUG(393, *YYCURSOR); ++YYCURSOR; @@ -5412,7 +5416,7 @@ yy393: { return T_INC; } -#line 5416 "Zend/zend_language_scanner.c" +#line 5420 "Zend/zend_language_scanner.c" yy395: YYDEBUG(395, *YYCURSOR); yych = *++YYCURSOR; @@ -5435,7 +5439,7 @@ yy397: { return T_LIST; } -#line 5439 "Zend/zend_language_scanner.c" +#line 5443 "Zend/zend_language_scanner.c" yy399: YYDEBUG(399, *YYCURSOR); ++YYCURSOR; @@ -5446,7 +5450,7 @@ yy399: { return T_IS_EQUAL; } -#line 5450 "Zend/zend_language_scanner.c" +#line 5454 "Zend/zend_language_scanner.c" yy401: YYDEBUG(401, *YYCURSOR); ++YYCURSOR; @@ -5456,7 +5460,7 @@ yy401: { return T_DOUBLE_ARROW; } -#line 5460 "Zend/zend_language_scanner.c" +#line 5464 "Zend/zend_language_scanner.c" yy403: YYDEBUG(403, *YYCURSOR); ++YYCURSOR; @@ -5466,7 +5470,7 @@ yy403: { return T_IS_IDENTICAL; } -#line 5470 "Zend/zend_language_scanner.c" +#line 5474 "Zend/zend_language_scanner.c" yy405: YYDEBUG(405, *YYCURSOR); yych = *++YYCURSOR; @@ -5598,7 +5602,7 @@ yy420: } return T_NS_C; } -#line 5602 "Zend/zend_language_scanner.c" +#line 5606 "Zend/zend_language_scanner.c" yy424: YYDEBUG(424, *YYCURSOR); yych = *++YYCURSOR; @@ -5645,7 +5649,7 @@ yy425: zendlval->type = IS_STRING; return T_DIR; } -#line 5649 "Zend/zend_language_scanner.c" +#line 5653 "Zend/zend_language_scanner.c" yy429: YYDEBUG(429, *YYCURSOR); yych = *++YYCURSOR; @@ -5676,7 +5680,7 @@ yy431: Z_TYPE_P(zendlval) = IS_LONG; return T_LINE; } -#line 5680 "Zend/zend_language_scanner.c" +#line 5684 "Zend/zend_language_scanner.c" yy435: YYDEBUG(435, *YYCURSOR); yych = *++YYCURSOR; @@ -5760,7 +5764,7 @@ yy439: } return T_METHOD_C; } -#line 5764 "Zend/zend_language_scanner.c" +#line 5768 "Zend/zend_language_scanner.c" yy443: YYDEBUG(443, *YYCURSOR); yych = *++YYCURSOR; @@ -5826,7 +5830,7 @@ yy450: } return T_FUNC_C; } -#line 5830 "Zend/zend_language_scanner.c" +#line 5834 "Zend/zend_language_scanner.c" yy454: YYDEBUG(454, *YYCURSOR); yych = *++YYCURSOR; @@ -5856,7 +5860,7 @@ yy455: ZVAL_RT_STRING(zendlval, filename, 1); return T_FILE; } -#line 5860 "Zend/zend_language_scanner.c" +#line 5864 "Zend/zend_language_scanner.c" yy459: YYDEBUG(459, *YYCURSOR); yych = *++YYCURSOR; @@ -5901,7 +5905,7 @@ yy462: } return T_CLASS_C; } -#line 5905 "Zend/zend_language_scanner.c" +#line 5909 "Zend/zend_language_scanner.c" yy466: YYDEBUG(466, *YYCURSOR); yych = *++YYCURSOR; @@ -5967,7 +5971,7 @@ yy477: { return T_HALT_COMPILER; } -#line 5971 "Zend/zend_language_scanner.c" +#line 5975 "Zend/zend_language_scanner.c" yy479: YYDEBUG(479, *YYCURSOR); yych = *++YYCURSOR; @@ -5991,7 +5995,7 @@ yy481: { return T_USE; } -#line 5995 "Zend/zend_language_scanner.c" +#line 5999 "Zend/zend_language_scanner.c" yy483: YYDEBUG(483, *YYCURSOR); yych = *++YYCURSOR; @@ -6014,7 +6018,7 @@ yy485: { return T_UNSET; } -#line 6018 "Zend/zend_language_scanner.c" +#line 6022 "Zend/zend_language_scanner.c" yy487: YYDEBUG(487, *YYCURSOR); ++YYCURSOR; @@ -6190,7 +6194,7 @@ yy502: { return T_INT_CAST; } -#line 6194 "Zend/zend_language_scanner.c" +#line 6198 "Zend/zend_language_scanner.c" yy505: YYDEBUG(505, *YYCURSOR); yych = *++YYCURSOR; @@ -6238,7 +6242,7 @@ yy510: { return T_DOUBLE_CAST; } -#line 6242 "Zend/zend_language_scanner.c" +#line 6246 "Zend/zend_language_scanner.c" yy514: YYDEBUG(514, *YYCURSOR); yych = *++YYCURSOR; @@ -6312,7 +6316,7 @@ yy524: { return T_STRING_CAST; } -#line 6316 "Zend/zend_language_scanner.c" +#line 6320 "Zend/zend_language_scanner.c" yy528: YYDEBUG(528, *YYCURSOR); yych = *++YYCURSOR; @@ -6349,7 +6353,7 @@ yy531: { return T_ARRAY_CAST; } -#line 6353 "Zend/zend_language_scanner.c" +#line 6357 "Zend/zend_language_scanner.c" yy535: YYDEBUG(535, *YYCURSOR); yych = *++YYCURSOR; @@ -6391,7 +6395,7 @@ yy539: { return T_OBJECT_CAST; } -#line 6395 "Zend/zend_language_scanner.c" +#line 6399 "Zend/zend_language_scanner.c" yy543: YYDEBUG(543, *YYCURSOR); yych = *++YYCURSOR; @@ -6436,7 +6440,7 @@ yy548: { return T_BOOL_CAST; } -#line 6440 "Zend/zend_language_scanner.c" +#line 6444 "Zend/zend_language_scanner.c" yy551: YYDEBUG(551, *YYCURSOR); yych = *++YYCURSOR; @@ -6484,7 +6488,7 @@ yy556: { return T_BINARY_CAST; } -#line 6488 "Zend/zend_language_scanner.c" +#line 6492 "Zend/zend_language_scanner.c" yy560: YYDEBUG(560, *YYCURSOR); yych = *++YYCURSOR; @@ -6545,7 +6549,7 @@ yy566: { return T_UNICODE_CAST; } -#line 6549 "Zend/zend_language_scanner.c" +#line 6553 "Zend/zend_language_scanner.c" yy570: YYDEBUG(570, *YYCURSOR); yych = *++YYCURSOR; @@ -6572,7 +6576,7 @@ yy571: { return T_UNSET_CAST; } -#line 6576 "Zend/zend_language_scanner.c" +#line 6580 "Zend/zend_language_scanner.c" yy575: YYDEBUG(575, *YYCURSOR); yych = *++YYCURSOR; @@ -6590,7 +6594,7 @@ yy576: { return T_VAR; } -#line 6594 "Zend/zend_language_scanner.c" +#line 6598 "Zend/zend_language_scanner.c" yy578: YYDEBUG(578, *YYCURSOR); yych = *++YYCURSOR; @@ -6614,7 +6618,7 @@ yy580: { return T_NEW; } -#line 6618 "Zend/zend_language_scanner.c" +#line 6622 "Zend/zend_language_scanner.c" yy582: YYDEBUG(582, *YYCURSOR); yych = *++YYCURSOR; @@ -6657,7 +6661,7 @@ yy588: { return T_NAMESPACE; } -#line 6661 "Zend/zend_language_scanner.c" +#line 6665 "Zend/zend_language_scanner.c" yy590: YYDEBUG(590, *YYCURSOR); ++YYCURSOR; @@ -6667,7 +6671,7 @@ yy590: { return T_PAAMAYIM_NEKUDOTAYIM; } -#line 6671 "Zend/zend_language_scanner.c" +#line 6675 "Zend/zend_language_scanner.c" yy592: YYDEBUG(592, *YYCURSOR); ++YYCURSOR; @@ -6693,7 +6697,7 @@ yy594: { return T_MINUS_EQUAL; } -#line 6697 "Zend/zend_language_scanner.c" +#line 6701 "Zend/zend_language_scanner.c" yy596: YYDEBUG(596, *YYCURSOR); ++YYCURSOR; @@ -6703,7 +6707,7 @@ yy596: { return T_DEC; } -#line 6707 "Zend/zend_language_scanner.c" +#line 6711 "Zend/zend_language_scanner.c" yy598: YYDEBUG(598, *YYCURSOR); ++YYCURSOR; @@ -6714,7 +6718,7 @@ yy598: yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); return T_OBJECT_OPERATOR; } -#line 6718 "Zend/zend_language_scanner.c" +#line 6722 "Zend/zend_language_scanner.c" yy600: YYDEBUG(600, *YYCURSOR); yych = *++YYCURSOR; @@ -6763,7 +6767,7 @@ yy605: { return T_PUBLIC; } -#line 6767 "Zend/zend_language_scanner.c" +#line 6771 "Zend/zend_language_scanner.c" yy607: YYDEBUG(607, *YYCURSOR); yych = *++YYCURSOR; @@ -6822,7 +6826,7 @@ yy614: { return T_PROTECTED; } -#line 6826 "Zend/zend_language_scanner.c" +#line 6830 "Zend/zend_language_scanner.c" yy616: YYDEBUG(616, *YYCURSOR); yych = *++YYCURSOR; @@ -6856,7 +6860,7 @@ yy620: { return T_PRIVATE; } -#line 6860 "Zend/zend_language_scanner.c" +#line 6864 "Zend/zend_language_scanner.c" yy622: YYDEBUG(622, *YYCURSOR); ++YYCURSOR; @@ -6869,7 +6873,7 @@ yy622: { return T_PRINT; } -#line 6873 "Zend/zend_language_scanner.c" +#line 6877 "Zend/zend_language_scanner.c" yy624: YYDEBUG(624, *YYCURSOR); yych = *++YYCURSOR; @@ -6898,7 +6902,7 @@ yy627: { return T_GOTO; } -#line 6902 "Zend/zend_language_scanner.c" +#line 6906 "Zend/zend_language_scanner.c" yy629: YYDEBUG(629, *YYCURSOR); yych = *++YYCURSOR; @@ -6926,7 +6930,7 @@ yy632: { return T_GLOBAL; } -#line 6930 "Zend/zend_language_scanner.c" +#line 6934 "Zend/zend_language_scanner.c" yy634: YYDEBUG(634, *YYCURSOR); yych = *++YYCURSOR; @@ -6945,7 +6949,7 @@ yy636: BEGIN(ST_DOUBLE_QUOTES); return T_BINARY_DOUBLE; } -#line 6949 "Zend/zend_language_scanner.c" +#line 6953 "Zend/zend_language_scanner.c" yy637: YYDEBUG(637, *YYCURSOR); ++YYCURSOR; @@ -6982,7 +6986,7 @@ yy642: { return T_BREAK; } -#line 6986 "Zend/zend_language_scanner.c" +#line 6990 "Zend/zend_language_scanner.c" yy644: YYDEBUG(644, *YYCURSOR); ++YYCURSOR; @@ -7000,7 +7004,7 @@ yy645: zend_scan_binary_single_string(zendlval, yytext+2, yyleng-3 TSRMLS_CC); return T_CONSTANT_ENCAPSED_STRING; } -#line 7004 "Zend/zend_language_scanner.c" +#line 7008 "Zend/zend_language_scanner.c" yy647: YYDEBUG(647, *YYCURSOR); ++YYCURSOR; @@ -7080,7 +7084,7 @@ yy654: zend_scan_binary_escape_string(zendlval, yytext+2, yyleng-3, '"' TSRMLS_CC); return T_CONSTANT_ENCAPSED_STRING; } -#line 7084 "Zend/zend_language_scanner.c" +#line 7088 "Zend/zend_language_scanner.c" yy656: YYDEBUG(656, *YYCURSOR); ++YYCURSOR; @@ -7131,7 +7135,7 @@ yy663: { return T_SWITCH; } -#line 7135 "Zend/zend_language_scanner.c" +#line 7139 "Zend/zend_language_scanner.c" yy665: YYDEBUG(665, *YYCURSOR); yych = *++YYCURSOR; @@ -7159,7 +7163,7 @@ yy668: { return T_STATIC; } -#line 7163 "Zend/zend_language_scanner.c" +#line 7167 "Zend/zend_language_scanner.c" yy670: YYDEBUG(670, *YYCURSOR); yych = *++YYCURSOR; @@ -7190,7 +7194,7 @@ yy673: { return T_AS; } -#line 7194 "Zend/zend_language_scanner.c" +#line 7198 "Zend/zend_language_scanner.c" yy675: YYDEBUG(675, *YYCURSOR); yych = *++YYCURSOR; @@ -7213,7 +7217,7 @@ yy677: { return T_ARRAY; } -#line 7217 "Zend/zend_language_scanner.c" +#line 7221 "Zend/zend_language_scanner.c" yy679: YYDEBUG(679, *YYCURSOR); ++YYCURSOR; @@ -7226,7 +7230,7 @@ yy679: { return T_LOGICAL_AND; } -#line 7230 "Zend/zend_language_scanner.c" +#line 7234 "Zend/zend_language_scanner.c" yy681: YYDEBUG(681, *YYCURSOR); yych = *++YYCURSOR; @@ -7264,7 +7268,7 @@ yy686: { return T_ABSTRACT; } -#line 7268 "Zend/zend_language_scanner.c" +#line 7272 "Zend/zend_language_scanner.c" yy688: YYDEBUG(688, *YYCURSOR); yych = *++YYCURSOR; @@ -7292,7 +7296,7 @@ yy691: { return T_WHILE; } -#line 7296 "Zend/zend_language_scanner.c" +#line 7300 "Zend/zend_language_scanner.c" yy693: YYDEBUG(693, *YYCURSOR); ++YYCURSOR; @@ -7305,7 +7309,7 @@ yy693: { return T_IF; } -#line 7309 "Zend/zend_language_scanner.c" +#line 7313 "Zend/zend_language_scanner.c" yy695: YYDEBUG(695, *YYCURSOR); yych = *++YYCURSOR; @@ -7361,7 +7365,7 @@ yy700: { return T_ISSET; } -#line 7365 "Zend/zend_language_scanner.c" +#line 7369 "Zend/zend_language_scanner.c" yy702: YYDEBUG(702, *YYCURSOR); yych = *++YYCURSOR; @@ -7419,7 +7423,7 @@ yy709: { return T_INCLUDE; } -#line 7423 "Zend/zend_language_scanner.c" +#line 7427 "Zend/zend_language_scanner.c" yy710: YYDEBUG(710, *YYCURSOR); yych = *++YYCURSOR; @@ -7452,7 +7456,7 @@ yy714: { return T_INCLUDE_ONCE; } -#line 7456 "Zend/zend_language_scanner.c" +#line 7460 "Zend/zend_language_scanner.c" yy716: YYDEBUG(716, *YYCURSOR); yych = *++YYCURSOR; @@ -7490,7 +7494,7 @@ yy721: { return T_INTERFACE; } -#line 7494 "Zend/zend_language_scanner.c" +#line 7498 "Zend/zend_language_scanner.c" yy723: YYDEBUG(723, *YYCURSOR); yych = *++YYCURSOR; @@ -7533,7 +7537,7 @@ yy729: { return T_INSTANCEOF; } -#line 7537 "Zend/zend_language_scanner.c" +#line 7541 "Zend/zend_language_scanner.c" yy731: YYDEBUG(731, *YYCURSOR); yych = *++YYCURSOR; @@ -7581,7 +7585,7 @@ yy738: { return T_IMPLEMENTS; } -#line 7585 "Zend/zend_language_scanner.c" +#line 7589 "Zend/zend_language_scanner.c" yy740: YYDEBUG(740, *YYCURSOR); yych = *++YYCURSOR; @@ -7605,7 +7609,7 @@ yy742: { return T_TRY; } -#line 7609 "Zend/zend_language_scanner.c" +#line 7613 "Zend/zend_language_scanner.c" yy744: YYDEBUG(744, *YYCURSOR); yych = *++YYCURSOR; @@ -7628,7 +7632,7 @@ yy746: { return T_THROW; } -#line 7632 "Zend/zend_language_scanner.c" +#line 7636 "Zend/zend_language_scanner.c" yy748: YYDEBUG(748, *YYCURSOR); yych = *++YYCURSOR; @@ -7693,7 +7697,7 @@ yy755: { return T_REQUIRE; } -#line 7697 "Zend/zend_language_scanner.c" +#line 7701 "Zend/zend_language_scanner.c" yy756: YYDEBUG(756, *YYCURSOR); yych = *++YYCURSOR; @@ -7726,7 +7730,7 @@ yy760: { return T_REQUIRE_ONCE; } -#line 7730 "Zend/zend_language_scanner.c" +#line 7734 "Zend/zend_language_scanner.c" yy762: YYDEBUG(762, *YYCURSOR); yych = *++YYCURSOR; @@ -7749,7 +7753,7 @@ yy764: { return T_RETURN; } -#line 7753 "Zend/zend_language_scanner.c" +#line 7757 "Zend/zend_language_scanner.c" yy766: YYDEBUG(766, *YYCURSOR); yych = *++YYCURSOR; @@ -7834,7 +7838,7 @@ yy775: { return T_CONTINUE; } -#line 7838 "Zend/zend_language_scanner.c" +#line 7842 "Zend/zend_language_scanner.c" yy777: YYDEBUG(777, *YYCURSOR); ++YYCURSOR; @@ -7847,7 +7851,7 @@ yy777: { return T_CONST; } -#line 7851 "Zend/zend_language_scanner.c" +#line 7855 "Zend/zend_language_scanner.c" yy779: YYDEBUG(779, *YYCURSOR); yych = *++YYCURSOR; @@ -7876,7 +7880,7 @@ yy782: { return T_CLONE; } -#line 7880 "Zend/zend_language_scanner.c" +#line 7884 "Zend/zend_language_scanner.c" yy784: YYDEBUG(784, *YYCURSOR); yych = *++YYCURSOR; @@ -7894,7 +7898,7 @@ yy785: { return T_CLASS; } -#line 7898 "Zend/zend_language_scanner.c" +#line 7902 "Zend/zend_language_scanner.c" yy787: YYDEBUG(787, *YYCURSOR); yych = *++YYCURSOR; @@ -7918,7 +7922,7 @@ yy789: { return T_CASE; } -#line 7922 "Zend/zend_language_scanner.c" +#line 7926 "Zend/zend_language_scanner.c" yy791: YYDEBUG(791, *YYCURSOR); yych = *++YYCURSOR; @@ -7936,7 +7940,7 @@ yy792: { return T_CATCH; } -#line 7940 "Zend/zend_language_scanner.c" +#line 7944 "Zend/zend_language_scanner.c" yy794: YYDEBUG(794, *YYCURSOR); yych = *++YYCURSOR; @@ -7991,7 +7995,7 @@ yy802: { return T_FUNCTION; } -#line 7995 "Zend/zend_language_scanner.c" +#line 7999 "Zend/zend_language_scanner.c" yy804: YYDEBUG(804, *YYCURSOR); ++YYCURSOR; @@ -8019,7 +8023,7 @@ yy805: { return T_FOR; } -#line 8023 "Zend/zend_language_scanner.c" +#line 8027 "Zend/zend_language_scanner.c" yy806: YYDEBUG(806, *YYCURSOR); yych = *++YYCURSOR; @@ -8047,7 +8051,7 @@ yy809: { return T_FOREACH; } -#line 8051 "Zend/zend_language_scanner.c" +#line 8055 "Zend/zend_language_scanner.c" yy811: YYDEBUG(811, *YYCURSOR); yych = *++YYCURSOR; @@ -8070,7 +8074,7 @@ yy813: { return T_FINAL; } -#line 8074 "Zend/zend_language_scanner.c" +#line 8078 "Zend/zend_language_scanner.c" yy815: YYDEBUG(815, *YYCURSOR); yych = *++YYCURSOR; @@ -8105,7 +8109,7 @@ yy817: { return T_DO; } -#line 8109 "Zend/zend_language_scanner.c" +#line 8113 "Zend/zend_language_scanner.c" yy819: YYDEBUG(819, *YYCURSOR); ++YYCURSOR; @@ -8118,7 +8122,7 @@ yy819: { return T_EXIT; } -#line 8122 "Zend/zend_language_scanner.c" +#line 8126 "Zend/zend_language_scanner.c" yy821: YYDEBUG(821, *YYCURSOR); yych = *++YYCURSOR; @@ -8157,7 +8161,7 @@ yy826: { return T_DEFAULT; } -#line 8161 "Zend/zend_language_scanner.c" +#line 8165 "Zend/zend_language_scanner.c" yy828: YYDEBUG(828, *YYCURSOR); yych = *++YYCURSOR; @@ -8185,7 +8189,7 @@ yy831: { return T_DECLARE; } -#line 8189 "Zend/zend_language_scanner.c" +#line 8193 "Zend/zend_language_scanner.c" yy833: YYDEBUG(833, *YYCURSOR); yych = *++YYCURSOR; @@ -8269,7 +8273,7 @@ yy844: { return T_EXTENDS; } -#line 8273 "Zend/zend_language_scanner.c" +#line 8277 "Zend/zend_language_scanner.c" yy846: YYDEBUG(846, *YYCURSOR); ++YYCURSOR; @@ -8282,7 +8286,7 @@ yy846: { return T_EXIT; } -#line 8286 "Zend/zend_language_scanner.c" +#line 8290 "Zend/zend_language_scanner.c" yy848: YYDEBUG(848, *YYCURSOR); yych = *++YYCURSOR; @@ -8300,7 +8304,7 @@ yy849: { return T_EVAL; } -#line 8304 "Zend/zend_language_scanner.c" +#line 8308 "Zend/zend_language_scanner.c" yy851: YYDEBUG(851, *YYCURSOR); yych = *++YYCURSOR; @@ -8374,7 +8378,7 @@ yy860: { return T_ENDWHILE; } -#line 8378 "Zend/zend_language_scanner.c" +#line 8382 "Zend/zend_language_scanner.c" yy862: YYDEBUG(862, *YYCURSOR); yych = *++YYCURSOR; @@ -8407,7 +8411,7 @@ yy866: { return T_ENDSWITCH; } -#line 8411 "Zend/zend_language_scanner.c" +#line 8415 "Zend/zend_language_scanner.c" yy868: YYDEBUG(868, *YYCURSOR); ++YYCURSOR; @@ -8420,7 +8424,7 @@ yy868: { return T_ENDIF; } -#line 8424 "Zend/zend_language_scanner.c" +#line 8428 "Zend/zend_language_scanner.c" yy870: YYDEBUG(870, *YYCURSOR); yych = *++YYCURSOR; @@ -8453,7 +8457,7 @@ yy872: { return T_ENDFOR; } -#line 8457 "Zend/zend_language_scanner.c" +#line 8461 "Zend/zend_language_scanner.c" yy873: YYDEBUG(873, *YYCURSOR); yych = *++YYCURSOR; @@ -8481,7 +8485,7 @@ yy876: { return T_ENDFOREACH; } -#line 8485 "Zend/zend_language_scanner.c" +#line 8489 "Zend/zend_language_scanner.c" yy878: YYDEBUG(878, *YYCURSOR); yych = *++YYCURSOR; @@ -8519,7 +8523,7 @@ yy883: { return T_ENDDECLARE; } -#line 8523 "Zend/zend_language_scanner.c" +#line 8527 "Zend/zend_language_scanner.c" yy885: YYDEBUG(885, *YYCURSOR); yych = *++YYCURSOR; @@ -8542,7 +8546,7 @@ yy887: { return T_EMPTY; } -#line 8546 "Zend/zend_language_scanner.c" +#line 8550 "Zend/zend_language_scanner.c" yy889: YYDEBUG(889, *YYCURSOR); yych = *++YYCURSOR; @@ -8575,7 +8579,7 @@ yy891: { return T_ELSE; } -#line 8579 "Zend/zend_language_scanner.c" +#line 8583 "Zend/zend_language_scanner.c" yy892: YYDEBUG(892, *YYCURSOR); yych = *++YYCURSOR; @@ -8593,7 +8597,7 @@ yy893: { return T_ELSEIF; } -#line 8597 "Zend/zend_language_scanner.c" +#line 8601 "Zend/zend_language_scanner.c" yy895: YYDEBUG(895, *YYCURSOR); yych = *++YYCURSOR; @@ -8611,7 +8615,7 @@ yy896: { return T_ECHO; } -#line 8615 "Zend/zend_language_scanner.c" +#line 8619 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_LOOKING_FOR_PROPERTY: @@ -8686,9 +8690,9 @@ yy900: ++YYCURSOR; YYDEBUG(901, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2650 "Zend/zend_language_scanner.l" +#line 2654 "Zend/zend_language_scanner.l" { return 0; } -#line 8692 "Zend/zend_language_scanner.c" +#line 8696 "Zend/zend_language_scanner.c" yy902: YYDEBUG(902, *YYCURSOR); ++YYCURSOR; @@ -8705,7 +8709,7 @@ yy903: HANDLE_NEWLINES(yytext, yyleng); return T_WHITESPACE; } -#line 8709 "Zend/zend_language_scanner.c" +#line 8713 "Zend/zend_language_scanner.c" yy904: YYDEBUG(904, *YYCURSOR); ++YYCURSOR; @@ -8719,7 +8723,7 @@ yy905: yy_pop_state(TSRMLS_C); goto restart; } -#line 8723 "Zend/zend_language_scanner.c" +#line 8727 "Zend/zend_language_scanner.c" yy906: YYDEBUG(906, *YYCURSOR); ++YYCURSOR; @@ -8739,7 +8743,7 @@ yy907: } return T_STRING; } -#line 8743 "Zend/zend_language_scanner.c" +#line 8747 "Zend/zend_language_scanner.c" yy908: YYDEBUG(908, *YYCURSOR); yych = *++YYCURSOR; @@ -8764,7 +8768,7 @@ yy911: { return T_OBJECT_OPERATOR; } -#line 8768 "Zend/zend_language_scanner.c" +#line 8772 "Zend/zend_language_scanner.c" yy913: YYDEBUG(913, *YYCURSOR); ++YYCURSOR; @@ -8837,9 +8841,9 @@ yy917: ++YYCURSOR; YYDEBUG(918, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2650 "Zend/zend_language_scanner.l" +#line 2654 "Zend/zend_language_scanner.l" { return 0; } -#line 8843 "Zend/zend_language_scanner.c" +#line 8847 "Zend/zend_language_scanner.c" yy919: YYDEBUG(919, *YYCURSOR); ++YYCURSOR; @@ -8860,7 +8864,7 @@ yy920: yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); return T_STRING_VARNAME; } -#line 8864 "Zend/zend_language_scanner.c" +#line 8868 "Zend/zend_language_scanner.c" yy921: YYDEBUG(921, *YYCURSOR); ++YYCURSOR; @@ -8873,7 +8877,7 @@ yy921: yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); goto restart; } -#line 8877 "Zend/zend_language_scanner.c" +#line 8881 "Zend/zend_language_scanner.c" yy923: YYDEBUG(923, *YYCURSOR); ++YYCURSOR; @@ -8939,9 +8943,9 @@ yy927: goto yy930; YYDEBUG(928, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2650 "Zend/zend_language_scanner.l" +#line 2654 "Zend/zend_language_scanner.l" { return 0; } -#line 8945 "Zend/zend_language_scanner.c" +#line 8949 "Zend/zend_language_scanner.c" yy929: YYDEBUG(929, *YYCURSOR); ++YYCURSOR; @@ -9034,7 +9038,7 @@ yy938: ++YYCURSOR; YYDEBUG(939, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2597 "Zend/zend_language_scanner.l" +#line 2601 "Zend/zend_language_scanner.l" { char *end = yytext + yyleng - 1; @@ -9075,7 +9079,7 @@ yy938: yymore(); } } -#line 9079 "Zend/zend_language_scanner.c" +#line 9083 "Zend/zend_language_scanner.c" yy940: YYDEBUG(940, *YYCURSOR); ++YYCURSOR; @@ -9186,9 +9190,9 @@ yy946: goto yy961; YYDEBUG(947, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2650 "Zend/zend_language_scanner.l" +#line 2654 "Zend/zend_language_scanner.l" { return 0; } -#line 9192 "Zend/zend_language_scanner.c" +#line 9196 "Zend/zend_language_scanner.c" yy948: YYDEBUG(948, *YYCURSOR); ++YYCURSOR; @@ -9200,7 +9204,7 @@ yy949: { yymore(); } -#line 9204 "Zend/zend_language_scanner.c" +#line 9208 "Zend/zend_language_scanner.c" yy950: YYDEBUG(950, *YYCURSOR); yych = *++YYCURSOR; @@ -9255,7 +9259,7 @@ yy954: return T_COMMENT; } } -#line 9259 "Zend/zend_language_scanner.c" +#line 9263 "Zend/zend_language_scanner.c" yy955: YYDEBUG(955, *YYCURSOR); yych = *++YYCURSOR; @@ -9277,7 +9281,7 @@ yy956: CG(zend_lineno)++; return T_COMMENT; } -#line 9281 "Zend/zend_language_scanner.c" +#line 9285 "Zend/zend_language_scanner.c" yy959: YYDEBUG(959, *YYCURSOR); yych = *++YYCURSOR; @@ -9324,7 +9328,7 @@ yy962: yymore(); } } -#line 9328 "Zend/zend_language_scanner.c" +#line 9332 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_VAR_OFFSET: @@ -9416,9 +9420,9 @@ yy966: ++YYCURSOR; YYDEBUG(967, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2650 "Zend/zend_language_scanner.l" +#line 2654 "Zend/zend_language_scanner.l" { return 0; } -#line 9422 "Zend/zend_language_scanner.c" +#line 9426 "Zend/zend_language_scanner.c" yy968: YYDEBUG(968, *YYCURSOR); yyaccept = 0; @@ -9445,7 +9449,7 @@ yy969: } return T_NUM_STRING; } -#line 9449 "Zend/zend_language_scanner.c" +#line 9453 "Zend/zend_language_scanner.c" yy970: YYDEBUG(970, *YYCURSOR); yych = *++YYCURSOR; @@ -9470,7 +9474,7 @@ yy972: /* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */ return yytext[0]; } -#line 9474 "Zend/zend_language_scanner.c" +#line 9478 "Zend/zend_language_scanner.c" yy973: YYDEBUG(973, *YYCURSOR); ++YYCURSOR; @@ -9481,7 +9485,7 @@ yy973: yy_pop_state(TSRMLS_C); return ']'; } -#line 9485 "Zend/zend_language_scanner.c" +#line 9489 "Zend/zend_language_scanner.c" yy975: YYDEBUG(975, *YYCURSOR); yych = *++YYCURSOR; @@ -9499,7 +9503,7 @@ yy976: ZVAL_EMPTY_TEXT(zendlval); /* Empty since it won't be used */ return T_ENCAPSED_AND_WHITESPACE; } -#line 9503 "Zend/zend_language_scanner.c" +#line 9507 "Zend/zend_language_scanner.c" yy978: YYDEBUG(978, *YYCURSOR); ++YYCURSOR; @@ -9515,18 +9519,18 @@ yy979: } return T_STRING; } -#line 9519 "Zend/zend_language_scanner.c" +#line 9523 "Zend/zend_language_scanner.c" yy980: YYDEBUG(980, *YYCURSOR); ++YYCURSOR; YYDEBUG(981, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2652 "Zend/zend_language_scanner.l" +#line 2656 "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 9530 "Zend/zend_language_scanner.c" +#line 9534 "Zend/zend_language_scanner.c" yy982: YYDEBUG(982, *YYCURSOR); ++YYCURSOR; @@ -9572,7 +9576,7 @@ yy986: } return T_VARIABLE; } -#line 9576 "Zend/zend_language_scanner.c" +#line 9580 "Zend/zend_language_scanner.c" yy987: YYDEBUG(987, *YYCURSOR); ++YYCURSOR; @@ -9611,7 +9615,7 @@ yy993: } return T_NUM_STRING; } -#line 9615 "Zend/zend_language_scanner.c" +#line 9619 "Zend/zend_language_scanner.c" yy994: YYDEBUG(994, *YYCURSOR); ++YYCURSOR; @@ -9624,6 +9628,6 @@ yy994: goto yy993; } } -#line 2657 "Zend/zend_language_scanner.l" +#line 2661 "Zend/zend_language_scanner.l" } diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index f59b9f6b82..02d197c3d9 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -2402,6 +2402,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 3007edd0cf..5c7f7907d5 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:24:36 2009 */ +/* Generated by re2c 0.13.5 on Thu Mar 26 15:38:15 2009 */ #line 3 "Zend/zend_language_scanner_defs.h" enum YYCONDTYPE {