From cdb9ee0d1a5ecb843b320c9effb81207f4280795 Mon Sep 17 00:00:00 2001 From: Moriyoshi Koizumi Date: Sun, 6 Mar 2011 07:00:30 +0000 Subject: [PATCH] Fix zend.multibyte oddities. Hope this will address all the known problems. --- Zend/zend_compile.c | 3 +- Zend/zend_language_scanner.c | 772 +++++++++++++++--------------- Zend/zend_language_scanner.l | 66 ++- Zend/zend_language_scanner_defs.h | 2 +- Zend/zend_multibyte.c | 20 - Zend/zend_multibyte.h | 3 - ext/mbstring/mbstring.c | 253 ++++------ ext/mbstring/mbstring.h | 9 - main/rfc1867.c | 265 +++++----- main/rfc1867.h | 14 +- 10 files changed, 643 insertions(+), 764 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 5f49c152df..a16380f7b8 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -5988,8 +5988,7 @@ void zend_do_declare_stmt(znode *var, znode *val TSRMLS_DC) /* {{{ */ /* need to re-scan if input filter changed */ if (old_input_filter != LANG_SCNG(input_filter) || - ((old_input_filter == zend_multibyte_script_encoding_filter) && - (new_encoding != old_encoding))) { + (old_input_filter && new_encoding != old_encoding)) { zend_multibyte_yyinput_again(old_input_filter, old_encoding TSRMLS_CC); } } diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c index 50a327f484..fd5987b86c 100644 --- a/Zend/zend_language_scanner.c +++ b/Zend/zend_language_scanner.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.13.5 on Mon Jan 3 06:07:39 2011 */ +/* Generated by re2c 0.13.5 on Sun Mar 6 15:09:12 2011 */ #line 1 "Zend/zend_language_scanner.l" /* +----------------------------------------------------------------------+ @@ -122,6 +122,33 @@ do { \ BEGIN_EXTERN_C() +static size_t encoding_filter_script_to_internal(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC) +{ + const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding(TSRMLS_C); + assert(internal_encoding && zend_multibyte_check_lexer_compatibility(internal_encoding)); + return zend_multibyte_encoding_converter(to, to_length, from, from_length, internal_encoding, LANG_SCNG(script_encoding) TSRMLS_CC); +} + +static size_t encoding_filter_script_to_intermediate(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC) +{ + return zend_multibyte_encoding_converter(to, to_length, from, from_length, zend_multibyte_encoding_utf8, LANG_SCNG(script_encoding) TSRMLS_CC); +} + +static size_t encoding_filter_intermediate_to_script(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC) +{ + return zend_multibyte_encoding_converter(to, to_length, from, from_length, +LANG_SCNG(script_encoding), zend_multibyte_encoding_utf8 TSRMLS_CC); +} + +static size_t encoding_filter_intermediate_to_internal(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC) +{ + const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding(TSRMLS_C); + assert(internal_encoding && zend_multibyte_check_lexer_compatibility(internal_encoding)); + return zend_multibyte_encoding_converter(to, to_length, from, from_length, +internal_encoding, zend_multibyte_encoding_utf8 TSRMLS_CC); +} + + static void _yy_push_state(int new_state TSRMLS_DC) { zend_stack_push(&SCNG(state_stack), (void *) &YYGETCONDITION(), sizeof(int)); @@ -323,7 +350,6 @@ static const zend_encoding* zend_multibyte_detect_unicode(TSRMLS_D) /* remove BOM */ script = (unsigned char*)emalloc(LANG_SCNG(script_org_size)+1-bom_size); memcpy(script, LANG_SCNG(script_org)+bom_size, LANG_SCNG(script_org_size)+1-bom_size); - efree(LANG_SCNG(script_org)); LANG_SCNG(script_org) = script; LANG_SCNG(script_org_size) -= bom_size; @@ -420,8 +446,8 @@ ZEND_API int zend_multibyte_set_filter(const zend_encoding *onetime_encoding TSR if (!internal_encoding || LANG_SCNG(script_encoding) == internal_encoding) { if (!zend_multibyte_check_lexer_compatibility(LANG_SCNG(script_encoding))) { /* and if not, work around w/ script_encoding -> utf-8 -> script_encoding conversion */ - LANG_SCNG(input_filter) = zend_multibyte_script_encoding_filter; - LANG_SCNG(output_filter) = zend_multibyte_internal_encoding_filter; + LANG_SCNG(input_filter) = encoding_filter_script_to_intermediate; + LANG_SCNG(output_filter) = encoding_filter_intermediate_to_script; } else { LANG_SCNG(input_filter) = NULL; LANG_SCNG(output_filter) = NULL; @@ -429,9 +455,17 @@ ZEND_API int zend_multibyte_set_filter(const zend_encoding *onetime_encoding TSR return SUCCESS; } - /* both script and internal encodings are incompatible w/ flex */ - LANG_SCNG(input_filter) = zend_multibyte_script_encoding_filter; - LANG_SCNG(output_filter) = zend_multibyte_internal_encoding_filter; + if (zend_multibyte_check_lexer_compatibility(internal_encoding)) { + LANG_SCNG(input_filter) = encoding_filter_script_to_internal; + LANG_SCNG(output_filter) = NULL; + } else if (zend_multibyte_check_lexer_compatibility(LANG_SCNG(script_encoding))) { + LANG_SCNG(input_filter) = NULL; + LANG_SCNG(output_filter) = encoding_filter_script_to_internal; + } else { + /* both script and internal encodings are incompatible w/ flex */ + LANG_SCNG(input_filter) = encoding_filter_script_to_intermediate; + LANG_SCNG(output_filter) = encoding_filter_intermediate_to_internal; + } return 0; } @@ -791,21 +825,9 @@ int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter, zend_encoding *old_encoding TSRMLS_DC) { - size_t original_offset, offset, length; + size_t length; unsigned char *new_yy_start; - /* calculate current position */ - offset = original_offset = YYCURSOR - SCNG(yy_start); - if (old_input_filter && offset > 0) { - const zend_encoding *new_encoding = SCNG(script_encoding); - zend_encoding_filter new_filter = SCNG(input_filter); - SCNG(script_encoding) = old_encoding; - SCNG(input_filter) = old_input_filter; - offset = zend_get_scanned_file_offset(TSRMLS_C); - SCNG(script_encoding) = new_encoding; - SCNG(input_filter) = new_filter; - } - /* convert and set */ if (!SCNG(input_filter)) { if (SCNG(script_filtered)) { @@ -813,10 +835,10 @@ ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter SCNG(script_filtered) = NULL; } SCNG(script_filtered_size) = 0; - length = SCNG(script_org_size) - offset; - new_yy_start = SCNG(script_org) + offset; + length = SCNG(script_org_size); + new_yy_start = SCNG(script_org); } else { - if ((size_t)-1 == SCNG(input_filter)(&new_yy_start, &length, SCNG(script_org) + offset, SCNG(script_org_size) - offset TSRMLS_CC)) { + if ((size_t)-1 == SCNG(input_filter)(&new_yy_start, &length, SCNG(script_org), SCNG(script_org_size) TSRMLS_CC)) { zend_error_noreturn(E_COMPILE_ERROR, "Could not convert the script from the detected " "encoding \"%s\" to a compatible encoding", zend_multibyte_get_encoding_name(LANG_SCNG(script_encoding))); } @@ -963,7 +985,7 @@ restart: yymore_restart: -#line 967 "Zend/zend_language_scanner.c" +#line 989 "Zend/zend_language_scanner.c" { YYCTYPE yych; unsigned int yyaccept = 0; @@ -1062,7 +1084,7 @@ yyc_INITIAL: yy3: YYDEBUG(3, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1755 "Zend/zend_language_scanner.l" +#line 1777 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -1122,7 +1144,7 @@ inline_html: HANDLE_NEWLINES(yytext, yyleng); return T_INLINE_HTML; } -#line 1126 "Zend/zend_language_scanner.c" +#line 1148 "Zend/zend_language_scanner.c" yy4: YYDEBUG(4, *YYCURSOR); yych = *++YYCURSOR; @@ -1140,7 +1162,7 @@ yy5: yy6: YYDEBUG(6, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1743 "Zend/zend_language_scanner.l" +#line 1765 "Zend/zend_language_scanner.l" { if (CG(short_tags)) { zendlval->value.str.val = yytext; /* no copying - intentional */ @@ -1152,14 +1174,14 @@ yy6: goto inline_char_handler; } } -#line 1156 "Zend/zend_language_scanner.c" +#line 1178 "Zend/zend_language_scanner.c" yy7: YYDEBUG(7, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy43; YYDEBUG(8, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1720 "Zend/zend_language_scanner.l" +#line 1742 "Zend/zend_language_scanner.l" { if (CG(asp_tags)) { zendlval->value.str.val = yytext; /* no copying - intentional */ @@ -1171,7 +1193,7 @@ yy7: goto inline_char_handler; } } -#line 1175 "Zend/zend_language_scanner.c" +#line 1197 "Zend/zend_language_scanner.c" yy9: YYDEBUG(9, *YYCURSOR); yych = *++YYCURSOR; @@ -1357,7 +1379,7 @@ yy35: ++YYCURSOR; YYDEBUG(38, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1676 "Zend/zend_language_scanner.l" +#line 1698 "Zend/zend_language_scanner.l" { YYCTYPE *bracket = zend_memrchr(yytext, '<', yyleng - (sizeof("script language=php>") - 1)); @@ -1374,7 +1396,7 @@ yy35: BEGIN(ST_IN_SCRIPTING); return T_OPEN_TAG; } -#line 1378 "Zend/zend_language_scanner.c" +#line 1400 "Zend/zend_language_scanner.c" yy39: YYDEBUG(39, *YYCURSOR); yych = *++YYCURSOR; @@ -1401,7 +1423,7 @@ yy43: ++YYCURSOR; YYDEBUG(44, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1694 "Zend/zend_language_scanner.l" +#line 1716 "Zend/zend_language_scanner.l" { if (CG(asp_tags)) { zendlval->value.str.val = yytext; /* no copying - intentional */ @@ -1413,13 +1435,13 @@ yy43: goto inline_char_handler; } } -#line 1417 "Zend/zend_language_scanner.c" +#line 1439 "Zend/zend_language_scanner.c" yy45: YYDEBUG(45, *YYCURSOR); ++YYCURSOR; YYDEBUG(46, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1707 "Zend/zend_language_scanner.l" +#line 1729 "Zend/zend_language_scanner.l" { if (CG(short_tags)) { zendlval->value.str.val = yytext; /* no copying - intentional */ @@ -1431,7 +1453,7 @@ yy45: goto inline_char_handler; } } -#line 1435 "Zend/zend_language_scanner.c" +#line 1457 "Zend/zend_language_scanner.c" yy47: YYDEBUG(47, *YYCURSOR); yych = *++YYCURSOR; @@ -1458,7 +1480,7 @@ yy50: yy51: YYDEBUG(51, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1733 "Zend/zend_language_scanner.l" +#line 1755 "Zend/zend_language_scanner.l" { zendlval->value.str.val = yytext; /* no copying - intentional */ zendlval->value.str.len = yyleng; @@ -1467,7 +1489,7 @@ yy51: BEGIN(ST_IN_SCRIPTING); return T_OPEN_TAG; } -#line 1471 "Zend/zend_language_scanner.c" +#line 1493 "Zend/zend_language_scanner.c" yy52: YYDEBUG(52, *YYCURSOR); ++YYCURSOR; @@ -1538,7 +1560,7 @@ yyc_ST_BACKQUOTE: yy56: YYDEBUG(56, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2206 "Zend/zend_language_scanner.l" +#line 2228 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -1579,7 +1601,7 @@ yy56: zend_scan_escape_string(zendlval, yytext, yyleng, '`' TSRMLS_CC); return T_ENCAPSED_AND_WHITESPACE; } -#line 1583 "Zend/zend_language_scanner.c" +#line 1605 "Zend/zend_language_scanner.c" yy57: YYDEBUG(57, *YYCURSOR); yych = *++YYCURSOR; @@ -1590,12 +1612,12 @@ yy58: ++YYCURSOR; YYDEBUG(59, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2150 "Zend/zend_language_scanner.l" +#line 2172 "Zend/zend_language_scanner.l" { BEGIN(ST_IN_SCRIPTING); return '`'; } -#line 1599 "Zend/zend_language_scanner.c" +#line 1621 "Zend/zend_language_scanner.c" yy60: YYDEBUG(60, *YYCURSOR); yych = *++YYCURSOR; @@ -1605,14 +1627,14 @@ yy61: ++YYCURSOR; YYDEBUG(62, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2137 "Zend/zend_language_scanner.l" +#line 2159 "Zend/zend_language_scanner.l" { zendlval->value.lval = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); yyless(1); return T_CURLY_OPEN; } -#line 1616 "Zend/zend_language_scanner.c" +#line 1638 "Zend/zend_language_scanner.c" yy63: YYDEBUG(63, *YYCURSOR); yyaccept = 0; @@ -1628,24 +1650,24 @@ yy63: yy65: YYDEBUG(65, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1837 "Zend/zend_language_scanner.l" +#line 1859 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); zendlval->type = IS_STRING; return T_VARIABLE; } -#line 1638 "Zend/zend_language_scanner.c" +#line 1660 "Zend/zend_language_scanner.c" yy66: YYDEBUG(66, *YYCURSOR); ++YYCURSOR; YYDEBUG(67, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1469 "Zend/zend_language_scanner.l" +#line 1491 "Zend/zend_language_scanner.l" { yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC); return T_DOLLAR_OPEN_CURLY_BRACES; } -#line 1649 "Zend/zend_language_scanner.c" +#line 1671 "Zend/zend_language_scanner.c" yy68: YYDEBUG(68, *YYCURSOR); yych = *++YYCURSOR; @@ -1659,7 +1681,7 @@ yy70: ++YYCURSOR; YYDEBUG(71, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1829 "Zend/zend_language_scanner.l" +#line 1851 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); yy_push_state(ST_VAR_OFFSET TSRMLS_CC); @@ -1667,7 +1689,7 @@ yy70: zendlval->type = IS_STRING; return T_VARIABLE; } -#line 1671 "Zend/zend_language_scanner.c" +#line 1693 "Zend/zend_language_scanner.c" yy72: YYDEBUG(72, *YYCURSOR); yych = *++YYCURSOR; @@ -1685,7 +1707,7 @@ yy73: ++YYCURSOR; YYDEBUG(74, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1819 "Zend/zend_language_scanner.l" +#line 1841 "Zend/zend_language_scanner.l" { yyless(yyleng - 3); yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); @@ -1693,7 +1715,7 @@ yy73: zendlval->type = IS_STRING; return T_VARIABLE; } -#line 1697 "Zend/zend_language_scanner.c" +#line 1719 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_DOUBLE_QUOTES: @@ -1761,7 +1783,7 @@ yy77: yy78: YYDEBUG(78, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2156 "Zend/zend_language_scanner.l" +#line 2178 "Zend/zend_language_scanner.l" { if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) { YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1; @@ -1810,7 +1832,7 @@ double_quotes_scan_done: zend_scan_escape_string(zendlval, yytext, yyleng, '"' TSRMLS_CC); return T_ENCAPSED_AND_WHITESPACE; } -#line 1814 "Zend/zend_language_scanner.c" +#line 1836 "Zend/zend_language_scanner.c" yy79: YYDEBUG(79, *YYCURSOR); yych = *++YYCURSOR; @@ -1821,12 +1843,12 @@ yy80: ++YYCURSOR; YYDEBUG(81, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2145 "Zend/zend_language_scanner.l" +#line 2167 "Zend/zend_language_scanner.l" { BEGIN(ST_IN_SCRIPTING); return '"'; } -#line 1830 "Zend/zend_language_scanner.c" +#line 1852 "Zend/zend_language_scanner.c" yy82: YYDEBUG(82, *YYCURSOR); yych = *++YYCURSOR; @@ -1836,14 +1858,14 @@ yy83: ++YYCURSOR; YYDEBUG(84, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2137 "Zend/zend_language_scanner.l" +#line 2159 "Zend/zend_language_scanner.l" { zendlval->value.lval = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); yyless(1); return T_CURLY_OPEN; } -#line 1847 "Zend/zend_language_scanner.c" +#line 1869 "Zend/zend_language_scanner.c" yy85: YYDEBUG(85, *YYCURSOR); yyaccept = 0; @@ -1859,24 +1881,24 @@ yy85: yy87: YYDEBUG(87, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1837 "Zend/zend_language_scanner.l" +#line 1859 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); zendlval->type = IS_STRING; return T_VARIABLE; } -#line 1869 "Zend/zend_language_scanner.c" +#line 1891 "Zend/zend_language_scanner.c" yy88: YYDEBUG(88, *YYCURSOR); ++YYCURSOR; YYDEBUG(89, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1469 "Zend/zend_language_scanner.l" +#line 1491 "Zend/zend_language_scanner.l" { yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC); return T_DOLLAR_OPEN_CURLY_BRACES; } -#line 1880 "Zend/zend_language_scanner.c" +#line 1902 "Zend/zend_language_scanner.c" yy90: YYDEBUG(90, *YYCURSOR); yych = *++YYCURSOR; @@ -1890,7 +1912,7 @@ yy92: ++YYCURSOR; YYDEBUG(93, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1829 "Zend/zend_language_scanner.l" +#line 1851 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); yy_push_state(ST_VAR_OFFSET TSRMLS_CC); @@ -1898,7 +1920,7 @@ yy92: zendlval->type = IS_STRING; return T_VARIABLE; } -#line 1902 "Zend/zend_language_scanner.c" +#line 1924 "Zend/zend_language_scanner.c" yy94: YYDEBUG(94, *YYCURSOR); yych = *++YYCURSOR; @@ -1916,7 +1938,7 @@ yy95: ++YYCURSOR; YYDEBUG(96, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1819 "Zend/zend_language_scanner.l" +#line 1841 "Zend/zend_language_scanner.l" { yyless(yyleng - 3); yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); @@ -1924,7 +1946,7 @@ yy95: zendlval->type = IS_STRING; return T_VARIABLE; } -#line 1928 "Zend/zend_language_scanner.c" +#line 1950 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_END_HEREDOC: @@ -1935,7 +1957,7 @@ yyc_ST_END_HEREDOC: ++YYCURSOR; YYDEBUG(100, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2124 "Zend/zend_language_scanner.l" +#line 2146 "Zend/zend_language_scanner.l" { YYCURSOR += CG(heredoc_len) - 1; yyleng = CG(heredoc_len); @@ -1947,7 +1969,7 @@ yyc_ST_END_HEREDOC: BEGIN(ST_IN_SCRIPTING); return T_END_HEREDOC; } -#line 1951 "Zend/zend_language_scanner.c" +#line 1973 "Zend/zend_language_scanner.c" /* *********************************** */ yyc_ST_HEREDOC: { @@ -2009,7 +2031,7 @@ yy103: yy104: YYDEBUG(104, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2248 "Zend/zend_language_scanner.l" +#line 2270 "Zend/zend_language_scanner.l" { int newline = 0; @@ -2080,7 +2102,7 @@ heredoc_scan_done: zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0 TSRMLS_CC); return T_ENCAPSED_AND_WHITESPACE; } -#line 2084 "Zend/zend_language_scanner.c" +#line 2106 "Zend/zend_language_scanner.c" yy105: YYDEBUG(105, *YYCURSOR); yych = *++YYCURSOR; @@ -2095,14 +2117,14 @@ yy107: ++YYCURSOR; YYDEBUG(108, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2137 "Zend/zend_language_scanner.l" +#line 2159 "Zend/zend_language_scanner.l" { zendlval->value.lval = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); yyless(1); return T_CURLY_OPEN; } -#line 2106 "Zend/zend_language_scanner.c" +#line 2128 "Zend/zend_language_scanner.c" yy109: YYDEBUG(109, *YYCURSOR); yyaccept = 0; @@ -2118,24 +2140,24 @@ yy109: yy111: YYDEBUG(111, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1837 "Zend/zend_language_scanner.l" +#line 1859 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); zendlval->type = IS_STRING; return T_VARIABLE; } -#line 2128 "Zend/zend_language_scanner.c" +#line 2150 "Zend/zend_language_scanner.c" yy112: YYDEBUG(112, *YYCURSOR); ++YYCURSOR; YYDEBUG(113, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1469 "Zend/zend_language_scanner.l" +#line 1491 "Zend/zend_language_scanner.l" { yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC); return T_DOLLAR_OPEN_CURLY_BRACES; } -#line 2139 "Zend/zend_language_scanner.c" +#line 2161 "Zend/zend_language_scanner.c" yy114: YYDEBUG(114, *YYCURSOR); yych = *++YYCURSOR; @@ -2149,7 +2171,7 @@ yy116: ++YYCURSOR; YYDEBUG(117, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1829 "Zend/zend_language_scanner.l" +#line 1851 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); yy_push_state(ST_VAR_OFFSET TSRMLS_CC); @@ -2157,7 +2179,7 @@ yy116: zendlval->type = IS_STRING; return T_VARIABLE; } -#line 2161 "Zend/zend_language_scanner.c" +#line 2183 "Zend/zend_language_scanner.c" yy118: YYDEBUG(118, *YYCURSOR); yych = *++YYCURSOR; @@ -2175,7 +2197,7 @@ yy119: ++YYCURSOR; YYDEBUG(120, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1819 "Zend/zend_language_scanner.l" +#line 1841 "Zend/zend_language_scanner.l" { yyless(yyleng - 3); yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); @@ -2183,7 +2205,7 @@ yy119: zendlval->type = IS_STRING; return T_VARIABLE; } -#line 2187 "Zend/zend_language_scanner.c" +#line 2209 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_IN_SCRIPTING: @@ -2364,13 +2386,13 @@ yy123: yy124: YYDEBUG(124, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1860 "Zend/zend_language_scanner.l" +#line 1882 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, yytext, yyleng); zendlval->type = IS_STRING; return T_STRING; } -#line 2374 "Zend/zend_language_scanner.c" +#line 2396 "Zend/zend_language_scanner.c" yy125: YYDEBUG(125, *YYCURSOR); yych = *++YYCURSOR; @@ -2624,11 +2646,11 @@ yy137: yy138: YYDEBUG(138, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1458 "Zend/zend_language_scanner.l" +#line 1480 "Zend/zend_language_scanner.l" { return yytext[0]; } -#line 2632 "Zend/zend_language_scanner.c" +#line 2654 "Zend/zend_language_scanner.c" yy139: YYDEBUG(139, *YYCURSOR); ++YYCURSOR; @@ -2637,7 +2659,7 @@ yy139: yy140: YYDEBUG(140, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1133 "Zend/zend_language_scanner.l" +#line 1155 "Zend/zend_language_scanner.l" { zendlval->value.str.val = yytext; /* no copying - intentional */ zendlval->value.str.len = yyleng; @@ -2645,7 +2667,7 @@ yy140: HANDLE_NEWLINES(yytext, yyleng); return T_WHITESPACE; } -#line 2649 "Zend/zend_language_scanner.c" +#line 2671 "Zend/zend_language_scanner.c" yy141: YYDEBUG(141, *YYCURSOR); yych = *++YYCURSOR; @@ -2656,11 +2678,11 @@ yy142: ++YYCURSOR; YYDEBUG(143, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1162 "Zend/zend_language_scanner.l" +#line 1184 "Zend/zend_language_scanner.l" { return T_NS_SEPARATOR; } -#line 2664 "Zend/zend_language_scanner.c" +#line 2686 "Zend/zend_language_scanner.c" yy144: YYDEBUG(144, *YYCURSOR); yych = *++YYCURSOR; @@ -2914,18 +2936,18 @@ yy167: ++YYCURSOR; YYDEBUG(168, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1463 "Zend/zend_language_scanner.l" +#line 1485 "Zend/zend_language_scanner.l" { yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); return '{'; } -#line 2923 "Zend/zend_language_scanner.c" +#line 2945 "Zend/zend_language_scanner.c" yy169: YYDEBUG(169, *YYCURSOR); ++YYCURSOR; YYDEBUG(170, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1475 "Zend/zend_language_scanner.l" +#line 1497 "Zend/zend_language_scanner.l" { RESET_DOC_COMMENT(); if (!zend_stack_is_empty(&SCNG(state_stack))) { @@ -2933,7 +2955,7 @@ yy169: } return '}'; } -#line 2937 "Zend/zend_language_scanner.c" +#line 2959 "Zend/zend_language_scanner.c" yy171: YYDEBUG(171, *YYCURSOR); yyaccept = 2; @@ -2956,7 +2978,7 @@ yy171: yy172: YYDEBUG(172, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1501 "Zend/zend_language_scanner.l" +#line 1523 "Zend/zend_language_scanner.l" { if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */ zendlval->value.lval = strtol(yytext, NULL, 0); @@ -2977,7 +2999,7 @@ yy172: zendlval->type = IS_LONG; return T_LNUMBER; } -#line 2981 "Zend/zend_language_scanner.c" +#line 3003 "Zend/zend_language_scanner.c" yy173: YYDEBUG(173, *YYCURSOR); yyaccept = 2; @@ -3005,7 +3027,7 @@ yy175: yy176: YYDEBUG(176, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1867 "Zend/zend_language_scanner.l" +#line 1889 "Zend/zend_language_scanner.l" { while (YYCURSOR < YYLIMIT) { switch (*YYCURSOR++) { @@ -3039,14 +3061,14 @@ yy176: return T_COMMENT; } -#line 3043 "Zend/zend_language_scanner.c" +#line 3065 "Zend/zend_language_scanner.c" yy177: YYDEBUG(177, *YYCURSOR); ++YYCURSOR; yy178: YYDEBUG(178, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1958 "Zend/zend_language_scanner.l" +#line 1980 "Zend/zend_language_scanner.l" { register char *s, *t; char *end; @@ -3114,14 +3136,14 @@ yy178: } return T_CONSTANT_ENCAPSED_STRING; } -#line 3118 "Zend/zend_language_scanner.c" +#line 3140 "Zend/zend_language_scanner.c" yy179: YYDEBUG(179, *YYCURSOR); ++YYCURSOR; yy180: YYDEBUG(180, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2027 "Zend/zend_language_scanner.l" +#line 2049 "Zend/zend_language_scanner.l" { int bprefix = (yytext[0] != '"') ? 1 : 0; @@ -3162,24 +3184,24 @@ yy180: BEGIN(ST_DOUBLE_QUOTES); return '"'; } -#line 3166 "Zend/zend_language_scanner.c" +#line 3188 "Zend/zend_language_scanner.c" yy181: YYDEBUG(181, *YYCURSOR); ++YYCURSOR; YYDEBUG(182, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2118 "Zend/zend_language_scanner.l" +#line 2140 "Zend/zend_language_scanner.l" { BEGIN(ST_BACKQUOTE); return '`'; } -#line 3177 "Zend/zend_language_scanner.c" +#line 3199 "Zend/zend_language_scanner.c" yy183: YYDEBUG(183, *YYCURSOR); ++YYCURSOR; YYDEBUG(184, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2376 "Zend/zend_language_scanner.l" +#line 2398 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -3188,7 +3210,7 @@ yy183: zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); goto restart; } -#line 3192 "Zend/zend_language_scanner.c" +#line 3214 "Zend/zend_language_scanner.c" yy185: YYDEBUG(185, *YYCURSOR); ++YYCURSOR; @@ -3215,13 +3237,13 @@ yy187: yy189: YYDEBUG(189, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1562 "Zend/zend_language_scanner.l" +#line 1584 "Zend/zend_language_scanner.l" { zendlval->value.dval = zend_strtod(yytext, NULL); zendlval->type = IS_DOUBLE; return T_DNUMBER; } -#line 3225 "Zend/zend_language_scanner.c" +#line 3247 "Zend/zend_language_scanner.c" yy190: YYDEBUG(190, *YYCURSOR); yyaccept = 2; @@ -3306,7 +3328,7 @@ yy198: } YYDEBUG(200, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1522 "Zend/zend_language_scanner.l" +#line 1544 "Zend/zend_language_scanner.l" { char *hex = yytext + 2; /* Skip "0x" */ int len = yyleng - 2; @@ -3327,7 +3349,7 @@ yy198: return T_DNUMBER; } } -#line 3331 "Zend/zend_language_scanner.c" +#line 3353 "Zend/zend_language_scanner.c" yy201: YYDEBUG(201, *YYCURSOR); ++YYCURSOR; @@ -3336,7 +3358,7 @@ yy201: yy202: YYDEBUG(202, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1935 "Zend/zend_language_scanner.l" +#line 1957 "Zend/zend_language_scanner.l" { zendlval->value.str.val = yytext; /* no copying - intentional */ zendlval->value.str.len = yyleng; @@ -3344,7 +3366,7 @@ yy202: BEGIN(INITIAL); return T_CLOSE_TAG; /* implicit ';' at php-end tag */ } -#line 3348 "Zend/zend_language_scanner.c" +#line 3370 "Zend/zend_language_scanner.c" yy203: YYDEBUG(203, *YYCURSOR); yych = *++YYCURSOR; @@ -3378,13 +3400,13 @@ yy205: yy207: YYDEBUG(207, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1837 "Zend/zend_language_scanner.l" +#line 1859 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); zendlval->type = IS_STRING; return T_VARIABLE; } -#line 3388 "Zend/zend_language_scanner.c" +#line 3410 "Zend/zend_language_scanner.c" yy208: YYDEBUG(208, *YYCURSOR); yych = *++YYCURSOR; @@ -3398,61 +3420,61 @@ yy209: } YYDEBUG(210, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1446 "Zend/zend_language_scanner.l" +#line 1468 "Zend/zend_language_scanner.l" { return T_LOGICAL_XOR; } -#line 3406 "Zend/zend_language_scanner.c" +#line 3428 "Zend/zend_language_scanner.c" yy211: YYDEBUG(211, *YYCURSOR); ++YYCURSOR; YYDEBUG(212, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1426 "Zend/zend_language_scanner.l" +#line 1448 "Zend/zend_language_scanner.l" { return T_XOR_EQUAL; } -#line 3416 "Zend/zend_language_scanner.c" +#line 3438 "Zend/zend_language_scanner.c" yy213: YYDEBUG(213, *YYCURSOR); ++YYCURSOR; YYDEBUG(214, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1430 "Zend/zend_language_scanner.l" +#line 1452 "Zend/zend_language_scanner.l" { return T_BOOLEAN_OR; } -#line 3426 "Zend/zend_language_scanner.c" +#line 3448 "Zend/zend_language_scanner.c" yy215: YYDEBUG(215, *YYCURSOR); ++YYCURSOR; YYDEBUG(216, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1422 "Zend/zend_language_scanner.l" +#line 1444 "Zend/zend_language_scanner.l" { return T_OR_EQUAL; } -#line 3436 "Zend/zend_language_scanner.c" +#line 3458 "Zend/zend_language_scanner.c" yy217: YYDEBUG(217, *YYCURSOR); ++YYCURSOR; YYDEBUG(218, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1434 "Zend/zend_language_scanner.l" +#line 1456 "Zend/zend_language_scanner.l" { return T_BOOLEAN_AND; } -#line 3446 "Zend/zend_language_scanner.c" +#line 3468 "Zend/zend_language_scanner.c" yy219: YYDEBUG(219, *YYCURSOR); ++YYCURSOR; YYDEBUG(220, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1418 "Zend/zend_language_scanner.l" +#line 1440 "Zend/zend_language_scanner.l" { return T_AND_EQUAL; } -#line 3456 "Zend/zend_language_scanner.c" +#line 3478 "Zend/zend_language_scanner.c" yy221: YYDEBUG(221, *YYCURSOR); ++YYCURSOR; @@ -3461,7 +3483,7 @@ yy221: yy222: YYDEBUG(222, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1944 "Zend/zend_language_scanner.l" +#line 1966 "Zend/zend_language_scanner.l" { if (CG(asp_tags)) { BEGIN(INITIAL); @@ -3474,17 +3496,17 @@ yy222: return yytext[0]; } } -#line 3478 "Zend/zend_language_scanner.c" +#line 3500 "Zend/zend_language_scanner.c" yy223: YYDEBUG(223, *YYCURSOR); ++YYCURSOR; YYDEBUG(224, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1406 "Zend/zend_language_scanner.l" +#line 1428 "Zend/zend_language_scanner.l" { return T_MOD_EQUAL; } -#line 3488 "Zend/zend_language_scanner.c" +#line 3510 "Zend/zend_language_scanner.c" yy225: YYDEBUG(225, *YYCURSOR); yych = *++YYCURSOR; @@ -3515,11 +3537,11 @@ yy229: ++YYCURSOR; YYDEBUG(230, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1402 "Zend/zend_language_scanner.l" +#line 1424 "Zend/zend_language_scanner.l" { return T_CONCAT_EQUAL; } -#line 3523 "Zend/zend_language_scanner.c" +#line 3545 "Zend/zend_language_scanner.c" yy231: YYDEBUG(231, *YYCURSOR); yyaccept = 4; @@ -3528,7 +3550,7 @@ yy231: yy232: YYDEBUG(232, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1901 "Zend/zend_language_scanner.l" +#line 1923 "Zend/zend_language_scanner.l" { int doc_com; @@ -3562,7 +3584,7 @@ yy232: return T_COMMENT; } -#line 3566 "Zend/zend_language_scanner.c" +#line 3588 "Zend/zend_language_scanner.c" yy233: YYDEBUG(233, *YYCURSOR); yych = *++YYCURSOR; @@ -3572,11 +3594,11 @@ yy234: ++YYCURSOR; YYDEBUG(235, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1398 "Zend/zend_language_scanner.l" +#line 1420 "Zend/zend_language_scanner.l" { return T_DIV_EQUAL; } -#line 3580 "Zend/zend_language_scanner.c" +#line 3602 "Zend/zend_language_scanner.c" yy236: YYDEBUG(236, *YYCURSOR); yych = *++YYCURSOR; @@ -3599,42 +3621,42 @@ yy239: ++YYCURSOR; YYDEBUG(240, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1394 "Zend/zend_language_scanner.l" +#line 1416 "Zend/zend_language_scanner.l" { return T_MUL_EQUAL; } -#line 3607 "Zend/zend_language_scanner.c" +#line 3629 "Zend/zend_language_scanner.c" yy241: YYDEBUG(241, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy245; YYDEBUG(242, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1454 "Zend/zend_language_scanner.l" +#line 1476 "Zend/zend_language_scanner.l" { return T_SR; } -#line 3618 "Zend/zend_language_scanner.c" +#line 3640 "Zend/zend_language_scanner.c" yy243: YYDEBUG(243, *YYCURSOR); ++YYCURSOR; YYDEBUG(244, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1382 "Zend/zend_language_scanner.l" +#line 1404 "Zend/zend_language_scanner.l" { return T_IS_GREATER_OR_EQUAL; } -#line 3628 "Zend/zend_language_scanner.c" +#line 3650 "Zend/zend_language_scanner.c" yy245: YYDEBUG(245, *YYCURSOR); ++YYCURSOR; YYDEBUG(246, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1414 "Zend/zend_language_scanner.l" +#line 1436 "Zend/zend_language_scanner.l" { return T_SR_EQUAL; } -#line 3638 "Zend/zend_language_scanner.c" +#line 3660 "Zend/zend_language_scanner.c" yy247: YYDEBUG(247, *YYCURSOR); yyaccept = 5; @@ -3645,11 +3667,11 @@ yy247: yy248: YYDEBUG(248, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1450 "Zend/zend_language_scanner.l" +#line 1472 "Zend/zend_language_scanner.l" { return T_SL; } -#line 3653 "Zend/zend_language_scanner.c" +#line 3675 "Zend/zend_language_scanner.c" yy249: YYDEBUG(249, *YYCURSOR); yych = *++YYCURSOR; @@ -3661,22 +3683,22 @@ yy250: ++YYCURSOR; YYDEBUG(251, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1378 "Zend/zend_language_scanner.l" +#line 1400 "Zend/zend_language_scanner.l" { return T_IS_SMALLER_OR_EQUAL; } -#line 3669 "Zend/zend_language_scanner.c" +#line 3691 "Zend/zend_language_scanner.c" yy252: YYDEBUG(252, *YYCURSOR); ++YYCURSOR; yy253: YYDEBUG(253, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1374 "Zend/zend_language_scanner.l" +#line 1396 "Zend/zend_language_scanner.l" { return T_IS_NOT_EQUAL; } -#line 3680 "Zend/zend_language_scanner.c" +#line 3702 "Zend/zend_language_scanner.c" yy254: YYDEBUG(254, *YYCURSOR); yych = *++YYCURSOR; @@ -3727,11 +3749,11 @@ yy261: ++YYCURSOR; YYDEBUG(262, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1410 "Zend/zend_language_scanner.l" +#line 1432 "Zend/zend_language_scanner.l" { return T_SL_EQUAL; } -#line 3735 "Zend/zend_language_scanner.c" +#line 3757 "Zend/zend_language_scanner.c" yy263: YYDEBUG(263, *YYCURSOR); ++YYCURSOR; @@ -3836,7 +3858,7 @@ yy272: yy273: YYDEBUG(273, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2069 "Zend/zend_language_scanner.l" +#line 2091 "Zend/zend_language_scanner.l" { char *s; int bprefix = (yytext[0] != '<') ? 1 : 0; @@ -3884,7 +3906,7 @@ yy273: return T_START_HEREDOC; } -#line 3888 "Zend/zend_language_scanner.c" +#line 3910 "Zend/zend_language_scanner.c" yy274: YYDEBUG(274, *YYCURSOR); yych = *++YYCURSOR; @@ -3924,31 +3946,31 @@ yy277: ++YYCURSOR; YYDEBUG(279, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1366 "Zend/zend_language_scanner.l" +#line 1388 "Zend/zend_language_scanner.l" { return T_IS_NOT_IDENTICAL; } -#line 3932 "Zend/zend_language_scanner.c" +#line 3954 "Zend/zend_language_scanner.c" yy280: YYDEBUG(280, *YYCURSOR); ++YYCURSOR; YYDEBUG(281, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1386 "Zend/zend_language_scanner.l" +#line 1408 "Zend/zend_language_scanner.l" { return T_PLUS_EQUAL; } -#line 3942 "Zend/zend_language_scanner.c" +#line 3964 "Zend/zend_language_scanner.c" yy282: YYDEBUG(282, *YYCURSOR); ++YYCURSOR; YYDEBUG(283, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1354 "Zend/zend_language_scanner.l" +#line 1376 "Zend/zend_language_scanner.l" { return T_INC; } -#line 3952 "Zend/zend_language_scanner.c" +#line 3974 "Zend/zend_language_scanner.c" yy284: YYDEBUG(284, *YYCURSOR); yych = *++YYCURSOR; @@ -3963,11 +3985,11 @@ yy285: } YYDEBUG(286, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1438 "Zend/zend_language_scanner.l" +#line 1460 "Zend/zend_language_scanner.l" { return T_LOGICAL_OR; } -#line 3971 "Zend/zend_language_scanner.c" +#line 3993 "Zend/zend_language_scanner.c" yy287: YYDEBUG(287, *YYCURSOR); yych = *++YYCURSOR; @@ -4046,12 +4068,12 @@ yy295: ++YYCURSOR; YYDEBUG(296, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1349 "Zend/zend_language_scanner.l" +#line 1371 "Zend/zend_language_scanner.l" { yyless((sizeof("object") - 1)); return T_OBJECT_HINT; } -#line 4055 "Zend/zend_language_scanner.c" +#line 4077 "Zend/zend_language_scanner.c" yy297: YYDEBUG(297, *YYCURSOR); yych = *++YYCURSOR; @@ -4144,7 +4166,7 @@ yy305: ++YYCURSOR; YYDEBUG(306, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1322 "Zend/zend_language_scanner.l" +#line 1344 "Zend/zend_language_scanner.l" { if (yytext[3] == 'e') { yyless((sizeof("integer") - 1)); @@ -4155,7 +4177,7 @@ yy305: } return T_INT_HINT; } -#line 4159 "Zend/zend_language_scanner.c" +#line 4181 "Zend/zend_language_scanner.c" yy307: YYDEBUG(307, *YYCURSOR); yych = *++YYCURSOR; @@ -4169,42 +4191,42 @@ yy308: } YYDEBUG(309, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1290 "Zend/zend_language_scanner.l" +#line 1312 "Zend/zend_language_scanner.l" { return T_LIST; } -#line 4177 "Zend/zend_language_scanner.c" +#line 4199 "Zend/zend_language_scanner.c" yy310: YYDEBUG(310, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy314; YYDEBUG(311, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1370 "Zend/zend_language_scanner.l" +#line 1392 "Zend/zend_language_scanner.l" { return T_IS_EQUAL; } -#line 4188 "Zend/zend_language_scanner.c" +#line 4210 "Zend/zend_language_scanner.c" yy312: YYDEBUG(312, *YYCURSOR); ++YYCURSOR; YYDEBUG(313, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1286 "Zend/zend_language_scanner.l" +#line 1308 "Zend/zend_language_scanner.l" { return T_DOUBLE_ARROW; } -#line 4198 "Zend/zend_language_scanner.c" +#line 4220 "Zend/zend_language_scanner.c" yy314: YYDEBUG(314, *YYCURSOR); ++YYCURSOR; YYDEBUG(315, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1362 "Zend/zend_language_scanner.l" +#line 1384 "Zend/zend_language_scanner.l" { return T_IS_IDENTICAL; } -#line 4208 "Zend/zend_language_scanner.c" +#line 4230 "Zend/zend_language_scanner.c" yy316: YYDEBUG(316, *YYCURSOR); yych = *++YYCURSOR; @@ -4326,7 +4348,7 @@ yy331: } YYDEBUG(334, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1666 "Zend/zend_language_scanner.l" +#line 1688 "Zend/zend_language_scanner.l" { if (CG(current_namespace)) { *zendlval = *CG(current_namespace); @@ -4336,7 +4358,7 @@ yy331: } return T_NS_C; } -#line 4340 "Zend/zend_language_scanner.c" +#line 4362 "Zend/zend_language_scanner.c" yy335: YYDEBUG(335, *YYCURSOR); yych = *++YYCURSOR; @@ -4356,7 +4378,7 @@ yy336: } YYDEBUG(339, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1639 "Zend/zend_language_scanner.l" +#line 1661 "Zend/zend_language_scanner.l" { char *filename = zend_get_compiled_filename(TSRMLS_C); const size_t filename_len = strlen(filename); @@ -4383,7 +4405,7 @@ yy336: zendlval->type = IS_STRING; return T_DIR; } -#line 4387 "Zend/zend_language_scanner.c" +#line 4409 "Zend/zend_language_scanner.c" yy340: YYDEBUG(340, *YYCURSOR); yych = *++YYCURSOR; @@ -4408,13 +4430,13 @@ yy342: } YYDEBUG(345, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1621 "Zend/zend_language_scanner.l" +#line 1643 "Zend/zend_language_scanner.l" { zendlval->value.lval = CG(zend_lineno); zendlval->type = IS_LONG; return T_LINE; } -#line 4418 "Zend/zend_language_scanner.c" +#line 4440 "Zend/zend_language_scanner.c" yy346: YYDEBUG(346, *YYCURSOR); yych = *++YYCURSOR; @@ -4449,7 +4471,7 @@ yy350: } YYDEBUG(353, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1600 "Zend/zend_language_scanner.l" +#line 1622 "Zend/zend_language_scanner.l" { char *class_name = CG(active_class_entry) ? CG(active_class_entry)->name : NULL; char *func_name = CG(active_op_array)? CG(active_op_array)->function_name : NULL; @@ -4470,7 +4492,7 @@ yy350: zendlval->type = IS_STRING; return T_METHOD_C; } -#line 4474 "Zend/zend_language_scanner.c" +#line 4496 "Zend/zend_language_scanner.c" yy354: YYDEBUG(354, *YYCURSOR); yych = *++YYCURSOR; @@ -4521,7 +4543,7 @@ yy361: } YYDEBUG(364, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1584 "Zend/zend_language_scanner.l" +#line 1606 "Zend/zend_language_scanner.l" { char *func_name = NULL; @@ -4537,7 +4559,7 @@ yy361: zendlval->type = IS_STRING; return T_FUNC_C; } -#line 4541 "Zend/zend_language_scanner.c" +#line 4563 "Zend/zend_language_scanner.c" yy365: YYDEBUG(365, *YYCURSOR); yych = *++YYCURSOR; @@ -4557,7 +4579,7 @@ yy366: } YYDEBUG(369, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1627 "Zend/zend_language_scanner.l" +#line 1649 "Zend/zend_language_scanner.l" { char *filename = zend_get_compiled_filename(TSRMLS_C); @@ -4569,7 +4591,7 @@ yy366: zendlval->type = IS_STRING; return T_FILE; } -#line 4573 "Zend/zend_language_scanner.c" +#line 4595 "Zend/zend_language_scanner.c" yy370: YYDEBUG(370, *YYCURSOR); yych = *++YYCURSOR; @@ -4599,7 +4621,7 @@ yy373: } YYDEBUG(376, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1568 "Zend/zend_language_scanner.l" +#line 1590 "Zend/zend_language_scanner.l" { char *class_name = NULL; @@ -4615,7 +4637,7 @@ yy373: zendlval->type = IS_STRING; return T_CLASS_C; } -#line 4619 "Zend/zend_language_scanner.c" +#line 4641 "Zend/zend_language_scanner.c" yy377: YYDEBUG(377, *YYCURSOR); yych = *++YYCURSOR; @@ -4677,11 +4699,11 @@ yy388: } YYDEBUG(389, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1254 "Zend/zend_language_scanner.l" +#line 1276 "Zend/zend_language_scanner.l" { return T_HALT_COMPILER; } -#line 4685 "Zend/zend_language_scanner.c" +#line 4707 "Zend/zend_language_scanner.c" yy390: YYDEBUG(390, *YYCURSOR); yych = *++YYCURSOR; @@ -4701,11 +4723,11 @@ yy392: } YYDEBUG(393, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1234 "Zend/zend_language_scanner.l" +#line 1256 "Zend/zend_language_scanner.l" { return T_USE; } -#line 4709 "Zend/zend_language_scanner.c" +#line 4731 "Zend/zend_language_scanner.c" yy394: YYDEBUG(394, *YYCURSOR); yych = *++YYCURSOR; @@ -4724,11 +4746,11 @@ yy396: } YYDEBUG(397, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1282 "Zend/zend_language_scanner.l" +#line 1304 "Zend/zend_language_scanner.l" { return T_UNSET; } -#line 4732 "Zend/zend_language_scanner.c" +#line 4754 "Zend/zend_language_scanner.c" yy398: YYDEBUG(398, *YYCURSOR); ++YYCURSOR; @@ -4910,11 +4932,11 @@ yy413: ++YYCURSOR; YYDEBUG(415, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1178 "Zend/zend_language_scanner.l" +#line 1200 "Zend/zend_language_scanner.l" { return T_INT_CAST; } -#line 4918 "Zend/zend_language_scanner.c" +#line 4940 "Zend/zend_language_scanner.c" yy416: YYDEBUG(416, *YYCURSOR); yych = *++YYCURSOR; @@ -4958,11 +4980,11 @@ yy421: ++YYCURSOR; YYDEBUG(424, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1182 "Zend/zend_language_scanner.l" +#line 1204 "Zend/zend_language_scanner.l" { return T_DOUBLE_CAST; } -#line 4966 "Zend/zend_language_scanner.c" +#line 4988 "Zend/zend_language_scanner.c" yy425: YYDEBUG(425, *YYCURSOR); yych = *++YYCURSOR; @@ -5038,11 +5060,11 @@ yy436: ++YYCURSOR; YYDEBUG(439, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1190 "Zend/zend_language_scanner.l" +#line 1212 "Zend/zend_language_scanner.l" { return T_SCALAR_CAST; } -#line 5046 "Zend/zend_language_scanner.c" +#line 5068 "Zend/zend_language_scanner.c" yy440: YYDEBUG(440, *YYCURSOR); yych = *++YYCURSOR; @@ -5075,11 +5097,11 @@ yy443: ++YYCURSOR; YYDEBUG(446, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1186 "Zend/zend_language_scanner.l" +#line 1208 "Zend/zend_language_scanner.l" { return T_STRING_CAST; } -#line 5083 "Zend/zend_language_scanner.c" +#line 5105 "Zend/zend_language_scanner.c" yy447: YYDEBUG(447, *YYCURSOR); yych = *++YYCURSOR; @@ -5112,11 +5134,11 @@ yy450: ++YYCURSOR; YYDEBUG(453, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1194 "Zend/zend_language_scanner.l" +#line 1216 "Zend/zend_language_scanner.l" { return T_ARRAY_CAST; } -#line 5120 "Zend/zend_language_scanner.c" +#line 5142 "Zend/zend_language_scanner.c" yy454: YYDEBUG(454, *YYCURSOR); yych = *++YYCURSOR; @@ -5154,11 +5176,11 @@ yy458: ++YYCURSOR; YYDEBUG(461, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1198 "Zend/zend_language_scanner.l" +#line 1220 "Zend/zend_language_scanner.l" { return T_OBJECT_CAST; } -#line 5162 "Zend/zend_language_scanner.c" +#line 5184 "Zend/zend_language_scanner.c" yy462: YYDEBUG(462, *YYCURSOR); yych = *++YYCURSOR; @@ -5199,11 +5221,11 @@ yy467: ++YYCURSOR; YYDEBUG(469, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1202 "Zend/zend_language_scanner.l" +#line 1224 "Zend/zend_language_scanner.l" { return T_BOOL_CAST; } -#line 5207 "Zend/zend_language_scanner.c" +#line 5229 "Zend/zend_language_scanner.c" yy470: YYDEBUG(470, *YYCURSOR); yych = *++YYCURSOR; @@ -5263,11 +5285,11 @@ yy478: ++YYCURSOR; YYDEBUG(481, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1206 "Zend/zend_language_scanner.l" +#line 1228 "Zend/zend_language_scanner.l" { return T_UNSET_CAST; } -#line 5271 "Zend/zend_language_scanner.c" +#line 5293 "Zend/zend_language_scanner.c" yy482: YYDEBUG(482, *YYCURSOR); yych = *++YYCURSOR; @@ -5281,11 +5303,11 @@ yy483: } YYDEBUG(484, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1174 "Zend/zend_language_scanner.l" +#line 1196 "Zend/zend_language_scanner.l" { return T_VAR; } -#line 5289 "Zend/zend_language_scanner.c" +#line 5311 "Zend/zend_language_scanner.c" yy485: YYDEBUG(485, *YYCURSOR); yych = *++YYCURSOR; @@ -5399,12 +5421,12 @@ yy497: ++YYCURSOR; YYDEBUG(498, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1317 "Zend/zend_language_scanner.l" +#line 1339 "Zend/zend_language_scanner.l" { yyless(7); return T_NUMERIC_HINT; } -#line 5408 "Zend/zend_language_scanner.c" +#line 5430 "Zend/zend_language_scanner.c" yy499: YYDEBUG(499, *YYCURSOR); ++YYCURSOR; @@ -5413,11 +5435,11 @@ yy499: } YYDEBUG(500, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1166 "Zend/zend_language_scanner.l" +#line 1188 "Zend/zend_language_scanner.l" { return T_NEW; } -#line 5421 "Zend/zend_language_scanner.c" +#line 5443 "Zend/zend_language_scanner.c" yy501: YYDEBUG(501, *YYCURSOR); yych = *++YYCURSOR; @@ -5456,21 +5478,21 @@ yy507: } YYDEBUG(508, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1230 "Zend/zend_language_scanner.l" +#line 1252 "Zend/zend_language_scanner.l" { return T_NAMESPACE; } -#line 5464 "Zend/zend_language_scanner.c" +#line 5486 "Zend/zend_language_scanner.c" yy509: YYDEBUG(509, *YYCURSOR); ++YYCURSOR; YYDEBUG(510, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1158 "Zend/zend_language_scanner.l" +#line 1180 "Zend/zend_language_scanner.l" { return T_PAAMAYIM_NEKUDOTAYIM; } -#line 5474 "Zend/zend_language_scanner.c" +#line 5496 "Zend/zend_language_scanner.c" yy511: YYDEBUG(511, *YYCURSOR); ++YYCURSOR; @@ -5492,32 +5514,32 @@ yy513: ++YYCURSOR; YYDEBUG(514, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1390 "Zend/zend_language_scanner.l" +#line 1412 "Zend/zend_language_scanner.l" { return T_MINUS_EQUAL; } -#line 5500 "Zend/zend_language_scanner.c" +#line 5522 "Zend/zend_language_scanner.c" yy515: YYDEBUG(515, *YYCURSOR); ++YYCURSOR; YYDEBUG(516, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1358 "Zend/zend_language_scanner.l" +#line 1380 "Zend/zend_language_scanner.l" { return T_DEC; } -#line 5510 "Zend/zend_language_scanner.c" +#line 5532 "Zend/zend_language_scanner.c" yy517: YYDEBUG(517, *YYCURSOR); ++YYCURSOR; YYDEBUG(518, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1128 "Zend/zend_language_scanner.l" +#line 1150 "Zend/zend_language_scanner.l" { yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); return T_OBJECT_OPERATOR; } -#line 5521 "Zend/zend_language_scanner.c" +#line 5543 "Zend/zend_language_scanner.c" yy519: YYDEBUG(519, *YYCURSOR); yych = *++YYCURSOR; @@ -5562,11 +5584,11 @@ yy524: } YYDEBUG(525, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1278 "Zend/zend_language_scanner.l" +#line 1300 "Zend/zend_language_scanner.l" { return T_PUBLIC; } -#line 5570 "Zend/zend_language_scanner.c" +#line 5592 "Zend/zend_language_scanner.c" yy526: YYDEBUG(526, *YYCURSOR); yych = *++YYCURSOR; @@ -5621,11 +5643,11 @@ yy533: } YYDEBUG(534, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1274 "Zend/zend_language_scanner.l" +#line 1296 "Zend/zend_language_scanner.l" { return T_PROTECTED; } -#line 5629 "Zend/zend_language_scanner.c" +#line 5651 "Zend/zend_language_scanner.c" yy535: YYDEBUG(535, *YYCURSOR); yych = *++YYCURSOR; @@ -5655,11 +5677,11 @@ yy539: } YYDEBUG(540, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1270 "Zend/zend_language_scanner.l" +#line 1292 "Zend/zend_language_scanner.l" { return T_PRIVATE; } -#line 5663 "Zend/zend_language_scanner.c" +#line 5685 "Zend/zend_language_scanner.c" yy541: YYDEBUG(541, *YYCURSOR); ++YYCURSOR; @@ -5668,11 +5690,11 @@ yy541: } YYDEBUG(542, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1104 "Zend/zend_language_scanner.l" +#line 1126 "Zend/zend_language_scanner.l" { return T_PRINT; } -#line 5676 "Zend/zend_language_scanner.c" +#line 5698 "Zend/zend_language_scanner.c" yy543: YYDEBUG(543, *YYCURSOR); yych = *++YYCURSOR; @@ -5697,11 +5719,11 @@ yy546: } YYDEBUG(547, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1096 "Zend/zend_language_scanner.l" +#line 1118 "Zend/zend_language_scanner.l" { return T_GOTO; } -#line 5705 "Zend/zend_language_scanner.c" +#line 5727 "Zend/zend_language_scanner.c" yy548: YYDEBUG(548, *YYCURSOR); yych = *++YYCURSOR; @@ -5725,11 +5747,11 @@ yy551: } YYDEBUG(552, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1242 "Zend/zend_language_scanner.l" +#line 1264 "Zend/zend_language_scanner.l" { return T_GLOBAL; } -#line 5733 "Zend/zend_language_scanner.c" +#line 5755 "Zend/zend_language_scanner.c" yy553: YYDEBUG(553, *YYCURSOR); yych = *++YYCURSOR; @@ -5778,11 +5800,11 @@ yy561: } YYDEBUG(562, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1088 "Zend/zend_language_scanner.l" +#line 1110 "Zend/zend_language_scanner.l" { return T_BREAK; } -#line 5786 "Zend/zend_language_scanner.c" +#line 5808 "Zend/zend_language_scanner.c" yy563: YYDEBUG(563, *YYCURSOR); yych = *++YYCURSOR; @@ -5887,7 +5909,7 @@ yy569: ++YYCURSOR; YYDEBUG(570, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1298 "Zend/zend_language_scanner.l" +#line 1320 "Zend/zend_language_scanner.l" { if (yytext[4] == 'e') { yyless((sizeof("boolean") - 1)); @@ -5896,7 +5918,7 @@ yy569: } return T_BOOL_HINT; } -#line 5900 "Zend/zend_language_scanner.c" +#line 5922 "Zend/zend_language_scanner.c" yy571: YYDEBUG(571, *YYCURSOR); yych = *++YYCURSOR; @@ -6023,12 +6045,12 @@ yy582: ++YYCURSOR; YYDEBUG(583, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1307 "Zend/zend_language_scanner.l" +#line 1329 "Zend/zend_language_scanner.l" { yyless(6); return T_STRING_HINT; } -#line 6032 "Zend/zend_language_scanner.c" +#line 6054 "Zend/zend_language_scanner.c" yy584: YYDEBUG(584, *YYCURSOR); yych = *++YYCURSOR; @@ -6084,11 +6106,11 @@ yy591: } YYDEBUG(592, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1072 "Zend/zend_language_scanner.l" +#line 1094 "Zend/zend_language_scanner.l" { return T_SWITCH; } -#line 6092 "Zend/zend_language_scanner.c" +#line 6114 "Zend/zend_language_scanner.c" yy593: YYDEBUG(593, *YYCURSOR); yych = *++YYCURSOR; @@ -6129,11 +6151,11 @@ yy599: } YYDEBUG(600, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1258 "Zend/zend_language_scanner.l" +#line 1280 "Zend/zend_language_scanner.l" { return T_STATIC; } -#line 6137 "Zend/zend_language_scanner.c" +#line 6159 "Zend/zend_language_scanner.c" yy601: YYDEBUG(601, *YYCURSOR); yych = *++YYCURSOR; @@ -6225,12 +6247,12 @@ yy609: ++YYCURSOR; YYDEBUG(610, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1312 "Zend/zend_language_scanner.l" +#line 1334 "Zend/zend_language_scanner.l" { yyless(6); return T_SCALAR_HINT; } -#line 6234 "Zend/zend_language_scanner.c" +#line 6256 "Zend/zend_language_scanner.c" yy611: YYDEBUG(611, *YYCURSOR); yych = *++YYCURSOR; @@ -6257,11 +6279,11 @@ yy614: } YYDEBUG(615, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1068 "Zend/zend_language_scanner.l" +#line 1090 "Zend/zend_language_scanner.l" { return T_AS; } -#line 6265 "Zend/zend_language_scanner.c" +#line 6287 "Zend/zend_language_scanner.c" yy616: YYDEBUG(616, *YYCURSOR); yych = *++YYCURSOR; @@ -6280,11 +6302,11 @@ yy618: } YYDEBUG(619, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1294 "Zend/zend_language_scanner.l" +#line 1316 "Zend/zend_language_scanner.l" { return T_ARRAY; } -#line 6288 "Zend/zend_language_scanner.c" +#line 6310 "Zend/zend_language_scanner.c" yy620: YYDEBUG(620, *YYCURSOR); ++YYCURSOR; @@ -6293,11 +6315,11 @@ yy620: } YYDEBUG(621, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1442 "Zend/zend_language_scanner.l" +#line 1464 "Zend/zend_language_scanner.l" { return T_LOGICAL_AND; } -#line 6301 "Zend/zend_language_scanner.c" +#line 6323 "Zend/zend_language_scanner.c" yy622: YYDEBUG(622, *YYCURSOR); yych = *++YYCURSOR; @@ -6331,11 +6353,11 @@ yy627: } YYDEBUG(628, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1262 "Zend/zend_language_scanner.l" +#line 1284 "Zend/zend_language_scanner.l" { return T_ABSTRACT; } -#line 6339 "Zend/zend_language_scanner.c" +#line 6361 "Zend/zend_language_scanner.c" yy629: YYDEBUG(629, *YYCURSOR); yych = *++YYCURSOR; @@ -6359,11 +6381,11 @@ yy632: } YYDEBUG(633, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1028 "Zend/zend_language_scanner.l" +#line 1050 "Zend/zend_language_scanner.l" { return T_WHILE; } -#line 6367 "Zend/zend_language_scanner.c" +#line 6389 "Zend/zend_language_scanner.c" yy634: YYDEBUG(634, *YYCURSOR); ++YYCURSOR; @@ -6372,11 +6394,11 @@ yy634: } YYDEBUG(635, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1012 "Zend/zend_language_scanner.l" +#line 1034 "Zend/zend_language_scanner.l" { return T_IF; } -#line 6380 "Zend/zend_language_scanner.c" +#line 6402 "Zend/zend_language_scanner.c" yy636: YYDEBUG(636, *YYCURSOR); yych = *++YYCURSOR; @@ -6428,11 +6450,11 @@ yy641: } YYDEBUG(642, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1246 "Zend/zend_language_scanner.l" +#line 1268 "Zend/zend_language_scanner.l" { return T_ISSET; } -#line 6436 "Zend/zend_language_scanner.c" +#line 6458 "Zend/zend_language_scanner.c" yy643: YYDEBUG(643, *YYCURSOR); yych = *++YYCURSOR; @@ -6528,11 +6550,11 @@ yy649: yy650: YYDEBUG(650, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1214 "Zend/zend_language_scanner.l" +#line 1236 "Zend/zend_language_scanner.l" { return T_INCLUDE; } -#line 6536 "Zend/zend_language_scanner.c" +#line 6558 "Zend/zend_language_scanner.c" yy651: YYDEBUG(651, *YYCURSOR); yych = *++YYCURSOR; @@ -6561,11 +6583,11 @@ yy655: } YYDEBUG(656, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1218 "Zend/zend_language_scanner.l" +#line 1240 "Zend/zend_language_scanner.l" { return T_INCLUDE_ONCE; } -#line 6569 "Zend/zend_language_scanner.c" +#line 6591 "Zend/zend_language_scanner.c" yy657: YYDEBUG(657, *YYCURSOR); yych = *++YYCURSOR; @@ -6619,11 +6641,11 @@ yy664: } YYDEBUG(665, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1112 "Zend/zend_language_scanner.l" +#line 1134 "Zend/zend_language_scanner.l" { return T_INTERFACE; } -#line 6627 "Zend/zend_language_scanner.c" +#line 6649 "Zend/zend_language_scanner.c" yy666: YYDEBUG(666, *YYCURSOR); yych = *++YYCURSOR; @@ -6673,11 +6695,11 @@ yy672: } YYDEBUG(673, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1238 "Zend/zend_language_scanner.l" +#line 1260 "Zend/zend_language_scanner.l" { return T_INSTEADOF; } -#line 6681 "Zend/zend_language_scanner.c" +#line 6703 "Zend/zend_language_scanner.c" yy674: YYDEBUG(674, *YYCURSOR); yych = *++YYCURSOR; @@ -6706,11 +6728,11 @@ yy678: } YYDEBUG(679, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1064 "Zend/zend_language_scanner.l" +#line 1086 "Zend/zend_language_scanner.l" { return T_INSTANCEOF; } -#line 6714 "Zend/zend_language_scanner.c" +#line 6736 "Zend/zend_language_scanner.c" yy680: YYDEBUG(680, *YYCURSOR); yych = *++YYCURSOR; @@ -6754,11 +6776,11 @@ yy687: } YYDEBUG(688, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1124 "Zend/zend_language_scanner.l" +#line 1146 "Zend/zend_language_scanner.l" { return T_IMPLEMENTS; } -#line 6762 "Zend/zend_language_scanner.c" +#line 6784 "Zend/zend_language_scanner.c" yy689: YYDEBUG(689, *YYCURSOR); yych = *++YYCURSOR; @@ -6786,11 +6808,11 @@ yy690: } YYDEBUG(692, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1000 "Zend/zend_language_scanner.l" +#line 1022 "Zend/zend_language_scanner.l" { return T_TRY; } -#line 6794 "Zend/zend_language_scanner.c" +#line 6816 "Zend/zend_language_scanner.c" yy693: YYDEBUG(693, *YYCURSOR); yych = *++YYCURSOR; @@ -6809,11 +6831,11 @@ yy695: } YYDEBUG(696, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1116 "Zend/zend_language_scanner.l" +#line 1138 "Zend/zend_language_scanner.l" { return T_TRAIT; } -#line 6817 "Zend/zend_language_scanner.c" +#line 6839 "Zend/zend_language_scanner.c" yy697: YYDEBUG(697, *YYCURSOR); yych = *++YYCURSOR; @@ -6832,11 +6854,11 @@ yy699: } YYDEBUG(700, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1008 "Zend/zend_language_scanner.l" +#line 1030 "Zend/zend_language_scanner.l" { return T_THROW; } -#line 6840 "Zend/zend_language_scanner.c" +#line 6862 "Zend/zend_language_scanner.c" yy701: YYDEBUG(701, *YYCURSOR); yych = *++YYCURSOR; @@ -6978,12 +7000,12 @@ yy715: ++YYCURSOR; YYDEBUG(716, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1344 "Zend/zend_language_scanner.l" +#line 1366 "Zend/zend_language_scanner.l" { yyless((sizeof("resource") - 1)); return T_RESOURCE_HINT; } -#line 6987 "Zend/zend_language_scanner.c" +#line 7009 "Zend/zend_language_scanner.c" yy717: YYDEBUG(717, *YYCURSOR); yyaccept = 0; @@ -7060,7 +7082,7 @@ yy722: ++YYCURSOR; YYDEBUG(723, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1333 "Zend/zend_language_scanner.l" +#line 1355 "Zend/zend_language_scanner.l" { if (yytext[4] == 'l') { yyless((sizeof("double") - 1)); @@ -7071,7 +7093,7 @@ yy722: } return T_DOUBLE_HINT; } -#line 7075 "Zend/zend_language_scanner.c" +#line 7097 "Zend/zend_language_scanner.c" yy724: YYDEBUG(724, *YYCURSOR); yych = *++YYCURSOR; @@ -7108,11 +7130,11 @@ yy727: yy728: YYDEBUG(728, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1222 "Zend/zend_language_scanner.l" +#line 1244 "Zend/zend_language_scanner.l" { return T_REQUIRE; } -#line 7116 "Zend/zend_language_scanner.c" +#line 7138 "Zend/zend_language_scanner.c" yy729: YYDEBUG(729, *YYCURSOR); yych = *++YYCURSOR; @@ -7141,11 +7163,11 @@ yy733: } YYDEBUG(734, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1226 "Zend/zend_language_scanner.l" +#line 1248 "Zend/zend_language_scanner.l" { return T_REQUIRE_ONCE; } -#line 7149 "Zend/zend_language_scanner.c" +#line 7171 "Zend/zend_language_scanner.c" yy735: YYDEBUG(735, *YYCURSOR); yych = *++YYCURSOR; @@ -7164,11 +7186,11 @@ yy737: } YYDEBUG(738, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 996 "Zend/zend_language_scanner.l" +#line 1018 "Zend/zend_language_scanner.l" { return T_RETURN; } -#line 7172 "Zend/zend_language_scanner.c" +#line 7194 "Zend/zend_language_scanner.c" yy739: YYDEBUG(739, *YYCURSOR); yych = *++YYCURSOR; @@ -7249,11 +7271,11 @@ yy748: } YYDEBUG(749, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1092 "Zend/zend_language_scanner.l" +#line 1114 "Zend/zend_language_scanner.l" { return T_CONTINUE; } -#line 7257 "Zend/zend_language_scanner.c" +#line 7279 "Zend/zend_language_scanner.c" yy750: YYDEBUG(750, *YYCURSOR); ++YYCURSOR; @@ -7262,11 +7284,11 @@ yy750: } YYDEBUG(751, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 992 "Zend/zend_language_scanner.l" +#line 1014 "Zend/zend_language_scanner.l" { return T_CONST; } -#line 7270 "Zend/zend_language_scanner.c" +#line 7292 "Zend/zend_language_scanner.c" yy752: YYDEBUG(752, *YYCURSOR); yych = *++YYCURSOR; @@ -7291,11 +7313,11 @@ yy755: } YYDEBUG(756, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1170 "Zend/zend_language_scanner.l" +#line 1192 "Zend/zend_language_scanner.l" { return T_CLONE; } -#line 7299 "Zend/zend_language_scanner.c" +#line 7321 "Zend/zend_language_scanner.c" yy757: YYDEBUG(757, *YYCURSOR); yych = *++YYCURSOR; @@ -7309,11 +7331,11 @@ yy758: } YYDEBUG(759, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1108 "Zend/zend_language_scanner.l" +#line 1130 "Zend/zend_language_scanner.l" { return T_CLASS; } -#line 7317 "Zend/zend_language_scanner.c" +#line 7339 "Zend/zend_language_scanner.c" yy760: YYDEBUG(760, *YYCURSOR); yych = *++YYCURSOR; @@ -7333,11 +7355,11 @@ yy762: } YYDEBUG(763, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1080 "Zend/zend_language_scanner.l" +#line 1102 "Zend/zend_language_scanner.l" { return T_CASE; } -#line 7341 "Zend/zend_language_scanner.c" +#line 7363 "Zend/zend_language_scanner.c" yy764: YYDEBUG(764, *YYCURSOR); yych = *++YYCURSOR; @@ -7351,11 +7373,11 @@ yy765: } YYDEBUG(766, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1004 "Zend/zend_language_scanner.l" +#line 1026 "Zend/zend_language_scanner.l" { return T_CATCH; } -#line 7359 "Zend/zend_language_scanner.c" +#line 7381 "Zend/zend_language_scanner.c" yy767: YYDEBUG(767, *YYCURSOR); yych = *++YYCURSOR; @@ -7412,11 +7434,11 @@ yy776: } YYDEBUG(777, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 988 "Zend/zend_language_scanner.l" +#line 1010 "Zend/zend_language_scanner.l" { return T_FUNCTION; } -#line 7420 "Zend/zend_language_scanner.c" +#line 7442 "Zend/zend_language_scanner.c" yy778: YYDEBUG(778, *YYCURSOR); ++YYCURSOR; @@ -7440,11 +7462,11 @@ yy778: yy779: YYDEBUG(779, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1040 "Zend/zend_language_scanner.l" +#line 1062 "Zend/zend_language_scanner.l" { return T_FOR; } -#line 7448 "Zend/zend_language_scanner.c" +#line 7470 "Zend/zend_language_scanner.c" yy780: YYDEBUG(780, *YYCURSOR); yych = *++YYCURSOR; @@ -7468,11 +7490,11 @@ yy783: } YYDEBUG(784, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1048 "Zend/zend_language_scanner.l" +#line 1070 "Zend/zend_language_scanner.l" { return T_FOREACH; } -#line 7476 "Zend/zend_language_scanner.c" +#line 7498 "Zend/zend_language_scanner.c" yy785: YYDEBUG(785, *YYCURSOR); yych = *++YYCURSOR; @@ -7502,11 +7524,11 @@ yy789: } YYDEBUG(790, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1266 "Zend/zend_language_scanner.l" +#line 1288 "Zend/zend_language_scanner.l" { return T_FINAL; } -#line 7510 "Zend/zend_language_scanner.c" +#line 7532 "Zend/zend_language_scanner.c" yy791: YYDEBUG(791, *YYCURSOR); yych = *++YYCURSOR; @@ -7552,11 +7574,11 @@ yy793: yy794: YYDEBUG(794, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1036 "Zend/zend_language_scanner.l" +#line 1058 "Zend/zend_language_scanner.l" { return T_DO; } -#line 7560 "Zend/zend_language_scanner.c" +#line 7582 "Zend/zend_language_scanner.c" yy795: YYDEBUG(795, *YYCURSOR); yych = *++YYCURSOR; @@ -7581,11 +7603,11 @@ yy798: } YYDEBUG(799, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 984 "Zend/zend_language_scanner.l" +#line 1006 "Zend/zend_language_scanner.l" { return T_EXIT; } -#line 7589 "Zend/zend_language_scanner.c" +#line 7611 "Zend/zend_language_scanner.c" yy800: YYDEBUG(800, *YYCURSOR); yych = *++YYCURSOR; @@ -7620,11 +7642,11 @@ yy805: } YYDEBUG(806, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1084 "Zend/zend_language_scanner.l" +#line 1106 "Zend/zend_language_scanner.l" { return T_DEFAULT; } -#line 7628 "Zend/zend_language_scanner.c" +#line 7650 "Zend/zend_language_scanner.c" yy807: YYDEBUG(807, *YYCURSOR); yych = *++YYCURSOR; @@ -7648,11 +7670,11 @@ yy810: } YYDEBUG(811, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1056 "Zend/zend_language_scanner.l" +#line 1078 "Zend/zend_language_scanner.l" { return T_DECLARE; } -#line 7656 "Zend/zend_language_scanner.c" +#line 7678 "Zend/zend_language_scanner.c" yy812: YYDEBUG(812, *YYCURSOR); yych = *++YYCURSOR; @@ -7732,11 +7754,11 @@ yy823: } YYDEBUG(824, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1120 "Zend/zend_language_scanner.l" +#line 1142 "Zend/zend_language_scanner.l" { return T_EXTENDS; } -#line 7740 "Zend/zend_language_scanner.c" +#line 7762 "Zend/zend_language_scanner.c" yy825: YYDEBUG(825, *YYCURSOR); ++YYCURSOR; @@ -7745,11 +7767,11 @@ yy825: } YYDEBUG(826, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 980 "Zend/zend_language_scanner.l" +#line 1002 "Zend/zend_language_scanner.l" { return T_EXIT; } -#line 7753 "Zend/zend_language_scanner.c" +#line 7775 "Zend/zend_language_scanner.c" yy827: YYDEBUG(827, *YYCURSOR); yych = *++YYCURSOR; @@ -7763,11 +7785,11 @@ yy828: } YYDEBUG(829, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1210 "Zend/zend_language_scanner.l" +#line 1232 "Zend/zend_language_scanner.l" { return T_EVAL; } -#line 7771 "Zend/zend_language_scanner.c" +#line 7793 "Zend/zend_language_scanner.c" yy830: YYDEBUG(830, *YYCURSOR); yych = *++YYCURSOR; @@ -7837,11 +7859,11 @@ yy839: } YYDEBUG(840, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1032 "Zend/zend_language_scanner.l" +#line 1054 "Zend/zend_language_scanner.l" { return T_ENDWHILE; } -#line 7845 "Zend/zend_language_scanner.c" +#line 7867 "Zend/zend_language_scanner.c" yy841: YYDEBUG(841, *YYCURSOR); yych = *++YYCURSOR; @@ -7870,11 +7892,11 @@ yy845: } YYDEBUG(846, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1076 "Zend/zend_language_scanner.l" +#line 1098 "Zend/zend_language_scanner.l" { return T_ENDSWITCH; } -#line 7878 "Zend/zend_language_scanner.c" +#line 7900 "Zend/zend_language_scanner.c" yy847: YYDEBUG(847, *YYCURSOR); ++YYCURSOR; @@ -7883,11 +7905,11 @@ yy847: } YYDEBUG(848, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1020 "Zend/zend_language_scanner.l" +#line 1042 "Zend/zend_language_scanner.l" { return T_ENDIF; } -#line 7891 "Zend/zend_language_scanner.c" +#line 7913 "Zend/zend_language_scanner.c" yy849: YYDEBUG(849, *YYCURSOR); yych = *++YYCURSOR; @@ -7916,11 +7938,11 @@ yy850: yy851: YYDEBUG(851, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1044 "Zend/zend_language_scanner.l" +#line 1066 "Zend/zend_language_scanner.l" { return T_ENDFOR; } -#line 7924 "Zend/zend_language_scanner.c" +#line 7946 "Zend/zend_language_scanner.c" yy852: YYDEBUG(852, *YYCURSOR); yych = *++YYCURSOR; @@ -7944,11 +7966,11 @@ yy855: } YYDEBUG(856, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1052 "Zend/zend_language_scanner.l" +#line 1074 "Zend/zend_language_scanner.l" { return T_ENDFOREACH; } -#line 7952 "Zend/zend_language_scanner.c" +#line 7974 "Zend/zend_language_scanner.c" yy857: YYDEBUG(857, *YYCURSOR); yych = *++YYCURSOR; @@ -7982,11 +8004,11 @@ yy862: } YYDEBUG(863, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1060 "Zend/zend_language_scanner.l" +#line 1082 "Zend/zend_language_scanner.l" { return T_ENDDECLARE; } -#line 7990 "Zend/zend_language_scanner.c" +#line 8012 "Zend/zend_language_scanner.c" yy864: YYDEBUG(864, *YYCURSOR); yych = *++YYCURSOR; @@ -8005,11 +8027,11 @@ yy866: } YYDEBUG(867, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1250 "Zend/zend_language_scanner.l" +#line 1272 "Zend/zend_language_scanner.l" { return T_EMPTY; } -#line 8013 "Zend/zend_language_scanner.c" +#line 8035 "Zend/zend_language_scanner.c" yy868: YYDEBUG(868, *YYCURSOR); yych = *++YYCURSOR; @@ -8038,11 +8060,11 @@ yy869: yy870: YYDEBUG(870, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1024 "Zend/zend_language_scanner.l" +#line 1046 "Zend/zend_language_scanner.l" { return T_ELSE; } -#line 8046 "Zend/zend_language_scanner.c" +#line 8068 "Zend/zend_language_scanner.c" yy871: YYDEBUG(871, *YYCURSOR); yych = *++YYCURSOR; @@ -8056,11 +8078,11 @@ yy872: } YYDEBUG(873, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1016 "Zend/zend_language_scanner.l" +#line 1038 "Zend/zend_language_scanner.l" { return T_ELSEIF; } -#line 8064 "Zend/zend_language_scanner.c" +#line 8086 "Zend/zend_language_scanner.c" yy874: YYDEBUG(874, *YYCURSOR); yych = *++YYCURSOR; @@ -8074,11 +8096,11 @@ yy875: } YYDEBUG(876, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1100 "Zend/zend_language_scanner.l" +#line 1122 "Zend/zend_language_scanner.l" { return T_ECHO; } -#line 8082 "Zend/zend_language_scanner.c" +#line 8104 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_LOOKING_FOR_PROPERTY: @@ -8151,7 +8173,7 @@ yy879: yy880: YYDEBUG(880, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1133 "Zend/zend_language_scanner.l" +#line 1155 "Zend/zend_language_scanner.l" { zendlval->value.str.val = yytext; /* no copying - intentional */ zendlval->value.str.len = yyleng; @@ -8159,7 +8181,7 @@ yy880: HANDLE_NEWLINES(yytext, yyleng); return T_WHITESPACE; } -#line 8163 "Zend/zend_language_scanner.c" +#line 8185 "Zend/zend_language_scanner.c" yy881: YYDEBUG(881, *YYCURSOR); ++YYCURSOR; @@ -8167,13 +8189,13 @@ yy881: yy882: YYDEBUG(882, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1152 "Zend/zend_language_scanner.l" +#line 1174 "Zend/zend_language_scanner.l" { yyless(0); yy_pop_state(TSRMLS_C); goto restart; } -#line 8177 "Zend/zend_language_scanner.c" +#line 8199 "Zend/zend_language_scanner.c" yy883: YYDEBUG(883, *YYCURSOR); ++YYCURSOR; @@ -8182,14 +8204,14 @@ yy883: yy884: YYDEBUG(884, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1145 "Zend/zend_language_scanner.l" +#line 1167 "Zend/zend_language_scanner.l" { yy_pop_state(TSRMLS_C); zend_copy_value(zendlval, yytext, yyleng); zendlval->type = IS_STRING; return T_STRING; } -#line 8193 "Zend/zend_language_scanner.c" +#line 8215 "Zend/zend_language_scanner.c" yy885: YYDEBUG(885, *YYCURSOR); yych = *++YYCURSOR; @@ -8210,11 +8232,11 @@ yy888: ++YYCURSOR; YYDEBUG(889, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1141 "Zend/zend_language_scanner.l" +#line 1163 "Zend/zend_language_scanner.l" { return T_OBJECT_OPERATOR; } -#line 8218 "Zend/zend_language_scanner.c" +#line 8240 "Zend/zend_language_scanner.c" yy890: YYDEBUG(890, *YYCURSOR); ++YYCURSOR; @@ -8284,7 +8306,7 @@ yy894: yy895: YYDEBUG(895, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1484 "Zend/zend_language_scanner.l" +#line 1506 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, yytext, yyleng); zendlval->type = IS_STRING; @@ -8292,20 +8314,20 @@ yy895: yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); return T_STRING_VARNAME; } -#line 8296 "Zend/zend_language_scanner.c" +#line 8318 "Zend/zend_language_scanner.c" yy896: YYDEBUG(896, *YYCURSOR); ++YYCURSOR; YYDEBUG(897, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1493 "Zend/zend_language_scanner.l" +#line 1515 "Zend/zend_language_scanner.l" { yyless(0); yy_pop_state(TSRMLS_C); yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); goto restart; } -#line 8309 "Zend/zend_language_scanner.c" +#line 8331 "Zend/zend_language_scanner.c" yy898: YYDEBUG(898, *YYCURSOR); ++YYCURSOR; @@ -8327,7 +8349,7 @@ yyc_ST_NOWDOC: ++YYCURSOR; YYDEBUG(903, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2320 "Zend/zend_language_scanner.l" +#line 2342 "Zend/zend_language_scanner.l" { int newline = 0; @@ -8382,7 +8404,7 @@ nowdoc_scan_done: HANDLE_NEWLINES(yytext, yyleng - newline); return T_ENCAPSED_AND_WHITESPACE; } -#line 8386 "Zend/zend_language_scanner.c" +#line 8408 "Zend/zend_language_scanner.c" /* *********************************** */ yyc_ST_VAR_OFFSET: { @@ -8482,7 +8504,7 @@ yy906: yy907: YYDEBUG(907, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1543 "Zend/zend_language_scanner.l" +#line 1565 "Zend/zend_language_scanner.l" { /* Offset could be treated as a long */ if (yyleng < MAX_LENGTH_OF_LONG - 1 || (yyleng == MAX_LENGTH_OF_LONG - 1 && strcmp(yytext, long_min_digits) < 0)) { zendlval->value.lval = strtol(yytext, NULL, 10); @@ -8494,7 +8516,7 @@ yy907: } return T_NUM_STRING; } -#line 8498 "Zend/zend_language_scanner.c" +#line 8520 "Zend/zend_language_scanner.c" yy908: YYDEBUG(908, *YYCURSOR); yych = *++YYCURSOR; @@ -8514,23 +8536,23 @@ yy909: yy910: YYDEBUG(910, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1848 "Zend/zend_language_scanner.l" +#line 1870 "Zend/zend_language_scanner.l" { /* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */ return yytext[0]; } -#line 8523 "Zend/zend_language_scanner.c" +#line 8545 "Zend/zend_language_scanner.c" yy911: YYDEBUG(911, *YYCURSOR); ++YYCURSOR; YYDEBUG(912, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1843 "Zend/zend_language_scanner.l" +#line 1865 "Zend/zend_language_scanner.l" { yy_pop_state(TSRMLS_C); return ']'; } -#line 8534 "Zend/zend_language_scanner.c" +#line 8556 "Zend/zend_language_scanner.c" yy913: YYDEBUG(913, *YYCURSOR); yych = *++YYCURSOR; @@ -8540,14 +8562,14 @@ yy914: ++YYCURSOR; YYDEBUG(915, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1853 "Zend/zend_language_scanner.l" +#line 1875 "Zend/zend_language_scanner.l" { /* Invalid rule to return a more explicit parse error with proper line number */ yyless(0); yy_pop_state(TSRMLS_C); return T_ENCAPSED_AND_WHITESPACE; } -#line 8551 "Zend/zend_language_scanner.c" +#line 8573 "Zend/zend_language_scanner.c" yy916: YYDEBUG(916, *YYCURSOR); ++YYCURSOR; @@ -8556,19 +8578,19 @@ yy916: yy917: YYDEBUG(917, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1860 "Zend/zend_language_scanner.l" +#line 1882 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, yytext, yyleng); zendlval->type = IS_STRING; return T_STRING; } -#line 8566 "Zend/zend_language_scanner.c" +#line 8588 "Zend/zend_language_scanner.c" yy918: YYDEBUG(918, *YYCURSOR); ++YYCURSOR; YYDEBUG(919, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2376 "Zend/zend_language_scanner.l" +#line 2398 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -8577,7 +8599,7 @@ yy918: zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); goto restart; } -#line 8581 "Zend/zend_language_scanner.c" +#line 8603 "Zend/zend_language_scanner.c" yy920: YYDEBUG(920, *YYCURSOR); ++YYCURSOR; @@ -8613,13 +8635,13 @@ yy922: yy924: YYDEBUG(924, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1837 "Zend/zend_language_scanner.l" +#line 1859 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); zendlval->type = IS_STRING; return T_VARIABLE; } -#line 8623 "Zend/zend_language_scanner.c" +#line 8645 "Zend/zend_language_scanner.c" yy925: YYDEBUG(925, *YYCURSOR); ++YYCURSOR; @@ -8651,14 +8673,14 @@ yy929: yy931: YYDEBUG(931, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1555 "Zend/zend_language_scanner.l" +#line 1577 "Zend/zend_language_scanner.l" { /* Offset must be treated as a string */ zendlval->value.str.val = (char *)estrndup(yytext, yyleng); zendlval->value.str.len = yyleng; zendlval->type = IS_STRING; return T_NUM_STRING; } -#line 8662 "Zend/zend_language_scanner.c" +#line 8684 "Zend/zend_language_scanner.c" yy932: YYDEBUG(932, *YYCURSOR); ++YYCURSOR; @@ -8671,6 +8693,6 @@ yy932: goto yy931; } } -#line 2385 "Zend/zend_language_scanner.l" +#line 2407 "Zend/zend_language_scanner.l" } diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index 5677b51544..8b7df2bbf7 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -120,6 +120,33 @@ do { \ BEGIN_EXTERN_C() +static size_t encoding_filter_script_to_internal(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC) +{ + const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding(TSRMLS_C); + assert(internal_encoding && zend_multibyte_check_lexer_compatibility(internal_encoding)); + return zend_multibyte_encoding_converter(to, to_length, from, from_length, internal_encoding, LANG_SCNG(script_encoding) TSRMLS_CC); +} + +static size_t encoding_filter_script_to_intermediate(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC) +{ + return zend_multibyte_encoding_converter(to, to_length, from, from_length, zend_multibyte_encoding_utf8, LANG_SCNG(script_encoding) TSRMLS_CC); +} + +static size_t encoding_filter_intermediate_to_script(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC) +{ + return zend_multibyte_encoding_converter(to, to_length, from, from_length, +LANG_SCNG(script_encoding), zend_multibyte_encoding_utf8 TSRMLS_CC); +} + +static size_t encoding_filter_intermediate_to_internal(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC) +{ + const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding(TSRMLS_C); + assert(internal_encoding && zend_multibyte_check_lexer_compatibility(internal_encoding)); + return zend_multibyte_encoding_converter(to, to_length, from, from_length, +internal_encoding, zend_multibyte_encoding_utf8 TSRMLS_CC); +} + + static void _yy_push_state(int new_state TSRMLS_DC) { zend_stack_push(&SCNG(state_stack), (void *) &YYGETCONDITION(), sizeof(int)); @@ -321,7 +348,6 @@ static const zend_encoding* zend_multibyte_detect_unicode(TSRMLS_D) /* remove BOM */ script = (unsigned char*)emalloc(LANG_SCNG(script_org_size)+1-bom_size); memcpy(script, LANG_SCNG(script_org)+bom_size, LANG_SCNG(script_org_size)+1-bom_size); - efree(LANG_SCNG(script_org)); LANG_SCNG(script_org) = script; LANG_SCNG(script_org_size) -= bom_size; @@ -418,8 +444,8 @@ ZEND_API int zend_multibyte_set_filter(const zend_encoding *onetime_encoding TSR if (!internal_encoding || LANG_SCNG(script_encoding) == internal_encoding) { if (!zend_multibyte_check_lexer_compatibility(LANG_SCNG(script_encoding))) { /* and if not, work around w/ script_encoding -> utf-8 -> script_encoding conversion */ - LANG_SCNG(input_filter) = zend_multibyte_script_encoding_filter; - LANG_SCNG(output_filter) = zend_multibyte_internal_encoding_filter; + LANG_SCNG(input_filter) = encoding_filter_script_to_intermediate; + LANG_SCNG(output_filter) = encoding_filter_intermediate_to_script; } else { LANG_SCNG(input_filter) = NULL; LANG_SCNG(output_filter) = NULL; @@ -427,9 +453,17 @@ ZEND_API int zend_multibyte_set_filter(const zend_encoding *onetime_encoding TSR return SUCCESS; } - /* both script and internal encodings are incompatible w/ flex */ - LANG_SCNG(input_filter) = zend_multibyte_script_encoding_filter; - LANG_SCNG(output_filter) = zend_multibyte_internal_encoding_filter; + if (zend_multibyte_check_lexer_compatibility(internal_encoding)) { + LANG_SCNG(input_filter) = encoding_filter_script_to_internal; + LANG_SCNG(output_filter) = NULL; + } else if (zend_multibyte_check_lexer_compatibility(LANG_SCNG(script_encoding))) { + LANG_SCNG(input_filter) = NULL; + LANG_SCNG(output_filter) = encoding_filter_script_to_internal; + } else { + /* both script and internal encodings are incompatible w/ flex */ + LANG_SCNG(input_filter) = encoding_filter_script_to_intermediate; + LANG_SCNG(output_filter) = encoding_filter_intermediate_to_internal; + } return 0; } @@ -789,21 +823,9 @@ int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter, zend_encoding *old_encoding TSRMLS_DC) { - size_t original_offset, offset, length; + size_t length; unsigned char *new_yy_start; - /* calculate current position */ - offset = original_offset = YYCURSOR - SCNG(yy_start); - if (old_input_filter && offset > 0) { - const zend_encoding *new_encoding = SCNG(script_encoding); - zend_encoding_filter new_filter = SCNG(input_filter); - SCNG(script_encoding) = old_encoding; - SCNG(input_filter) = old_input_filter; - offset = zend_get_scanned_file_offset(TSRMLS_C); - SCNG(script_encoding) = new_encoding; - SCNG(input_filter) = new_filter; - } - /* convert and set */ if (!SCNG(input_filter)) { if (SCNG(script_filtered)) { @@ -811,10 +833,10 @@ ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter SCNG(script_filtered) = NULL; } SCNG(script_filtered_size) = 0; - length = SCNG(script_org_size) - offset; - new_yy_start = SCNG(script_org) + offset; + length = SCNG(script_org_size); + new_yy_start = SCNG(script_org); } else { - if ((size_t)-1 == SCNG(input_filter)(&new_yy_start, &length, SCNG(script_org) + offset, SCNG(script_org_size) - offset TSRMLS_CC)) { + if ((size_t)-1 == SCNG(input_filter)(&new_yy_start, &length, SCNG(script_org), SCNG(script_org_size) TSRMLS_CC)) { zend_error_noreturn(E_COMPILE_ERROR, "Could not convert the script from the detected " "encoding \"%s\" to a compatible encoding", zend_multibyte_get_encoding_name(LANG_SCNG(script_encoding))); } diff --git a/Zend/zend_language_scanner_defs.h b/Zend/zend_language_scanner_defs.h index b82d87be4b..157d2ae353 100644 --- a/Zend/zend_language_scanner_defs.h +++ b/Zend/zend_language_scanner_defs.h @@ -1,4 +1,4 @@ -/* Generated by re2c 0.13.5 on Mon Jan 3 06:07:39 2011 */ +/* Generated by re2c 0.13.5 on Sun Mar 6 15:09:12 2011 */ #line 3 "Zend/zend_language_scanner_defs.h" enum YYCONDTYPE { diff --git a/Zend/zend_multibyte.c b/Zend/zend_multibyte.c index e28d600ade..775ea78f5e 100644 --- a/Zend/zend_multibyte.c +++ b/Zend/zend_multibyte.c @@ -206,26 +206,6 @@ ZEND_API int zend_multibyte_set_script_encoding_by_string(const char *new_value, return SUCCESS; } -ZEND_API size_t zend_multibyte_script_encoding_filter(unsigned char **to, size_t -*to_length, const unsigned char *from, size_t from_length TSRMLS_DC) -{ - const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding(TSRMLS_C); - if (!internal_encoding || !zend_multibyte_check_lexer_compatibility(internal_encoding)) { - internal_encoding = zend_multibyte_encoding_utf8; - } - return zend_multibyte_encoding_converter(to, to_length, from, from_length, internal_encoding, LANG_SCNG(script_encoding) TSRMLS_CC); -} - -ZEND_API size_t zend_multibyte_internal_encoding_filter(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC) -{ - const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding(TSRMLS_C); - if (!internal_encoding || !zend_multibyte_check_lexer_compatibility(internal_encoding)) { - internal_encoding = zend_multibyte_encoding_utf8; - } - return zend_multibyte_encoding_converter(to, to_length, from, from_length, -LANG_SCNG(script_encoding), internal_encoding TSRMLS_CC); -} - /* * Local variables: * tab-width: 4 diff --git a/Zend/zend_multibyte.h b/Zend/zend_multibyte.h index ea127116e0..5e0c51f57b 100644 --- a/Zend/zend_multibyte.h +++ b/Zend/zend_multibyte.h @@ -75,9 +75,6 @@ ZEND_API int zend_multibyte_set_script_encoding(const zend_encoding **encoding_l ZEND_API int zend_multibyte_set_internal_encoding(const zend_encoding *encoding TSRMLS_DC); ZEND_API int zend_multibyte_set_script_encoding_by_string(const char *new_value, size_t new_value_length TSRMLS_DC); -ZEND_API size_t zend_multibyte_script_encoding_filter(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC); -ZEND_API size_t zend_multibyte_internal_encoding_filter(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length TSRMLS_DC); - END_EXTERN_C() #endif /* ZEND_MULTIBYTE_H */ diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c index a006843e08..da6c741e4b 100644 --- a/ext/mbstring/mbstring.c +++ b/ext/mbstring/mbstring.c @@ -99,6 +99,12 @@ static PHP_GSHUTDOWN_FUNCTION(mbstring); static void php_mb_populate_current_detect_order_list(TSRMLS_D); +static int php_mb_encoding_translation(TSRMLS_D); + +static void php_mb_gpc_get_detect_order(const zend_encoding ***list, size_t *list_size TSRMLS_DC); + +static void php_mb_gpc_set_input_encoding(const zend_encoding *encoding TSRMLS_DC); + /* }}} */ /* {{{ php_mb_default_identify_list */ @@ -1049,7 +1055,7 @@ static int php_mb_nls_get_default_detect_order_list(enum mbfl_no_language lang, } /* }}} */ -static char *php_mb_rfc1867_substring(char *start, int len, char quote TSRMLS_DC) +static char *php_mb_rfc1867_substring_conf(const zend_encoding *encoding, char *start, int len, char quote TSRMLS_DC) { char *result = emalloc(len + 2); char *resp = result; @@ -1059,7 +1065,7 @@ static char *php_mb_rfc1867_substring(char *start, int len, char quote TSRMLS_DC if (start[i] == '\\' && (start[i + 1] == '\\' || (quote && start[i + 1] == quote))) { *resp++ = start[++i]; } else { - size_t j = php_mb_gpc_mbchar_bytes(start+i TSRMLS_CC); + size_t j = php_mb_mbchar_bytes_ex(start+i, (const mbfl_encoding *)encoding); while (j-- > 0 && i < len) { *resp++ = start[i++]; @@ -1072,9 +1078,49 @@ static char *php_mb_rfc1867_substring(char *start, int len, char quote TSRMLS_DC return result; } -static char *php_mb_rfc1867_getword(char *str TSRMLS_DC) /* {{{ */ +static char *php_mb_rfc1867_getword(const zend_encoding *encoding, char **line, char stop TSRMLS_DC) /* {{{ */ +{ + char *pos = *line, quote; + char *res; + + while (*pos && *pos != stop) { + if ((quote = *pos) == '"' || quote == '\'') { + ++pos; + while (*pos && *pos != quote) { + if (*pos == '\\' && pos[1] && pos[1] == quote) { + pos += 2; + } else { + ++pos; + } + } + if (*pos) { + ++pos; + } + } else { + pos += php_mb_mbchar_bytes_ex(pos, (const mbfl_encoding *)encoding); + + } + } + if (*pos == '\0') { + res = estrdup(*line); + *line += strlen(*line); + return res; + } + + res = estrndup(*line, pos - *line); + + while (*pos == stop) { + pos += php_mb_mbchar_bytes_ex(pos, (const mbfl_encoding *)encoding); + } + + *line = pos; + return res; +} +/* }}} */ + +static char *php_mb_rfc1867_getword_conf(const zend_encoding *encoding, char *str TSRMLS_DC) /* {{{ */ { - while (*str && isspace(*str)) { + while (*str && isspace(*(unsigned char *)str)) { ++str; } @@ -1086,29 +1132,30 @@ static char *php_mb_rfc1867_getword(char *str TSRMLS_DC) /* {{{ */ char quote = *str; str++; - return php_mb_rfc1867_substring(str, strlen(str), quote TSRMLS_CC); + return php_mb_rfc1867_substring_conf(encoding, str, strlen(str), quote); } else { char *strend = str; - while (*strend && !isspace(*strend)) { + while (*strend && !isspace(*(unsigned char *)strend)) { ++strend; } - return php_mb_rfc1867_substring(str, strend - str, 0 TSRMLS_CC); + return php_mb_rfc1867_substring_conf(encoding, str, strend - str, 0); } } /* }}} */ -static char *php_mb_rfc1867_basename(char *filename TSRMLS_DC) /* {{{ */ +static char *php_mb_rfc1867_basename(const zend_encoding *encoding, char *filename TSRMLS_DC) /* {{{ */ { char *s, *tmp; - + const size_t filename_len = strlen(filename); + /* The \ check should technically be needed for win32 systems only where * it is a valid path separator. However, IE in all it's wisdom always sends * the full path of the file on the user's filesystem, which means that unless * the user does basename() they get a bogus file name. Until IE's user base drops * to nill or problem is fixed this code must remain enabled for all systems. */ - s = php_mb_strrchr(filename, '\\' TSRMLS_CC); - if ((tmp = php_mb_strrchr(filename, '/' TSRMLS_CC)) > s) { + s = php_mb_safe_strrchr_ex(filename, '\\', filename_len, (const mbfl_encoding *)encoding TSRMLS_CC); + if ((tmp = php_mb_safe_strrchr_ex(filename, '/', filename_len, (const mbfl_encoding *)encoding TSRMLS_CC)) > s) { s = tmp; } if (s) { @@ -1499,11 +1546,12 @@ PHP_MINIT_FUNCTION(mbstring) php_rfc1867_set_multibyte_callbacks( php_mb_encoding_translation, - php_mb_gpc_encoding_detector, - php_mb_gpc_encoding_converter, + php_mb_gpc_get_detect_order, + php_mb_gpc_set_input_encoding, php_mb_rfc1867_getword, + php_mb_rfc1867_getword_conf, php_mb_rfc1867_basename); - + return SUCCESS; } /* }}} */ @@ -1512,7 +1560,7 @@ PHP_MINIT_FUNCTION(mbstring) PHP_MSHUTDOWN_FUNCTION(mbstring) { UNREGISTER_INI_ENTRIES(); - + #if HAVE_MBREGEX PHP_MSHUTDOWN(mb_regex) (INIT_FUNC_ARGS_PASSTHRU); #endif @@ -2150,7 +2198,7 @@ PHP_FUNCTION(mb_strpos) mbfl_string haystack, needle; char *enc_name = NULL; int enc_name_len; - + mbfl_string_init(&haystack); mbfl_string_init(&needle); haystack.no_language = MBSTRG(language); @@ -3415,7 +3463,7 @@ PHP_FUNCTION(mb_convert_variables) const mbfl_encoding **elist; char *to_enc; void *ptmp; - + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sZ+", &to_enc, &to_enc_len, &zfrom_enc, &args, &argc) == FAILURE) { return; } @@ -3958,7 +4006,7 @@ PHP_FUNCTION(mb_send_mail) smart_str *s; extern void mbfl_memory_device_unput(mbfl_memory_device *device); char *pp, *ee; - + /* initialize */ mbfl_memory_device_init(&device, 0, 0); mbfl_string_init(&orig_str); @@ -4422,7 +4470,7 @@ PHP_FUNCTION(mb_check_encoding) RETURN_FALSE; } } - + convd = mbfl_buffer_converter_new2(encoding, encoding, 0); if (convd == NULL) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create converter"); @@ -4430,7 +4478,7 @@ PHP_FUNCTION(mb_check_encoding) } mbfl_buffer_converter_illegal_mode(convd, MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE); mbfl_buffer_converter_illegal_substchar(convd, 0); - + /* initialize string */ mbfl_string_init_set(&string, mbfl_no_language_neutral, encoding->no_encoding); mbfl_string_init(&result); @@ -4479,8 +4527,8 @@ static void php_mb_populate_current_detect_order_list(TSRMLS_D) MBSTRG(current_detect_order_list_size) = nentries; } -/* {{{ MBSTRING_API int php_mb_encoding_translation() */ -MBSTRING_API int php_mb_encoding_translation(TSRMLS_D) +/* {{{ static int php_mb_encoding_translation() */ +static int php_mb_encoding_translation(TSRMLS_D) { return MBSTRG(encoding_translation); } @@ -4559,154 +4607,6 @@ MBSTRING_API char *php_mb_safe_strrchr(const char *s, unsigned int c, size_t nby } /* }}} */ -/* {{{ MBSTRING_API char *php_mb_strrchr() */ -MBSTRING_API char *php_mb_strrchr(const char *s, char c TSRMLS_DC) -{ - return php_mb_safe_strrchr(s, c, -1 TSRMLS_CC); -} -/* }}} */ - -/* {{{ MBSTRING_API size_t php_mb_gpc_mbchar_bytes() */ -MBSTRING_API size_t php_mb_gpc_mbchar_bytes(const char *s TSRMLS_DC) -{ - - if (MBSTRG(http_input_identify)) { - return php_mb_mbchar_bytes_ex(s, MBSTRG(http_input_identify)); - } else { - return php_mb_mbchar_bytes_ex(s, MBSTRG(internal_encoding)); - } -} -/* }}} */ - -/* {{{ MBSTRING_API int php_mb_gpc_encoding_converter() */ -MBSTRING_API int php_mb_gpc_encoding_converter(char **str, int *len, int num, const char *encoding_to, const char *encoding_from TSRMLS_DC) -{ - int i; - mbfl_string string, result, *ret = NULL; - const mbfl_encoding *from_encoding, *to_encoding; - mbfl_buffer_converter *convd; - - if (encoding_to) { - /* new encoding */ - to_encoding = mbfl_name2encoding(encoding_to); - if (!to_encoding) { - return -1; - } - } else { - to_encoding = MBSTRG(current_internal_encoding); - } - if (encoding_from) { - /* old encoding */ - from_encoding = mbfl_name2encoding(encoding_from); - if (from_encoding) { - return -1; - } - } else { - from_encoding = MBSTRG(http_input_identify); - } - - if (from_encoding == mbfl_no_encoding_pass) { - return 0; - } - - /* initialize string */ - mbfl_string_init(&string); - mbfl_string_init(&result); - string.no_encoding = from_encoding->no_encoding; - string.no_language = MBSTRG(language); - - for (i=0; ival; - len[i] = (int)ret->len; - } - - MBSTRG(illegalchars) += mbfl_buffer_illegalchars(convd); - mbfl_buffer_converter_delete(convd); - } - - return ret ? 0 : -1; -} -/* }}} */ - -/* {{{ MBSTRING_API int php_mb_gpc_encoding_detector() - */ -MBSTRING_API int php_mb_gpc_encoding_detector(char **arg_string, int *arg_length, int num, char *arg_list TSRMLS_DC) -{ - mbfl_string string; - const mbfl_encoding **elist; - const mbfl_encoding *encoding = NULL; - mbfl_encoding_detector *identd = NULL; - - size_t size; - const mbfl_encoding **list; - - php_mb_populate_current_detect_order_list(TSRMLS_C); - - if (MBSTRG(http_input_list_size) == 1 && MBSTRG(http_input_list)[0] == &mbfl_encoding_pass) { - MBSTRG(http_input_identify) = &mbfl_encoding_pass; - return SUCCESS; - } - - if (arg_list && strlen(arg_list)>0) { - /* make encoding list */ - list = NULL; - size = 0; - php_mb_parse_encoding_list(arg_list, strlen(arg_list), &list, &size, 0 TSRMLS_CC); - - if (size > 0 && list != NULL) { - elist = list; - } else { - elist = MBSTRG(current_detect_order_list); - size = MBSTRG(current_detect_order_list_size); - } - } else { - elist = MBSTRG(current_detect_order_list); - size = MBSTRG(current_detect_order_list_size); - } - - mbfl_string_init(&string); - string.no_language = MBSTRG(language); - - identd = mbfl_encoding_detector_new2(elist, size, MBSTRG(strict_detection)); - - if (identd) { - int n = 0; - while(n < num){ - string.val = (unsigned char *)arg_string[n]; - string.len = arg_length[n]; - if (mbfl_encoding_detector_feed(identd, &string)) { - break; - } - n++; - } - encoding = mbfl_encoding_detector_judge2(identd); - mbfl_encoding_detector_delete(identd); - } - - if (encoding) { - MBSTRG(http_input_identify) = encoding; - return SUCCESS; - } else { - return FAILURE; - } -} -/* }}} */ - /* {{{ MBSTRING_API int php_mb_stripos() */ MBSTRING_API int php_mb_stripos(int mode, const char *old_haystack, unsigned int old_haystack_len, const char *old_needle, unsigned int old_needle_len, long offset, const char *from_encoding TSRMLS_DC) @@ -4784,6 +4684,19 @@ MBSTRING_API int php_mb_stripos(int mode, const char *old_haystack, unsigned int } /* }}} */ +static void php_mb_gpc_get_detect_order(const zend_encoding ***list, size_t *list_size TSRMLS_DC) /* {{{ */ +{ + *list = (const zend_encoding **)MBSTRG(http_input_list); + *list_size = MBSTRG(http_input_list_size); +} +/* }}} */ + +static void php_mb_gpc_set_input_encoding(const zend_encoding *encoding TSRMLS_DC) /* {{{ */ +{ + MBSTRG(http_input_identify) = encoding; +} +/* }}} */ + #endif /* HAVE_MBSTRING */ /* diff --git a/ext/mbstring/mbstring.h b/ext/mbstring/mbstring.h index 9b61acdf60..7dd0c894e9 100644 --- a/ext/mbstring/mbstring.h +++ b/ext/mbstring/mbstring.h @@ -128,13 +128,10 @@ PHP_FUNCTION(mb_send_mail); PHP_FUNCTION(mb_get_info); PHP_FUNCTION(mb_check_encoding); -MBSTRING_API int php_mb_encoding_translation(TSRMLS_D); - MBSTRING_API char *php_mb_safe_strrchr_ex(const char *s, unsigned int c, size_t nbytes, const mbfl_encoding *enc); MBSTRING_API char *php_mb_safe_strrchr(const char *s, unsigned int c, size_t nbytes TSRMLS_DC); -MBSTRING_API char *php_mb_strrchr(const char *s, char c TSRMLS_DC); MBSTRING_API char * php_mb_convert_encoding(const char *input, size_t length, const char *_to_encoding, @@ -146,17 +143,11 @@ MBSTRING_API int php_mb_check_encoding_list(const char *encoding_list TSRMLS_DC) MBSTRING_API size_t php_mb_mbchar_bytes_ex(const char *s, const mbfl_encoding *enc); MBSTRING_API size_t php_mb_mbchar_bytes(const char *s TSRMLS_DC); -MBSTRING_API size_t php_mb_gpc_mbchar_bytes(const char *s TSRMLS_DC); - MBSTRING_API int php_mb_encoding_detector_ex(const char *arg_string, int arg_length, char *arg_list TSRMLS_DC); MBSTRING_API int php_mb_encoding_converter_ex(char **str, int *len, const char *encoding_to, const char *encoding_from TSRMLS_DC); -MBSTRING_API int php_mb_gpc_encoding_converter(char **str, int *len, int num, const char *encoding_to, const char *encoding_from TSRMLS_DC); - -MBSTRING_API int php_mb_gpc_encoding_detector(char **arg_string, int *arg_length, int num, char *arg_list TSRMLS_DC); - MBSTRING_API int php_mb_stripos(int mode, const char *old_haystack, unsigned int old_haystack_len, const char *old_needle, unsigned int old_needle_len, long offset, const char *from_encoding TSRMLS_DC); /* internal use only */ diff --git a/main/rfc1867.c b/main/rfc1867.c index e77f07c327..41ea045e0f 100644 --- a/main/rfc1867.c +++ b/main/rfc1867.c @@ -41,85 +41,20 @@ static int dummy_encoding_translation(TSRMLS_D) return 0; } +static char *php_ap_getword(const zend_encoding *encoding, char **line, char stop TSRMLS_DC); +static char *php_ap_getword_conf(const zend_encoding *encoding, char *str TSRMLS_DC); + static php_rfc1867_encoding_translation_t php_rfc1867_encoding_translation = dummy_encoding_translation; -static php_rfc1867_encoding_detector_t php_rfc1867_encoding_detector = NULL; -static php_rfc1867_encoding_converter_t php_rfc1867_encoding_converter = NULL; -static php_rfc1867_getword_t php_rfc1867_getword = NULL; +static php_rfc1867_get_detect_order_t php_rfc1867_get_detect_order = NULL; +static php_rfc1867_set_input_encoding_t php_rfc1867_set_input_encoding = NULL; +static php_rfc1867_getword_t php_rfc1867_getword = php_ap_getword; +static php_rfc1867_getword_conf_t php_rfc1867_getword_conf = php_ap_getword_conf; static php_rfc1867_basename_t php_rfc1867_basename = NULL; PHPAPI int (*php_rfc1867_callback)(unsigned int event, void *event_data, void **extra TSRMLS_DC) = NULL; static void safe_php_register_variable(char *var, char *strval, int val_len, zval *track_vars_array, zend_bool override_protection TSRMLS_DC); -static void php_flush_gpc_variables(int num_vars, char **val_list, int *len_list, zval *array_ptr TSRMLS_DC) /* {{{ */ -{ - int i; - unsigned int new_val_len; - - if (num_vars > 0 && - php_rfc1867_encoding_detector(val_list, len_list, num_vars, NULL TSRMLS_CC) == SUCCESS) { - php_rfc1867_encoding_converter(val_list, len_list, num_vars, NULL, NULL TSRMLS_CC); - } - for (i = 0; i= *num_vars_max) { - php_gpc_realloc_buffer(pval_list, plen_list, num_vars_max, 16 TSRMLS_CC); - /* in case realloc relocated the buffer */ - val_list = *pval_list; - len_list = *plen_list; - } - - val_list[*num_vars] = (char *)estrdup(param); - len_list[*num_vars] = strlen(param); - (*num_vars)++; - val_list[*num_vars] = (char *)estrdup(value); - len_list[*num_vars] = strlen(value); - (*num_vars)++; -} -/* }}} */ - /* The longest property name we use in an uploaded file array */ #define MAX_SIZE_OF_INDEX sizeof("[tmp_name]") @@ -283,6 +218,9 @@ typedef struct { char *boundary_next; int boundary_next_len; + const zend_encoding *input_encoding; + const zend_encoding **detect_order; + size_t detect_order_size; } multipart_buffer; typedef struct { @@ -340,7 +278,7 @@ static int multipart_buffer_eof(multipart_buffer *self TSRMLS_DC) } /* create new multipart_buffer structure */ -static multipart_buffer *multipart_buffer_new(char *boundary, int boundary_len) +static multipart_buffer *multipart_buffer_new(char *boundary, int boundary_len TSRMLS_DC) { multipart_buffer *self = (multipart_buffer *) ecalloc(1, sizeof(multipart_buffer)); @@ -357,6 +295,15 @@ static multipart_buffer *multipart_buffer_new(char *boundary, int boundary_len) self->buf_begin = self->buffer; self->bytes_in_buffer = 0; + if (php_rfc1867_encoding_translation(TSRMLS_C)) { + php_rfc1867_get_detect_order(&self->detect_order, &self->detect_order_size TSRMLS_CC); + } else { + self->detect_order = NULL; + self->detect_order_size = 0; + } + + self->input_encoding = NULL; + return self; } @@ -467,6 +414,10 @@ static int multipart_buffer_headers(multipart_buffer *self, zend_llist *header T char *key = line; char *value = NULL; + if (php_rfc1867_encoding_translation(TSRMLS_C)) { + self->input_encoding = zend_multibyte_encoding_detector(line, strlen(line), self->detect_order, self->detect_order_size TSRMLS_CC); + } + /* space in the beginning means same header */ if (!isspace(line[0])) { value = strchr(line, ':'); @@ -522,7 +473,7 @@ static char *php_mime_get_hdr_value(zend_llist header, char *key) return NULL; } -static char *php_ap_getword(char **line, char stop) +static char *php_ap_getword(const zend_encoding *encoding, char **line, char stop TSRMLS_DC) { char *pos = *line, quote; char *res; @@ -558,7 +509,7 @@ static char *php_ap_getword(char **line, char stop) return res; } -static char *substring_conf(char *start, int len, char quote TSRMLS_DC) +static char *substring_conf(char *start, int len, char quote) { char *result = emalloc(len + 1); char *resp = result; @@ -576,7 +527,7 @@ static char *substring_conf(char *start, int len, char quote TSRMLS_DC) return result; } -static char *php_ap_getword_conf(char *str TSRMLS_DC) +static char *php_ap_getword_conf(const zend_encoding *encoding, char *str TSRMLS_DC) { while (*str && isspace(*str)) { ++str; @@ -590,17 +541,33 @@ static char *php_ap_getword_conf(char *str TSRMLS_DC) char quote = *str; str++; - return substring_conf(str, strlen(str), quote TSRMLS_CC); + return substring_conf(str, strlen(str), quote); } else { char *strend = str; while (*strend && !isspace(*strend)) { ++strend; } - return substring_conf(str, strend - str, 0 TSRMLS_CC); + return substring_conf(str, strend - str, 0); } } +static char *php_ap_basename(const zend_encoding *encoding, char *path TSRMLS_DC) +{ + char *s = strrchr(path, '\\'); + if (s) { + char *tmp = strrchr(path, '/'); + if (tmp && tmp > s) { + s = tmp + 1; + } else { + s++; + } + } else { + s = path; + } + return s; +} + /* * Search for a string in a fixed-length byte string. * If partial is true, partial matches are allowed at the end of the buffer. @@ -709,8 +676,7 @@ SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler) /* {{{ */ int max_file_size = 0, skip_upload = 0, anonindex = 0, is_anonymous; zval *http_post_files = NULL; HashTable *uploaded_files = NULL; - int str_len = 0, num_vars = 0, num_vars_max = 2*10, *len_list = NULL; - char **val_list = NULL; + int str_len = 0; multipart_buffer *mbuff; zval *array_ptr = (zval *) arg; int fd = -1; @@ -718,6 +684,20 @@ SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler) /* {{{ */ void *event_extra_data = NULL; unsigned int llen = 0; int upload_cnt = INI_INT("max_file_uploads"); + const zend_encoding *internal_encoding = zend_multibyte_get_internal_encoding(TSRMLS_C); + php_rfc1867_getword_t getword; + php_rfc1867_getword_conf_t getword_conf; + php_rfc1867_basename_t _basename; + + if (php_rfc1867_encoding_translation(TSRMLS_C) && internal_encoding) { + getword = php_rfc1867_getword; + getword_conf = php_rfc1867_getword_conf; + _basename = php_rfc1867_basename; + } else { + getword = php_ap_getword; + getword_conf = php_ap_getword_conf; + _basename = php_ap_basename; + } if (SG(post_max_size) > 0 && SG(request_info).content_length > SG(post_max_size)) { sapi_module.sapi_error(E_WARNING, "POST Content-Length of %ld bytes exceeds the limit of %ld bytes", SG(request_info).content_length, SG(post_max_size)); @@ -780,11 +760,6 @@ SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler) /* {{{ */ INIT_PZVAL(http_post_files); PG(http_globals)[TRACK_VARS_FILES] = http_post_files; - if (php_rfc1867_encoding_translation(TSRMLS_C)) { - val_list = (char **)ecalloc(num_vars_max+2, sizeof(char *)); - len_list = (int *)ecalloc(num_vars_max+2, sizeof(int)); - } - zend_llist_init(&header, sizeof(mime_header_entry), (llist_dtor_func_t) php_free_hdr_entry, 0); if (php_rfc1867_callback != NULL) { @@ -817,7 +792,7 @@ SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler) /* {{{ */ ++cd; } - while (*cd && (pair = php_ap_getword(&cd, ';'))) + while (*cd && (pair = getword(mbuff->input_encoding, &cd, ';' TSRMLS_CC))) { char *key = NULL, *word = pair; @@ -826,41 +801,33 @@ SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler) /* {{{ */ } if (strchr(pair, '=')) { - key = php_ap_getword(&pair, '='); + key = getword(mbuff->input_encoding, &pair, '=' TSRMLS_CC); if (!strcasecmp(key, "name")) { if (param) { efree(param); } - if (php_rfc1867_encoding_translation(TSRMLS_C)) { - if (num_vars >= num_vars_max) { - php_gpc_realloc_buffer(&val_list, &len_list, &num_vars_max, 1 TSRMLS_CC); + param = getword_conf(mbuff->input_encoding, pair TSRMLS_CC); + if (mbuff->input_encoding && internal_encoding) { + unsigned char *new_param; + size_t new_param_len; + if ((size_t)-1 != zend_multibyte_encoding_converter(&new_param, &new_param_len, (unsigned char *)param, strlen(param), internal_encoding, mbuff->input_encoding TSRMLS_CC)) { + efree(param); + param = (char *)new_param; } - val_list[num_vars] = pair; - len_list[num_vars] = strlen(pair); - num_vars++; - php_rfc1867_encoding_detector(val_list, len_list, num_vars, NULL TSRMLS_CC); - num_vars--; - param = php_rfc1867_getword(pair TSRMLS_CC); - } else { - param = php_ap_getword_conf(pair TSRMLS_CC); } } else if (!strcasecmp(key, "filename")) { if (filename) { efree(filename); } - if (php_rfc1867_encoding_translation(TSRMLS_C)) { - if (num_vars >= num_vars_max) { - php_gpc_realloc_buffer(&val_list, &len_list, &num_vars_max, 1 TSRMLS_CC); + filename = getword_conf(mbuff->input_encoding, pair TSRMLS_CC); + if (mbuff->input_encoding && internal_encoding) { + unsigned char *new_filename; + size_t new_filename_len; + if ((size_t)-1 != zend_multibyte_encoding_converter(&new_filename, &new_filename_len, (unsigned char *)filename, strlen(filename), internal_encoding, mbuff->input_encoding TSRMLS_CC)) { + efree(filename); + filename = (char *)new_filename; } - val_list[num_vars] = pair; - len_list[num_vars] = strlen(pair); - num_vars++; - php_rfc1867_encoding_detector(val_list, len_list, num_vars, NULL TSRMLS_CC); - num_vars--; - filename = php_rfc1867_getword(pair TSRMLS_CC); - } else { - filename = php_ap_getword_conf(pair TSRMLS_CC); } } } @@ -878,12 +845,20 @@ SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler) /* {{{ */ if (!value) { value = estrdup(""); + value_len = 0; } - if (php_rfc1867_encoding_translation(TSRMLS_C)) { - /* postpone filtering, callback call and registration */ - php_gpc_stack_variable(param, value, &val_list, &len_list, &num_vars, &num_vars_max TSRMLS_CC); - } else if (sapi_module.input_filter(PARSE_POST, param, &value, value_len, &new_val_len TSRMLS_CC)) { + if (mbuff->input_encoding && internal_encoding) { + unsigned char *new_value; + size_t new_value_len; + if ((size_t)-1 != zend_multibyte_encoding_converter(&new_value, &new_value_len, (unsigned char *)value, value_len, internal_encoding, mbuff->input_encoding TSRMLS_CC)) { + efree(value); + value = (char *)new_value; + value_len = new_value_len; + } + } + + if (sapi_module.input_filter(PARSE_POST, param, &value, value_len, &new_val_len TSRMLS_CC)) { if (php_rfc1867_callback != NULL) { multipart_event_formdata event_formdata; size_t newlength = new_val_len; @@ -1135,43 +1110,23 @@ SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler) /* {{{ */ snprintf(lbuf, llen, "%s_name", param); } - if (php_rfc1867_encoding_translation(TSRMLS_C)) { - if (num_vars >= num_vars_max) { - php_gpc_realloc_buffer(&val_list, &len_list, &num_vars_max, 1 TSRMLS_CC); - } - val_list[num_vars] = filename; - len_list[num_vars] = strlen(filename); - num_vars++; - if (php_rfc1867_encoding_detector(val_list, len_list, num_vars, NULL TSRMLS_CC) == SUCCESS) { - str_len = strlen(filename); - php_rfc1867_encoding_converter(&filename, &str_len, 1, NULL, NULL TSRMLS_CC); - } - s = php_rfc1867_basename(filename TSRMLS_CC); - num_vars--; - } else { - /* The \ check should technically be needed for win32 systems only where - * it is a valid path separator. However, IE in all it's wisdom always sends - * the full path of the file on the user's filesystem, which means that unless - * the user does basename() they get a bogus file name. Until IE's user base drops - * to nill or problem is fixed this code must remain enabled for all systems. */ - s = strrchr(filename, '\\'); - if ((tmp = strrchr(filename, '/')) > s) { - s = tmp; - } + /* The \ check should technically be needed for win32 systems only where + * it is a valid path separator. However, IE in all it's wisdom always sends + * the full path of the file on the user's filesystem, which means that unless + * the user does basename() they get a bogus file name. Until IE's user base drops + * to nill or problem is fixed this code must remain enabled for all systems. */ + s = _basename(internal_encoding, filename TSRMLS_CC); #ifdef PHP_WIN32 - if (PG(magic_quotes_gpc)) { - s = s ? s : filename; - tmp = strrchr(s, '\''); - s = tmp > s ? tmp : s; - tmp = strrchr(s, '"'); - s = tmp > s ? tmp : s; - } + if (PG(magic_quotes_gpc)) { + s = s ? s : filename; + tmp = strrchr(s, '\''); + s = tmp >= s ? tmp + 1: s; + tmp = strrchr(s, '"'); + s = tmp >= s ? tmp + 1: s; + } #endif - if (s) { - s++; - } else { - s = filename; - } + if (!s) { + s = filename; } if (!is_anonymous) { @@ -1300,10 +1255,6 @@ fileupload_done: php_rfc1867_callback(MULTIPART_EVENT_END, &event_end, &event_extra_data TSRMLS_CC); } - if (php_rfc1867_encoding_translation(TSRMLS_C)) { - php_flush_gpc_variables(num_vars, val_list, len_list, array_ptr TSRMLS_CC); - } - if (lbuf) efree(lbuf); if (abuf) efree(abuf); if (array_index) efree(array_index); @@ -1318,15 +1269,17 @@ fileupload_done: SAPI_API void php_rfc1867_set_multibyte_callbacks( php_rfc1867_encoding_translation_t encoding_translation, - php_rfc1867_encoding_detector_t encoding_detector, - php_rfc1867_encoding_converter_t encoding_converter, + php_rfc1867_get_detect_order_t get_detect_order, + php_rfc1867_set_input_encoding_t set_input_encoding, php_rfc1867_getword_t getword, + php_rfc1867_getword_conf_t getword_conf, php_rfc1867_basename_t basename) /* {{{ */ { php_rfc1867_encoding_translation = encoding_translation; - php_rfc1867_encoding_detector = encoding_detector; - php_rfc1867_encoding_converter = encoding_converter; + php_rfc1867_get_detect_order = get_detect_order; + php_rfc1867_set_input_encoding = set_input_encoding; php_rfc1867_getword = getword; + php_rfc1867_getword_conf = getword_conf; php_rfc1867_basename = basename; } /* }}} */ diff --git a/main/rfc1867.h b/main/rfc1867.h index 8fb8c35dce..a05d36202c 100644 --- a/main/rfc1867.h +++ b/main/rfc1867.h @@ -68,10 +68,11 @@ typedef struct _multipart_event_end { } multipart_event_end; typedef int (*php_rfc1867_encoding_translation_t)(TSRMLS_D); -typedef int (*php_rfc1867_encoding_detector_t)(char **arg_string, int *arg_length, int num, char *arg_list TSRMLS_DC); -typedef int (*php_rfc1867_encoding_converter_t)(char **str, int *len, int num, const char *encoding_to, const char *encoding_from TSRMLS_DC); -typedef char* (*php_rfc1867_getword_t)(char *str TSRMLS_DC); -typedef char* (*php_rfc1867_basename_t)(char *str TSRMLS_DC); +typedef void (*php_rfc1867_get_detect_order_t)(const zend_encoding ***list, size_t *list_size TSRMLS_DC); +typedef void (*php_rfc1867_set_input_encoding_t)(const zend_encoding *encoding TSRMLS_DC); +typedef char* (*php_rfc1867_getword_t)(const zend_encoding *encoding, char **line, char stop TSRMLS_DC); +typedef char* (*php_rfc1867_getword_conf_t)(const zend_encoding *encoding, char *str TSRMLS_DC); +typedef char* (*php_rfc1867_basename_t)(const zend_encoding *encoding, char *str TSRMLS_DC); SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler); @@ -81,9 +82,10 @@ extern PHPAPI int (*php_rfc1867_callback)(unsigned int event, void *event_data, SAPI_API void php_rfc1867_set_multibyte_callbacks( php_rfc1867_encoding_translation_t encoding_translation, - php_rfc1867_encoding_detector_t encoding_detector, - php_rfc1867_encoding_converter_t encoding_converter, + php_rfc1867_get_detect_order_t get_detect_order, + php_rfc1867_set_input_encoding_t set_input_encoding, php_rfc1867_getword_t getword, + php_rfc1867_getword_conf_t getword_conf, php_rfc1867_basename_t basename); #endif /* RFC1867_H */ -- 2.40.0