diff options
author | Xinchen Hui <laruence@gmail.com> | 2014-04-11 12:34:06 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@gmail.com> | 2014-04-11 12:34:06 +0800 |
commit | 12470b4092cc2626d8e90653269fae042bfeed6a (patch) | |
tree | b809650e44d3f93cb82ee1ddca90021a99662981 | |
parent | 27f7f342ee782e6e2f212eed861b2623e4675cb5 (diff) | |
parent | 91ed685e26e0f2e6501ac3c7b49199080bfc47f0 (diff) | |
download | php-git-12470b4092cc2626d8e90653269fae042bfeed6a.tar.gz |
Merge branch 'refactoring2' of github.com:zendtech/php into refactoring2
-rw-r--r-- | Zend/zend_builtin_functions.c | 2 | ||||
-rw-r--r-- | Zend/zend_compile.c | 7 | ||||
-rw-r--r-- | Zend/zend_execute.c | 2 | ||||
-rw-r--r-- | Zend/zend_execute_API.c | 8 | ||||
-rw-r--r-- | Zend/zend_language_scanner.c | 718 | ||||
-rw-r--r-- | Zend/zend_language_scanner.l | 26 | ||||
-rw-r--r-- | Zend/zend_list.c | 107 | ||||
-rw-r--r-- | Zend/zend_list.h | 1 | ||||
-rw-r--r-- | Zend/zend_object_handlers.c | 1 | ||||
-rw-r--r-- | Zend/zend_string.c | 2 | ||||
-rw-r--r-- | ext/mbstring/tests/zend_multibyte-10.phpt | 2 | ||||
-rw-r--r-- | ext/mbstring/tests/zend_multibyte-11.phpt | 2 | ||||
-rw-r--r-- | ext/mbstring/tests/zend_multibyte-12.phpt | 2 | ||||
-rw-r--r-- | ext/session/php_session.h | 2 | ||||
-rw-r--r-- | ext/session/session.c | 44 | ||||
-rw-r--r-- | ext/session/tests/031.phpt | 1 | ||||
-rw-r--r-- | ext/spl/spl_observer.c | 14 | ||||
-rw-r--r-- | ext/standard/php_var.h | 2 | ||||
-rw-r--r-- | ext/standard/var.c | 15 | ||||
-rw-r--r-- | ext/standard/var_unserializer.c | 148 | ||||
-rw-r--r-- | ext/standard/var_unserializer.re | 86 | ||||
-rw-r--r-- | ext/tokenizer/tokenizer.c | 44 |
22 files changed, 673 insertions, 563 deletions
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index b75343936c..0cafa71f97 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -1149,7 +1149,7 @@ ZEND_FUNCTION(method_exists) && memcmp(lcname->val, ZEND_INVOKE_FUNC_NAME, sizeof(ZEND_INVOKE_FUNC_NAME)-1) == 0) ? 1 : 0); STR_FREE(lcname); - STR_FREE(func->common.function_name); + STR_RELEASE(func->common.function_name); efree(func); return; } diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index bd678c6d8b..fa50a731c4 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -251,7 +251,6 @@ void shutdown_compiler(TSRMLS_D) /* {{{ */ zend_stack_destroy(&CG(declare_stack)); zend_stack_destroy(&CG(list_stack)); zend_hash_destroy(&CG(filenames_table)); - zend_llist_destroy(&CG(open_files)); zend_hash_destroy(&CG(const_filenames)); zend_stack_destroy(&CG(context_stack)); } @@ -6864,12 +6863,16 @@ zend_bool zend_is_auto_global(zend_string *name TSRMLS_DC) /* {{{ */ int zend_register_auto_global(zend_string *name, zend_bool jit, zend_auto_global_callback auto_global_callback TSRMLS_DC) /* {{{ */ { zend_auto_global auto_global; + int retval; auto_global.name = zend_new_interned_string(name TSRMLS_CC); auto_global.auto_global_callback = auto_global_callback; auto_global.jit = jit; - return zend_hash_add_mem(CG(auto_globals), name, &auto_global, sizeof(zend_auto_global)) != NULL ? SUCCESS : FAILURE; + retval = zend_hash_add_mem(CG(auto_globals), name, &auto_global, sizeof(zend_auto_global)) != NULL ? SUCCESS : FAILURE; + + STR_RELEASE(auto_global.name); + return retval; } /* }}} */ diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 822ec902a3..e4090081a6 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -697,6 +697,7 @@ static inline void zend_assign_to_object(zval *retval, zval *object_ptr, zval *p value = &tmp; } else if (value_type == IS_CONST) { ZVAL_DUP(&tmp, value); + value = &tmp; } else if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } @@ -1107,6 +1108,7 @@ fetch_from_array: } else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { if (type != BP_VAR_UNSET && UNEXPECTED(Z_STRLEN_P(container) == 0)) { convert_to_array: + zval_dtor(container); array_init(container); goto fetch_from_array; } diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index cf321398f8..2ae2bff70e 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -313,6 +313,14 @@ void shutdown_executor(TSRMLS_D) /* {{{ */ } zend_end_try(); zend_try { + zend_llist_destroy(&CG(open_files)); + } zend_end_try(); + + zend_try { + zend_close_rsrc_list(&EG(regular_list) TSRMLS_CC); + } zend_end_try(); + + zend_try { zend_objects_store_free_object_storage(&EG(objects_store) TSRMLS_CC); zend_vm_stack_destroy(TSRMLS_C); diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c index 0d091ca2e6..d1c93bc32e 100644 --- a/Zend/zend_language_scanner.c +++ b/Zend/zend_language_scanner.c @@ -849,6 +849,9 @@ ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter 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))); } + if (SCNG(script_filtered)) { + efree(SCNG(script_filtered)); + } SCNG(script_filtered) = new_yy_start; SCNG(script_filtered_size) = length; } @@ -862,11 +865,14 @@ ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter } +//??? use zend_string saving memalloc # define zend_copy_value(zendlval, yytext, yyleng) \ if (SCNG(output_filter)) { \ size_t sz = 0; \ - SCNG(output_filter)((unsigned char **)&Z_STRVAL_P(zendlval), &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC); \ - Z_STRLEN_P(zendlval) = sz; \ + char *s = NULL; \ + SCNG(output_filter)((unsigned char **)&s, &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC); \ + ZVAL_STRINGL(zendlval, s, sz); \ + efree(s); \ } else { \ ZVAL_STRINGL(zendlval, yytext, yyleng); \ } @@ -984,7 +990,7 @@ static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quo if (SCNG(output_filter)) { size_t sz = 0; unsigned char *str; - //??? use zend_string saving memalloc + //??? use zend_string saving memalloc s = Z_STRVAL_P(zendlval); SCNG(output_filter)(&str, &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval) TSRMLS_CC); zval_ptr_dtor(zendlval); @@ -1002,7 +1008,7 @@ restart: yymore_restart: -#line 1006 "Zend/zend_language_scanner.c" +#line 1012 "Zend/zend_language_scanner.c" { YYCTYPE yych; unsigned int yyaccept = 0; @@ -1101,7 +1107,7 @@ yyc_INITIAL: yy3: YYDEBUG(3, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1764 "Zend/zend_language_scanner.l" +#line 1770 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -1147,20 +1153,22 @@ inline_html: if (SCNG(output_filter)) { int readsize; + char *s = NULL; size_t sz = 0; - readsize = SCNG(output_filter)((unsigned char **)&Z_STRVAL_P(zendlval), &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC); - Z_STRLEN_P(zendlval) = sz; + //??? use zend_string saving memalloc + readsize = SCNG(output_filter)((unsigned char **)&s, &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC); + ZVAL_STRINGL(zendlval, s, sz); + efree(s); if (readsize < yyleng) { yyless(readsize); } - Z_TYPE_INFO_P(zendlval) = IS_STRING_EX; } else { ZVAL_STRINGL(zendlval, yytext, yyleng); } HANDLE_NEWLINES(yytext, yyleng); return T_INLINE_HTML; } -#line 1164 "Zend/zend_language_scanner.c" +#line 1172 "Zend/zend_language_scanner.c" yy4: YYDEBUG(4, *YYCURSOR); yych = *++YYCURSOR; @@ -1178,7 +1186,7 @@ yy5: yy6: YYDEBUG(6, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1753 "Zend/zend_language_scanner.l" +#line 1759 "Zend/zend_language_scanner.l" { if (CG(short_tags)) { //??? ZVAL_STRINGL(zendlval, yytext, yyleng); @@ -1189,14 +1197,14 @@ yy6: goto inline_char_handler; } } -#line 1193 "Zend/zend_language_scanner.c" +#line 1201 "Zend/zend_language_scanner.c" yy7: YYDEBUG(7, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy43; YYDEBUG(8, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1732 "Zend/zend_language_scanner.l" +#line 1738 "Zend/zend_language_scanner.l" { if (CG(asp_tags)) { //??? ZVAL_STRINGL(zendlval, yytext, yyleng); @@ -1207,7 +1215,7 @@ yy7: goto inline_char_handler; } } -#line 1211 "Zend/zend_language_scanner.c" +#line 1219 "Zend/zend_language_scanner.c" yy9: YYDEBUG(9, *YYCURSOR); yych = *++YYCURSOR; @@ -1393,7 +1401,7 @@ yy35: ++YYCURSOR; YYDEBUG(38, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1695 "Zend/zend_language_scanner.l" +#line 1701 "Zend/zend_language_scanner.l" { YYCTYPE *bracket = (YYCTYPE*)zend_memrchr(yytext, '<', yyleng - (sizeof("script language=php>") - 1)); @@ -1409,7 +1417,7 @@ yy35: BEGIN(ST_IN_SCRIPTING); return T_OPEN_TAG; } -#line 1413 "Zend/zend_language_scanner.c" +#line 1421 "Zend/zend_language_scanner.c" yy39: YYDEBUG(39, *YYCURSOR); yych = *++YYCURSOR; @@ -1436,7 +1444,7 @@ yy43: ++YYCURSOR; YYDEBUG(44, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1712 "Zend/zend_language_scanner.l" +#line 1718 "Zend/zend_language_scanner.l" { if (CG(asp_tags)) { //??? ZVAL_STRINGL(zendlval, yytext, yyleng); @@ -1447,20 +1455,20 @@ yy43: goto inline_char_handler; } } -#line 1451 "Zend/zend_language_scanner.c" +#line 1459 "Zend/zend_language_scanner.c" yy45: YYDEBUG(45, *YYCURSOR); ++YYCURSOR; YYDEBUG(46, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1724 "Zend/zend_language_scanner.l" +#line 1730 "Zend/zend_language_scanner.l" { //??? ZVAL_STRINGL(zendlval, yytext, yyleng); ZVAL_EMPTY_STRING(zendlval); /* tricky way to no copying - intentional */ BEGIN(ST_IN_SCRIPTING); return T_OPEN_TAG_WITH_ECHO; } -#line 1464 "Zend/zend_language_scanner.c" +#line 1472 "Zend/zend_language_scanner.c" yy47: YYDEBUG(47, *YYCURSOR); yych = *++YYCURSOR; @@ -1487,7 +1495,7 @@ yy50: yy51: YYDEBUG(51, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1744 "Zend/zend_language_scanner.l" +#line 1750 "Zend/zend_language_scanner.l" { //??? ZVAL_STRINGL(zendlval, yytext, yyleng); ZVAL_EMPTY_STRING(zendlval); /* tricky way, no copying intentional */ @@ -1495,7 +1503,7 @@ yy51: BEGIN(ST_IN_SCRIPTING); return T_OPEN_TAG; } -#line 1499 "Zend/zend_language_scanner.c" +#line 1507 "Zend/zend_language_scanner.c" yy52: YYDEBUG(52, *YYCURSOR); ++YYCURSOR; @@ -1566,7 +1574,7 @@ yyc_ST_BACKQUOTE: yy56: YYDEBUG(56, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2205 "Zend/zend_language_scanner.l" +#line 2215 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -1607,7 +1615,7 @@ yy56: zend_scan_escape_string(zendlval, yytext, yyleng, '`' TSRMLS_CC); return T_ENCAPSED_AND_WHITESPACE; } -#line 1611 "Zend/zend_language_scanner.c" +#line 1619 "Zend/zend_language_scanner.c" yy57: YYDEBUG(57, *YYCURSOR); yych = *++YYCURSOR; @@ -1618,12 +1626,12 @@ yy58: ++YYCURSOR; YYDEBUG(59, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2149 "Zend/zend_language_scanner.l" +#line 2159 "Zend/zend_language_scanner.l" { BEGIN(ST_IN_SCRIPTING); return '`'; } -#line 1627 "Zend/zend_language_scanner.c" +#line 1635 "Zend/zend_language_scanner.c" yy60: YYDEBUG(60, *YYCURSOR); yych = *++YYCURSOR; @@ -1633,14 +1641,14 @@ yy61: ++YYCURSOR; YYDEBUG(62, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2136 "Zend/zend_language_scanner.l" +#line 2146 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); yyless(1); return T_CURLY_OPEN; } -#line 1644 "Zend/zend_language_scanner.c" +#line 1652 "Zend/zend_language_scanner.c" yy63: YYDEBUG(63, *YYCURSOR); yyaccept = 0; @@ -1656,23 +1664,23 @@ yy63: yy65: YYDEBUG(65, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1843 "Zend/zend_language_scanner.l" +#line 1851 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); return T_VARIABLE; } -#line 1665 "Zend/zend_language_scanner.c" +#line 1673 "Zend/zend_language_scanner.c" yy66: YYDEBUG(66, *YYCURSOR); ++YYCURSOR; YYDEBUG(67, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1462 "Zend/zend_language_scanner.l" +#line 1468 "Zend/zend_language_scanner.l" { yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC); return T_DOLLAR_OPEN_CURLY_BRACES; } -#line 1676 "Zend/zend_language_scanner.c" +#line 1684 "Zend/zend_language_scanner.c" yy68: YYDEBUG(68, *YYCURSOR); yych = *++YYCURSOR; @@ -1686,14 +1694,14 @@ yy70: ++YYCURSOR; YYDEBUG(71, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1836 "Zend/zend_language_scanner.l" +#line 1844 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); yy_push_state(ST_VAR_OFFSET TSRMLS_CC); zend_copy_value(zendlval, (yytext+1), (yyleng-1)); return T_VARIABLE; } -#line 1697 "Zend/zend_language_scanner.c" +#line 1705 "Zend/zend_language_scanner.c" yy72: YYDEBUG(72, *YYCURSOR); yych = *++YYCURSOR; @@ -1711,14 +1719,14 @@ yy73: ++YYCURSOR; YYDEBUG(74, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1827 "Zend/zend_language_scanner.l" +#line 1835 "Zend/zend_language_scanner.l" { yyless(yyleng - 3); yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); zend_copy_value(zendlval, (yytext+1), (yyleng-1)); return T_VARIABLE; } -#line 1722 "Zend/zend_language_scanner.c" +#line 1730 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_DOUBLE_QUOTES: @@ -1786,7 +1794,7 @@ yy77: yy78: YYDEBUG(78, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2155 "Zend/zend_language_scanner.l" +#line 2165 "Zend/zend_language_scanner.l" { if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) { YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1; @@ -1835,7 +1843,7 @@ double_quotes_scan_done: zend_scan_escape_string(zendlval, yytext, yyleng, '"' TSRMLS_CC); return T_ENCAPSED_AND_WHITESPACE; } -#line 1839 "Zend/zend_language_scanner.c" +#line 1847 "Zend/zend_language_scanner.c" yy79: YYDEBUG(79, *YYCURSOR); yych = *++YYCURSOR; @@ -1846,12 +1854,12 @@ yy80: ++YYCURSOR; YYDEBUG(81, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2144 "Zend/zend_language_scanner.l" +#line 2154 "Zend/zend_language_scanner.l" { BEGIN(ST_IN_SCRIPTING); return '"'; } -#line 1855 "Zend/zend_language_scanner.c" +#line 1863 "Zend/zend_language_scanner.c" yy82: YYDEBUG(82, *YYCURSOR); yych = *++YYCURSOR; @@ -1861,14 +1869,14 @@ yy83: ++YYCURSOR; YYDEBUG(84, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2136 "Zend/zend_language_scanner.l" +#line 2146 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); yyless(1); return T_CURLY_OPEN; } -#line 1872 "Zend/zend_language_scanner.c" +#line 1880 "Zend/zend_language_scanner.c" yy85: YYDEBUG(85, *YYCURSOR); yyaccept = 0; @@ -1884,23 +1892,23 @@ yy85: yy87: YYDEBUG(87, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1843 "Zend/zend_language_scanner.l" +#line 1851 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); return T_VARIABLE; } -#line 1893 "Zend/zend_language_scanner.c" +#line 1901 "Zend/zend_language_scanner.c" yy88: YYDEBUG(88, *YYCURSOR); ++YYCURSOR; YYDEBUG(89, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1462 "Zend/zend_language_scanner.l" +#line 1468 "Zend/zend_language_scanner.l" { yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC); return T_DOLLAR_OPEN_CURLY_BRACES; } -#line 1904 "Zend/zend_language_scanner.c" +#line 1912 "Zend/zend_language_scanner.c" yy90: YYDEBUG(90, *YYCURSOR); yych = *++YYCURSOR; @@ -1914,14 +1922,14 @@ yy92: ++YYCURSOR; YYDEBUG(93, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1836 "Zend/zend_language_scanner.l" +#line 1844 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); yy_push_state(ST_VAR_OFFSET TSRMLS_CC); zend_copy_value(zendlval, (yytext+1), (yyleng-1)); return T_VARIABLE; } -#line 1925 "Zend/zend_language_scanner.c" +#line 1933 "Zend/zend_language_scanner.c" yy94: YYDEBUG(94, *YYCURSOR); yych = *++YYCURSOR; @@ -1939,14 +1947,14 @@ yy95: ++YYCURSOR; YYDEBUG(96, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1827 "Zend/zend_language_scanner.l" +#line 1835 "Zend/zend_language_scanner.l" { yyless(yyleng - 3); yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); zend_copy_value(zendlval, (yytext+1), (yyleng-1)); return T_VARIABLE; } -#line 1950 "Zend/zend_language_scanner.c" +#line 1958 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_END_HEREDOC: @@ -1957,7 +1965,7 @@ yyc_ST_END_HEREDOC: ++YYCURSOR; YYDEBUG(100, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2122 "Zend/zend_language_scanner.l" +#line 2132 "Zend/zend_language_scanner.l" { zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack)); @@ -1970,7 +1978,7 @@ yyc_ST_END_HEREDOC: BEGIN(ST_IN_SCRIPTING); return T_END_HEREDOC; } -#line 1974 "Zend/zend_language_scanner.c" +#line 1982 "Zend/zend_language_scanner.c" /* *********************************** */ yyc_ST_HEREDOC: { @@ -2032,7 +2040,7 @@ yy103: yy104: YYDEBUG(104, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2247 "Zend/zend_language_scanner.l" +#line 2257 "Zend/zend_language_scanner.l" { int newline = 0; @@ -2105,7 +2113,7 @@ heredoc_scan_done: zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0 TSRMLS_CC); return T_ENCAPSED_AND_WHITESPACE; } -#line 2109 "Zend/zend_language_scanner.c" +#line 2117 "Zend/zend_language_scanner.c" yy105: YYDEBUG(105, *YYCURSOR); yych = *++YYCURSOR; @@ -2120,14 +2128,14 @@ yy107: ++YYCURSOR; YYDEBUG(108, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2136 "Zend/zend_language_scanner.l" +#line 2146 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); yyless(1); return T_CURLY_OPEN; } -#line 2131 "Zend/zend_language_scanner.c" +#line 2139 "Zend/zend_language_scanner.c" yy109: YYDEBUG(109, *YYCURSOR); yyaccept = 0; @@ -2143,23 +2151,23 @@ yy109: yy111: YYDEBUG(111, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1843 "Zend/zend_language_scanner.l" +#line 1851 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); return T_VARIABLE; } -#line 2152 "Zend/zend_language_scanner.c" +#line 2160 "Zend/zend_language_scanner.c" yy112: YYDEBUG(112, *YYCURSOR); ++YYCURSOR; YYDEBUG(113, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1462 "Zend/zend_language_scanner.l" +#line 1468 "Zend/zend_language_scanner.l" { yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC); return T_DOLLAR_OPEN_CURLY_BRACES; } -#line 2163 "Zend/zend_language_scanner.c" +#line 2171 "Zend/zend_language_scanner.c" yy114: YYDEBUG(114, *YYCURSOR); yych = *++YYCURSOR; @@ -2173,14 +2181,14 @@ yy116: ++YYCURSOR; YYDEBUG(117, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1836 "Zend/zend_language_scanner.l" +#line 1844 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); yy_push_state(ST_VAR_OFFSET TSRMLS_CC); zend_copy_value(zendlval, (yytext+1), (yyleng-1)); return T_VARIABLE; } -#line 2184 "Zend/zend_language_scanner.c" +#line 2192 "Zend/zend_language_scanner.c" yy118: YYDEBUG(118, *YYCURSOR); yych = *++YYCURSOR; @@ -2198,14 +2206,14 @@ yy119: ++YYCURSOR; YYDEBUG(120, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1827 "Zend/zend_language_scanner.l" +#line 1835 "Zend/zend_language_scanner.l" { yyless(yyleng - 3); yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); zend_copy_value(zendlval, (yytext+1), (yyleng-1)); return T_VARIABLE; } -#line 2209 "Zend/zend_language_scanner.c" +#line 2217 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_IN_SCRIPTING: @@ -2388,12 +2396,12 @@ yy123: yy124: YYDEBUG(124, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1865 "Zend/zend_language_scanner.l" +#line 1873 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, yytext, yyleng); return T_STRING; } -#line 2397 "Zend/zend_language_scanner.c" +#line 2405 "Zend/zend_language_scanner.c" yy125: YYDEBUG(125, *YYCURSOR); yych = *++YYCURSOR; @@ -2625,11 +2633,11 @@ yy138: yy139: YYDEBUG(139, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1451 "Zend/zend_language_scanner.l" +#line 1457 "Zend/zend_language_scanner.l" { return yytext[0]; } -#line 2633 "Zend/zend_language_scanner.c" +#line 2641 "Zend/zend_language_scanner.c" yy140: YYDEBUG(140, *YYCURSOR); ++YYCURSOR; @@ -2638,14 +2646,14 @@ yy140: yy141: YYDEBUG(141, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1180 "Zend/zend_language_scanner.l" +#line 1186 "Zend/zend_language_scanner.l" { //??? ZVAL_STRINGL(zendlval, yytext, yyleng); ZVAL_EMPTY_STRING(zendlval); /* tricky way to no copying - intentional */ HANDLE_NEWLINES(yytext, yyleng); return T_WHITESPACE; } -#line 2649 "Zend/zend_language_scanner.c" +#line 2657 "Zend/zend_language_scanner.c" yy142: YYDEBUG(142, *YYCURSOR); yych = *++YYCURSOR; @@ -2656,11 +2664,11 @@ yy143: ++YYCURSOR; YYDEBUG(144, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1207 "Zend/zend_language_scanner.l" +#line 1213 "Zend/zend_language_scanner.l" { return T_NS_SEPARATOR; } -#line 2664 "Zend/zend_language_scanner.c" +#line 2672 "Zend/zend_language_scanner.c" yy145: YYDEBUG(145, *YYCURSOR); yyaccept = 1; @@ -2893,18 +2901,18 @@ yy168: ++YYCURSOR; YYDEBUG(169, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1456 "Zend/zend_language_scanner.l" +#line 1462 "Zend/zend_language_scanner.l" { yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); return '{'; } -#line 2902 "Zend/zend_language_scanner.c" +#line 2910 "Zend/zend_language_scanner.c" yy170: YYDEBUG(170, *YYCURSOR); ++YYCURSOR; YYDEBUG(171, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1468 "Zend/zend_language_scanner.l" +#line 1474 "Zend/zend_language_scanner.l" { RESET_DOC_COMMENT(); if (!zend_stack_is_empty(&SCNG(state_stack))) { @@ -2912,7 +2920,7 @@ yy170: } return '}'; } -#line 2916 "Zend/zend_language_scanner.c" +#line 2924 "Zend/zend_language_scanner.c" yy172: YYDEBUG(172, *YYCURSOR); yyaccept = 2; @@ -2940,7 +2948,7 @@ yy172: yy173: YYDEBUG(173, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1516 "Zend/zend_language_scanner.l" +#line 1522 "Zend/zend_language_scanner.l" { if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */ ZVAL_LONG(zendlval, strtol(yytext, NULL, 0)); @@ -2958,7 +2966,7 @@ yy173: } return T_LNUMBER; } -#line 2962 "Zend/zend_language_scanner.c" +#line 2970 "Zend/zend_language_scanner.c" yy174: YYDEBUG(174, *YYCURSOR); yyaccept = 2; @@ -2986,7 +2994,7 @@ yy176: yy177: YYDEBUG(177, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1871 "Zend/zend_language_scanner.l" +#line 1879 "Zend/zend_language_scanner.l" { while (YYCURSOR < YYLIMIT) { switch (*YYCURSOR++) { @@ -3020,14 +3028,14 @@ yy177: return T_COMMENT; } -#line 3024 "Zend/zend_language_scanner.c" +#line 3032 "Zend/zend_language_scanner.c" yy178: YYDEBUG(178, *YYCURSOR); ++YYCURSOR; yy179: YYDEBUG(179, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1959 "Zend/zend_language_scanner.l" +#line 1967 "Zend/zend_language_scanner.l" { register char *s, *t; char *end; @@ -3086,21 +3094,23 @@ yy179: if (SCNG(output_filter)) { size_t sz = 0; + char *str = NULL; s = Z_STRVAL_P(zendlval); - SCNG(output_filter)((unsigned char **)&Z_STRVAL_P(zendlval), &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval) TSRMLS_CC); - Z_STRLEN_P(zendlval) = sz; + //??? use zend_string saving memalloc + SCNG(output_filter)((unsigned char **)&str, &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval) TSRMLS_CC); + ZVAL_STRINGL(zendlval, str, sz); efree(s); } return T_CONSTANT_ENCAPSED_STRING; } -#line 3097 "Zend/zend_language_scanner.c" +#line 3107 "Zend/zend_language_scanner.c" yy180: YYDEBUG(180, *YYCURSOR); ++YYCURSOR; yy181: YYDEBUG(181, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2026 "Zend/zend_language_scanner.l" +#line 2036 "Zend/zend_language_scanner.l" { int bprefix = (yytext[0] != '"') ? 1 : 0; @@ -3141,24 +3151,24 @@ yy181: BEGIN(ST_DOUBLE_QUOTES); return '"'; } -#line 3145 "Zend/zend_language_scanner.c" +#line 3155 "Zend/zend_language_scanner.c" yy182: YYDEBUG(182, *YYCURSOR); ++YYCURSOR; YYDEBUG(183, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2116 "Zend/zend_language_scanner.l" +#line 2126 "Zend/zend_language_scanner.l" { BEGIN(ST_BACKQUOTE); return '`'; } -#line 3156 "Zend/zend_language_scanner.c" +#line 3166 "Zend/zend_language_scanner.c" yy184: YYDEBUG(184, *YYCURSOR); ++YYCURSOR; YYDEBUG(185, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2378 "Zend/zend_language_scanner.l" +#line 2388 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -3167,7 +3177,7 @@ yy184: zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); goto restart; } -#line 3171 "Zend/zend_language_scanner.c" +#line 3181 "Zend/zend_language_scanner.c" yy186: YYDEBUG(186, *YYCURSOR); ++YYCURSOR; @@ -3194,12 +3204,12 @@ yy188: yy190: YYDEBUG(190, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1571 "Zend/zend_language_scanner.l" +#line 1577 "Zend/zend_language_scanner.l" { ZVAL_DOUBLE(zendlval, zend_strtod(yytext, NULL)); return T_DNUMBER; } -#line 3203 "Zend/zend_language_scanner.c" +#line 3213 "Zend/zend_language_scanner.c" yy191: YYDEBUG(191, *YYCURSOR); yyaccept = 2; @@ -3291,7 +3301,7 @@ yy200: } YYDEBUG(202, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1493 "Zend/zend_language_scanner.l" +#line 1499 "Zend/zend_language_scanner.l" { char *bin = yytext + 2; /* Skip "0b" */ int len = yyleng - 2; @@ -3314,7 +3324,7 @@ yy200: return T_DNUMBER; } } -#line 3318 "Zend/zend_language_scanner.c" +#line 3328 "Zend/zend_language_scanner.c" yy203: YYDEBUG(203, *YYCURSOR); ++YYCURSOR; @@ -3326,7 +3336,7 @@ yy203: } YYDEBUG(205, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1534 "Zend/zend_language_scanner.l" +#line 1540 "Zend/zend_language_scanner.l" { char *hex = yytext + 2; /* Skip "0x" */ int len = yyleng - 2; @@ -3349,7 +3359,7 @@ yy203: return T_DNUMBER; } } -#line 3353 "Zend/zend_language_scanner.c" +#line 3363 "Zend/zend_language_scanner.c" yy206: YYDEBUG(206, *YYCURSOR); ++YYCURSOR; @@ -3358,14 +3368,14 @@ yy206: yy207: YYDEBUG(207, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1938 "Zend/zend_language_scanner.l" +#line 1946 "Zend/zend_language_scanner.l" { //??? ZVAL_STRINGL(zendlval, yytext, yyleng); ZVAL_EMPTY_STRING(zendlval); /* tricky way to no copying - intentional */ BEGIN(INITIAL); return T_CLOSE_TAG; /* implicit ';' at php-end tag */ } -#line 3369 "Zend/zend_language_scanner.c" +#line 3379 "Zend/zend_language_scanner.c" yy208: YYDEBUG(208, *YYCURSOR); yych = *++YYCURSOR; @@ -3399,12 +3409,12 @@ yy210: yy212: YYDEBUG(212, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1843 "Zend/zend_language_scanner.l" +#line 1851 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); return T_VARIABLE; } -#line 3408 "Zend/zend_language_scanner.c" +#line 3418 "Zend/zend_language_scanner.c" yy213: YYDEBUG(213, *YYCURSOR); yych = *++YYCURSOR; @@ -3418,11 +3428,11 @@ yy214: } YYDEBUG(215, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1439 "Zend/zend_language_scanner.l" +#line 1445 "Zend/zend_language_scanner.l" { return T_LOGICAL_XOR; } -#line 3426 "Zend/zend_language_scanner.c" +#line 3436 "Zend/zend_language_scanner.c" yy216: YYDEBUG(216, *YYCURSOR); ++YYCURSOR; @@ -3431,61 +3441,61 @@ yy216: } YYDEBUG(217, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1431 "Zend/zend_language_scanner.l" +#line 1437 "Zend/zend_language_scanner.l" { return T_LOGICAL_OR; } -#line 3439 "Zend/zend_language_scanner.c" +#line 3449 "Zend/zend_language_scanner.c" yy218: YYDEBUG(218, *YYCURSOR); ++YYCURSOR; YYDEBUG(219, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1419 "Zend/zend_language_scanner.l" +#line 1425 "Zend/zend_language_scanner.l" { return T_XOR_EQUAL; } -#line 3449 "Zend/zend_language_scanner.c" +#line 3459 "Zend/zend_language_scanner.c" yy220: YYDEBUG(220, *YYCURSOR); ++YYCURSOR; YYDEBUG(221, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1423 "Zend/zend_language_scanner.l" +#line 1429 "Zend/zend_language_scanner.l" { return T_BOOLEAN_OR; } -#line 3459 "Zend/zend_language_scanner.c" +#line 3469 "Zend/zend_language_scanner.c" yy222: YYDEBUG(222, *YYCURSOR); ++YYCURSOR; YYDEBUG(223, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1415 "Zend/zend_language_scanner.l" +#line 1421 "Zend/zend_language_scanner.l" { return T_OR_EQUAL; } -#line 3469 "Zend/zend_language_scanner.c" +#line 3479 "Zend/zend_language_scanner.c" yy224: YYDEBUG(224, *YYCURSOR); ++YYCURSOR; YYDEBUG(225, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1427 "Zend/zend_language_scanner.l" +#line 1433 "Zend/zend_language_scanner.l" { return T_BOOLEAN_AND; } -#line 3479 "Zend/zend_language_scanner.c" +#line 3489 "Zend/zend_language_scanner.c" yy226: YYDEBUG(226, *YYCURSOR); ++YYCURSOR; YYDEBUG(227, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1411 "Zend/zend_language_scanner.l" +#line 1417 "Zend/zend_language_scanner.l" { return T_AND_EQUAL; } -#line 3489 "Zend/zend_language_scanner.c" +#line 3499 "Zend/zend_language_scanner.c" yy228: YYDEBUG(228, *YYCURSOR); ++YYCURSOR; @@ -3494,7 +3504,7 @@ yy228: yy229: YYDEBUG(229, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1946 "Zend/zend_language_scanner.l" +#line 1954 "Zend/zend_language_scanner.l" { if (CG(asp_tags)) { BEGIN(INITIAL); @@ -3506,17 +3516,17 @@ yy229: return yytext[0]; } } -#line 3510 "Zend/zend_language_scanner.c" +#line 3520 "Zend/zend_language_scanner.c" yy230: YYDEBUG(230, *YYCURSOR); ++YYCURSOR; YYDEBUG(231, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1399 "Zend/zend_language_scanner.l" +#line 1405 "Zend/zend_language_scanner.l" { return T_MOD_EQUAL; } -#line 3520 "Zend/zend_language_scanner.c" +#line 3530 "Zend/zend_language_scanner.c" yy232: YYDEBUG(232, *YYCURSOR); yych = *++YYCURSOR; @@ -3534,7 +3544,7 @@ yy234: yy235: YYDEBUG(235, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1905 "Zend/zend_language_scanner.l" +#line 1913 "Zend/zend_language_scanner.l" { int doc_com; @@ -3567,7 +3577,7 @@ yy235: return T_COMMENT; } -#line 3571 "Zend/zend_language_scanner.c" +#line 3581 "Zend/zend_language_scanner.c" yy236: YYDEBUG(236, *YYCURSOR); yych = *++YYCURSOR; @@ -3577,11 +3587,11 @@ yy237: ++YYCURSOR; YYDEBUG(238, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1391 "Zend/zend_language_scanner.l" +#line 1397 "Zend/zend_language_scanner.l" { return T_DIV_EQUAL; } -#line 3585 "Zend/zend_language_scanner.c" +#line 3595 "Zend/zend_language_scanner.c" yy239: YYDEBUG(239, *YYCURSOR); yych = *++YYCURSOR; @@ -3604,42 +3614,42 @@ yy242: ++YYCURSOR; YYDEBUG(243, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1387 "Zend/zend_language_scanner.l" +#line 1393 "Zend/zend_language_scanner.l" { return T_MUL_EQUAL; } -#line 3612 "Zend/zend_language_scanner.c" +#line 3622 "Zend/zend_language_scanner.c" yy244: YYDEBUG(244, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy248; YYDEBUG(245, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1447 "Zend/zend_language_scanner.l" +#line 1453 "Zend/zend_language_scanner.l" { return T_SR; } -#line 3623 "Zend/zend_language_scanner.c" +#line 3633 "Zend/zend_language_scanner.c" yy246: YYDEBUG(246, *YYCURSOR); ++YYCURSOR; YYDEBUG(247, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1375 "Zend/zend_language_scanner.l" +#line 1381 "Zend/zend_language_scanner.l" { return T_IS_GREATER_OR_EQUAL; } -#line 3633 "Zend/zend_language_scanner.c" +#line 3643 "Zend/zend_language_scanner.c" yy248: YYDEBUG(248, *YYCURSOR); ++YYCURSOR; YYDEBUG(249, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1407 "Zend/zend_language_scanner.l" +#line 1413 "Zend/zend_language_scanner.l" { return T_SR_EQUAL; } -#line 3643 "Zend/zend_language_scanner.c" +#line 3653 "Zend/zend_language_scanner.c" yy250: YYDEBUG(250, *YYCURSOR); yyaccept = 5; @@ -3650,11 +3660,11 @@ yy250: yy251: YYDEBUG(251, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1443 "Zend/zend_language_scanner.l" +#line 1449 "Zend/zend_language_scanner.l" { return T_SL; } -#line 3658 "Zend/zend_language_scanner.c" +#line 3668 "Zend/zend_language_scanner.c" yy252: YYDEBUG(252, *YYCURSOR); yych = *++YYCURSOR; @@ -3666,22 +3676,22 @@ yy253: ++YYCURSOR; YYDEBUG(254, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1371 "Zend/zend_language_scanner.l" +#line 1377 "Zend/zend_language_scanner.l" { return T_IS_SMALLER_OR_EQUAL; } -#line 3674 "Zend/zend_language_scanner.c" +#line 3684 "Zend/zend_language_scanner.c" yy255: YYDEBUG(255, *YYCURSOR); ++YYCURSOR; yy256: YYDEBUG(256, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1367 "Zend/zend_language_scanner.l" +#line 1373 "Zend/zend_language_scanner.l" { return T_IS_NOT_EQUAL; } -#line 3685 "Zend/zend_language_scanner.c" +#line 3695 "Zend/zend_language_scanner.c" yy257: YYDEBUG(257, *YYCURSOR); yych = *++YYCURSOR; @@ -3732,11 +3742,11 @@ yy264: ++YYCURSOR; YYDEBUG(265, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1403 "Zend/zend_language_scanner.l" +#line 1409 "Zend/zend_language_scanner.l" { return T_SL_EQUAL; } -#line 3740 "Zend/zend_language_scanner.c" +#line 3750 "Zend/zend_language_scanner.c" yy266: YYDEBUG(266, *YYCURSOR); ++YYCURSOR; @@ -3841,7 +3851,7 @@ yy275: yy276: YYDEBUG(276, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2068 "Zend/zend_language_scanner.l" +#line 2078 "Zend/zend_language_scanner.l" { char *s; int bprefix = (yytext[0] != '<') ? 1 : 0; @@ -3888,7 +3898,7 @@ yy276: return T_START_HEREDOC; } -#line 3892 "Zend/zend_language_scanner.c" +#line 3902 "Zend/zend_language_scanner.c" yy277: YYDEBUG(277, *YYCURSOR); yych = *++YYCURSOR; @@ -3928,31 +3938,31 @@ yy280: ++YYCURSOR; YYDEBUG(282, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1359 "Zend/zend_language_scanner.l" +#line 1365 "Zend/zend_language_scanner.l" { return T_IS_NOT_IDENTICAL; } -#line 3936 "Zend/zend_language_scanner.c" +#line 3946 "Zend/zend_language_scanner.c" yy283: YYDEBUG(283, *YYCURSOR); ++YYCURSOR; YYDEBUG(284, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1379 "Zend/zend_language_scanner.l" +#line 1385 "Zend/zend_language_scanner.l" { return T_PLUS_EQUAL; } -#line 3946 "Zend/zend_language_scanner.c" +#line 3956 "Zend/zend_language_scanner.c" yy285: YYDEBUG(285, *YYCURSOR); ++YYCURSOR; YYDEBUG(286, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1347 "Zend/zend_language_scanner.l" +#line 1353 "Zend/zend_language_scanner.l" { return T_INC; } -#line 3956 "Zend/zend_language_scanner.c" +#line 3966 "Zend/zend_language_scanner.c" yy287: YYDEBUG(287, *YYCURSOR); yych = *++YYCURSOR; @@ -3971,42 +3981,42 @@ yy289: } YYDEBUG(290, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1335 "Zend/zend_language_scanner.l" +#line 1341 "Zend/zend_language_scanner.l" { return T_LIST; } -#line 3979 "Zend/zend_language_scanner.c" +#line 3989 "Zend/zend_language_scanner.c" yy291: YYDEBUG(291, *YYCURSOR); ++YYCURSOR; if ((yych = *YYCURSOR) == '=') goto yy295; YYDEBUG(292, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1363 "Zend/zend_language_scanner.l" +#line 1369 "Zend/zend_language_scanner.l" { return T_IS_EQUAL; } -#line 3990 "Zend/zend_language_scanner.c" +#line 4000 "Zend/zend_language_scanner.c" yy293: YYDEBUG(293, *YYCURSOR); ++YYCURSOR; YYDEBUG(294, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1331 "Zend/zend_language_scanner.l" +#line 1337 "Zend/zend_language_scanner.l" { return T_DOUBLE_ARROW; } -#line 4000 "Zend/zend_language_scanner.c" +#line 4010 "Zend/zend_language_scanner.c" yy295: YYDEBUG(295, *YYCURSOR); ++YYCURSOR; YYDEBUG(296, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1355 "Zend/zend_language_scanner.l" +#line 1361 "Zend/zend_language_scanner.l" { return T_IS_IDENTICAL; } -#line 4010 "Zend/zend_language_scanner.c" +#line 4020 "Zend/zend_language_scanner.c" yy297: YYDEBUG(297, *YYCURSOR); yych = *++YYCURSOR; @@ -4136,7 +4146,7 @@ yy313: } YYDEBUG(316, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1686 "Zend/zend_language_scanner.l" +#line 1692 "Zend/zend_language_scanner.l" { if (Z_TYPE(CG(current_namespace)) != IS_UNDEF) { ZVAL_DUP(zendlval, &CG(current_namespace)); @@ -4145,7 +4155,7 @@ yy313: } return T_NS_C; } -#line 4149 "Zend/zend_language_scanner.c" +#line 4159 "Zend/zend_language_scanner.c" yy317: YYDEBUG(317, *YYCURSOR); yych = *++YYCURSOR; @@ -4165,7 +4175,7 @@ yy318: } YYDEBUG(321, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1661 "Zend/zend_language_scanner.l" +#line 1667 "Zend/zend_language_scanner.l" { zend_string *filename = zend_get_compiled_filename(TSRMLS_C); zend_string *dirname; @@ -4190,7 +4200,7 @@ yy318: ZVAL_STR(zendlval, dirname); return T_DIR; } -#line 4194 "Zend/zend_language_scanner.c" +#line 4204 "Zend/zend_language_scanner.c" yy322: YYDEBUG(322, *YYCURSOR); yych = *++YYCURSOR; @@ -4215,12 +4225,12 @@ yy324: } YYDEBUG(327, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1645 "Zend/zend_language_scanner.l" +#line 1651 "Zend/zend_language_scanner.l" { ZVAL_LONG(zendlval, CG(zend_lineno)); return T_LINE; } -#line 4224 "Zend/zend_language_scanner.c" +#line 4234 "Zend/zend_language_scanner.c" yy328: YYDEBUG(328, *YYCURSOR); yych = *++YYCURSOR; @@ -4255,7 +4265,7 @@ yy332: } YYDEBUG(335, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1613 "Zend/zend_language_scanner.l" +#line 1619 "Zend/zend_language_scanner.l" { if (CG(active_class_entry)) { int len = 0; @@ -4287,7 +4297,7 @@ yy332: } return T_METHOD_C; } -#line 4291 "Zend/zend_language_scanner.c" +#line 4301 "Zend/zend_language_scanner.c" yy336: YYDEBUG(336, *YYCURSOR); yych = *++YYCURSOR; @@ -4338,7 +4348,7 @@ yy343: } YYDEBUG(346, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1603 "Zend/zend_language_scanner.l" +#line 1609 "Zend/zend_language_scanner.l" { zend_op_array *op_array = CG(active_op_array); if (op_array && op_array->function_name) { @@ -4348,7 +4358,7 @@ yy343: } return T_FUNC_C; } -#line 4352 "Zend/zend_language_scanner.c" +#line 4362 "Zend/zend_language_scanner.c" yy347: YYDEBUG(347, *YYCURSOR); yych = *++YYCURSOR; @@ -4368,7 +4378,7 @@ yy348: } YYDEBUG(351, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1650 "Zend/zend_language_scanner.l" +#line 1656 "Zend/zend_language_scanner.l" { zend_string *filename = zend_get_compiled_filename(TSRMLS_C); @@ -4379,7 +4389,7 @@ yy348: } return T_FILE; } -#line 4383 "Zend/zend_language_scanner.c" +#line 4393 "Zend/zend_language_scanner.c" yy352: YYDEBUG(352, *YYCURSOR); yych = *++YYCURSOR; @@ -4409,7 +4419,7 @@ yy355: } YYDEBUG(358, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1593 "Zend/zend_language_scanner.l" +#line 1599 "Zend/zend_language_scanner.l" { zend_class_entry *ce = CG(active_class_entry); if (ce && ce->name && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) { @@ -4419,7 +4429,7 @@ yy355: } return T_TRAIT_C; } -#line 4423 "Zend/zend_language_scanner.c" +#line 4433 "Zend/zend_language_scanner.c" yy359: YYDEBUG(359, *YYCURSOR); yych = *++YYCURSOR; @@ -4449,7 +4459,7 @@ yy362: } YYDEBUG(365, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1576 "Zend/zend_language_scanner.l" +#line 1582 "Zend/zend_language_scanner.l" { zend_class_entry *ce = CG(active_class_entry); if (ce && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) { @@ -4466,7 +4476,7 @@ yy362: } return T_CLASS_C; } -#line 4470 "Zend/zend_language_scanner.c" +#line 4480 "Zend/zend_language_scanner.c" yy366: YYDEBUG(366, *YYCURSOR); yych = *++YYCURSOR; @@ -4528,11 +4538,11 @@ yy377: } YYDEBUG(378, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1299 "Zend/zend_language_scanner.l" +#line 1305 "Zend/zend_language_scanner.l" { return T_HALT_COMPILER; } -#line 4536 "Zend/zend_language_scanner.c" +#line 4546 "Zend/zend_language_scanner.c" yy379: YYDEBUG(379, *YYCURSOR); yych = *++YYCURSOR; @@ -4552,11 +4562,11 @@ yy381: } YYDEBUG(382, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1279 "Zend/zend_language_scanner.l" +#line 1285 "Zend/zend_language_scanner.l" { return T_USE; } -#line 4560 "Zend/zend_language_scanner.c" +#line 4570 "Zend/zend_language_scanner.c" yy383: YYDEBUG(383, *YYCURSOR); yych = *++YYCURSOR; @@ -4575,11 +4585,11 @@ yy385: } YYDEBUG(386, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1327 "Zend/zend_language_scanner.l" +#line 1333 "Zend/zend_language_scanner.l" { return T_UNSET; } -#line 4583 "Zend/zend_language_scanner.c" +#line 4593 "Zend/zend_language_scanner.c" yy387: YYDEBUG(387, *YYCURSOR); ++YYCURSOR; @@ -4751,11 +4761,11 @@ yy402: ++YYCURSOR; YYDEBUG(404, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1227 "Zend/zend_language_scanner.l" +#line 1233 "Zend/zend_language_scanner.l" { return T_INT_CAST; } -#line 4759 "Zend/zend_language_scanner.c" +#line 4769 "Zend/zend_language_scanner.c" yy405: YYDEBUG(405, *YYCURSOR); yych = *++YYCURSOR; @@ -4799,11 +4809,11 @@ yy410: ++YYCURSOR; YYDEBUG(413, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1231 "Zend/zend_language_scanner.l" +#line 1237 "Zend/zend_language_scanner.l" { return T_DOUBLE_CAST; } -#line 4807 "Zend/zend_language_scanner.c" +#line 4817 "Zend/zend_language_scanner.c" yy414: YYDEBUG(414, *YYCURSOR); yych = *++YYCURSOR; @@ -4873,11 +4883,11 @@ yy424: ++YYCURSOR; YYDEBUG(427, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1235 "Zend/zend_language_scanner.l" +#line 1241 "Zend/zend_language_scanner.l" { return T_STRING_CAST; } -#line 4881 "Zend/zend_language_scanner.c" +#line 4891 "Zend/zend_language_scanner.c" yy428: YYDEBUG(428, *YYCURSOR); yych = *++YYCURSOR; @@ -4910,11 +4920,11 @@ yy431: ++YYCURSOR; YYDEBUG(434, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1239 "Zend/zend_language_scanner.l" +#line 1245 "Zend/zend_language_scanner.l" { return T_ARRAY_CAST; } -#line 4918 "Zend/zend_language_scanner.c" +#line 4928 "Zend/zend_language_scanner.c" yy435: YYDEBUG(435, *YYCURSOR); yych = *++YYCURSOR; @@ -4952,11 +4962,11 @@ yy439: ++YYCURSOR; YYDEBUG(442, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1243 "Zend/zend_language_scanner.l" +#line 1249 "Zend/zend_language_scanner.l" { return T_OBJECT_CAST; } -#line 4960 "Zend/zend_language_scanner.c" +#line 4970 "Zend/zend_language_scanner.c" yy443: YYDEBUG(443, *YYCURSOR); yych = *++YYCURSOR; @@ -4997,11 +5007,11 @@ yy448: ++YYCURSOR; YYDEBUG(450, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1247 "Zend/zend_language_scanner.l" +#line 1253 "Zend/zend_language_scanner.l" { return T_BOOL_CAST; } -#line 5005 "Zend/zend_language_scanner.c" +#line 5015 "Zend/zend_language_scanner.c" yy451: YYDEBUG(451, *YYCURSOR); yych = *++YYCURSOR; @@ -5061,11 +5071,11 @@ yy459: ++YYCURSOR; YYDEBUG(462, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1251 "Zend/zend_language_scanner.l" +#line 1257 "Zend/zend_language_scanner.l" { return T_UNSET_CAST; } -#line 5069 "Zend/zend_language_scanner.c" +#line 5079 "Zend/zend_language_scanner.c" yy463: YYDEBUG(463, *YYCURSOR); yych = *++YYCURSOR; @@ -5079,11 +5089,11 @@ yy464: } YYDEBUG(465, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1223 "Zend/zend_language_scanner.l" +#line 1229 "Zend/zend_language_scanner.l" { return T_VAR; } -#line 5087 "Zend/zend_language_scanner.c" +#line 5097 "Zend/zend_language_scanner.c" yy466: YYDEBUG(466, *YYCURSOR); yych = *++YYCURSOR; @@ -5103,11 +5113,11 @@ yy468: } YYDEBUG(469, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1215 "Zend/zend_language_scanner.l" +#line 1221 "Zend/zend_language_scanner.l" { return T_NEW; } -#line 5111 "Zend/zend_language_scanner.c" +#line 5121 "Zend/zend_language_scanner.c" yy470: YYDEBUG(470, *YYCURSOR); yych = *++YYCURSOR; @@ -5146,11 +5156,11 @@ yy476: } YYDEBUG(477, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1275 "Zend/zend_language_scanner.l" +#line 1281 "Zend/zend_language_scanner.l" { return T_NAMESPACE; } -#line 5154 "Zend/zend_language_scanner.c" +#line 5164 "Zend/zend_language_scanner.c" yy478: YYDEBUG(478, *YYCURSOR); yyaccept = 3; @@ -5172,11 +5182,11 @@ yy480: ++YYCURSOR; YYDEBUG(481, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1395 "Zend/zend_language_scanner.l" +#line 1401 "Zend/zend_language_scanner.l" { return T_CONCAT_EQUAL; } -#line 5180 "Zend/zend_language_scanner.c" +#line 5190 "Zend/zend_language_scanner.c" yy482: YYDEBUG(482, *YYCURSOR); yych = *++YYCURSOR; @@ -5185,21 +5195,21 @@ yy482: ++YYCURSOR; YYDEBUG(484, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1211 "Zend/zend_language_scanner.l" +#line 1217 "Zend/zend_language_scanner.l" { return T_ELLIPSIS; } -#line 5193 "Zend/zend_language_scanner.c" +#line 5203 "Zend/zend_language_scanner.c" yy485: YYDEBUG(485, *YYCURSOR); ++YYCURSOR; YYDEBUG(486, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1203 "Zend/zend_language_scanner.l" +#line 1209 "Zend/zend_language_scanner.l" { return T_PAAMAYIM_NEKUDOTAYIM; } -#line 5203 "Zend/zend_language_scanner.c" +#line 5213 "Zend/zend_language_scanner.c" yy487: YYDEBUG(487, *YYCURSOR); ++YYCURSOR; @@ -5221,32 +5231,32 @@ yy489: ++YYCURSOR; YYDEBUG(490, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1383 "Zend/zend_language_scanner.l" +#line 1389 "Zend/zend_language_scanner.l" { return T_MINUS_EQUAL; } -#line 5229 "Zend/zend_language_scanner.c" +#line 5239 "Zend/zend_language_scanner.c" yy491: YYDEBUG(491, *YYCURSOR); ++YYCURSOR; YYDEBUG(492, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1351 "Zend/zend_language_scanner.l" +#line 1357 "Zend/zend_language_scanner.l" { return T_DEC; } -#line 5239 "Zend/zend_language_scanner.c" +#line 5249 "Zend/zend_language_scanner.c" yy493: YYDEBUG(493, *YYCURSOR); ++YYCURSOR; YYDEBUG(494, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1175 "Zend/zend_language_scanner.l" +#line 1181 "Zend/zend_language_scanner.l" { yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); return T_OBJECT_OPERATOR; } -#line 5250 "Zend/zend_language_scanner.c" +#line 5260 "Zend/zend_language_scanner.c" yy495: YYDEBUG(495, *YYCURSOR); yych = *++YYCURSOR; @@ -5291,11 +5301,11 @@ yy500: } YYDEBUG(501, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1323 "Zend/zend_language_scanner.l" +#line 1329 "Zend/zend_language_scanner.l" { return T_PUBLIC; } -#line 5299 "Zend/zend_language_scanner.c" +#line 5309 "Zend/zend_language_scanner.c" yy502: YYDEBUG(502, *YYCURSOR); yych = *++YYCURSOR; @@ -5350,11 +5360,11 @@ yy509: } YYDEBUG(510, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1319 "Zend/zend_language_scanner.l" +#line 1325 "Zend/zend_language_scanner.l" { return T_PROTECTED; } -#line 5358 "Zend/zend_language_scanner.c" +#line 5368 "Zend/zend_language_scanner.c" yy511: YYDEBUG(511, *YYCURSOR); yych = *++YYCURSOR; @@ -5384,11 +5394,11 @@ yy515: } YYDEBUG(516, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1315 "Zend/zend_language_scanner.l" +#line 1321 "Zend/zend_language_scanner.l" { return T_PRIVATE; } -#line 5392 "Zend/zend_language_scanner.c" +#line 5402 "Zend/zend_language_scanner.c" yy517: YYDEBUG(517, *YYCURSOR); ++YYCURSOR; @@ -5397,11 +5407,11 @@ yy517: } YYDEBUG(518, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1151 "Zend/zend_language_scanner.l" +#line 1157 "Zend/zend_language_scanner.l" { return T_PRINT; } -#line 5405 "Zend/zend_language_scanner.c" +#line 5415 "Zend/zend_language_scanner.c" yy519: YYDEBUG(519, *YYCURSOR); yych = *++YYCURSOR; @@ -5426,11 +5436,11 @@ yy522: } YYDEBUG(523, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1143 "Zend/zend_language_scanner.l" +#line 1149 "Zend/zend_language_scanner.l" { return T_GOTO; } -#line 5434 "Zend/zend_language_scanner.c" +#line 5444 "Zend/zend_language_scanner.c" yy524: YYDEBUG(524, *YYCURSOR); yych = *++YYCURSOR; @@ -5454,11 +5464,11 @@ yy527: } YYDEBUG(528, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1287 "Zend/zend_language_scanner.l" +#line 1293 "Zend/zend_language_scanner.l" { return T_GLOBAL; } -#line 5462 "Zend/zend_language_scanner.c" +#line 5472 "Zend/zend_language_scanner.c" yy529: YYDEBUG(529, *YYCURSOR); yych = *++YYCURSOR; @@ -5495,11 +5505,11 @@ yy535: } YYDEBUG(536, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1135 "Zend/zend_language_scanner.l" +#line 1141 "Zend/zend_language_scanner.l" { return T_BREAK; } -#line 5503 "Zend/zend_language_scanner.c" +#line 5513 "Zend/zend_language_scanner.c" yy537: YYDEBUG(537, *YYCURSOR); yych = *++YYCURSOR; @@ -5539,11 +5549,11 @@ yy543: } YYDEBUG(544, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1119 "Zend/zend_language_scanner.l" +#line 1125 "Zend/zend_language_scanner.l" { return T_SWITCH; } -#line 5547 "Zend/zend_language_scanner.c" +#line 5557 "Zend/zend_language_scanner.c" yy545: YYDEBUG(545, *YYCURSOR); yych = *++YYCURSOR; @@ -5567,11 +5577,11 @@ yy548: } YYDEBUG(549, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1303 "Zend/zend_language_scanner.l" +#line 1309 "Zend/zend_language_scanner.l" { return T_STATIC; } -#line 5575 "Zend/zend_language_scanner.c" +#line 5585 "Zend/zend_language_scanner.c" yy550: YYDEBUG(550, *YYCURSOR); yych = *++YYCURSOR; @@ -5598,11 +5608,11 @@ yy553: } YYDEBUG(554, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1115 "Zend/zend_language_scanner.l" +#line 1121 "Zend/zend_language_scanner.l" { return T_AS; } -#line 5606 "Zend/zend_language_scanner.c" +#line 5616 "Zend/zend_language_scanner.c" yy555: YYDEBUG(555, *YYCURSOR); yych = *++YYCURSOR; @@ -5621,11 +5631,11 @@ yy557: } YYDEBUG(558, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1339 "Zend/zend_language_scanner.l" +#line 1345 "Zend/zend_language_scanner.l" { return T_ARRAY; } -#line 5629 "Zend/zend_language_scanner.c" +#line 5639 "Zend/zend_language_scanner.c" yy559: YYDEBUG(559, *YYCURSOR); ++YYCURSOR; @@ -5634,11 +5644,11 @@ yy559: } YYDEBUG(560, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1435 "Zend/zend_language_scanner.l" +#line 1441 "Zend/zend_language_scanner.l" { return T_LOGICAL_AND; } -#line 5642 "Zend/zend_language_scanner.c" +#line 5652 "Zend/zend_language_scanner.c" yy561: YYDEBUG(561, *YYCURSOR); yych = *++YYCURSOR; @@ -5672,11 +5682,11 @@ yy566: } YYDEBUG(567, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1307 "Zend/zend_language_scanner.l" +#line 1313 "Zend/zend_language_scanner.l" { return T_ABSTRACT; } -#line 5680 "Zend/zend_language_scanner.c" +#line 5690 "Zend/zend_language_scanner.c" yy568: YYDEBUG(568, *YYCURSOR); yych = *++YYCURSOR; @@ -5700,11 +5710,11 @@ yy571: } YYDEBUG(572, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1075 "Zend/zend_language_scanner.l" +#line 1081 "Zend/zend_language_scanner.l" { return T_WHILE; } -#line 5708 "Zend/zend_language_scanner.c" +#line 5718 "Zend/zend_language_scanner.c" yy573: YYDEBUG(573, *YYCURSOR); ++YYCURSOR; @@ -5713,11 +5723,11 @@ yy573: } YYDEBUG(574, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1059 "Zend/zend_language_scanner.l" +#line 1065 "Zend/zend_language_scanner.l" { return T_IF; } -#line 5721 "Zend/zend_language_scanner.c" +#line 5731 "Zend/zend_language_scanner.c" yy575: YYDEBUG(575, *YYCURSOR); yych = *++YYCURSOR; @@ -5769,11 +5779,11 @@ yy580: } YYDEBUG(581, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1291 "Zend/zend_language_scanner.l" +#line 1297 "Zend/zend_language_scanner.l" { return T_ISSET; } -#line 5777 "Zend/zend_language_scanner.c" +#line 5787 "Zend/zend_language_scanner.c" yy582: YYDEBUG(582, *YYCURSOR); yych = *++YYCURSOR; @@ -5827,11 +5837,11 @@ yy588: yy589: YYDEBUG(589, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1259 "Zend/zend_language_scanner.l" +#line 1265 "Zend/zend_language_scanner.l" { return T_INCLUDE; } -#line 5835 "Zend/zend_language_scanner.c" +#line 5845 "Zend/zend_language_scanner.c" yy590: YYDEBUG(590, *YYCURSOR); yych = *++YYCURSOR; @@ -5860,11 +5870,11 @@ yy594: } YYDEBUG(595, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1263 "Zend/zend_language_scanner.l" +#line 1269 "Zend/zend_language_scanner.l" { return T_INCLUDE_ONCE; } -#line 5868 "Zend/zend_language_scanner.c" +#line 5878 "Zend/zend_language_scanner.c" yy596: YYDEBUG(596, *YYCURSOR); yych = *++YYCURSOR; @@ -5898,11 +5908,11 @@ yy601: } YYDEBUG(602, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1159 "Zend/zend_language_scanner.l" +#line 1165 "Zend/zend_language_scanner.l" { return T_INTERFACE; } -#line 5906 "Zend/zend_language_scanner.c" +#line 5916 "Zend/zend_language_scanner.c" yy603: YYDEBUG(603, *YYCURSOR); yych = *++YYCURSOR; @@ -5952,11 +5962,11 @@ yy609: } YYDEBUG(610, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1283 "Zend/zend_language_scanner.l" +#line 1289 "Zend/zend_language_scanner.l" { return T_INSTEADOF; } -#line 5960 "Zend/zend_language_scanner.c" +#line 5970 "Zend/zend_language_scanner.c" yy611: YYDEBUG(611, *YYCURSOR); yych = *++YYCURSOR; @@ -5985,11 +5995,11 @@ yy615: } YYDEBUG(616, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1111 "Zend/zend_language_scanner.l" +#line 1117 "Zend/zend_language_scanner.l" { return T_INSTANCEOF; } -#line 5993 "Zend/zend_language_scanner.c" +#line 6003 "Zend/zend_language_scanner.c" yy617: YYDEBUG(617, *YYCURSOR); yych = *++YYCURSOR; @@ -6033,11 +6043,11 @@ yy624: } YYDEBUG(625, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1171 "Zend/zend_language_scanner.l" +#line 1177 "Zend/zend_language_scanner.l" { return T_IMPLEMENTS; } -#line 6041 "Zend/zend_language_scanner.c" +#line 6051 "Zend/zend_language_scanner.c" yy626: YYDEBUG(626, *YYCURSOR); yych = *++YYCURSOR; @@ -6065,11 +6075,11 @@ yy627: } YYDEBUG(629, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1043 "Zend/zend_language_scanner.l" +#line 1049 "Zend/zend_language_scanner.l" { return T_TRY; } -#line 6073 "Zend/zend_language_scanner.c" +#line 6083 "Zend/zend_language_scanner.c" yy630: YYDEBUG(630, *YYCURSOR); yych = *++YYCURSOR; @@ -6088,11 +6098,11 @@ yy632: } YYDEBUG(633, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1163 "Zend/zend_language_scanner.l" +#line 1169 "Zend/zend_language_scanner.l" { return T_TRAIT; } -#line 6096 "Zend/zend_language_scanner.c" +#line 6106 "Zend/zend_language_scanner.c" yy634: YYDEBUG(634, *YYCURSOR); yych = *++YYCURSOR; @@ -6111,11 +6121,11 @@ yy636: } YYDEBUG(637, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1055 "Zend/zend_language_scanner.l" +#line 1061 "Zend/zend_language_scanner.l" { return T_THROW; } -#line 6119 "Zend/zend_language_scanner.c" +#line 6129 "Zend/zend_language_scanner.c" yy638: YYDEBUG(638, *YYCURSOR); yych = *++YYCURSOR; @@ -6139,11 +6149,11 @@ yy641: } YYDEBUG(642, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1039 "Zend/zend_language_scanner.l" +#line 1045 "Zend/zend_language_scanner.l" { return T_YIELD; } -#line 6147 "Zend/zend_language_scanner.c" +#line 6157 "Zend/zend_language_scanner.c" yy643: YYDEBUG(643, *YYCURSOR); yych = *++YYCURSOR; @@ -6204,11 +6214,11 @@ yy649: yy650: YYDEBUG(650, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1267 "Zend/zend_language_scanner.l" +#line 1273 "Zend/zend_language_scanner.l" { return T_REQUIRE; } -#line 6212 "Zend/zend_language_scanner.c" +#line 6222 "Zend/zend_language_scanner.c" yy651: YYDEBUG(651, *YYCURSOR); yych = *++YYCURSOR; @@ -6237,11 +6247,11 @@ yy655: } YYDEBUG(656, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1271 "Zend/zend_language_scanner.l" +#line 1277 "Zend/zend_language_scanner.l" { return T_REQUIRE_ONCE; } -#line 6245 "Zend/zend_language_scanner.c" +#line 6255 "Zend/zend_language_scanner.c" yy657: YYDEBUG(657, *YYCURSOR); yych = *++YYCURSOR; @@ -6260,11 +6270,11 @@ yy659: } YYDEBUG(660, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1035 "Zend/zend_language_scanner.l" +#line 1041 "Zend/zend_language_scanner.l" { return T_RETURN; } -#line 6268 "Zend/zend_language_scanner.c" +#line 6278 "Zend/zend_language_scanner.c" yy661: YYDEBUG(661, *YYCURSOR); yych = *++YYCURSOR; @@ -6354,11 +6364,11 @@ yy670: } YYDEBUG(671, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1139 "Zend/zend_language_scanner.l" +#line 1145 "Zend/zend_language_scanner.l" { return T_CONTINUE; } -#line 6362 "Zend/zend_language_scanner.c" +#line 6372 "Zend/zend_language_scanner.c" yy672: YYDEBUG(672, *YYCURSOR); ++YYCURSOR; @@ -6367,11 +6377,11 @@ yy672: } YYDEBUG(673, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1031 "Zend/zend_language_scanner.l" +#line 1037 "Zend/zend_language_scanner.l" { return T_CONST; } -#line 6375 "Zend/zend_language_scanner.c" +#line 6385 "Zend/zend_language_scanner.c" yy674: YYDEBUG(674, *YYCURSOR); yych = *++YYCURSOR; @@ -6396,11 +6406,11 @@ yy677: } YYDEBUG(678, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1219 "Zend/zend_language_scanner.l" +#line 1225 "Zend/zend_language_scanner.l" { return T_CLONE; } -#line 6404 "Zend/zend_language_scanner.c" +#line 6414 "Zend/zend_language_scanner.c" yy679: YYDEBUG(679, *YYCURSOR); yych = *++YYCURSOR; @@ -6414,11 +6424,11 @@ yy680: } YYDEBUG(681, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1155 "Zend/zend_language_scanner.l" +#line 1161 "Zend/zend_language_scanner.l" { return T_CLASS; } -#line 6422 "Zend/zend_language_scanner.c" +#line 6432 "Zend/zend_language_scanner.c" yy682: YYDEBUG(682, *YYCURSOR); yych = *++YYCURSOR; @@ -6464,11 +6474,11 @@ yy689: } YYDEBUG(690, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1343 "Zend/zend_language_scanner.l" +#line 1349 "Zend/zend_language_scanner.l" { return T_CALLABLE; } -#line 6472 "Zend/zend_language_scanner.c" +#line 6482 "Zend/zend_language_scanner.c" yy691: YYDEBUG(691, *YYCURSOR); ++YYCURSOR; @@ -6477,11 +6487,11 @@ yy691: } YYDEBUG(692, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1127 "Zend/zend_language_scanner.l" +#line 1133 "Zend/zend_language_scanner.l" { return T_CASE; } -#line 6485 "Zend/zend_language_scanner.c" +#line 6495 "Zend/zend_language_scanner.c" yy693: YYDEBUG(693, *YYCURSOR); yych = *++YYCURSOR; @@ -6495,11 +6505,11 @@ yy694: } YYDEBUG(695, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1047 "Zend/zend_language_scanner.l" +#line 1053 "Zend/zend_language_scanner.l" { return T_CATCH; } -#line 6503 "Zend/zend_language_scanner.c" +#line 6513 "Zend/zend_language_scanner.c" yy696: YYDEBUG(696, *YYCURSOR); yych = *++YYCURSOR; @@ -6550,11 +6560,11 @@ yy704: } YYDEBUG(705, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1027 "Zend/zend_language_scanner.l" +#line 1033 "Zend/zend_language_scanner.l" { return T_FUNCTION; } -#line 6558 "Zend/zend_language_scanner.c" +#line 6568 "Zend/zend_language_scanner.c" yy706: YYDEBUG(706, *YYCURSOR); ++YYCURSOR; @@ -6578,11 +6588,11 @@ yy706: yy707: YYDEBUG(707, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1087 "Zend/zend_language_scanner.l" +#line 1093 "Zend/zend_language_scanner.l" { return T_FOR; } -#line 6586 "Zend/zend_language_scanner.c" +#line 6596 "Zend/zend_language_scanner.c" yy708: YYDEBUG(708, *YYCURSOR); yych = *++YYCURSOR; @@ -6606,11 +6616,11 @@ yy711: } YYDEBUG(712, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1095 "Zend/zend_language_scanner.l" +#line 1101 "Zend/zend_language_scanner.l" { return T_FOREACH; } -#line 6614 "Zend/zend_language_scanner.c" +#line 6624 "Zend/zend_language_scanner.c" yy713: YYDEBUG(713, *YYCURSOR); yych = *++YYCURSOR; @@ -6644,11 +6654,11 @@ yy715: yy716: YYDEBUG(716, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1311 "Zend/zend_language_scanner.l" +#line 1317 "Zend/zend_language_scanner.l" { return T_FINAL; } -#line 6652 "Zend/zend_language_scanner.c" +#line 6662 "Zend/zend_language_scanner.c" yy717: YYDEBUG(717, *YYCURSOR); yych = *++YYCURSOR; @@ -6662,11 +6672,11 @@ yy718: } YYDEBUG(719, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1051 "Zend/zend_language_scanner.l" +#line 1057 "Zend/zend_language_scanner.l" { return T_FINALLY; } -#line 6670 "Zend/zend_language_scanner.c" +#line 6680 "Zend/zend_language_scanner.c" yy720: YYDEBUG(720, *YYCURSOR); yych = *++YYCURSOR; @@ -6697,11 +6707,11 @@ yy722: } YYDEBUG(723, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1083 "Zend/zend_language_scanner.l" +#line 1089 "Zend/zend_language_scanner.l" { return T_DO; } -#line 6705 "Zend/zend_language_scanner.c" +#line 6715 "Zend/zend_language_scanner.c" yy724: YYDEBUG(724, *YYCURSOR); ++YYCURSOR; @@ -6710,11 +6720,11 @@ yy724: } YYDEBUG(725, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1023 "Zend/zend_language_scanner.l" +#line 1029 "Zend/zend_language_scanner.l" { return T_EXIT; } -#line 6718 "Zend/zend_language_scanner.c" +#line 6728 "Zend/zend_language_scanner.c" yy726: YYDEBUG(726, *YYCURSOR); yych = *++YYCURSOR; @@ -6749,11 +6759,11 @@ yy731: } YYDEBUG(732, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1131 "Zend/zend_language_scanner.l" +#line 1137 "Zend/zend_language_scanner.l" { return T_DEFAULT; } -#line 6757 "Zend/zend_language_scanner.c" +#line 6767 "Zend/zend_language_scanner.c" yy733: YYDEBUG(733, *YYCURSOR); yych = *++YYCURSOR; @@ -6777,11 +6787,11 @@ yy736: } YYDEBUG(737, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1103 "Zend/zend_language_scanner.l" +#line 1109 "Zend/zend_language_scanner.l" { return T_DECLARE; } -#line 6785 "Zend/zend_language_scanner.c" +#line 6795 "Zend/zend_language_scanner.c" yy738: YYDEBUG(738, *YYCURSOR); yych = *++YYCURSOR; @@ -6861,11 +6871,11 @@ yy749: } YYDEBUG(750, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1167 "Zend/zend_language_scanner.l" +#line 1173 "Zend/zend_language_scanner.l" { return T_EXTENDS; } -#line 6869 "Zend/zend_language_scanner.c" +#line 6879 "Zend/zend_language_scanner.c" yy751: YYDEBUG(751, *YYCURSOR); ++YYCURSOR; @@ -6874,11 +6884,11 @@ yy751: } YYDEBUG(752, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1019 "Zend/zend_language_scanner.l" +#line 1025 "Zend/zend_language_scanner.l" { return T_EXIT; } -#line 6882 "Zend/zend_language_scanner.c" +#line 6892 "Zend/zend_language_scanner.c" yy753: YYDEBUG(753, *YYCURSOR); yych = *++YYCURSOR; @@ -6892,11 +6902,11 @@ yy754: } YYDEBUG(755, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1255 "Zend/zend_language_scanner.l" +#line 1261 "Zend/zend_language_scanner.l" { return T_EVAL; } -#line 6900 "Zend/zend_language_scanner.c" +#line 6910 "Zend/zend_language_scanner.c" yy756: YYDEBUG(756, *YYCURSOR); yych = *++YYCURSOR; @@ -6966,11 +6976,11 @@ yy765: } YYDEBUG(766, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1079 "Zend/zend_language_scanner.l" +#line 1085 "Zend/zend_language_scanner.l" { return T_ENDWHILE; } -#line 6974 "Zend/zend_language_scanner.c" +#line 6984 "Zend/zend_language_scanner.c" yy767: YYDEBUG(767, *YYCURSOR); yych = *++YYCURSOR; @@ -6999,11 +7009,11 @@ yy771: } YYDEBUG(772, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1123 "Zend/zend_language_scanner.l" +#line 1129 "Zend/zend_language_scanner.l" { return T_ENDSWITCH; } -#line 7007 "Zend/zend_language_scanner.c" +#line 7017 "Zend/zend_language_scanner.c" yy773: YYDEBUG(773, *YYCURSOR); ++YYCURSOR; @@ -7012,11 +7022,11 @@ yy773: } YYDEBUG(774, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1067 "Zend/zend_language_scanner.l" +#line 1073 "Zend/zend_language_scanner.l" { return T_ENDIF; } -#line 7020 "Zend/zend_language_scanner.c" +#line 7030 "Zend/zend_language_scanner.c" yy775: YYDEBUG(775, *YYCURSOR); yych = *++YYCURSOR; @@ -7045,11 +7055,11 @@ yy776: yy777: YYDEBUG(777, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1091 "Zend/zend_language_scanner.l" +#line 1097 "Zend/zend_language_scanner.l" { return T_ENDFOR; } -#line 7053 "Zend/zend_language_scanner.c" +#line 7063 "Zend/zend_language_scanner.c" yy778: YYDEBUG(778, *YYCURSOR); yych = *++YYCURSOR; @@ -7073,11 +7083,11 @@ yy781: } YYDEBUG(782, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1099 "Zend/zend_language_scanner.l" +#line 1105 "Zend/zend_language_scanner.l" { return T_ENDFOREACH; } -#line 7081 "Zend/zend_language_scanner.c" +#line 7091 "Zend/zend_language_scanner.c" yy783: YYDEBUG(783, *YYCURSOR); yych = *++YYCURSOR; @@ -7111,11 +7121,11 @@ yy788: } YYDEBUG(789, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1107 "Zend/zend_language_scanner.l" +#line 1113 "Zend/zend_language_scanner.l" { return T_ENDDECLARE; } -#line 7119 "Zend/zend_language_scanner.c" +#line 7129 "Zend/zend_language_scanner.c" yy790: YYDEBUG(790, *YYCURSOR); yych = *++YYCURSOR; @@ -7134,11 +7144,11 @@ yy792: } YYDEBUG(793, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1295 "Zend/zend_language_scanner.l" +#line 1301 "Zend/zend_language_scanner.l" { return T_EMPTY; } -#line 7142 "Zend/zend_language_scanner.c" +#line 7152 "Zend/zend_language_scanner.c" yy794: YYDEBUG(794, *YYCURSOR); yych = *++YYCURSOR; @@ -7167,11 +7177,11 @@ yy795: yy796: YYDEBUG(796, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1071 "Zend/zend_language_scanner.l" +#line 1077 "Zend/zend_language_scanner.l" { return T_ELSE; } -#line 7175 "Zend/zend_language_scanner.c" +#line 7185 "Zend/zend_language_scanner.c" yy797: YYDEBUG(797, *YYCURSOR); yych = *++YYCURSOR; @@ -7185,11 +7195,11 @@ yy798: } YYDEBUG(799, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1063 "Zend/zend_language_scanner.l" +#line 1069 "Zend/zend_language_scanner.l" { return T_ELSEIF; } -#line 7193 "Zend/zend_language_scanner.c" +#line 7203 "Zend/zend_language_scanner.c" yy800: YYDEBUG(800, *YYCURSOR); yych = *++YYCURSOR; @@ -7203,11 +7213,11 @@ yy801: } YYDEBUG(802, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1147 "Zend/zend_language_scanner.l" +#line 1153 "Zend/zend_language_scanner.l" { return T_ECHO; } -#line 7211 "Zend/zend_language_scanner.c" +#line 7221 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_LOOKING_FOR_PROPERTY: @@ -7280,14 +7290,14 @@ yy805: yy806: YYDEBUG(806, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1180 "Zend/zend_language_scanner.l" +#line 1186 "Zend/zend_language_scanner.l" { //??? ZVAL_STRINGL(zendlval, yytext, yyleng); ZVAL_EMPTY_STRING(zendlval); /* tricky way to no copying - intentional */ HANDLE_NEWLINES(yytext, yyleng); return T_WHITESPACE; } -#line 7291 "Zend/zend_language_scanner.c" +#line 7301 "Zend/zend_language_scanner.c" yy807: YYDEBUG(807, *YYCURSOR); ++YYCURSOR; @@ -7295,13 +7305,13 @@ yy807: yy808: YYDEBUG(808, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1197 "Zend/zend_language_scanner.l" +#line 1203 "Zend/zend_language_scanner.l" { yyless(0); yy_pop_state(TSRMLS_C); goto restart; } -#line 7305 "Zend/zend_language_scanner.c" +#line 7315 "Zend/zend_language_scanner.c" yy809: YYDEBUG(809, *YYCURSOR); ++YYCURSOR; @@ -7310,13 +7320,13 @@ yy809: yy810: YYDEBUG(810, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1191 "Zend/zend_language_scanner.l" +#line 1197 "Zend/zend_language_scanner.l" { yy_pop_state(TSRMLS_C); zend_copy_value(zendlval, yytext, yyleng); return T_STRING; } -#line 7320 "Zend/zend_language_scanner.c" +#line 7330 "Zend/zend_language_scanner.c" yy811: YYDEBUG(811, *YYCURSOR); yych = *++YYCURSOR; @@ -7337,11 +7347,11 @@ yy814: ++YYCURSOR; YYDEBUG(815, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1187 "Zend/zend_language_scanner.l" +#line 1193 "Zend/zend_language_scanner.l" { return T_OBJECT_OPERATOR; } -#line 7345 "Zend/zend_language_scanner.c" +#line 7355 "Zend/zend_language_scanner.c" yy816: YYDEBUG(816, *YYCURSOR); ++YYCURSOR; @@ -7426,14 +7436,14 @@ yy820: yy821: YYDEBUG(821, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1486 "Zend/zend_language_scanner.l" +#line 1492 "Zend/zend_language_scanner.l" { yyless(0); yy_pop_state(TSRMLS_C); yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); goto restart; } -#line 7437 "Zend/zend_language_scanner.c" +#line 7447 "Zend/zend_language_scanner.c" yy822: YYDEBUG(822, *YYCURSOR); yych = *++YYCURSOR; @@ -7458,7 +7468,7 @@ yy826: ++YYCURSOR; YYDEBUG(827, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1477 "Zend/zend_language_scanner.l" +#line 1483 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); zend_copy_value(zendlval, yytext, yyleng); @@ -7466,7 +7476,7 @@ yy826: yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); return T_STRING_VARNAME; } -#line 7470 "Zend/zend_language_scanner.c" +#line 7480 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_NOWDOC: @@ -7477,7 +7487,7 @@ yyc_ST_NOWDOC: ++YYCURSOR; YYDEBUG(831, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2321 "Zend/zend_language_scanner.l" +#line 2331 "Zend/zend_language_scanner.l" { int newline = 0; @@ -7533,7 +7543,7 @@ nowdoc_scan_done: HANDLE_NEWLINES(yytext, yyleng - newline); return T_ENCAPSED_AND_WHITESPACE; } -#line 7537 "Zend/zend_language_scanner.c" +#line 7547 "Zend/zend_language_scanner.c" /* *********************************** */ yyc_ST_VAR_OFFSET: { @@ -7640,7 +7650,7 @@ yy834: yy835: YYDEBUG(835, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1557 "Zend/zend_language_scanner.l" +#line 1563 "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)) { ZVAL_LONG(zendlval, strtol(yytext, NULL, 10)); @@ -7649,7 +7659,7 @@ yy835: } return T_NUM_STRING; } -#line 7653 "Zend/zend_language_scanner.c" +#line 7663 "Zend/zend_language_scanner.c" yy836: YYDEBUG(836, *YYCURSOR); yych = *++YYCURSOR; @@ -7669,23 +7679,23 @@ yy837: yy838: YYDEBUG(838, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1853 "Zend/zend_language_scanner.l" +#line 1861 "Zend/zend_language_scanner.l" { /* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */ return yytext[0]; } -#line 7678 "Zend/zend_language_scanner.c" +#line 7688 "Zend/zend_language_scanner.c" yy839: YYDEBUG(839, *YYCURSOR); ++YYCURSOR; YYDEBUG(840, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1848 "Zend/zend_language_scanner.l" +#line 1856 "Zend/zend_language_scanner.l" { yy_pop_state(TSRMLS_C); return ']'; } -#line 7689 "Zend/zend_language_scanner.c" +#line 7699 "Zend/zend_language_scanner.c" yy841: YYDEBUG(841, *YYCURSOR); yych = *++YYCURSOR; @@ -7695,14 +7705,14 @@ yy842: ++YYCURSOR; YYDEBUG(843, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1858 "Zend/zend_language_scanner.l" +#line 1866 "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 7706 "Zend/zend_language_scanner.c" +#line 7716 "Zend/zend_language_scanner.c" yy844: YYDEBUG(844, *YYCURSOR); ++YYCURSOR; @@ -7711,18 +7721,18 @@ yy844: yy845: YYDEBUG(845, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1865 "Zend/zend_language_scanner.l" +#line 1873 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, yytext, yyleng); return T_STRING; } -#line 7720 "Zend/zend_language_scanner.c" +#line 7730 "Zend/zend_language_scanner.c" yy846: YYDEBUG(846, *YYCURSOR); ++YYCURSOR; YYDEBUG(847, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2378 "Zend/zend_language_scanner.l" +#line 2388 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -7731,7 +7741,7 @@ yy846: zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); goto restart; } -#line 7735 "Zend/zend_language_scanner.c" +#line 7745 "Zend/zend_language_scanner.c" yy848: YYDEBUG(848, *YYCURSOR); ++YYCURSOR; @@ -7767,12 +7777,12 @@ yy850: yy852: YYDEBUG(852, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1843 "Zend/zend_language_scanner.l" +#line 1851 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); return T_VARIABLE; } -#line 7776 "Zend/zend_language_scanner.c" +#line 7786 "Zend/zend_language_scanner.c" yy853: YYDEBUG(853, *YYCURSOR); ++YYCURSOR; @@ -7812,12 +7822,12 @@ yy858: yy860: YYDEBUG(860, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1566 "Zend/zend_language_scanner.l" +#line 1572 "Zend/zend_language_scanner.l" { /* Offset must be treated as a string */ ZVAL_STRINGL(zendlval, yytext, yyleng); return T_NUM_STRING; } -#line 7821 "Zend/zend_language_scanner.c" +#line 7831 "Zend/zend_language_scanner.c" yy861: YYDEBUG(861, *YYCURSOR); ++YYCURSOR; @@ -7840,6 +7850,6 @@ yy863: goto yy860; } } -#line 2387 "Zend/zend_language_scanner.l" +#line 2397 "Zend/zend_language_scanner.l" } diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index 2ad186dd16..69aa1e3864 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -847,6 +847,9 @@ ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter 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))); } + if (SCNG(script_filtered)) { + efree(SCNG(script_filtered)); + } SCNG(script_filtered) = new_yy_start; SCNG(script_filtered_size) = length; } @@ -860,11 +863,14 @@ ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter } +//??? use zend_string saving memalloc # define zend_copy_value(zendlval, yytext, yyleng) \ if (SCNG(output_filter)) { \ size_t sz = 0; \ - SCNG(output_filter)((unsigned char **)&Z_STRVAL_P(zendlval), &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC); \ - Z_STRLEN_P(zendlval) = sz; \ + char *s = NULL; \ + SCNG(output_filter)((unsigned char **)&s, &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC); \ + ZVAL_STRINGL(zendlval, s, sz); \ + efree(s); \ } else { \ ZVAL_STRINGL(zendlval, yytext, yyleng); \ } @@ -982,7 +988,7 @@ static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quo if (SCNG(output_filter)) { size_t sz = 0; unsigned char *str; - //??? use zend_string saving memalloc + //??? use zend_string saving memalloc s = Z_STRVAL_P(zendlval); SCNG(output_filter)(&str, &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval) TSRMLS_CC); zval_ptr_dtor(zendlval); @@ -1806,13 +1812,15 @@ inline_html: if (SCNG(output_filter)) { int readsize; + char *s = NULL; size_t sz = 0; - readsize = SCNG(output_filter)((unsigned char **)&Z_STRVAL_P(zendlval), &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC); - Z_STRLEN_P(zendlval) = sz; + //??? use zend_string saving memalloc + readsize = SCNG(output_filter)((unsigned char **)&s, &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC); + ZVAL_STRINGL(zendlval, s, sz); + efree(s); if (readsize < yyleng) { yyless(readsize); } - Z_TYPE_INFO_P(zendlval) = IS_STRING_EX; } else { ZVAL_STRINGL(zendlval, yytext, yyleng); } @@ -2014,9 +2022,11 @@ inline_html: if (SCNG(output_filter)) { size_t sz = 0; + char *str = NULL; s = Z_STRVAL_P(zendlval); - SCNG(output_filter)((unsigned char **)&Z_STRVAL_P(zendlval), &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval) TSRMLS_CC); - Z_STRLEN_P(zendlval) = sz; + //??? use zend_string saving memalloc + SCNG(output_filter)((unsigned char **)&str, &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval) TSRMLS_CC); + ZVAL_STRINGL(zendlval, str, sz); efree(s); } return T_CONSTANT_ENCAPSED_STRING; diff --git a/Zend/zend_list.c b/Zend/zend_list.c index 2566eb6d2e..30d07aed37 100644 --- a/Zend/zend_list.c +++ b/Zend/zend_list.c @@ -50,33 +50,40 @@ ZEND_API int _zend_list_delete(zend_resource *res TSRMLS_DC) } } + +static void zend_resource_dtor(zend_resource *res TSRMLS_DC) +{ + zend_rsrc_list_dtors_entry *ld; + + ld = zend_hash_index_find_ptr(&list_destructors, res->type); + if (ld) { + switch (ld->type) { + case ZEND_RESOURCE_LIST_TYPE_STD: + if (ld->list_dtor) { + (ld->list_dtor)(res->ptr); + } + break; + case ZEND_RESOURCE_LIST_TYPE_EX: + if (ld->list_dtor_ex) { + ld->list_dtor_ex(res TSRMLS_CC); + } + break; + EMPTY_SWITCH_DEFAULT_CASE() + } + } else { + zend_error(E_WARNING,"Unknown list entry type (%d)", res->type); + } + res->ptr = NULL; + res->type = -1; +} + + ZEND_API int _zend_list_close(zend_resource *res TSRMLS_DC) { if (GC_REFCOUNT(res) <= 0) { return zend_list_delete(res); } else if (res->type >= 0) { - zend_rsrc_list_dtors_entry *ld; - - ld = zend_hash_index_find_ptr(&list_destructors, res->type); - if (ld) { - switch (ld->type) { - case ZEND_RESOURCE_LIST_TYPE_STD: - if (ld->list_dtor) { - (ld->list_dtor)(res->ptr); - } - break; - case ZEND_RESOURCE_LIST_TYPE_EX: - if (ld->list_dtor_ex) { - ld->list_dtor_ex(res TSRMLS_CC); - } - break; - EMPTY_SWITCH_DEFAULT_CASE() - } - } else { - zend_error(E_WARNING,"Unknown list entry type in request shutdown (%d)", res->type); - } - res->ptr = NULL; - res->type = -1; + zend_resource_dtor(res TSRMLS_CC); } return SUCCESS; } @@ -157,27 +164,9 @@ void list_entry_destructor(zval *zv) zend_resource *res = Z_RES_P(zv); if (res->type >= 0) { - zend_rsrc_list_dtors_entry *ld; TSRMLS_FETCH(); - ld = zend_hash_index_find_ptr(&list_destructors, res->type); - if (ld) { - switch (ld->type) { - case ZEND_RESOURCE_LIST_TYPE_STD: - if (ld->list_dtor) { - (ld->list_dtor)(res->ptr); - } - break; - case ZEND_RESOURCE_LIST_TYPE_EX: - if (ld->list_dtor_ex) { - ld->list_dtor_ex(res TSRMLS_CC); - } - break; - EMPTY_SWITCH_DEFAULT_CASE() - } - } else { - zend_error(E_WARNING,"Unknown list entry type in request shutdown (%d)", res->type); - } + zend_resource_dtor(res TSRMLS_CC); } efree(res); } @@ -188,23 +177,8 @@ void plist_entry_destructor(zval *zv) zend_rsrc_list_dtors_entry *ld; TSRMLS_FETCH(); - ld = zend_hash_index_find_ptr(&list_destructors, res->type); - if (ld) { - switch (ld->type) { - case ZEND_RESOURCE_LIST_TYPE_STD: - if (ld->plist_dtor) { - (ld->plist_dtor)(res->ptr); - } - break; - case ZEND_RESOURCE_LIST_TYPE_EX: - if (ld->plist_dtor_ex) { - ld->plist_dtor_ex(res TSRMLS_CC); - } - break; - EMPTY_SWITCH_DEFAULT_CASE() - } - } else { - zend_error(E_WARNING,"Unknown persistent list entry type in module shutdown (%d)", res->type); + if (res->type >= 0) { + zend_resource_dtor(res TSRMLS_CC); } free(res); } @@ -226,6 +200,23 @@ int zend_init_rsrc_plist(TSRMLS_D) } +static int zend_close_rsrc(zval *zv TSRMLS_DC) +{ + zend_resource *res = Z_PTR_P(zv); + + if (res->type >= 0) { + zend_resource_dtor(res TSRMLS_CC); + } + return ZEND_HASH_APPLY_KEEP; +} + + +void zend_close_rsrc_list(HashTable *ht TSRMLS_DC) +{ + zend_hash_reverse_apply(ht, zend_close_rsrc TSRMLS_CC); +} + + void zend_destroy_rsrc_list(HashTable *ht TSRMLS_DC) { zend_hash_graceful_reverse_destroy(ht); diff --git a/Zend/zend_list.h b/Zend/zend_list.h index c58905aa1f..a9f96addb6 100644 --- a/Zend/zend_list.h +++ b/Zend/zend_list.h @@ -60,6 +60,7 @@ void plist_entry_destructor(zval *ptr); void zend_clean_module_rsrc_dtors(int module_number TSRMLS_DC); int zend_init_rsrc_list(TSRMLS_D); int zend_init_rsrc_plist(TSRMLS_D); +void zend_close_rsrc_list(HashTable *ht TSRMLS_DC); void zend_destroy_rsrc_list(HashTable *ht TSRMLS_DC); int zend_init_rsrc_list_dtors(void); void zend_destroy_rsrc_list_dtors(void); diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 2150ad5773..5dba067023 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -1476,7 +1476,6 @@ found: zend_std_call_getter(object, member, &rv TSRMLS_CC); (*guard) &= ~IN_GET; if (Z_TYPE(rv) != IS_UNDEF) { - if (Z_REFCOUNTED(rv)) Z_ADDREF(rv); result = i_zend_is_true(&rv TSRMLS_CC); zval_ptr_dtor(&rv); } else { diff --git a/Zend/zend_string.c b/Zend/zend_string.c index d95d0e9e15..aafd8da5bb 100644 --- a/Zend/zend_string.c +++ b/Zend/zend_string.c @@ -78,6 +78,8 @@ void zend_interned_strings_dtor(TSRMLS_D) zend_hash_destroy(&CG(interned_strings)); //??? free(CG(interned_strings).arData); //??? free(CG(interned_strings).arHash); +#else + free(CG(empty_string)); #endif } diff --git a/ext/mbstring/tests/zend_multibyte-10.phpt b/ext/mbstring/tests/zend_multibyte-10.phpt index a5ba74d50d..566c506077 100644 --- a/ext/mbstring/tests/zend_multibyte-10.phpt +++ b/ext/mbstring/tests/zend_multibyte-10.phpt @@ -1,6 +1,8 @@ --TEST-- zend multibyte (10) --SKIPIF-- +--INI-- +zend.multibyte=On --FILE-- <?php declare(encoding="ISO-8859-15"); diff --git a/ext/mbstring/tests/zend_multibyte-11.phpt b/ext/mbstring/tests/zend_multibyte-11.phpt index 0b59e75fb5..8a93ab50cf 100644 --- a/ext/mbstring/tests/zend_multibyte-11.phpt +++ b/ext/mbstring/tests/zend_multibyte-11.phpt @@ -1,6 +1,8 @@ --TEST-- zend multibyte (11) --SKIPIF-- +--INI-- +zend.multibyte=On --FILE-- <?php declare(encoding="ISO-8859-15") { diff --git a/ext/mbstring/tests/zend_multibyte-12.phpt b/ext/mbstring/tests/zend_multibyte-12.phpt index d7207e49d7..cefa314e91 100644 --- a/ext/mbstring/tests/zend_multibyte-12.phpt +++ b/ext/mbstring/tests/zend_multibyte-12.phpt @@ -1,6 +1,8 @@ --TEST-- zend multibyte (12) --SKIPIF-- +--INI-- +zend.multibyte=On --FILE-- <?php declare(encoding="ISO-8859-15"); diff --git a/ext/session/php_session.h b/ext/session/php_session.h index 608d6bfdc2..2bf0d858f7 100644 --- a/ext/session/php_session.h +++ b/ext/session/php_session.h @@ -221,7 +221,7 @@ typedef struct ps_serializer_struct { PHPAPI void session_adapt_url(const char *, size_t, char **, size_t * TSRMLS_DC); PHPAPI void php_add_session_var(zend_string *name TSRMLS_DC); -PHPAPI void php_set_session_var(zend_string *name, zval *state_val, php_unserialize_data_t *var_hash TSRMLS_DC); +PHPAPI zval *php_set_session_var(zend_string *name, zval *state_val, php_unserialize_data_t *var_hash TSRMLS_DC); PHPAPI zval *php_get_session_var(zend_string *name TSRMLS_DC); PHPAPI int php_session_register_module(ps_module *); diff --git a/ext/session/session.c b/ext/session/session.c index acb17cebec..946708a5ca 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -159,11 +159,12 @@ PHPAPI void php_add_session_var(zend_string *name TSRMLS_DC) /* {{{ */ } /* }}} */ -PHPAPI void php_set_session_var(zend_string *name, zval *state_val, php_unserialize_data_t *var_hash TSRMLS_DC) /* {{{ */ +PHPAPI zval* php_set_session_var(zend_string *name, zval *state_val, php_unserialize_data_t *var_hash TSRMLS_DC) /* {{{ */ { IF_SESSION_VARS() { - zend_set_hash_symbol(state_val, name->val, name->len, Z_ISREF_P(state_val), 1, Z_ARRVAL_P(Z_REFVAL(PS(http_session_vars)))); + return zend_hash_update(Z_ARRVAL_P(Z_REFVAL(PS(http_session_vars))), name, state_val); } + return NULL; } /* }}} */ @@ -924,11 +925,13 @@ PS_SERIALIZER_DECODE_FUNC(php_binary) /* {{{ */ } if (has_value) { - ZVAL_NULL(¤t); + ZVAL_UNDEF(¤t); if (php_var_unserialize(¤t, (const unsigned char **) &p, (const unsigned char *) endptr, &var_hash TSRMLS_CC)) { - php_set_session_var(name, ¤t, &var_hash TSRMLS_CC); + zval *zv = php_set_session_var(name, ¤t, &var_hash TSRMLS_CC); + var_replace(&var_hash, ¤t, zv); + } else { + zval_ptr_dtor(¤t); } - zval_ptr_dtor(¤t); } PS_ADD_VARL(name); STR_RELEASE(name); @@ -978,7 +981,7 @@ PS_SERIALIZER_DECODE_FUNC(php) /* {{{ */ { const char *p, *q; const char *endptr = val + vallen; - zval stack, *current = NULL; + zval current; int has_value; int namelen; zend_string *name; @@ -988,7 +991,6 @@ PS_SERIALIZER_DECODE_FUNC(php) /* {{{ */ p = val; - array_init(&stack); while (p < endptr) { zval *tmp; q = p; @@ -1013,12 +1015,12 @@ PS_SERIALIZER_DECODE_FUNC(php) /* {{{ */ } if (has_value) { - zval dummy; - ZVAL_NULL(&dummy); - //??? hash table resize? - current = zend_hash_next_index_insert(Z_ARRVAL(stack), &dummy); - if (php_var_unserialize(current, (const unsigned char **) &q, (const unsigned char *) endptr, &var_hash TSRMLS_CC)) { - php_set_session_var(name, current, &var_hash TSRMLS_CC); + ZVAL_UNDEF(¤t); + if (php_var_unserialize(¤t, (const unsigned char **) &q, (const unsigned char *) endptr, &var_hash TSRMLS_CC)) { + zval *zv = php_set_session_var(name, ¤t, &var_hash TSRMLS_CC); + var_replace(&var_hash, ¤t, zv); + } else { + zval_ptr_dtor(¤t); } } PS_ADD_VARL(name); @@ -1030,7 +1032,6 @@ skip: break_outer_loop: PHP_VAR_UNSERIALIZE_DESTROY(var_hash); - zval_ptr_dtor(&stack); return SUCCESS; } @@ -1909,15 +1910,22 @@ static PHP_FUNCTION(session_save_path) Return the current session id. If newid is given, the session id is replaced with newid */ static PHP_FUNCTION(session_id) { - char *name = NULL; + zend_string *name = NULL; int name_len, argc = ZEND_NUM_ARGS(); - if (zend_parse_parameters(argc TSRMLS_CC, "|s", &name, &name_len) == FAILURE) { + if (zend_parse_parameters(argc TSRMLS_CC, "|S", &name) == FAILURE) { return; } if (PS(id)) { - RETVAL_STR(STR_COPY(PS(id))); + //??? keep compatibility for "\0" characters + //??? see: ext/session/tests/session_id_error3.phpt + int len = strlen(PS(id)->val); + if (UNEXPECTED(len != PS(id)->len)) { + RETVAL_STR(STR_INIT(PS(id)->val, len, 0)); + } else { + RETVAL_STR(STR_COPY(PS(id))); + } } else { RETVAL_EMPTY_STRING(); } @@ -1926,7 +1934,7 @@ static PHP_FUNCTION(session_id) if (PS(id)) { STR_RELEASE(PS(id)); } - PS(id) = STR_INIT(name, name_len, 0); + PS(id) = STR_COPY(name); } } /* }}} */ diff --git a/ext/session/tests/031.phpt b/ext/session/tests/031.phpt index e8deb3dac5..7486c4b866 100644 --- a/ext/session/tests/031.phpt +++ b/ext/session/tests/031.phpt @@ -2,6 +2,7 @@ setting hash_function to sha512 and hash_bits_per_character > 4 should not crash --SKIPIF-- <?php include('skipif.inc'); ?> +<?php if (!extension_loaded('hash')) die('skip hash extension not available'); ?> --INI-- session.use_cookies=0 session.cache_limiter= diff --git a/ext/spl/spl_observer.c b/ext/spl/spl_observer.c index e4e36760f2..0b2eee69eb 100644 --- a/ext/spl/spl_observer.c +++ b/ext/spl/spl_observer.c @@ -194,7 +194,7 @@ spl_SplObjectStorageElement* spl_object_storage_get(spl_SplObjectStorage *intern return (spl_SplObjectStorageElement*)zend_hash_find_ptr(&intern->storage, hash); } /* }}} */ -void spl_object_storage_attach(spl_SplObjectStorage *intern, zval *this, zval *obj, zval *inf TSRMLS_DC) /* {{{ */ +spl_SplObjectStorageElement *spl_object_storage_attach(spl_SplObjectStorage *intern, zval *this, zval *obj, zval *inf TSRMLS_DC) /* {{{ */ { spl_SplObjectStorageElement *pelement, element; zend_string *hash = spl_object_storage_get_hash(intern, this, obj TSRMLS_CC); @@ -213,7 +213,7 @@ void spl_object_storage_attach(spl_SplObjectStorage *intern, zval *this, zval *o ZVAL_NULL(&pelement->inf); } spl_object_storage_free_hash(intern, hash); - return; + return pelement; } ZVAL_COPY(&element.obj, obj); @@ -222,8 +222,9 @@ void spl_object_storage_attach(spl_SplObjectStorage *intern, zval *this, zval *o } else { ZVAL_NULL(&element.inf); } - zend_hash_update_mem(&intern->storage, hash, &element, sizeof(spl_SplObjectStorageElement)); + pelement = zend_hash_update_mem(&intern->storage, hash, &element, sizeof(spl_SplObjectStorageElement)); spl_object_storage_free_hash(intern, hash); + return pelement; } /* }}} */ int spl_object_storage_detach(spl_SplObjectStorage *intern, zval *this, zval *obj TSRMLS_DC) /* {{{ */ @@ -796,7 +797,9 @@ SPL_METHOD(SplObjectStorage, unserialize) const unsigned char *p, *s; php_unserialize_data_t var_hash; zval entry, pmembers, pcount, inf; + spl_SplObjectStorageElement *element; long count; + HashPosition pos; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &buf, &buf_len) == FAILURE) { return; @@ -838,6 +841,7 @@ SPL_METHOD(SplObjectStorage, unserialize) if(*p != 'O' && *p != 'C' && *p != 'r') { goto outexcept; } + /* sore reference to allow cross-references between different elements */ if (!php_var_unserialize(&entry, &p, s + buf_len, &var_hash TSRMLS_CC)) { goto outexcept; } @@ -869,7 +873,9 @@ SPL_METHOD(SplObjectStorage, unserialize) var_push_dtor(&var_hash, &pelement->obj); } } - spl_object_storage_attach(intern, getThis(), &entry, &inf TSRMLS_CC); + element = spl_object_storage_attach(intern, getThis(), &entry, &inf TSRMLS_CC); + var_replace(&var_hash, &entry, &element->obj); + var_replace(&var_hash, &inf, &element->inf); zval_ptr_dtor(&entry); zval_ptr_dtor(&inf); } diff --git a/ext/standard/php_var.h b/ext/standard/php_var.h index 2472ebf57c..4ecdd09dd7 100644 --- a/ext/standard/php_var.h +++ b/ext/standard/php_var.h @@ -51,6 +51,7 @@ typedef struct php_unserialize_data* php_unserialize_data_t; PHPAPI void php_var_serialize(smart_str *buf, zval *struc, php_serialize_data_t *var_hash TSRMLS_DC); PHPAPI int php_var_unserialize(zval *rval, const unsigned char **p, const unsigned char *max, php_unserialize_data_t *var_hash TSRMLS_DC); +PHPAPI int php_var_unserialize_ref(zval *rval, const unsigned char **p, const unsigned char *max, php_unserialize_data_t *var_hash TSRMLS_DC); PHPAPI int php_var_unserialize_intern(zval *rval, const unsigned char **p, const unsigned char *max, php_unserialize_data_t *var_hash TSRMLS_DC); #define PHP_VAR_SERIALIZE_INIT(var_hash_ptr) \ @@ -114,6 +115,7 @@ do { \ } \ } while (0) +PHPAPI void var_replace(php_unserialize_data_t *var_hash, zval *ozval, zval *nzval); PHPAPI void var_push_dtor(php_unserialize_data_t *var_hash, zval *val); PHPAPI void var_push_dtor_no_addref(php_unserialize_data_t *var_hashx, zval *rval); PHPAPI void var_destroy(php_unserialize_data_t *var_hash); diff --git a/ext/standard/var.c b/ext/standard/var.c index 8881b70079..01da9bb692 100644 --- a/ext/standard/var.c +++ b/ext/standard/var.c @@ -616,17 +616,26 @@ PHP_FUNCTION(var_export) static void php_var_serialize_intern(smart_str *buf, zval *struc, HashTable *var_hash TSRMLS_DC); -static inline int php_add_var_hash(HashTable *var_hash, zval *var, zval *var_old TSRMLS_DC) /* {{{ */ +static inline int php_add_var_hash(HashTable *var_hash, zval *var_ptr, zval *var_old TSRMLS_DC) /* {{{ */ { zval var_no, *zv; char id[32], *p; register int len; + zval *var = var_ptr; + if (Z_ISREF_P(var)) { + var = Z_REFVAL_P(var); + } if ((Z_TYPE_P(var) == IS_OBJECT) && Z_OBJ_HT_P(var)->get_class_entry) { p = smart_str_print_long(id + sizeof(id) - 1, (long) Z_OBJ_P(var)); *(--p) = 'O'; len = id + sizeof(id) - 1 - p; + } else if (var_ptr != var) { + p = smart_str_print_long(id + sizeof(id) - 1, + (long) Z_REF_P(var)); + *(--p) = 'R'; + len = id + sizeof(id) - 1 - p; } else { p = smart_str_print_long(id + sizeof(id) - 1, (long) var); len = id + sizeof(id) - 1 - p; @@ -634,7 +643,7 @@ static inline int php_add_var_hash(HashTable *var_hash, zval *var, zval *var_old if ((zv = zend_hash_str_find(var_hash, p, len)) != NULL) { ZVAL_COPY_VALUE(var_old, zv); - if (!Z_ISREF_P(var)) { + if (var == var_ptr) { /* we still need to bump up the counter, since non-refs will * be counted separately by unserializer */ ZVAL_LONG(&var_no, -1); @@ -812,7 +821,7 @@ static void php_var_serialize_intern(smart_str *buf, zval *struc, HashTable *var ZVAL_UNDEF(&var_already); if (var_hash && - php_add_var_hash(var_hash, Z_ISREF_P(struc)? Z_REFVAL_P(struc) : struc, &var_already TSRMLS_CC) == FAILURE) { + php_add_var_hash(var_hash, struc, &var_already TSRMLS_CC) == FAILURE) { if (Z_ISREF_P(struc)) { smart_str_appendl(buf, "R:", 2); smart_str_append_long(buf, Z_LVAL(var_already)); diff --git a/ext/standard/var_unserializer.c b/ext/standard/var_unserializer.c index c062c5800d..2525350bbc 100644 --- a/ext/standard/var_unserializer.c +++ b/ext/standard/var_unserializer.c @@ -34,6 +34,12 @@ typedef struct { void *next; } var_entries; +typedef struct { + zval data[VAR_ENTRIES_MAX]; + long used_slots; + void *next; +} var_dtor_entries; + static inline void var_push(php_unserialize_data_t *var_hashx, zval *rval) { var_entries *var_hash = (*var_hashx)->last; @@ -60,13 +66,13 @@ static inline void var_push(php_unserialize_data_t *var_hashx, zval *rval) PHPAPI void var_push_dtor(php_unserialize_data_t *var_hashx, zval *rval) { - var_entries *var_hash = (*var_hashx)->last_dtor; + var_dtor_entries *var_hash = (*var_hashx)->last_dtor; #if VAR_ENTRIES_DBG fprintf(stderr, "var_push_dtor(%ld): %d\n", var_hash?var_hash->used_slots:-1L, Z_TYPE_PP(rval)); #endif if (!var_hash || var_hash->used_slots == VAR_ENTRIES_MAX) { - var_hash = emalloc(sizeof(var_entries)); + var_hash = emalloc(sizeof(var_dtor_entries)); var_hash->used_slots = 0; var_hash->next = 0; @@ -79,19 +85,21 @@ PHPAPI void var_push_dtor(php_unserialize_data_t *var_hashx, zval *rval) (*var_hashx)->last_dtor = var_hash; } - if (Z_REFCOUNTED_P(rval)) Z_ADDREF_P(rval); - var_hash->data[var_hash->used_slots++] = rval; + ZVAL_COPY(&var_hash->data[var_hash->used_slots], rval); + var_hash->used_slots++; } +//??? +#if 0 PHPAPI void var_push_dtor_no_addref(php_unserialize_data_t *var_hashx, zval *rval) { - var_entries *var_hash = (*var_hashx)->last_dtor; + var_dtor_entries *var_hash = (*var_hashx)->last_dtor; #if VAR_ENTRIES_DBG fprintf(stderr, "var_push_dtor_no_addref(%ld): %d (%d)\n", var_hash?var_hash->used_slots:-1L, Z_TYPE_PP(rval), Z_REFCOUNT_PP(rval)); #endif if (!var_hash || var_hash->used_slots == VAR_ENTRIES_MAX) { - var_hash = emalloc(sizeof(var_entries)); + var_hash = emalloc(sizeof(var_dtor_entries)); var_hash->used_slots = 0; var_hash->next = 0; @@ -104,10 +112,31 @@ PHPAPI void var_push_dtor_no_addref(php_unserialize_data_t *var_hashx, zval *rva (*var_hashx)->last_dtor = var_hash; } - var_hash->data[var_hash->used_slots++] = rval; + ZVAL_COPY_VALUE(&var_hash->data[var_hash->used_slots], rval); + var_hash->used_slots++; +} +#endif + +PHPAPI void var_replace(php_unserialize_data_t *var_hashx, zval *ozval, zval *nzval) +{ + long i; + var_entries *var_hash = (*var_hashx)->first; +#if VAR_ENTRIES_DBG + fprintf(stderr, "var_replace(%ld): %d\n", var_hash?var_hash->used_slots:-1L, Z_TYPE_PP(nzval)); +#endif + + while (var_hash) { + for (i = 0; i < var_hash->used_slots; i++) { + if (var_hash->data[i] == ozval) { + var_hash->data[i] = nzval; + /* do not break here */ + } + } + var_hash = var_hash->next; + } } -static int var_access(php_unserialize_data_t *var_hashx, long id, zval **store) +static zval *var_access(php_unserialize_data_t *var_hashx, long id) { var_entries *var_hash = (*var_hashx)->first; #if VAR_ENTRIES_DBG @@ -119,13 +148,11 @@ static int var_access(php_unserialize_data_t *var_hashx, long id, zval **store) id -= VAR_ENTRIES_MAX; } - if (!var_hash) return !SUCCESS; + if (!var_hash) return NULL; - if (id < 0 || id >= var_hash->used_slots) return !SUCCESS; + if (id < 0 || id >= var_hash->used_slots) return NULL; - *store = var_hash->data[id]; - - return SUCCESS; + return var_hash->data[id]; } PHPAPI void var_destroy(php_unserialize_data_t *var_hashx) @@ -133,6 +160,7 @@ PHPAPI void var_destroy(php_unserialize_data_t *var_hashx) void *next; long i; var_entries *var_hash = (*var_hashx)->first; + var_dtor_entries *var_dtor_hash = (*var_hashx)->first_dtor; #if VAR_ENTRIES_DBG fprintf(stderr, "var_destroy(%ld)\n", var_hash?var_hash->used_slots:-1L); #endif @@ -143,15 +171,13 @@ PHPAPI void var_destroy(php_unserialize_data_t *var_hashx) var_hash = next; } - var_hash = (*var_hashx)->first_dtor; - - while (var_hash) { - for (i = 0; i < var_hash->used_slots; i++) { - zval_ptr_dtor(var_hash->data[i]); + while (var_dtor_hash) { + for (i = 0; i < var_dtor_hash->used_slots; i++) { + zval_ptr_dtor(&var_dtor_hash->data[i]); } - next = var_hash->next; - efree(var_hash); - var_hash = next; + next = var_dtor_hash->next; + efree(var_dtor_hash); + var_dtor_hash = next; } } @@ -207,7 +233,7 @@ static char *unserialize_str(const unsigned char **p, size_t *len, size_t maxlen #define YYMARKER marker -#line 215 "ext/standard/var_unserializer.re" +#line 241 "ext/standard/var_unserializer.re" @@ -275,6 +301,7 @@ static inline int process_nested_data(UNSERIALIZE_PARAMETER, HashTable *ht, long while (elements-- > 0) { zval key, *data, d, *old_data; + ZVAL_UNDEF(&key); if (!php_var_unserialize(&key, p, max, NULL TSRMLS_CC)) { zval_dtor(&key); return 0; @@ -292,12 +319,14 @@ static inline int process_nested_data(UNSERIALIZE_PARAMETER, HashTable *ht, long switch (Z_TYPE(key)) { case IS_LONG: if ((old_data = zend_hash_index_find(ht, Z_LVAL(key))) != NULL) { + //??? update hash var_push_dtor(var_hash, old_data); } data = zend_hash_index_update(ht, Z_LVAL(key), &d); break; case IS_STRING: if ((old_data = zend_symtable_find(ht, Z_STR(key))) != NULL) { + //??? update hash var_push_dtor(var_hash, old_data); } data = zend_symtable_update(ht, Z_STR(key), &d); @@ -394,6 +423,7 @@ static inline int object_common2(UNSERIALIZE_PARAMETER, long elements) zval retval; zval fname; + //??? TODO: resize before if (!process_nested_data(UNSERIALIZE_PASSTHRU, Z_OBJPROP_P(rval), elements, 1)) { return 0; } @@ -439,7 +469,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER) start = cursor; -#line 443 "ext/standard/var_unserializer.c" +#line 473 "ext/standard/var_unserializer.c" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -499,9 +529,9 @@ yy2: yych = *(YYMARKER = ++YYCURSOR); if (yych == ':') goto yy95; yy3: -#line 789 "ext/standard/var_unserializer.re" +#line 817 "ext/standard/var_unserializer.re" { return 0; } -#line 505 "ext/standard/var_unserializer.c" +#line 535 "ext/standard/var_unserializer.c" yy4: yych = *(YYMARKER = ++YYCURSOR); if (yych == ':') goto yy89; @@ -544,13 +574,13 @@ yy13: goto yy3; yy14: ++YYCURSOR; -#line 783 "ext/standard/var_unserializer.re" +#line 811 "ext/standard/var_unserializer.re" { /* this is the case where we have less data than planned */ php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unexpected end of serialized data"); return 0; /* not sure if it should be 0 or 1 here? */ } -#line 554 "ext/standard/var_unserializer.c" +#line 584 "ext/standard/var_unserializer.c" yy16: yych = *++YYCURSOR; goto yy3; @@ -580,7 +610,7 @@ yy20: yych = *++YYCURSOR; if (yych != '"') goto yy18; ++YYCURSOR; -#line 644 "ext/standard/var_unserializer.re" +#line 672 "ext/standard/var_unserializer.re" { size_t len, len2, len3, maxlen; long elements; @@ -719,7 +749,7 @@ yy20: return object_common2(UNSERIALIZE_PASSTHRU, elements); } -#line 723 "ext/standard/var_unserializer.c" +#line 753 "ext/standard/var_unserializer.c" yy25: yych = *++YYCURSOR; if (yych <= ',') { @@ -744,7 +774,7 @@ yy27: yych = *++YYCURSOR; if (yych != '"') goto yy18; ++YYCURSOR; -#line 636 "ext/standard/var_unserializer.re" +#line 664 "ext/standard/var_unserializer.re" { //??? INIT_PZVAL(rval); @@ -752,7 +782,7 @@ yy27: return object_common2(UNSERIALIZE_PASSTHRU, object_common1(UNSERIALIZE_PASSTHRU, ZEND_STANDARD_CLASS_DEF_PTR)); } -#line 756 "ext/standard/var_unserializer.c" +#line 786 "ext/standard/var_unserializer.c" yy32: yych = *++YYCURSOR; if (yych == '+') goto yy33; @@ -773,7 +803,7 @@ yy34: yych = *++YYCURSOR; if (yych != '{') goto yy18; ++YYCURSOR; -#line 615 "ext/standard/var_unserializer.re" +#line 643 "ext/standard/var_unserializer.re" { long elements = parse_iv(start + 2); /* use iv() not uiv() in order to check data range */ @@ -794,7 +824,7 @@ yy34: return finish_nested_data(UNSERIALIZE_PASSTHRU); } -#line 798 "ext/standard/var_unserializer.c" +#line 828 "ext/standard/var_unserializer.c" yy39: yych = *++YYCURSOR; if (yych == '+') goto yy40; @@ -815,7 +845,7 @@ yy41: yych = *++YYCURSOR; if (yych != '"') goto yy18; ++YYCURSOR; -#line 585 "ext/standard/var_unserializer.re" +#line 613 "ext/standard/var_unserializer.re" { size_t len, maxlen; //??? TODO: use zend_string* instead of char* @@ -845,7 +875,7 @@ yy41: efree(str); return 1; } -#line 849 "ext/standard/var_unserializer.c" +#line 879 "ext/standard/var_unserializer.c" yy46: yych = *++YYCURSOR; if (yych == '+') goto yy47; @@ -866,7 +896,7 @@ yy48: yych = *++YYCURSOR; if (yych != '"') goto yy18; ++YYCURSOR; -#line 558 "ext/standard/var_unserializer.re" +#line 586 "ext/standard/var_unserializer.re" { size_t len, maxlen; char *str; @@ -893,7 +923,7 @@ yy48: ZVAL_STRINGL(rval, str, len); return 1; } -#line 897 "ext/standard/var_unserializer.c" +#line 927 "ext/standard/var_unserializer.c" yy53: yych = *++YYCURSOR; if (yych <= '/') { @@ -981,7 +1011,7 @@ yy61: } yy63: ++YYCURSOR; -#line 549 "ext/standard/var_unserializer.re" +#line 577 "ext/standard/var_unserializer.re" { #if SIZEOF_LONG == 4 use_double: @@ -990,7 +1020,7 @@ use_double: ZVAL_DOUBLE(rval, zend_strtod((const char *)start + 2, NULL)); return 1; } -#line 994 "ext/standard/var_unserializer.c" +#line 1024 "ext/standard/var_unserializer.c" yy65: yych = *++YYCURSOR; if (yych <= ',') { @@ -1049,7 +1079,7 @@ yy73: yych = *++YYCURSOR; if (yych != ';') goto yy18; ++YYCURSOR; -#line 533 "ext/standard/var_unserializer.re" +#line 561 "ext/standard/var_unserializer.re" { *p = YYCURSOR; @@ -1065,7 +1095,7 @@ yy73: return 1; } -#line 1069 "ext/standard/var_unserializer.c" +#line 1099 "ext/standard/var_unserializer.c" yy76: yych = *++YYCURSOR; if (yych == 'N') goto yy73; @@ -1092,7 +1122,7 @@ yy79: if (yych <= '9') goto yy79; if (yych != ';') goto yy18; ++YYCURSOR; -#line 507 "ext/standard/var_unserializer.re" +#line 535 "ext/standard/var_unserializer.re" { #if SIZEOF_LONG == 4 int digits = YYCURSOR - start - 3; @@ -1118,7 +1148,7 @@ yy79: ZVAL_LONG(rval, parse_iv(start + 2)); return 1; } -#line 1122 "ext/standard/var_unserializer.c" +#line 1152 "ext/standard/var_unserializer.c" yy83: yych = *++YYCURSOR; if (yych <= '/') goto yy18; @@ -1126,22 +1156,22 @@ yy83: yych = *++YYCURSOR; if (yych != ';') goto yy18; ++YYCURSOR; -#line 501 "ext/standard/var_unserializer.re" +#line 529 "ext/standard/var_unserializer.re" { *p = YYCURSOR; ZVAL_BOOL(rval, parse_iv(start + 2)); return 1; } -#line 1136 "ext/standard/var_unserializer.c" +#line 1166 "ext/standard/var_unserializer.c" yy87: ++YYCURSOR; -#line 495 "ext/standard/var_unserializer.re" +#line 523 "ext/standard/var_unserializer.re" { *p = YYCURSOR; ZVAL_NULL(rval); return 1; } -#line 1145 "ext/standard/var_unserializer.c" +#line 1175 "ext/standard/var_unserializer.c" yy89: yych = *++YYCURSOR; if (yych <= ',') { @@ -1164,7 +1194,7 @@ yy91: if (yych <= '9') goto yy91; if (yych != ';') goto yy18; ++YYCURSOR; -#line 472 "ext/standard/var_unserializer.re" +#line 500 "ext/standard/var_unserializer.re" { long id; @@ -1172,22 +1202,22 @@ yy91: if (!var_hash) return 0; id = parse_iv(start + 2) - 1; - if (id == -1 || var_access(var_hash, id, &rval_ref) != SUCCESS) { + if (id == -1 || (rval_ref = var_access(var_hash, id)) == NULL) { return 0; } //??? //??? if (rval == rval_ref) return 0; - if (!ZVAL_IS_UNDEF(rval)) { - var_push_dtor_no_addref(var_hash, rval); - } +//??? if (!ZVAL_IS_UNDEF(rval)) { +//??? var_push_dtor_no_addref(var_hash, rval); +//??? } ZVAL_COPY(rval, rval_ref); //??? Z_UNSET_ISREF_PP(rval); return 1; } -#line 1191 "ext/standard/var_unserializer.c" +#line 1221 "ext/standard/var_unserializer.c" yy95: yych = *++YYCURSOR; if (yych <= ',') { @@ -1210,7 +1240,7 @@ yy97: if (yych <= '9') goto yy97; if (yych != ';') goto yy18; ++YYCURSOR; -#line 447 "ext/standard/var_unserializer.re" +#line 477 "ext/standard/var_unserializer.re" { long id; @@ -1218,13 +1248,11 @@ yy97: if (!var_hash) return 0; id = parse_iv(start + 2) - 1; - if (id == -1 || var_access(var_hash, id, &rval_ref) != SUCCESS) { + if (id == -1 || (rval_ref = var_access(var_hash, id)) == NULL) { return 0; } - if (!ZVAL_IS_UNDEF(rval)) { - zval_ptr_dtor(rval); - } + zval_ptr_dtor(rval); if (Z_ISREF_P(rval_ref)) { ZVAL_COPY(rval, rval_ref); } else { @@ -1235,9 +1263,9 @@ yy97: return 1; } -#line 1239 "ext/standard/var_unserializer.c" +#line 1267 "ext/standard/var_unserializer.c" } -#line 791 "ext/standard/var_unserializer.re" +#line 819 "ext/standard/var_unserializer.re" return 0; diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re index ec9bfae398..c4595a63c4 100644 --- a/ext/standard/var_unserializer.re +++ b/ext/standard/var_unserializer.re @@ -32,6 +32,12 @@ typedef struct { void *next; } var_entries; +typedef struct { + zval data[VAR_ENTRIES_MAX]; + long used_slots; + void *next; +} var_dtor_entries; + static inline void var_push(php_unserialize_data_t *var_hashx, zval *rval) { var_entries *var_hash = (*var_hashx)->last; @@ -58,13 +64,13 @@ static inline void var_push(php_unserialize_data_t *var_hashx, zval *rval) PHPAPI void var_push_dtor(php_unserialize_data_t *var_hashx, zval *rval) { - var_entries *var_hash = (*var_hashx)->last_dtor; + var_dtor_entries *var_hash = (*var_hashx)->last_dtor; #if VAR_ENTRIES_DBG fprintf(stderr, "var_push_dtor(%ld): %d\n", var_hash?var_hash->used_slots:-1L, Z_TYPE_PP(rval)); #endif if (!var_hash || var_hash->used_slots == VAR_ENTRIES_MAX) { - var_hash = emalloc(sizeof(var_entries)); + var_hash = emalloc(sizeof(var_dtor_entries)); var_hash->used_slots = 0; var_hash->next = 0; @@ -77,19 +83,21 @@ PHPAPI void var_push_dtor(php_unserialize_data_t *var_hashx, zval *rval) (*var_hashx)->last_dtor = var_hash; } - if (Z_REFCOUNTED_P(rval)) Z_ADDREF_P(rval); - var_hash->data[var_hash->used_slots++] = rval; + ZVAL_COPY(&var_hash->data[var_hash->used_slots], rval); + var_hash->used_slots++; } +//??? +#if 0 PHPAPI void var_push_dtor_no_addref(php_unserialize_data_t *var_hashx, zval *rval) { - var_entries *var_hash = (*var_hashx)->last_dtor; + var_dtor_entries *var_hash = (*var_hashx)->last_dtor; #if VAR_ENTRIES_DBG fprintf(stderr, "var_push_dtor_no_addref(%ld): %d (%d)\n", var_hash?var_hash->used_slots:-1L, Z_TYPE_PP(rval), Z_REFCOUNT_PP(rval)); #endif if (!var_hash || var_hash->used_slots == VAR_ENTRIES_MAX) { - var_hash = emalloc(sizeof(var_entries)); + var_hash = emalloc(sizeof(var_dtor_entries)); var_hash->used_slots = 0; var_hash->next = 0; @@ -102,10 +110,31 @@ PHPAPI void var_push_dtor_no_addref(php_unserialize_data_t *var_hashx, zval *rva (*var_hashx)->last_dtor = var_hash; } - var_hash->data[var_hash->used_slots++] = rval; + ZVAL_COPY_VALUE(&var_hash->data[var_hash->used_slots], rval); + var_hash->used_slots++; +} +#endif + +PHPAPI void var_replace(php_unserialize_data_t *var_hashx, zval *ozval, zval *nzval) +{ + long i; + var_entries *var_hash = (*var_hashx)->first; +#if VAR_ENTRIES_DBG + fprintf(stderr, "var_replace(%ld): %d\n", var_hash?var_hash->used_slots:-1L, Z_TYPE_PP(nzval)); +#endif + + while (var_hash) { + for (i = 0; i < var_hash->used_slots; i++) { + if (var_hash->data[i] == ozval) { + var_hash->data[i] = nzval; + /* do not break here */ + } + } + var_hash = var_hash->next; + } } -static int var_access(php_unserialize_data_t *var_hashx, long id, zval **store) +static zval *var_access(php_unserialize_data_t *var_hashx, long id) { var_entries *var_hash = (*var_hashx)->first; #if VAR_ENTRIES_DBG @@ -117,13 +146,11 @@ static int var_access(php_unserialize_data_t *var_hashx, long id, zval **store) id -= VAR_ENTRIES_MAX; } - if (!var_hash) return !SUCCESS; + if (!var_hash) return NULL; - if (id < 0 || id >= var_hash->used_slots) return !SUCCESS; + if (id < 0 || id >= var_hash->used_slots) return NULL; - *store = var_hash->data[id]; - - return SUCCESS; + return var_hash->data[id]; } PHPAPI void var_destroy(php_unserialize_data_t *var_hashx) @@ -131,6 +158,7 @@ PHPAPI void var_destroy(php_unserialize_data_t *var_hashx) void *next; long i; var_entries *var_hash = (*var_hashx)->first; + var_dtor_entries *var_dtor_hash = (*var_hashx)->first_dtor; #if VAR_ENTRIES_DBG fprintf(stderr, "var_destroy(%ld)\n", var_hash?var_hash->used_slots:-1L); #endif @@ -141,15 +169,13 @@ PHPAPI void var_destroy(php_unserialize_data_t *var_hashx) var_hash = next; } - var_hash = (*var_hashx)->first_dtor; - - while (var_hash) { - for (i = 0; i < var_hash->used_slots; i++) { - zval_ptr_dtor(var_hash->data[i]); + while (var_dtor_hash) { + for (i = 0; i < var_dtor_hash->used_slots; i++) { + zval_ptr_dtor(&var_dtor_hash->data[i]); } - next = var_hash->next; - efree(var_hash); - var_hash = next; + next = var_dtor_hash->next; + efree(var_dtor_hash); + var_dtor_hash = next; } } @@ -279,6 +305,7 @@ static inline int process_nested_data(UNSERIALIZE_PARAMETER, HashTable *ht, long while (elements-- > 0) { zval key, *data, d, *old_data; + ZVAL_UNDEF(&key); if (!php_var_unserialize(&key, p, max, NULL TSRMLS_CC)) { zval_dtor(&key); return 0; @@ -296,12 +323,14 @@ static inline int process_nested_data(UNSERIALIZE_PARAMETER, HashTable *ht, long switch (Z_TYPE(key)) { case IS_LONG: if ((old_data = zend_hash_index_find(ht, Z_LVAL(key))) != NULL) { + //??? update hash var_push_dtor(var_hash, old_data); } data = zend_hash_index_update(ht, Z_LVAL(key), &d); break; case IS_STRING: if ((old_data = zend_symtable_find(ht, Z_STR(key))) != NULL) { + //??? update hash var_push_dtor(var_hash, old_data); } data = zend_symtable_update(ht, Z_STR(key), &d); @@ -398,6 +427,7 @@ static inline int object_common2(UNSERIALIZE_PARAMETER, long elements) zval retval; zval fname; + //??? TODO: resize before if (!process_nested_data(UNSERIALIZE_PASSTHRU, Z_OBJPROP_P(rval), elements, 1)) { return 0; } @@ -451,13 +481,11 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER) if (!var_hash) return 0; id = parse_iv(start + 2) - 1; - if (id == -1 || var_access(var_hash, id, &rval_ref) != SUCCESS) { + if (id == -1 || (rval_ref = var_access(var_hash, id)) == NULL) { return 0; } - if (!ZVAL_IS_UNDEF(rval)) { - zval_ptr_dtor(rval); - } + zval_ptr_dtor(rval); if (Z_ISREF_P(rval_ref)) { ZVAL_COPY(rval, rval_ref); } else { @@ -476,16 +504,16 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER) if (!var_hash) return 0; id = parse_iv(start + 2) - 1; - if (id == -1 || var_access(var_hash, id, &rval_ref) != SUCCESS) { + if (id == -1 || (rval_ref = var_access(var_hash, id)) == NULL) { return 0; } //??? //??? if (rval == rval_ref) return 0; - if (!ZVAL_IS_UNDEF(rval)) { - var_push_dtor_no_addref(var_hash, rval); - } +//??? if (!ZVAL_IS_UNDEF(rval)) { +//??? var_push_dtor_no_addref(var_hash, rval); +//??? } ZVAL_COPY(rval, rval_ref); //??? Z_UNSET_ISREF_PP(rval); diff --git a/ext/tokenizer/tokenizer.c b/ext/tokenizer/tokenizer.c index 8e2aaab923..a9830910af 100644 --- a/ext/tokenizer/tokenizer.c +++ b/ext/tokenizer/tokenizer.c @@ -104,7 +104,7 @@ PHP_MINFO_FUNCTION(tokenizer) static void tokenize(zval *return_value TSRMLS_DC) { zval token; - zval *keyword; + zval keyword; int token_type; zend_bool destroy; int token_line = 1; @@ -130,18 +130,17 @@ static void tokenize(zval *return_value TSRMLS_DC) } if (token_type >= 256) { - MAKE_STD_ZVAL(keyword); - array_init(keyword); - add_next_index_long(keyword, token_type); + array_init(&keyword); + add_next_index_long(&keyword, token_type); if (token_type == T_END_HEREDOC) { if (CG(increment_lineno)) { token_line = ++CG(zend_lineno); CG(increment_lineno) = 0; } } - add_next_index_stringl(keyword, (char *)zendtext, zendleng, 1); - add_next_index_long(keyword, token_line); - add_next_index_zval(return_value, keyword); + add_next_index_stringl(&keyword, (char *)zendtext, zendleng, 1); + add_next_index_long(&keyword, token_line); + add_next_index_zval(return_value, &keyword); } else { add_next_index_stringl(return_value, (char *)zendtext, zendleng, 1); } @@ -158,12 +157,11 @@ static void tokenize(zval *return_value TSRMLS_DC) ) { // fetch the rest into a T_INLINE_HTML if (zendcursor != zendlimit) { - MAKE_STD_ZVAL(keyword); - array_init(keyword); - add_next_index_long(keyword, T_INLINE_HTML); - add_next_index_stringl(keyword, (char *)zendcursor, zendlimit - zendcursor, 1); - add_next_index_long(keyword, token_line); - add_next_index_zval(return_value, keyword); + array_init(&keyword); + add_next_index_long(&keyword, T_INLINE_HTML); + add_next_index_stringl(&keyword, (char *)zendcursor, zendlimit - zendcursor, 1); + add_next_index_long(&keyword, token_line); + add_next_index_zval(return_value, &keyword); } break; } @@ -179,20 +177,18 @@ static void tokenize(zval *return_value TSRMLS_DC) */ PHP_FUNCTION(token_get_all) { - char *source = NULL; - int argc = ZEND_NUM_ARGS(); - int source_len; - zval source_z; + zend_string *source; + zval source_zval; zend_lex_state original_lex_state; - if (zend_parse_parameters(argc TSRMLS_CC, "s", &source, &source_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S", &source) == FAILURE) { return; } - ZVAL_STRINGL(&source_z, source, source_len, 1); + ZVAL_STR(&source_zval, STR_COPY(source)); zend_save_lexical_state(&original_lex_state TSRMLS_CC); - if (zend_prepare_string_for_scanning(&source_z, "" TSRMLS_CC) == FAILURE) { + if (zend_prepare_string_for_scanning(&source_zval, "" TSRMLS_CC) == FAILURE) { zend_restore_lexical_state(&original_lex_state TSRMLS_CC); RETURN_FALSE; } @@ -202,7 +198,7 @@ PHP_FUNCTION(token_get_all) tokenize(return_value TSRMLS_CC); zend_restore_lexical_state(&original_lex_state TSRMLS_CC); - zval_dtor(&source_z); + zval_dtor(&source_zval); } /* }}} */ @@ -210,13 +206,13 @@ PHP_FUNCTION(token_get_all) */ PHP_FUNCTION(token_name) { - int argc = ZEND_NUM_ARGS(); long type; - if (zend_parse_parameters(argc TSRMLS_CC, "l", &type) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &type) == FAILURE) { return; } - RETVAL_STRING(get_token_type_name(type), 1); + + RETVAL_STRING(get_token_type_name(type)); } /* }}} */ |