diff options
author | Nikita Popov <nikic@php.net> | 2015-07-09 22:59:31 +0200 |
---|---|---|
committer | Nikita Popov <nikic@php.net> | 2015-07-09 23:02:21 +0200 |
commit | a49ce7bb91bec02d6f26b3118404371df23242fe (patch) | |
tree | a6b240dd25820ccd6f1b2109a19814f2bf34f488 | |
parent | fc5c7e633b35f76df405471b119984fbf6354b41 (diff) | |
download | php-git-a49ce7bb91bec02d6f26b3118404371df23242fe.tar.gz |
Don't return T_ERROR from token_get_all()
This turned out to be rather inconvenient after all. Instead just
return the same output we did on PHP 5. If people want to have an
error, use TOKEN_PARSE.
-rw-r--r-- | Zend/zend_compile.c | 4 | ||||
-rw-r--r-- | Zend/zend_language_scanner.c | 390 | ||||
-rw-r--r-- | Zend/zend_language_scanner.l | 22 | ||||
-rw-r--r-- | ext/tokenizer/tests/parse_errors.phpt | 10 | ||||
-rw-r--r-- | ext/tokenizer/tokenizer.c | 6 | ||||
-rw-r--r-- | ext/tokenizer/tokenizer_data.c | 2 | ||||
-rwxr-xr-x | ext/tokenizer/tokenizer_data_gen.sh | 4 |
7 files changed, 212 insertions, 226 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 4ae27e5a3f..d4b2767940 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1536,6 +1536,10 @@ int zendlex(zend_parser_stack_elem *elem) /* {{{ */ again: ZVAL_UNDEF(&zv); retval = lex_scan(&zv); + if (EG(exception)) { + return T_ERROR; + } + switch (retval) { case T_COMMENT: case T_DOC_COMMENT: diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c index 4768495a84..a73cf88356 100644 --- a/Zend/zend_language_scanner.c +++ b/Zend/zend_language_scanner.c @@ -1361,7 +1361,7 @@ yyc_ST_BACKQUOTE: yy19: YYDEBUG(19, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2226 "Zend/zend_language_scanner.l" +#line 2222 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { RETURN_TOKEN(END); @@ -1399,12 +1399,10 @@ yy19: yyleng = YYCURSOR - SCNG(yy_text); - if (zend_scan_escape_string(zendlval, yytext, yyleng, '`') == FAILURE) { - RETURN_TOKEN(T_ERROR); - } + zend_scan_escape_string(zendlval, yytext, yyleng, '`'); RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); } -#line 1408 "Zend/zend_language_scanner.c" +#line 1406 "Zend/zend_language_scanner.c" yy20: YYDEBUG(20, *YYCURSOR); yych = *++YYCURSOR; @@ -1415,12 +1413,12 @@ yy21: ++YYCURSOR; YYDEBUG(22, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2168 "Zend/zend_language_scanner.l" +#line 2166 "Zend/zend_language_scanner.l" { BEGIN(ST_IN_SCRIPTING); RETURN_TOKEN('`'); } -#line 1424 "Zend/zend_language_scanner.c" +#line 1422 "Zend/zend_language_scanner.c" yy23: YYDEBUG(23, *YYCURSOR); yych = *++YYCURSOR; @@ -1430,14 +1428,14 @@ yy24: ++YYCURSOR; YYDEBUG(25, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2155 "Zend/zend_language_scanner.l" +#line 2153 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (zend_long) '{'; yy_push_state(ST_IN_SCRIPTING); yyless(1); RETURN_TOKEN(T_CURLY_OPEN); } -#line 1441 "Zend/zend_language_scanner.c" +#line 1439 "Zend/zend_language_scanner.c" yy26: YYDEBUG(26, *YYCURSOR); yyaccept = 0; @@ -1458,7 +1456,7 @@ yy28: zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 1462 "Zend/zend_language_scanner.c" +#line 1460 "Zend/zend_language_scanner.c" yy29: YYDEBUG(29, *YYCURSOR); ++YYCURSOR; @@ -1469,7 +1467,7 @@ yy29: yy_push_state(ST_LOOKING_FOR_VARNAME); RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES); } -#line 1473 "Zend/zend_language_scanner.c" +#line 1471 "Zend/zend_language_scanner.c" yy31: YYDEBUG(31, *YYCURSOR); yych = *++YYCURSOR; @@ -1490,7 +1488,7 @@ yy33: zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 1494 "Zend/zend_language_scanner.c" +#line 1492 "Zend/zend_language_scanner.c" yy35: YYDEBUG(35, *YYCURSOR); yych = *++YYCURSOR; @@ -1515,7 +1513,7 @@ yy36: zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 1519 "Zend/zend_language_scanner.c" +#line 1517 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_DOUBLE_QUOTES: @@ -1583,7 +1581,7 @@ yy40: yy41: YYDEBUG(41, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2174 "Zend/zend_language_scanner.l" +#line 2172 "Zend/zend_language_scanner.l" { if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) { YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1; @@ -1629,12 +1627,10 @@ yy41: double_quotes_scan_done: yyleng = YYCURSOR - SCNG(yy_text); - if (zend_scan_escape_string(zendlval, yytext, yyleng, '"') == FAILURE) { - RETURN_TOKEN(T_ERROR); - } + zend_scan_escape_string(zendlval, yytext, yyleng, '"'); RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); } -#line 1638 "Zend/zend_language_scanner.c" +#line 1634 "Zend/zend_language_scanner.c" yy42: YYDEBUG(42, *YYCURSOR); yych = *++YYCURSOR; @@ -1645,12 +1641,12 @@ yy43: ++YYCURSOR; YYDEBUG(44, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2163 "Zend/zend_language_scanner.l" +#line 2161 "Zend/zend_language_scanner.l" { BEGIN(ST_IN_SCRIPTING); RETURN_TOKEN('"'); } -#line 1654 "Zend/zend_language_scanner.c" +#line 1650 "Zend/zend_language_scanner.c" yy45: YYDEBUG(45, *YYCURSOR); yych = *++YYCURSOR; @@ -1660,14 +1656,14 @@ yy46: ++YYCURSOR; YYDEBUG(47, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2155 "Zend/zend_language_scanner.l" +#line 2153 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (zend_long) '{'; yy_push_state(ST_IN_SCRIPTING); yyless(1); RETURN_TOKEN(T_CURLY_OPEN); } -#line 1671 "Zend/zend_language_scanner.c" +#line 1667 "Zend/zend_language_scanner.c" yy48: YYDEBUG(48, *YYCURSOR); yyaccept = 0; @@ -1688,7 +1684,7 @@ yy50: zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 1692 "Zend/zend_language_scanner.c" +#line 1688 "Zend/zend_language_scanner.c" yy51: YYDEBUG(51, *YYCURSOR); ++YYCURSOR; @@ -1699,7 +1695,7 @@ yy51: yy_push_state(ST_LOOKING_FOR_VARNAME); RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES); } -#line 1703 "Zend/zend_language_scanner.c" +#line 1699 "Zend/zend_language_scanner.c" yy53: YYDEBUG(53, *YYCURSOR); yych = *++YYCURSOR; @@ -1720,7 +1716,7 @@ yy55: zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 1724 "Zend/zend_language_scanner.c" +#line 1720 "Zend/zend_language_scanner.c" yy57: YYDEBUG(57, *YYCURSOR); yych = *++YYCURSOR; @@ -1745,7 +1741,7 @@ yy58: zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 1749 "Zend/zend_language_scanner.c" +#line 1745 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_END_HEREDOC: @@ -1756,7 +1752,7 @@ yyc_ST_END_HEREDOC: ++YYCURSOR; YYDEBUG(63, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2141 "Zend/zend_language_scanner.l" +#line 2139 "Zend/zend_language_scanner.l" { zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack)); @@ -1769,7 +1765,7 @@ yyc_ST_END_HEREDOC: BEGIN(ST_IN_SCRIPTING); RETURN_TOKEN(T_END_HEREDOC); } -#line 1773 "Zend/zend_language_scanner.c" +#line 1769 "Zend/zend_language_scanner.c" /* *********************************** */ yyc_ST_HEREDOC: { @@ -1831,7 +1827,7 @@ yy66: yy67: YYDEBUG(67, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2270 "Zend/zend_language_scanner.l" +#line 2264 "Zend/zend_language_scanner.l" { int newline = 0; @@ -1901,12 +1897,10 @@ yy67: heredoc_scan_done: yyleng = YYCURSOR - SCNG(yy_text); - if (zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0) == FAILURE) { - RETURN_TOKEN(T_ERROR); - } + zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0); RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); } -#line 1910 "Zend/zend_language_scanner.c" +#line 1904 "Zend/zend_language_scanner.c" yy68: YYDEBUG(68, *YYCURSOR); yych = *++YYCURSOR; @@ -1921,14 +1915,14 @@ yy70: ++YYCURSOR; YYDEBUG(71, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2155 "Zend/zend_language_scanner.l" +#line 2153 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (zend_long) '{'; yy_push_state(ST_IN_SCRIPTING); yyless(1); RETURN_TOKEN(T_CURLY_OPEN); } -#line 1932 "Zend/zend_language_scanner.c" +#line 1926 "Zend/zend_language_scanner.c" yy72: YYDEBUG(72, *YYCURSOR); yyaccept = 0; @@ -1949,7 +1943,7 @@ yy74: zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 1953 "Zend/zend_language_scanner.c" +#line 1947 "Zend/zend_language_scanner.c" yy75: YYDEBUG(75, *YYCURSOR); ++YYCURSOR; @@ -1960,7 +1954,7 @@ yy75: yy_push_state(ST_LOOKING_FOR_VARNAME); RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES); } -#line 1964 "Zend/zend_language_scanner.c" +#line 1958 "Zend/zend_language_scanner.c" yy77: YYDEBUG(77, *YYCURSOR); yych = *++YYCURSOR; @@ -1981,7 +1975,7 @@ yy79: zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 1985 "Zend/zend_language_scanner.c" +#line 1979 "Zend/zend_language_scanner.c" yy81: YYDEBUG(81, *YYCURSOR); yych = *++YYCURSOR; @@ -2006,7 +2000,7 @@ yy82: zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 2010 "Zend/zend_language_scanner.c" +#line 2004 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_IN_SCRIPTING: @@ -2194,7 +2188,7 @@ yy87: zend_copy_value(zendlval, yytext, yyleng); RETURN_TOKEN(T_STRING); } -#line 2198 "Zend/zend_language_scanner.c" +#line 2192 "Zend/zend_language_scanner.c" yy88: YYDEBUG(88, *YYCURSOR); yych = *++YYCURSOR; @@ -2430,7 +2424,7 @@ yy102: { RETURN_TOKEN(yytext[0]); } -#line 2434 "Zend/zend_language_scanner.c" +#line 2428 "Zend/zend_language_scanner.c" yy103: YYDEBUG(103, *YYCURSOR); ++YYCURSOR; @@ -2444,7 +2438,7 @@ yy104: HANDLE_NEWLINES(yytext, yyleng); RETURN_TOKEN(T_WHITESPACE); } -#line 2448 "Zend/zend_language_scanner.c" +#line 2442 "Zend/zend_language_scanner.c" yy105: YYDEBUG(105, *YYCURSOR); yych = *++YYCURSOR; @@ -2459,7 +2453,7 @@ yy106: { RETURN_TOKEN(T_NS_SEPARATOR); } -#line 2463 "Zend/zend_language_scanner.c" +#line 2457 "Zend/zend_language_scanner.c" yy108: YYDEBUG(108, *YYCURSOR); yyaccept = 1; @@ -2693,7 +2687,7 @@ yy131: yy_push_state(ST_IN_SCRIPTING); RETURN_TOKEN('{'); } -#line 2697 "Zend/zend_language_scanner.c" +#line 2691 "Zend/zend_language_scanner.c" yy133: YYDEBUG(133, *YYCURSOR); ++YYCURSOR; @@ -2707,7 +2701,7 @@ yy133: } RETURN_TOKEN('}'); } -#line 2711 "Zend/zend_language_scanner.c" +#line 2705 "Zend/zend_language_scanner.c" yy135: YYDEBUG(135, *YYCURSOR); yyaccept = 2; @@ -2747,7 +2741,7 @@ yy136: if (end != yytext + yyleng) { zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", 0); ZVAL_UNDEF(zendlval); - RETURN_TOKEN(T_ERROR); + RETURN_TOKEN(T_LNUMBER); } } else { errno = 0; @@ -2765,7 +2759,7 @@ yy136: zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", 0); ZVAL_UNDEF(zendlval); - RETURN_TOKEN(T_ERROR); + RETURN_TOKEN(T_DNUMBER); } ZEND_ASSERT(!errno); RETURN_TOKEN(T_DNUMBER); @@ -2774,13 +2768,13 @@ yy136: if (end != yytext + yyleng) { zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", 0); ZVAL_UNDEF(zendlval); - RETURN_TOKEN(T_ERROR); + RETURN_TOKEN(T_DNUMBER); } } ZEND_ASSERT(!errno); RETURN_TOKEN(T_LNUMBER); } -#line 2784 "Zend/zend_language_scanner.c" +#line 2778 "Zend/zend_language_scanner.c" yy137: YYDEBUG(137, *YYCURSOR); yyaccept = 2; @@ -2837,7 +2831,7 @@ yy140: RETURN_TOKEN(T_COMMENT); } -#line 2841 "Zend/zend_language_scanner.c" +#line 2835 "Zend/zend_language_scanner.c" yy141: YYDEBUG(141, *YYCURSOR); ++YYCURSOR; @@ -2912,7 +2906,7 @@ yy142: } RETURN_TOKEN(T_CONSTANT_ENCAPSED_STRING); } -#line 2916 "Zend/zend_language_scanner.c" +#line 2910 "Zend/zend_language_scanner.c" yy143: YYDEBUG(143, *YYCURSOR); ++YYCURSOR; @@ -2927,9 +2921,7 @@ yy144: switch (*YYCURSOR++) { case '"': yyleng = YYCURSOR - SCNG(yy_text); - if (zend_scan_escape_string(zendlval, yytext+bprefix+1, yyleng-bprefix-2, '"') == FAILURE) { - RETURN_TOKEN(T_ERROR); - } + zend_scan_escape_string(zendlval, yytext+bprefix+1, yyleng-bprefix-2, '"'); RETURN_TOKEN(T_CONSTANT_ENCAPSED_STRING); case '$': if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') { @@ -2962,24 +2954,24 @@ yy144: BEGIN(ST_DOUBLE_QUOTES); RETURN_TOKEN('"'); } -#line 2966 "Zend/zend_language_scanner.c" +#line 2958 "Zend/zend_language_scanner.c" yy145: YYDEBUG(145, *YYCURSOR); ++YYCURSOR; YYDEBUG(146, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2135 "Zend/zend_language_scanner.l" +#line 2133 "Zend/zend_language_scanner.l" { BEGIN(ST_BACKQUOTE); RETURN_TOKEN('`'); } -#line 2977 "Zend/zend_language_scanner.c" +#line 2969 "Zend/zend_language_scanner.c" yy147: YYDEBUG(147, *YYCURSOR); ++YYCURSOR; YYDEBUG(148, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2403 "Zend/zend_language_scanner.l" +#line 2395 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { RETURN_TOKEN(END); @@ -2988,7 +2980,7 @@ yy147: zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); goto restart; } -#line 2992 "Zend/zend_language_scanner.c" +#line 2984 "Zend/zend_language_scanner.c" yy149: YYDEBUG(149, *YYCURSOR); ++YYCURSOR; @@ -3024,7 +3016,7 @@ yy153: ZEND_ASSERT(end == yytext + yyleng); RETURN_TOKEN(T_DNUMBER); } -#line 3028 "Zend/zend_language_scanner.c" +#line 3020 "Zend/zend_language_scanner.c" yy154: YYDEBUG(154, *YYCURSOR); yyaccept = 2; @@ -3148,7 +3140,7 @@ yy163: RETURN_TOKEN(T_DNUMBER); } } -#line 3152 "Zend/zend_language_scanner.c" +#line 3144 "Zend/zend_language_scanner.c" yy166: YYDEBUG(166, *YYCURSOR); ++YYCURSOR; @@ -3188,7 +3180,7 @@ yy166: RETURN_TOKEN(T_DNUMBER); } } -#line 3192 "Zend/zend_language_scanner.c" +#line 3184 "Zend/zend_language_scanner.c" yy169: YYDEBUG(169, *YYCURSOR); ++YYCURSOR; @@ -3218,7 +3210,7 @@ yy171: zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 3222 "Zend/zend_language_scanner.c" +#line 3214 "Zend/zend_language_scanner.c" yy172: YYDEBUG(172, *YYCURSOR); yych = *++YYCURSOR; @@ -3236,7 +3228,7 @@ yy173: { RETURN_TOKEN(T_LOGICAL_XOR); } -#line 3240 "Zend/zend_language_scanner.c" +#line 3232 "Zend/zend_language_scanner.c" yy175: YYDEBUG(175, *YYCURSOR); ++YYCURSOR; @@ -3249,7 +3241,7 @@ yy175: { RETURN_TOKEN(T_LOGICAL_OR); } -#line 3253 "Zend/zend_language_scanner.c" +#line 3245 "Zend/zend_language_scanner.c" yy177: YYDEBUG(177, *YYCURSOR); ++YYCURSOR; @@ -3259,7 +3251,7 @@ yy177: { RETURN_TOKEN(T_XOR_EQUAL); } -#line 3263 "Zend/zend_language_scanner.c" +#line 3255 "Zend/zend_language_scanner.c" yy179: YYDEBUG(179, *YYCURSOR); ++YYCURSOR; @@ -3269,7 +3261,7 @@ yy179: { RETURN_TOKEN(T_BOOLEAN_OR); } -#line 3273 "Zend/zend_language_scanner.c" +#line 3265 "Zend/zend_language_scanner.c" yy181: YYDEBUG(181, *YYCURSOR); ++YYCURSOR; @@ -3279,7 +3271,7 @@ yy181: { RETURN_TOKEN(T_OR_EQUAL); } -#line 3283 "Zend/zend_language_scanner.c" +#line 3275 "Zend/zend_language_scanner.c" yy183: YYDEBUG(183, *YYCURSOR); ++YYCURSOR; @@ -3289,7 +3281,7 @@ yy183: { RETURN_TOKEN(T_BOOLEAN_AND); } -#line 3293 "Zend/zend_language_scanner.c" +#line 3285 "Zend/zend_language_scanner.c" yy185: YYDEBUG(185, *YYCURSOR); ++YYCURSOR; @@ -3299,7 +3291,7 @@ yy185: { RETURN_TOKEN(T_AND_EQUAL); } -#line 3303 "Zend/zend_language_scanner.c" +#line 3295 "Zend/zend_language_scanner.c" yy187: YYDEBUG(187, *YYCURSOR); ++YYCURSOR; @@ -3309,7 +3301,7 @@ yy187: { RETURN_TOKEN(T_MOD_EQUAL); } -#line 3313 "Zend/zend_language_scanner.c" +#line 3305 "Zend/zend_language_scanner.c" yy189: YYDEBUG(189, *YYCURSOR); yyaccept = 4; @@ -3351,7 +3343,7 @@ yy190: RETURN_TOKEN(T_COMMENT); } -#line 3355 "Zend/zend_language_scanner.c" +#line 3347 "Zend/zend_language_scanner.c" yy191: YYDEBUG(191, *YYCURSOR); yych = *++YYCURSOR; @@ -3365,7 +3357,7 @@ yy192: { RETURN_TOKEN(T_DIV_EQUAL); } -#line 3369 "Zend/zend_language_scanner.c" +#line 3361 "Zend/zend_language_scanner.c" yy194: YYDEBUG(194, *YYCURSOR); yych = *++YYCURSOR; @@ -3393,7 +3385,7 @@ yy197: { RETURN_TOKEN(T_POW); } -#line 3397 "Zend/zend_language_scanner.c" +#line 3389 "Zend/zend_language_scanner.c" yy199: YYDEBUG(199, *YYCURSOR); ++YYCURSOR; @@ -3403,7 +3395,7 @@ yy199: { RETURN_TOKEN(T_MUL_EQUAL); } -#line 3407 "Zend/zend_language_scanner.c" +#line 3399 "Zend/zend_language_scanner.c" yy201: YYDEBUG(201, *YYCURSOR); ++YYCURSOR; @@ -3413,7 +3405,7 @@ yy201: { RETURN_TOKEN(T_POW_EQUAL); } -#line 3417 "Zend/zend_language_scanner.c" +#line 3409 "Zend/zend_language_scanner.c" yy203: YYDEBUG(203, *YYCURSOR); ++YYCURSOR; @@ -3424,7 +3416,7 @@ yy203: { RETURN_TOKEN(T_SR); } -#line 3428 "Zend/zend_language_scanner.c" +#line 3420 "Zend/zend_language_scanner.c" yy205: YYDEBUG(205, *YYCURSOR); ++YYCURSOR; @@ -3434,7 +3426,7 @@ yy205: { RETURN_TOKEN(T_IS_GREATER_OR_EQUAL); } -#line 3438 "Zend/zend_language_scanner.c" +#line 3430 "Zend/zend_language_scanner.c" yy207: YYDEBUG(207, *YYCURSOR); ++YYCURSOR; @@ -3444,7 +3436,7 @@ yy207: { RETURN_TOKEN(T_SR_EQUAL); } -#line 3448 "Zend/zend_language_scanner.c" +#line 3440 "Zend/zend_language_scanner.c" yy209: YYDEBUG(209, *YYCURSOR); yyaccept = 5; @@ -3459,7 +3451,7 @@ yy210: { RETURN_TOKEN(T_SL); } -#line 3463 "Zend/zend_language_scanner.c" +#line 3455 "Zend/zend_language_scanner.c" yy211: YYDEBUG(211, *YYCURSOR); ++YYCURSOR; @@ -3470,7 +3462,7 @@ yy211: { RETURN_TOKEN(T_IS_SMALLER_OR_EQUAL); } -#line 3474 "Zend/zend_language_scanner.c" +#line 3466 "Zend/zend_language_scanner.c" yy213: YYDEBUG(213, *YYCURSOR); ++YYCURSOR; @@ -3481,7 +3473,7 @@ yy214: { RETURN_TOKEN(T_IS_NOT_EQUAL); } -#line 3485 "Zend/zend_language_scanner.c" +#line 3477 "Zend/zend_language_scanner.c" yy215: YYDEBUG(215, *YYCURSOR); ++YYCURSOR; @@ -3491,7 +3483,7 @@ yy215: { RETURN_TOKEN(T_SPACESHIP); } -#line 3495 "Zend/zend_language_scanner.c" +#line 3487 "Zend/zend_language_scanner.c" yy217: YYDEBUG(217, *YYCURSOR); ++YYCURSOR; @@ -3501,7 +3493,7 @@ yy217: { RETURN_TOKEN(T_SL_EQUAL); } -#line 3505 "Zend/zend_language_scanner.c" +#line 3497 "Zend/zend_language_scanner.c" yy219: YYDEBUG(219, *YYCURSOR); ++YYCURSOR; @@ -3606,7 +3598,7 @@ yy228: yy229: YYDEBUG(229, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2087 "Zend/zend_language_scanner.l" +#line 2085 "Zend/zend_language_scanner.l" { char *s; int bprefix = (yytext[0] != '<') ? 1 : 0; @@ -3653,7 +3645,7 @@ yy229: RETURN_TOKEN(T_START_HEREDOC); } -#line 3657 "Zend/zend_language_scanner.c" +#line 3649 "Zend/zend_language_scanner.c" yy230: YYDEBUG(230, *YYCURSOR); yych = *++YYCURSOR; @@ -3697,7 +3689,7 @@ yy233: { RETURN_TOKEN(T_IS_NOT_IDENTICAL); } -#line 3701 "Zend/zend_language_scanner.c" +#line 3693 "Zend/zend_language_scanner.c" yy236: YYDEBUG(236, *YYCURSOR); ++YYCURSOR; @@ -3707,7 +3699,7 @@ yy236: { RETURN_TOKEN(T_PLUS_EQUAL); } -#line 3711 "Zend/zend_language_scanner.c" +#line 3703 "Zend/zend_language_scanner.c" yy238: YYDEBUG(238, *YYCURSOR); ++YYCURSOR; @@ -3717,7 +3709,7 @@ yy238: { RETURN_TOKEN(T_INC); } -#line 3721 "Zend/zend_language_scanner.c" +#line 3713 "Zend/zend_language_scanner.c" yy240: YYDEBUG(240, *YYCURSOR); yych = *++YYCURSOR; @@ -3740,7 +3732,7 @@ yy242: { RETURN_TOKEN(T_LIST); } -#line 3744 "Zend/zend_language_scanner.c" +#line 3736 "Zend/zend_language_scanner.c" yy244: YYDEBUG(244, *YYCURSOR); ++YYCURSOR; @@ -3751,7 +3743,7 @@ yy244: { RETURN_TOKEN(T_IS_EQUAL); } -#line 3755 "Zend/zend_language_scanner.c" +#line 3747 "Zend/zend_language_scanner.c" yy246: YYDEBUG(246, *YYCURSOR); ++YYCURSOR; @@ -3761,7 +3753,7 @@ yy246: { RETURN_TOKEN(T_DOUBLE_ARROW); } -#line 3765 "Zend/zend_language_scanner.c" +#line 3757 "Zend/zend_language_scanner.c" yy248: YYDEBUG(248, *YYCURSOR); ++YYCURSOR; @@ -3771,7 +3763,7 @@ yy248: { RETURN_TOKEN(T_IS_IDENTICAL); } -#line 3775 "Zend/zend_language_scanner.c" +#line 3767 "Zend/zend_language_scanner.c" yy250: YYDEBUG(250, *YYCURSOR); yych = *++YYCURSOR; @@ -3905,7 +3897,7 @@ yy266: { RETURN_TOKEN(T_NS_C); } -#line 3909 "Zend/zend_language_scanner.c" +#line 3901 "Zend/zend_language_scanner.c" yy270: YYDEBUG(270, *YYCURSOR); yych = *++YYCURSOR; @@ -3929,7 +3921,7 @@ yy271: { RETURN_TOKEN(T_DIR); } -#line 3933 "Zend/zend_language_scanner.c" +#line 3925 "Zend/zend_language_scanner.c" yy275: YYDEBUG(275, *YYCURSOR); yych = *++YYCURSOR; @@ -3958,7 +3950,7 @@ yy277: { RETURN_TOKEN(T_LINE); } -#line 3962 "Zend/zend_language_scanner.c" +#line 3954 "Zend/zend_language_scanner.c" yy281: YYDEBUG(281, *YYCURSOR); yych = *++YYCURSOR; @@ -3997,7 +3989,7 @@ yy285: { RETURN_TOKEN(T_METHOD_C); } -#line 4001 "Zend/zend_language_scanner.c" +#line 3993 "Zend/zend_language_scanner.c" yy289: YYDEBUG(289, *YYCURSOR); yych = *++YYCURSOR; @@ -4052,7 +4044,7 @@ yy296: { RETURN_TOKEN(T_FUNC_C); } -#line 4056 "Zend/zend_language_scanner.c" +#line 4048 "Zend/zend_language_scanner.c" yy300: YYDEBUG(300, *YYCURSOR); yych = *++YYCURSOR; @@ -4076,7 +4068,7 @@ yy301: { RETURN_TOKEN(T_FILE); } -#line 4080 "Zend/zend_language_scanner.c" +#line 4072 "Zend/zend_language_scanner.c" yy305: YYDEBUG(305, *YYCURSOR); yych = *++YYCURSOR; @@ -4110,7 +4102,7 @@ yy308: { RETURN_TOKEN(T_TRAIT_C); } -#line 4114 "Zend/zend_language_scanner.c" +#line 4106 "Zend/zend_language_scanner.c" yy312: YYDEBUG(312, *YYCURSOR); yych = *++YYCURSOR; @@ -4144,7 +4136,7 @@ yy315: { RETURN_TOKEN(T_CLASS_C); } -#line 4148 "Zend/zend_language_scanner.c" +#line 4140 "Zend/zend_language_scanner.c" yy319: YYDEBUG(319, *YYCURSOR); yych = *++YYCURSOR; @@ -4210,7 +4202,7 @@ yy330: { RETURN_TOKEN(T_HALT_COMPILER); } -#line 4214 "Zend/zend_language_scanner.c" +#line 4206 "Zend/zend_language_scanner.c" yy332: YYDEBUG(332, *YYCURSOR); yych = *++YYCURSOR; @@ -4234,7 +4226,7 @@ yy334: { RETURN_TOKEN(T_USE); } -#line 4238 "Zend/zend_language_scanner.c" +#line 4230 "Zend/zend_language_scanner.c" yy336: YYDEBUG(336, *YYCURSOR); yych = *++YYCURSOR; @@ -4257,7 +4249,7 @@ yy338: { RETURN_TOKEN(T_UNSET); } -#line 4261 "Zend/zend_language_scanner.c" +#line 4253 "Zend/zend_language_scanner.c" yy340: YYDEBUG(340, *YYCURSOR); ++YYCURSOR; @@ -4433,7 +4425,7 @@ yy355: { RETURN_TOKEN(T_INT_CAST); } -#line 4437 "Zend/zend_language_scanner.c" +#line 4429 "Zend/zend_language_scanner.c" yy358: YYDEBUG(358, *YYCURSOR); yych = *++YYCURSOR; @@ -4481,7 +4473,7 @@ yy363: { RETURN_TOKEN(T_DOUBLE_CAST); } -#line 4485 "Zend/zend_language_scanner.c" +#line 4477 "Zend/zend_language_scanner.c" yy367: YYDEBUG(367, *YYCURSOR); yych = *++YYCURSOR; @@ -4555,7 +4547,7 @@ yy377: { RETURN_TOKEN(T_STRING_CAST); } -#line 4559 "Zend/zend_language_scanner.c" +#line 4551 "Zend/zend_language_scanner.c" yy381: YYDEBUG(381, *YYCURSOR); yych = *++YYCURSOR; @@ -4592,7 +4584,7 @@ yy384: { RETURN_TOKEN(T_ARRAY_CAST); } -#line 4596 "Zend/zend_language_scanner.c" +#line 4588 "Zend/zend_language_scanner.c" yy388: YYDEBUG(388, *YYCURSOR); yych = *++YYCURSOR; @@ -4634,7 +4626,7 @@ yy392: { RETURN_TOKEN(T_OBJECT_CAST); } -#line 4638 "Zend/zend_language_scanner.c" +#line 4630 "Zend/zend_language_scanner.c" yy396: YYDEBUG(396, *YYCURSOR); yych = *++YYCURSOR; @@ -4679,7 +4671,7 @@ yy401: { RETURN_TOKEN(T_BOOL_CAST); } -#line 4683 "Zend/zend_language_scanner.c" +#line 4675 "Zend/zend_language_scanner.c" yy404: YYDEBUG(404, *YYCURSOR); yych = *++YYCURSOR; @@ -4743,7 +4735,7 @@ yy412: { RETURN_TOKEN(T_UNSET_CAST); } -#line 4747 "Zend/zend_language_scanner.c" +#line 4739 "Zend/zend_language_scanner.c" yy416: YYDEBUG(416, *YYCURSOR); yych = *++YYCURSOR; @@ -4761,7 +4753,7 @@ yy417: { RETURN_TOKEN(T_VAR); } -#line 4765 "Zend/zend_language_scanner.c" +#line 4757 "Zend/zend_language_scanner.c" yy419: YYDEBUG(419, *YYCURSOR); yych = *++YYCURSOR; @@ -4785,7 +4777,7 @@ yy421: { RETURN_TOKEN(T_NEW); } -#line 4789 "Zend/zend_language_scanner.c" +#line 4781 "Zend/zend_language_scanner.c" yy423: YYDEBUG(423, *YYCURSOR); yych = *++YYCURSOR; @@ -4828,7 +4820,7 @@ yy429: { RETURN_TOKEN(T_NAMESPACE); } -#line 4832 "Zend/zend_language_scanner.c" +#line 4824 "Zend/zend_language_scanner.c" yy431: YYDEBUG(431, *YYCURSOR); ++YYCURSOR; @@ -4842,7 +4834,7 @@ yy432: BEGIN(INITIAL); RETURN_TOKEN(T_CLOSE_TAG); /* implicit ';' at php-end tag */ } -#line 4846 "Zend/zend_language_scanner.c" +#line 4838 "Zend/zend_language_scanner.c" yy433: YYDEBUG(433, *YYCURSOR); ++YYCURSOR; @@ -4852,7 +4844,7 @@ yy433: { RETURN_TOKEN(T_COALESCE); } -#line 4856 "Zend/zend_language_scanner.c" +#line 4848 "Zend/zend_language_scanner.c" yy435: YYDEBUG(435, *YYCURSOR); yych = *++YYCURSOR; @@ -4887,7 +4879,7 @@ yy439: { RETURN_TOKEN(T_CONCAT_EQUAL); } -#line 4891 "Zend/zend_language_scanner.c" +#line 4883 "Zend/zend_language_scanner.c" yy441: YYDEBUG(441, *YYCURSOR); yych = *++YYCURSOR; @@ -4900,7 +4892,7 @@ yy441: { RETURN_TOKEN(T_ELLIPSIS); } -#line 4904 "Zend/zend_language_scanner.c" +#line 4896 "Zend/zend_language_scanner.c" yy444: YYDEBUG(444, *YYCURSOR); ++YYCURSOR; @@ -4910,7 +4902,7 @@ yy444: { RETURN_TOKEN(T_PAAMAYIM_NEKUDOTAYIM); } -#line 4914 "Zend/zend_language_scanner.c" +#line 4906 "Zend/zend_language_scanner.c" yy446: YYDEBUG(446, *YYCURSOR); ++YYCURSOR; @@ -4936,7 +4928,7 @@ yy448: { RETURN_TOKEN(T_MINUS_EQUAL); } -#line 4940 "Zend/zend_language_scanner.c" +#line 4932 "Zend/zend_language_scanner.c" yy450: YYDEBUG(450, *YYCURSOR); ++YYCURSOR; @@ -4946,7 +4938,7 @@ yy450: { RETURN_TOKEN(T_DEC); } -#line 4950 "Zend/zend_language_scanner.c" +#line 4942 "Zend/zend_language_scanner.c" yy452: YYDEBUG(452, *YYCURSOR); ++YYCURSOR; @@ -4957,7 +4949,7 @@ yy452: yy_push_state(ST_LOOKING_FOR_PROPERTY); RETURN_TOKEN(T_OBJECT_OPERATOR); } -#line 4961 "Zend/zend_language_scanner.c" +#line 4953 "Zend/zend_language_scanner.c" yy454: YYDEBUG(454, *YYCURSOR); yych = *++YYCURSOR; @@ -5006,7 +4998,7 @@ yy459: { RETURN_TOKEN(T_PUBLIC); } -#line 5010 "Zend/zend_language_scanner.c" +#line 5002 "Zend/zend_language_scanner.c" yy461: YYDEBUG(461, *YYCURSOR); yych = *++YYCURSOR; @@ -5065,7 +5057,7 @@ yy468: { RETURN_TOKEN(T_PROTECTED); } -#line 5069 "Zend/zend_language_scanner.c" +#line 5061 "Zend/zend_language_scanner.c" yy470: YYDEBUG(470, *YYCURSOR); yych = *++YYCURSOR; @@ -5099,7 +5091,7 @@ yy474: { RETURN_TOKEN(T_PRIVATE); } -#line 5103 "Zend/zend_language_scanner.c" +#line 5095 "Zend/zend_language_scanner.c" yy476: YYDEBUG(476, *YYCURSOR); ++YYCURSOR; @@ -5112,7 +5104,7 @@ yy476: { RETURN_TOKEN(T_PRINT); } -#line 5116 "Zend/zend_language_scanner.c" +#line 5108 "Zend/zend_language_scanner.c" yy478: YYDEBUG(478, *YYCURSOR); yych = *++YYCURSOR; @@ -5141,7 +5133,7 @@ yy481: { RETURN_TOKEN(T_GOTO); } -#line 5145 "Zend/zend_language_scanner.c" +#line 5137 "Zend/zend_language_scanner.c" yy483: YYDEBUG(483, *YYCURSOR); yych = *++YYCURSOR; @@ -5169,7 +5161,7 @@ yy486: { RETURN_TOKEN(T_GLOBAL); } -#line 5173 "Zend/zend_language_scanner.c" +#line 5165 "Zend/zend_language_scanner.c" yy488: YYDEBUG(488, *YYCURSOR); yych = *++YYCURSOR; @@ -5210,7 +5202,7 @@ yy494: { RETURN_TOKEN(T_BREAK); } -#line 5214 "Zend/zend_language_scanner.c" +#line 5206 "Zend/zend_language_scanner.c" yy496: YYDEBUG(496, *YYCURSOR); yych = *++YYCURSOR; @@ -5254,7 +5246,7 @@ yy502: { RETURN_TOKEN(T_SWITCH); } -#line 5258 "Zend/zend_language_scanner.c" +#line 5250 "Zend/zend_language_scanner.c" yy504: YYDEBUG(504, *YYCURSOR); yych = *++YYCURSOR; @@ -5282,7 +5274,7 @@ yy507: { RETURN_TOKEN(T_STATIC); } -#line 5286 "Zend/zend_language_scanner.c" +#line 5278 "Zend/zend_language_scanner.c" yy509: YYDEBUG(509, *YYCURSOR); yych = *++YYCURSOR; @@ -5313,7 +5305,7 @@ yy512: { RETURN_TOKEN(T_AS); } -#line 5317 "Zend/zend_language_scanner.c" +#line 5309 "Zend/zend_language_scanner.c" yy514: YYDEBUG(514, *YYCURSOR); yych = *++YYCURSOR; @@ -5336,7 +5328,7 @@ yy516: { RETURN_TOKEN(T_ARRAY); } -#line 5340 "Zend/zend_language_scanner.c" +#line 5332 "Zend/zend_language_scanner.c" yy518: YYDEBUG(518, *YYCURSOR); ++YYCURSOR; @@ -5349,7 +5341,7 @@ yy518: { RETURN_TOKEN(T_LOGICAL_AND); } -#line 5353 "Zend/zend_language_scanner.c" +#line 5345 "Zend/zend_language_scanner.c" yy520: YYDEBUG(520, *YYCURSOR); yych = *++YYCURSOR; @@ -5387,7 +5379,7 @@ yy525: { RETURN_TOKEN(T_ABSTRACT); } -#line 5391 "Zend/zend_language_scanner.c" +#line 5383 "Zend/zend_language_scanner.c" yy527: YYDEBUG(527, *YYCURSOR); yych = *++YYCURSOR; @@ -5415,7 +5407,7 @@ yy530: { RETURN_TOKEN(T_WHILE); } -#line 5419 "Zend/zend_language_scanner.c" +#line 5411 "Zend/zend_language_scanner.c" yy532: YYDEBUG(532, *YYCURSOR); ++YYCURSOR; @@ -5428,7 +5420,7 @@ yy532: { RETURN_TOKEN(T_IF); } -#line 5432 "Zend/zend_language_scanner.c" +#line 5424 "Zend/zend_language_scanner.c" yy534: YYDEBUG(534, *YYCURSOR); yych = *++YYCURSOR; @@ -5484,7 +5476,7 @@ yy539: { RETURN_TOKEN(T_ISSET); } -#line 5488 "Zend/zend_language_scanner.c" +#line 5480 "Zend/zend_language_scanner.c" yy541: YYDEBUG(541, *YYCURSOR); yych = *++YYCURSOR; @@ -5542,7 +5534,7 @@ yy548: { RETURN_TOKEN(T_INCLUDE); } -#line 5546 "Zend/zend_language_scanner.c" +#line 5538 "Zend/zend_language_scanner.c" yy549: YYDEBUG(549, *YYCURSOR); yych = *++YYCURSOR; @@ -5575,7 +5567,7 @@ yy553: { RETURN_TOKEN(T_INCLUDE_ONCE); } -#line 5579 "Zend/zend_language_scanner.c" +#line 5571 "Zend/zend_language_scanner.c" yy555: YYDEBUG(555, *YYCURSOR); yych = *++YYCURSOR; @@ -5613,7 +5605,7 @@ yy560: { RETURN_TOKEN(T_INTERFACE); } -#line 5617 "Zend/zend_language_scanner.c" +#line 5609 "Zend/zend_language_scanner.c" yy562: YYDEBUG(562, *YYCURSOR); yych = *++YYCURSOR; @@ -5667,7 +5659,7 @@ yy568: { RETURN_TOKEN(T_INSTEADOF); } -#line 5671 "Zend/zend_language_scanner.c" +#line 5663 "Zend/zend_language_scanner.c" yy570: YYDEBUG(570, *YYCURSOR); yych = *++YYCURSOR; @@ -5700,7 +5692,7 @@ yy574: { RETURN_TOKEN(T_INSTANCEOF); } -#line 5704 "Zend/zend_language_scanner.c" +#line 5696 "Zend/zend_language_scanner.c" yy576: YYDEBUG(576, *YYCURSOR); yych = *++YYCURSOR; @@ -5748,7 +5740,7 @@ yy583: { RETURN_TOKEN(T_IMPLEMENTS); } -#line 5752 "Zend/zend_language_scanner.c" +#line 5744 "Zend/zend_language_scanner.c" yy585: YYDEBUG(585, *YYCURSOR); yych = *++YYCURSOR; @@ -5780,7 +5772,7 @@ yy586: { RETURN_TOKEN(T_TRY); } -#line 5784 "Zend/zend_language_scanner.c" +#line 5776 "Zend/zend_language_scanner.c" yy589: YYDEBUG(589, *YYCURSOR); yych = *++YYCURSOR; @@ -5803,7 +5795,7 @@ yy591: { RETURN_TOKEN(T_TRAIT); } -#line 5807 "Zend/zend_language_scanner.c" +#line 5799 "Zend/zend_language_scanner.c" yy593: YYDEBUG(593, *YYCURSOR); yych = *++YYCURSOR; @@ -5826,7 +5818,7 @@ yy595: { RETURN_TOKEN(T_THROW); } -#line 5830 "Zend/zend_language_scanner.c" +#line 5822 "Zend/zend_language_scanner.c" yy597: YYDEBUG(597, *YYCURSOR); yych = *++YYCURSOR; @@ -5863,7 +5855,7 @@ yy601: { RETURN_TOKEN(T_YIELD); } -#line 5867 "Zend/zend_language_scanner.c" +#line 5859 "Zend/zend_language_scanner.c" yy602: YYDEBUG(602, *YYCURSOR); ++YYCURSOR; @@ -5909,7 +5901,7 @@ yy607: { RETURN_TOKEN(T_YIELD_FROM); } -#line 5913 "Zend/zend_language_scanner.c" +#line 5905 "Zend/zend_language_scanner.c" yy609: YYDEBUG(609, *YYCURSOR); yych = *++YYCURSOR; @@ -5974,7 +5966,7 @@ yy616: { RETURN_TOKEN(T_REQUIRE); } -#line 5978 "Zend/zend_language_scanner.c" +#line 5970 "Zend/zend_language_scanner.c" yy617: YYDEBUG(617, *YYCURSOR); yych = *++YYCURSOR; @@ -6007,7 +5999,7 @@ yy621: { RETURN_TOKEN(T_REQUIRE_ONCE); } -#line 6011 "Zend/zend_language_scanner.c" +#line 6003 "Zend/zend_language_scanner.c" yy623: YYDEBUG(623, *YYCURSOR); yych = *++YYCURSOR; @@ -6030,7 +6022,7 @@ yy625: { RETURN_TOKEN(T_RETURN); } -#line 6034 "Zend/zend_language_scanner.c" +#line 6026 "Zend/zend_language_scanner.c" yy627: YYDEBUG(627, *YYCURSOR); yych = *++YYCURSOR; @@ -6124,7 +6116,7 @@ yy636: { RETURN_TOKEN(T_CONTINUE); } -#line 6128 "Zend/zend_language_scanner.c" +#line 6120 "Zend/zend_language_scanner.c" yy638: YYDEBUG(638, *YYCURSOR); ++YYCURSOR; @@ -6137,7 +6129,7 @@ yy638: { RETURN_TOKEN(T_CONST); } -#line 6141 "Zend/zend_language_scanner.c" +#line 6133 "Zend/zend_language_scanner.c" yy640: YYDEBUG(640, *YYCURSOR); yych = *++YYCURSOR; @@ -6166,7 +6158,7 @@ yy643: { RETURN_TOKEN(T_CLONE); } -#line 6170 "Zend/zend_language_scanner.c" +#line 6162 "Zend/zend_language_scanner.c" yy645: YYDEBUG(645, *YYCURSOR); yych = *++YYCURSOR; @@ -6184,7 +6176,7 @@ yy646: { RETURN_TOKEN(T_CLASS); } -#line 6188 "Zend/zend_language_scanner.c" +#line 6180 "Zend/zend_language_scanner.c" yy648: YYDEBUG(648, *YYCURSOR); yych = *++YYCURSOR; @@ -6234,7 +6226,7 @@ yy655: { RETURN_TOKEN(T_CALLABLE); } -#line 6238 "Zend/zend_language_scanner.c" +#line 6230 "Zend/zend_language_scanner.c" yy657: YYDEBUG(657, *YYCURSOR); ++YYCURSOR; @@ -6247,7 +6239,7 @@ yy657: { RETURN_TOKEN(T_CASE); } -#line 6251 "Zend/zend_language_scanner.c" +#line 6243 "Zend/zend_language_scanner.c" yy659: YYDEBUG(659, *YYCURSOR); yych = *++YYCURSOR; @@ -6265,7 +6257,7 @@ yy660: { RETURN_TOKEN(T_CATCH); } -#line 6269 "Zend/zend_language_scanner.c" +#line 6261 "Zend/zend_language_scanner.c" yy662: YYDEBUG(662, *YYCURSOR); yych = *++YYCURSOR; @@ -6320,7 +6312,7 @@ yy670: { RETURN_TOKEN(T_FUNCTION); } -#line 6324 "Zend/zend_language_scanner.c" +#line 6316 "Zend/zend_language_scanner.c" yy672: YYDEBUG(672, *YYCURSOR); ++YYCURSOR; @@ -6348,7 +6340,7 @@ yy673: { RETURN_TOKEN(T_FOR); } -#line 6352 "Zend/zend_language_scanner.c" +#line 6344 "Zend/zend_language_scanner.c" yy674: YYDEBUG(674, *YYCURSOR); yych = *++YYCURSOR; @@ -6376,7 +6368,7 @@ yy677: { RETURN_TOKEN(T_FOREACH); } -#line 6380 "Zend/zend_language_scanner.c" +#line 6372 "Zend/zend_language_scanner.c" yy679: YYDEBUG(679, *YYCURSOR); yych = *++YYCURSOR; @@ -6414,7 +6406,7 @@ yy682: { RETURN_TOKEN(T_FINAL); } -#line 6418 "Zend/zend_language_scanner.c" +#line 6410 "Zend/zend_language_scanner.c" yy683: YYDEBUG(683, *YYCURSOR); yych = *++YYCURSOR; @@ -6432,7 +6424,7 @@ yy684: { RETURN_TOKEN(T_FINALLY); } -#line 6436 "Zend/zend_language_scanner.c" +#line 6428 "Zend/zend_language_scanner.c" yy686: YYDEBUG(686, *YYCURSOR); yych = *++YYCURSOR; @@ -6467,7 +6459,7 @@ yy688: { RETURN_TOKEN(T_DO); } -#line 6471 "Zend/zend_language_scanner.c" +#line 6463 "Zend/zend_language_scanner.c" yy690: YYDEBUG(690, *YYCURSOR); ++YYCURSOR; @@ -6480,7 +6472,7 @@ yy690: { RETURN_TOKEN(T_EXIT); } -#line 6484 "Zend/zend_language_scanner.c" +#line 6476 "Zend/zend_language_scanner.c" yy692: YYDEBUG(692, *YYCURSOR); yych = *++YYCURSOR; @@ -6519,7 +6511,7 @@ yy697: { RETURN_TOKEN(T_DEFAULT); } -#line 6523 "Zend/zend_language_scanner.c" +#line 6515 "Zend/zend_language_scanner.c" yy699: YYDEBUG(699, *YYCURSOR); yych = *++YYCURSOR; @@ -6547,7 +6539,7 @@ yy702: { RETURN_TOKEN(T_DECLARE); } -#line 6551 "Zend/zend_language_scanner.c" +#line 6543 "Zend/zend_language_scanner.c" yy704: YYDEBUG(704, *YYCURSOR); yych = *++YYCURSOR; @@ -6631,7 +6623,7 @@ yy715: { RETURN_TOKEN(T_EXTENDS); } -#line 6635 "Zend/zend_language_scanner.c" +#line 6627 "Zend/zend_language_scanner.c" yy717: YYDEBUG(717, *YYCURSOR); ++YYCURSOR; @@ -6644,7 +6636,7 @@ yy717: { RETURN_TOKEN(T_EXIT); } -#line 6648 "Zend/zend_language_scanner.c" +#line 6640 "Zend/zend_language_scanner.c" yy719: YYDEBUG(719, *YYCURSOR); yych = *++YYCURSOR; @@ -6662,7 +6654,7 @@ yy720: { RETURN_TOKEN(T_EVAL); } -#line 6666 "Zend/zend_language_scanner.c" +#line 6658 "Zend/zend_language_scanner.c" yy722: YYDEBUG(722, *YYCURSOR); yych = *++YYCURSOR; @@ -6736,7 +6728,7 @@ yy731: { RETURN_TOKEN(T_ENDWHILE); } -#line 6740 "Zend/zend_language_scanner.c" +#line 6732 "Zend/zend_language_scanner.c" yy733: YYDEBUG(733, *YYCURSOR); yych = *++YYCURSOR; @@ -6769,7 +6761,7 @@ yy737: { RETURN_TOKEN(T_ENDSWITCH); } -#line 6773 "Zend/zend_language_scanner.c" +#line 6765 "Zend/zend_language_scanner.c" yy739: YYDEBUG(739, *YYCURSOR); ++YYCURSOR; @@ -6782,7 +6774,7 @@ yy739: { RETURN_TOKEN(T_ENDIF); } -#line 6786 "Zend/zend_language_scanner.c" +#line 6778 "Zend/zend_language_scanner.c" yy741: YYDEBUG(741, *YYCURSOR); yych = *++YYCURSOR; @@ -6815,7 +6807,7 @@ yy743: { RETURN_TOKEN(T_ENDFOR); } -#line 6819 "Zend/zend_language_scanner.c" +#line 6811 "Zend/zend_language_scanner.c" yy744: YYDEBUG(744, *YYCURSOR); yych = *++YYCURSOR; @@ -6843,7 +6835,7 @@ yy747: { RETURN_TOKEN(T_ENDFOREACH); } -#line 6847 "Zend/zend_language_scanner.c" +#line 6839 "Zend/zend_language_scanner.c" yy749: YYDEBUG(749, *YYCURSOR); yych = *++YYCURSOR; @@ -6881,7 +6873,7 @@ yy754: { RETURN_TOKEN(T_ENDDECLARE); } -#line 6885 "Zend/zend_language_scanner.c" +#line 6877 "Zend/zend_language_scanner.c" yy756: YYDEBUG(756, *YYCURSOR); yych = *++YYCURSOR; @@ -6904,7 +6896,7 @@ yy758: { RETURN_TOKEN(T_EMPTY); } -#line 6908 "Zend/zend_language_scanner.c" +#line 6900 "Zend/zend_language_scanner.c" yy760: YYDEBUG(760, *YYCURSOR); yych = *++YYCURSOR; @@ -6937,7 +6929,7 @@ yy762: { RETURN_TOKEN(T_ELSE); } -#line 6941 "Zend/zend_language_scanner.c" +#line 6933 "Zend/zend_language_scanner.c" yy763: YYDEBUG(763, *YYCURSOR); yych = *++YYCURSOR; @@ -6955,7 +6947,7 @@ yy764: { RETURN_TOKEN(T_ELSEIF); } -#line 6959 "Zend/zend_language_scanner.c" +#line 6951 "Zend/zend_language_scanner.c" yy766: YYDEBUG(766, *YYCURSOR); yych = *++YYCURSOR; @@ -6973,7 +6965,7 @@ yy767: { RETURN_TOKEN(T_ECHO); } -#line 6977 "Zend/zend_language_scanner.c" +#line 6969 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_LOOKING_FOR_PROPERTY: @@ -7051,7 +7043,7 @@ yy772: HANDLE_NEWLINES(yytext, yyleng); RETURN_TOKEN(T_WHITESPACE); } -#line 7055 "Zend/zend_language_scanner.c" +#line 7047 "Zend/zend_language_scanner.c" yy773: YYDEBUG(773, *YYCURSOR); ++YYCURSOR; @@ -7065,7 +7057,7 @@ yy774: yy_pop_state(); goto restart; } -#line 7069 "Zend/zend_language_scanner.c" +#line 7061 "Zend/zend_language_scanner.c" yy775: YYDEBUG(775, *YYCURSOR); ++YYCURSOR; @@ -7080,7 +7072,7 @@ yy776: zend_copy_value(zendlval, yytext, yyleng); RETURN_TOKEN(T_STRING); } -#line 7084 "Zend/zend_language_scanner.c" +#line 7076 "Zend/zend_language_scanner.c" yy777: YYDEBUG(777, *YYCURSOR); yych = *++YYCURSOR; @@ -7105,7 +7097,7 @@ yy780: { RETURN_TOKEN(T_OBJECT_OPERATOR); } -#line 7109 "Zend/zend_language_scanner.c" +#line 7101 "Zend/zend_language_scanner.c" yy782: YYDEBUG(782, *YYCURSOR); ++YYCURSOR; @@ -7197,7 +7189,7 @@ yy787: yy_push_state(ST_IN_SCRIPTING); goto restart; } -#line 7201 "Zend/zend_language_scanner.c" +#line 7193 "Zend/zend_language_scanner.c" yy788: YYDEBUG(788, *YYCURSOR); yych = *++YYCURSOR; @@ -7230,7 +7222,7 @@ yy792: yy_push_state(ST_IN_SCRIPTING); RETURN_TOKEN(T_STRING_VARNAME); } -#line 7234 "Zend/zend_language_scanner.c" +#line 7226 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_NOWDOC: @@ -7241,7 +7233,7 @@ yyc_ST_NOWDOC: ++YYCURSOR; YYDEBUG(797, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2346 "Zend/zend_language_scanner.l" +#line 2338 "Zend/zend_language_scanner.l" { int newline = 0; @@ -7297,7 +7289,7 @@ nowdoc_scan_done: HANDLE_NEWLINES(yytext, yyleng - newline); RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); } -#line 7301 "Zend/zend_language_scanner.c" +#line 7293 "Zend/zend_language_scanner.c" /* *********************************** */ yyc_ST_VAR_OFFSET: { @@ -7420,7 +7412,7 @@ string: } RETURN_TOKEN(T_NUM_STRING); } -#line 7424 "Zend/zend_language_scanner.c" +#line 7416 "Zend/zend_language_scanner.c" yy802: YYDEBUG(802, *YYCURSOR); yych = *++YYCURSOR; @@ -7445,7 +7437,7 @@ yy804: /* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */ RETURN_TOKEN(yytext[0]); } -#line 7449 "Zend/zend_language_scanner.c" +#line 7441 "Zend/zend_language_scanner.c" yy805: YYDEBUG(805, *YYCURSOR); ++YYCURSOR; @@ -7456,7 +7448,7 @@ yy805: yy_pop_state(); RETURN_TOKEN(']'); } -#line 7460 "Zend/zend_language_scanner.c" +#line 7452 "Zend/zend_language_scanner.c" yy807: YYDEBUG(807, *YYCURSOR); yych = *++YYCURSOR; @@ -7474,7 +7466,7 @@ yy808: ZVAL_NULL(zendlval); RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); } -#line 7478 "Zend/zend_language_scanner.c" +#line 7470 "Zend/zend_language_scanner.c" yy810: YYDEBUG(810, *YYCURSOR); ++YYCURSOR; @@ -7488,13 +7480,13 @@ yy811: zend_copy_value(zendlval, yytext, yyleng); RETURN_TOKEN(T_STRING); } -#line 7492 "Zend/zend_language_scanner.c" +#line 7484 "Zend/zend_language_scanner.c" yy812: YYDEBUG(812, *YYCURSOR); ++YYCURSOR; YYDEBUG(813, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2403 "Zend/zend_language_scanner.l" +#line 2395 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { RETURN_TOKEN(END); @@ -7503,7 +7495,7 @@ yy812: zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); goto restart; } -#line 7507 "Zend/zend_language_scanner.c" +#line 7499 "Zend/zend_language_scanner.c" yy814: YYDEBUG(814, *YYCURSOR); ++YYCURSOR; @@ -7544,7 +7536,7 @@ yy818: zend_copy_value(zendlval, (yytext+1), (yyleng-1)); RETURN_TOKEN(T_VARIABLE); } -#line 7548 "Zend/zend_language_scanner.c" +#line 7540 "Zend/zend_language_scanner.c" yy819: YYDEBUG(819, *YYCURSOR); ++YYCURSOR; @@ -7589,7 +7581,7 @@ yy826: ZVAL_STRINGL(zendlval, yytext, yyleng); RETURN_TOKEN(T_NUM_STRING); } -#line 7593 "Zend/zend_language_scanner.c" +#line 7585 "Zend/zend_language_scanner.c" yy827: YYDEBUG(827, *YYCURSOR); ++YYCURSOR; @@ -7612,6 +7604,6 @@ yy829: goto yy826; } } -#line 2412 "Zend/zend_language_scanner.l" +#line 2404 "Zend/zend_language_scanner.l" } diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index 9b5124f64c..47958b7182 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -1662,7 +1662,7 @@ NEWLINE ("\r"|"\n"|"\r\n") if (end != yytext + yyleng) { zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", 0); ZVAL_UNDEF(zendlval); - RETURN_TOKEN(T_ERROR); + RETURN_TOKEN(T_LNUMBER); } } else { errno = 0; @@ -1680,7 +1680,7 @@ NEWLINE ("\r"|"\n"|"\r\n") zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", 0); ZVAL_UNDEF(zendlval); - RETURN_TOKEN(T_ERROR); + RETURN_TOKEN(T_DNUMBER); } ZEND_ASSERT(!errno); RETURN_TOKEN(T_DNUMBER); @@ -1689,7 +1689,7 @@ NEWLINE ("\r"|"\n"|"\r\n") if (end != yytext + yyleng) { zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", 0); ZVAL_UNDEF(zendlval); - RETURN_TOKEN(T_ERROR); + RETURN_TOKEN(T_DNUMBER); } } ZEND_ASSERT(!errno); @@ -2047,9 +2047,7 @@ inline_char_handler: switch (*YYCURSOR++) { case '"': yyleng = YYCURSOR - SCNG(yy_text); - if (zend_scan_escape_string(zendlval, yytext+bprefix+1, yyleng-bprefix-2, '"') == FAILURE) { - RETURN_TOKEN(T_ERROR); - } + zend_scan_escape_string(zendlval, yytext+bprefix+1, yyleng-bprefix-2, '"'); RETURN_TOKEN(T_CONSTANT_ENCAPSED_STRING); case '$': if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') { @@ -2216,9 +2214,7 @@ inline_char_handler: double_quotes_scan_done: yyleng = YYCURSOR - SCNG(yy_text); - if (zend_scan_escape_string(zendlval, yytext, yyleng, '"') == FAILURE) { - RETURN_TOKEN(T_ERROR); - } + zend_scan_escape_string(zendlval, yytext, yyleng, '"'); RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); } @@ -2260,9 +2256,7 @@ double_quotes_scan_done: yyleng = YYCURSOR - SCNG(yy_text); - if (zend_scan_escape_string(zendlval, yytext, yyleng, '`') == FAILURE) { - RETURN_TOKEN(T_ERROR); - } + zend_scan_escape_string(zendlval, yytext, yyleng, '`'); RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); } @@ -2336,9 +2330,7 @@ double_quotes_scan_done: heredoc_scan_done: yyleng = YYCURSOR - SCNG(yy_text); - if (zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0) == FAILURE) { - RETURN_TOKEN(T_ERROR); - } + zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0); RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE); } diff --git a/ext/tokenizer/tests/parse_errors.phpt b/ext/tokenizer/tests/parse_errors.phpt index 3f376e0f9a..700326ff41 100644 --- a/ext/tokenizer/tests/parse_errors.phpt +++ b/ext/tokenizer/tests/parse_errors.phpt @@ -33,7 +33,7 @@ Invalid numeric literal T_OPEN_TAG (<?php ) T_STRING (var_dump) ( -T_ERROR (078) +T_LNUMBER (078) ) ; @@ -41,7 +41,7 @@ Invalid UTF-8 codepoint escape sequence T_OPEN_TAG (<?php ) T_STRING (var_dump) ( -T_ERROR ("\u{xyz}") +T_CONSTANT_ENCAPSED_STRING ("\u{xyz}") ) ; @@ -49,7 +49,7 @@ Invalid UTF-8 codepoint escape sequence: Codepoint too large T_OPEN_TAG (<?php ) T_STRING (var_dump) ( -T_ERROR ("\u{ffffff}") +T_CONSTANT_ENCAPSED_STRING ("\u{ffffff}") ) ; @@ -57,10 +57,10 @@ Invalid numeric literal T_OPEN_TAG (<?php ) T_STRING (var_dump) ( -T_ERROR (078) +T_LNUMBER (078) T_WHITESPACE ( ) + T_WHITESPACE ( ) -T_ERROR (078) +T_LNUMBER (078) ) ; diff --git a/ext/tokenizer/tokenizer.c b/ext/tokenizer/tokenizer.c index a8d1bff134..50b47835dd 100644 --- a/ext/tokenizer/tokenizer.c +++ b/ext/tokenizer/tokenizer.c @@ -191,9 +191,9 @@ void on_event(zend_php_scanner_event event, int token, int line) HashTable *tokens_ht; zval *token_zv; - switch(event) { + switch (event) { case ON_TOKEN: - if (token == T_ERROR || token == END) break; + if (token == END) break; if (token >= 256) { array_init(&keyword); add_next_index_long(&keyword, token); @@ -281,7 +281,7 @@ PHP_FUNCTION(token_get_all) success = tokenize_parse(return_value, source); } else { success = tokenize(return_value, source); - /* Normal token_get_all() should never throw. Errors are indicated by T_ERROR tokens. */ + /* Normal token_get_all() should not throw. */ zend_clear_exception(); } diff --git a/ext/tokenizer/tokenizer_data.c b/ext/tokenizer/tokenizer_data.c index 5aeff66f3f..6769202a3b 100644 --- a/ext/tokenizer/tokenizer_data.c +++ b/ext/tokenizer/tokenizer_data.c @@ -162,7 +162,6 @@ void tokenizer_register_constants(INIT_FUNC_ARGS) { REGISTER_LONG_CONSTANT("T_NS_C", T_NS_C, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_NS_SEPARATOR", T_NS_SEPARATOR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_ELLIPSIS", T_ELLIPSIS, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("T_ERROR", T_ERROR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_DOUBLE_COLON", T_PAAMAYIM_NEKUDOTAYIM, CONST_CS | CONST_PERSISTENT); } @@ -303,7 +302,6 @@ char *get_token_type_name(int token_type) case T_NS_C: return "T_NS_C"; case T_NS_SEPARATOR: return "T_NS_SEPARATOR"; case T_ELLIPSIS: return "T_ELLIPSIS"; - case T_ERROR: return "T_ERROR"; } return "UNKNOWN"; diff --git a/ext/tokenizer/tokenizer_data_gen.sh b/ext/tokenizer/tokenizer_data_gen.sh index 2c3c85793f..65bf0de83b 100755 --- a/ext/tokenizer/tokenizer_data_gen.sh +++ b/ext/tokenizer/tokenizer_data_gen.sh @@ -46,7 +46,7 @@ echo '/* echo 'void tokenizer_register_constants(INIT_FUNC_ARGS) {' >> $OUTFILE $AWK ' - /^#define T_NOELSE/ { next } + /^#define T_(NOELSE|ERROR)/ { next } /^#define T_/ { print " REGISTER_LONG_CONSTANT(\"" $2 "\", " $2 ", CONST_CS | CONST_PERSISTENT);" } ' < $INFILE >> $OUTFILE echo ' REGISTER_LONG_CONSTANT("T_DOUBLE_COLON", T_PAAMAYIM_NEKUDOTAYIM, CONST_CS | CONST_PERSISTENT);' >> $OUTFILE @@ -64,7 +64,7 @@ $AWK ' print " case T_PAAMAYIM_NEKUDOTAYIM: return \"T_DOUBLE_COLON\";" next } - /^#define T_NOELSE/ { next } + /^#define T_(NOELSE|ERROR)/ { next } /^#define T_/ { print " case " $2 ": return \"" $2 "\";" } |