From: Dmitry Stogov Date: Fri, 21 Feb 2014 13:52:43 +0000 (+0400) Subject: Fixed __METHOD__ handling X-Git-Tag: POST_PHPNG_MERGE~412^2~602 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ca729cb4e381c0981ccb1be18599f4a30704fa40;p=php Fixed __METHOD__ handling --- diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c index 9bcbd55298..3bded7bda2 100644 --- a/Zend/zend_language_scanner.c +++ b/Zend/zend_language_scanner.c @@ -1094,7 +1094,7 @@ yyc_INITIAL: yy3: YYDEBUG(3, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1744 "Zend/zend_language_scanner.l" +#line 1760 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -1171,7 +1171,7 @@ yy5: yy6: YYDEBUG(6, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1734 "Zend/zend_language_scanner.l" +#line 1750 "Zend/zend_language_scanner.l" { if (CG(short_tags)) { ZVAL_STRINGL(zendlval, yytext, yyleng); @@ -1188,7 +1188,7 @@ yy7: if ((yych = *YYCURSOR) == '=') goto yy43; YYDEBUG(8, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1713 "Zend/zend_language_scanner.l" +#line 1729 "Zend/zend_language_scanner.l" { if (CG(asp_tags)) { //??? ZVAL_STRINGL(zendlval, yytext, yyleng); @@ -1385,7 +1385,7 @@ yy35: ++YYCURSOR; YYDEBUG(38, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1676 "Zend/zend_language_scanner.l" +#line 1692 "Zend/zend_language_scanner.l" { YYCTYPE *bracket = (YYCTYPE*)zend_memrchr(yytext, '<', yyleng - (sizeof("script language=php>") - 1)); @@ -1428,7 +1428,7 @@ yy43: ++YYCURSOR; YYDEBUG(44, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1693 "Zend/zend_language_scanner.l" +#line 1709 "Zend/zend_language_scanner.l" { if (CG(asp_tags)) { //??? ZVAL_STRINGL(zendlval, yytext, yyleng); @@ -1445,7 +1445,7 @@ yy45: ++YYCURSOR; YYDEBUG(46, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1705 "Zend/zend_language_scanner.l" +#line 1721 "Zend/zend_language_scanner.l" { //??? ZVAL_STRINGL(zendlval, yytext, yyleng); ZVAL_STR(zendlval, STR_EMPTY_ALLOC()); /* tricky way to no copying - intentional */ @@ -1479,7 +1479,7 @@ yy50: yy51: YYDEBUG(51, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1725 "Zend/zend_language_scanner.l" +#line 1741 "Zend/zend_language_scanner.l" { //??? ZVAL_STRINGL(zendlval, yytext, yyleng); ZVAL_STR(zendlval, STR_EMPTY_ALLOC()); /* tricky way, no copying intentional */ @@ -1558,7 +1558,7 @@ yyc_ST_BACKQUOTE: yy56: YYDEBUG(56, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2184 "Zend/zend_language_scanner.l" +#line 2200 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -1610,7 +1610,7 @@ yy58: ++YYCURSOR; YYDEBUG(59, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2128 "Zend/zend_language_scanner.l" +#line 2144 "Zend/zend_language_scanner.l" { BEGIN(ST_IN_SCRIPTING); return '`'; @@ -1625,7 +1625,7 @@ yy61: ++YYCURSOR; YYDEBUG(62, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2115 "Zend/zend_language_scanner.l" +#line 2131 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); @@ -1648,7 +1648,7 @@ yy63: yy65: YYDEBUG(65, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1823 "Zend/zend_language_scanner.l" +#line 1839 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); return T_VARIABLE; @@ -1678,7 +1678,7 @@ yy70: ++YYCURSOR; YYDEBUG(71, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1816 "Zend/zend_language_scanner.l" +#line 1832 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); yy_push_state(ST_VAR_OFFSET TSRMLS_CC); @@ -1703,7 +1703,7 @@ yy73: ++YYCURSOR; YYDEBUG(74, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1807 "Zend/zend_language_scanner.l" +#line 1823 "Zend/zend_language_scanner.l" { yyless(yyleng - 3); yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); @@ -1778,7 +1778,7 @@ yy77: yy78: YYDEBUG(78, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2134 "Zend/zend_language_scanner.l" +#line 2150 "Zend/zend_language_scanner.l" { if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) { YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1; @@ -1838,7 +1838,7 @@ yy80: ++YYCURSOR; YYDEBUG(81, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2123 "Zend/zend_language_scanner.l" +#line 2139 "Zend/zend_language_scanner.l" { BEGIN(ST_IN_SCRIPTING); return '"'; @@ -1853,7 +1853,7 @@ yy83: ++YYCURSOR; YYDEBUG(84, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2115 "Zend/zend_language_scanner.l" +#line 2131 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); @@ -1876,7 +1876,7 @@ yy85: yy87: YYDEBUG(87, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1823 "Zend/zend_language_scanner.l" +#line 1839 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); return T_VARIABLE; @@ -1906,7 +1906,7 @@ yy92: ++YYCURSOR; YYDEBUG(93, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1816 "Zend/zend_language_scanner.l" +#line 1832 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); yy_push_state(ST_VAR_OFFSET TSRMLS_CC); @@ -1931,7 +1931,7 @@ yy95: ++YYCURSOR; YYDEBUG(96, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1807 "Zend/zend_language_scanner.l" +#line 1823 "Zend/zend_language_scanner.l" { yyless(yyleng - 3); yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); @@ -1949,7 +1949,7 @@ yyc_ST_END_HEREDOC: ++YYCURSOR; YYDEBUG(100, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2101 "Zend/zend_language_scanner.l" +#line 2117 "Zend/zend_language_scanner.l" { zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack)); @@ -2024,7 +2024,7 @@ yy103: yy104: YYDEBUG(104, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2226 "Zend/zend_language_scanner.l" +#line 2242 "Zend/zend_language_scanner.l" { int newline = 0; @@ -2112,7 +2112,7 @@ yy107: ++YYCURSOR; YYDEBUG(108, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2115 "Zend/zend_language_scanner.l" +#line 2131 "Zend/zend_language_scanner.l" { Z_LVAL_P(zendlval) = (long) '{'; yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); @@ -2135,7 +2135,7 @@ yy109: yy111: YYDEBUG(111, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1823 "Zend/zend_language_scanner.l" +#line 1839 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); return T_VARIABLE; @@ -2165,7 +2165,7 @@ yy116: ++YYCURSOR; YYDEBUG(117, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1816 "Zend/zend_language_scanner.l" +#line 1832 "Zend/zend_language_scanner.l" { yyless(yyleng - 1); yy_push_state(ST_VAR_OFFSET TSRMLS_CC); @@ -2190,7 +2190,7 @@ yy119: ++YYCURSOR; YYDEBUG(120, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1807 "Zend/zend_language_scanner.l" +#line 1823 "Zend/zend_language_scanner.l" { yyless(yyleng - 3); yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); @@ -2380,7 +2380,7 @@ yy123: yy124: YYDEBUG(124, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1845 "Zend/zend_language_scanner.l" +#line 1861 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, yytext, yyleng); return T_STRING; @@ -2981,7 +2981,7 @@ yy176: yy177: YYDEBUG(177, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1851 "Zend/zend_language_scanner.l" +#line 1867 "Zend/zend_language_scanner.l" { while (YYCURSOR < YYLIMIT) { switch (*YYCURSOR++) { @@ -3022,7 +3022,7 @@ yy178: yy179: YYDEBUG(179, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1938 "Zend/zend_language_scanner.l" +#line 1954 "Zend/zend_language_scanner.l" { register char *s, *t; char *end; @@ -3095,7 +3095,7 @@ yy180: yy181: YYDEBUG(181, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2005 "Zend/zend_language_scanner.l" +#line 2021 "Zend/zend_language_scanner.l" { int bprefix = (yytext[0] != '"') ? 1 : 0; @@ -3142,7 +3142,7 @@ yy182: ++YYCURSOR; YYDEBUG(183, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2095 "Zend/zend_language_scanner.l" +#line 2111 "Zend/zend_language_scanner.l" { BEGIN(ST_BACKQUOTE); return '`'; @@ -3153,7 +3153,7 @@ yy184: ++YYCURSOR; YYDEBUG(185, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2357 "Zend/zend_language_scanner.l" +#line 2373 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -3355,7 +3355,7 @@ yy206: yy207: YYDEBUG(207, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1918 "Zend/zend_language_scanner.l" +#line 1934 "Zend/zend_language_scanner.l" { //??? ZVAL_STRINGL(zendlval, yytext, yyleng); ZVAL_STR(zendlval, STR_EMPTY_ALLOC()); /* tricky way to no copying - intentional */ @@ -3396,7 +3396,7 @@ yy210: yy212: YYDEBUG(212, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1823 "Zend/zend_language_scanner.l" +#line 1839 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); return T_VARIABLE; @@ -3491,7 +3491,7 @@ yy228: yy229: YYDEBUG(229, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1926 "Zend/zend_language_scanner.l" +#line 1942 "Zend/zend_language_scanner.l" { if (CG(asp_tags)) { BEGIN(INITIAL); @@ -3530,7 +3530,7 @@ yy234: yy235: YYDEBUG(235, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1885 "Zend/zend_language_scanner.l" +#line 1901 "Zend/zend_language_scanner.l" { int doc_com; @@ -3837,7 +3837,7 @@ yy275: yy276: YYDEBUG(276, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2047 "Zend/zend_language_scanner.l" +#line 2063 "Zend/zend_language_scanner.l" { char *s; int bprefix = (yytext[0] != '<') ? 1 : 0; @@ -4132,7 +4132,7 @@ yy313: } YYDEBUG(316, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1667 "Zend/zend_language_scanner.l" +#line 1683 "Zend/zend_language_scanner.l" { if (Z_TYPE(CG(current_namespace)) != IS_UNDEF) { ZVAL_DUP(zendlval, &CG(current_namespace)); @@ -4161,7 +4161,7 @@ yy318: } YYDEBUG(321, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1642 "Zend/zend_language_scanner.l" +#line 1658 "Zend/zend_language_scanner.l" { zend_string *filename = zend_get_compiled_filename(TSRMLS_C); zend_string *dirname; @@ -4211,7 +4211,7 @@ yy324: } YYDEBUG(327, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1627 "Zend/zend_language_scanner.l" +#line 1643 "Zend/zend_language_scanner.l" { ZVAL_LONG(zendlval, CG(zend_lineno)); return T_LINE; @@ -4251,20 +4251,37 @@ yy332: } YYDEBUG(335, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1614 "Zend/zend_language_scanner.l" +#line 1613 "Zend/zend_language_scanner.l" { - const char *class_name = CG(active_class_entry) ? CG(active_class_entry)->name->val : NULL; - const char *func_name = CG(active_op_array)? CG(active_op_array)->function_name->val : NULL; + if (CG(active_class_entry)) { + int len = 2; - Z_STRLEN_P(zendlval) = zend_spprintf((char**)&Z_STRVAL_P(zendlval), 0, "%s%s%s", - class_name ? class_name : "", - class_name && func_name ? "::" : "", - func_name ? func_name : "" - ); - zendlval->type = IS_STRING; + if (CG(active_class_entry)->name) { + len += CG(active_class_entry)->name->len; + } + if (CG(active_op_array) && CG(active_op_array)->function_name) { + len += CG(active_op_array)->function_name->len; + } + ZVAL_STR(zendlval, STR_ALLOC(len, 0)); + len = 0; + if (CG(active_class_entry)->name) { + memcpy(Z_STRVAL_P(zendlval), CG(active_class_entry)->name->val, CG(active_class_entry)->name->len); + len += CG(active_class_entry)->name->len; + } + memcpy(Z_STRVAL_P(zendlval) + len, "::", sizeof("::")-1); + len += sizeof("::")-1; + if (CG(active_op_array) && CG(active_op_array)->function_name) { + memcpy(Z_STRVAL_P(zendlval) + len, CG(active_op_array)->function_name->val, CG(active_op_array)->function_name->len); + len += CG(active_op_array)->function_name->len; + } + } else if (CG(active_op_array) && CG(active_op_array)->function_name) { + ZVAL_STR(zendlval, STR_COPY(CG(active_op_array)->function_name)); + } else { + ZVAL_EMPTY_STRING(zendlval); + } return T_METHOD_C; } -#line 4268 "Zend/zend_language_scanner.c" +#line 4285 "Zend/zend_language_scanner.c" yy336: YYDEBUG(336, *YYCURSOR); yych = *++YYCURSOR; @@ -4319,14 +4336,13 @@ yy343: { zend_op_array *op_array = CG(active_op_array); if (op_array && op_array->function_name) { - ZVAL_STR(zendlval, op_array->function_name); - Z_ADDREF_P(zendlval); + ZVAL_STR(zendlval, STR_COPY(op_array->function_name)); } else { ZVAL_EMPTY_STRING(zendlval); } return T_FUNC_C; } -#line 4330 "Zend/zend_language_scanner.c" +#line 4346 "Zend/zend_language_scanner.c" yy347: YYDEBUG(347, *YYCURSOR); yych = *++YYCURSOR; @@ -4346,7 +4362,7 @@ yy348: } YYDEBUG(351, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1632 "Zend/zend_language_scanner.l" +#line 1648 "Zend/zend_language_scanner.l" { zend_string *filename = zend_get_compiled_filename(TSRMLS_C); @@ -4356,7 +4372,7 @@ yy348: ZVAL_STR(zendlval, filename); return T_FILE; } -#line 4360 "Zend/zend_language_scanner.c" +#line 4376 "Zend/zend_language_scanner.c" yy352: YYDEBUG(352, *YYCURSOR); yych = *++YYCURSOR; @@ -4397,7 +4413,7 @@ yy355: } return T_TRAIT_C; } -#line 4401 "Zend/zend_language_scanner.c" +#line 4417 "Zend/zend_language_scanner.c" yy359: YYDEBUG(359, *YYCURSOR); yych = *++YYCURSOR; @@ -4445,7 +4461,7 @@ yy362: } return T_CLASS_C; } -#line 4449 "Zend/zend_language_scanner.c" +#line 4465 "Zend/zend_language_scanner.c" yy366: YYDEBUG(366, *YYCURSOR); yych = *++YYCURSOR; @@ -4511,7 +4527,7 @@ yy377: { return T_HALT_COMPILER; } -#line 4515 "Zend/zend_language_scanner.c" +#line 4531 "Zend/zend_language_scanner.c" yy379: YYDEBUG(379, *YYCURSOR); yych = *++YYCURSOR; @@ -4535,7 +4551,7 @@ yy381: { return T_USE; } -#line 4539 "Zend/zend_language_scanner.c" +#line 4555 "Zend/zend_language_scanner.c" yy383: YYDEBUG(383, *YYCURSOR); yych = *++YYCURSOR; @@ -4558,7 +4574,7 @@ yy385: { return T_UNSET; } -#line 4562 "Zend/zend_language_scanner.c" +#line 4578 "Zend/zend_language_scanner.c" yy387: YYDEBUG(387, *YYCURSOR); ++YYCURSOR; @@ -4734,7 +4750,7 @@ yy402: { return T_INT_CAST; } -#line 4738 "Zend/zend_language_scanner.c" +#line 4754 "Zend/zend_language_scanner.c" yy405: YYDEBUG(405, *YYCURSOR); yych = *++YYCURSOR; @@ -4782,7 +4798,7 @@ yy410: { return T_DOUBLE_CAST; } -#line 4786 "Zend/zend_language_scanner.c" +#line 4802 "Zend/zend_language_scanner.c" yy414: YYDEBUG(414, *YYCURSOR); yych = *++YYCURSOR; @@ -4856,7 +4872,7 @@ yy424: { return T_STRING_CAST; } -#line 4860 "Zend/zend_language_scanner.c" +#line 4876 "Zend/zend_language_scanner.c" yy428: YYDEBUG(428, *YYCURSOR); yych = *++YYCURSOR; @@ -4893,7 +4909,7 @@ yy431: { return T_ARRAY_CAST; } -#line 4897 "Zend/zend_language_scanner.c" +#line 4913 "Zend/zend_language_scanner.c" yy435: YYDEBUG(435, *YYCURSOR); yych = *++YYCURSOR; @@ -4935,7 +4951,7 @@ yy439: { return T_OBJECT_CAST; } -#line 4939 "Zend/zend_language_scanner.c" +#line 4955 "Zend/zend_language_scanner.c" yy443: YYDEBUG(443, *YYCURSOR); yych = *++YYCURSOR; @@ -4980,7 +4996,7 @@ yy448: { return T_BOOL_CAST; } -#line 4984 "Zend/zend_language_scanner.c" +#line 5000 "Zend/zend_language_scanner.c" yy451: YYDEBUG(451, *YYCURSOR); yych = *++YYCURSOR; @@ -5044,7 +5060,7 @@ yy459: { return T_UNSET_CAST; } -#line 5048 "Zend/zend_language_scanner.c" +#line 5064 "Zend/zend_language_scanner.c" yy463: YYDEBUG(463, *YYCURSOR); yych = *++YYCURSOR; @@ -5062,7 +5078,7 @@ yy464: { return T_VAR; } -#line 5066 "Zend/zend_language_scanner.c" +#line 5082 "Zend/zend_language_scanner.c" yy466: YYDEBUG(466, *YYCURSOR); yych = *++YYCURSOR; @@ -5086,7 +5102,7 @@ yy468: { return T_NEW; } -#line 5090 "Zend/zend_language_scanner.c" +#line 5106 "Zend/zend_language_scanner.c" yy470: YYDEBUG(470, *YYCURSOR); yych = *++YYCURSOR; @@ -5129,7 +5145,7 @@ yy476: { return T_NAMESPACE; } -#line 5133 "Zend/zend_language_scanner.c" +#line 5149 "Zend/zend_language_scanner.c" yy478: YYDEBUG(478, *YYCURSOR); yyaccept = 3; @@ -5155,7 +5171,7 @@ yy480: { return T_CONCAT_EQUAL; } -#line 5159 "Zend/zend_language_scanner.c" +#line 5175 "Zend/zend_language_scanner.c" yy482: YYDEBUG(482, *YYCURSOR); yych = *++YYCURSOR; @@ -5168,7 +5184,7 @@ yy482: { return T_ELLIPSIS; } -#line 5172 "Zend/zend_language_scanner.c" +#line 5188 "Zend/zend_language_scanner.c" yy485: YYDEBUG(485, *YYCURSOR); ++YYCURSOR; @@ -5178,7 +5194,7 @@ yy485: { return T_PAAMAYIM_NEKUDOTAYIM; } -#line 5182 "Zend/zend_language_scanner.c" +#line 5198 "Zend/zend_language_scanner.c" yy487: YYDEBUG(487, *YYCURSOR); ++YYCURSOR; @@ -5204,7 +5220,7 @@ yy489: { return T_MINUS_EQUAL; } -#line 5208 "Zend/zend_language_scanner.c" +#line 5224 "Zend/zend_language_scanner.c" yy491: YYDEBUG(491, *YYCURSOR); ++YYCURSOR; @@ -5214,7 +5230,7 @@ yy491: { return T_DEC; } -#line 5218 "Zend/zend_language_scanner.c" +#line 5234 "Zend/zend_language_scanner.c" yy493: YYDEBUG(493, *YYCURSOR); ++YYCURSOR; @@ -5225,7 +5241,7 @@ yy493: yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); return T_OBJECT_OPERATOR; } -#line 5229 "Zend/zend_language_scanner.c" +#line 5245 "Zend/zend_language_scanner.c" yy495: YYDEBUG(495, *YYCURSOR); yych = *++YYCURSOR; @@ -5274,7 +5290,7 @@ yy500: { return T_PUBLIC; } -#line 5278 "Zend/zend_language_scanner.c" +#line 5294 "Zend/zend_language_scanner.c" yy502: YYDEBUG(502, *YYCURSOR); yych = *++YYCURSOR; @@ -5333,7 +5349,7 @@ yy509: { return T_PROTECTED; } -#line 5337 "Zend/zend_language_scanner.c" +#line 5353 "Zend/zend_language_scanner.c" yy511: YYDEBUG(511, *YYCURSOR); yych = *++YYCURSOR; @@ -5367,7 +5383,7 @@ yy515: { return T_PRIVATE; } -#line 5371 "Zend/zend_language_scanner.c" +#line 5387 "Zend/zend_language_scanner.c" yy517: YYDEBUG(517, *YYCURSOR); ++YYCURSOR; @@ -5380,7 +5396,7 @@ yy517: { return T_PRINT; } -#line 5384 "Zend/zend_language_scanner.c" +#line 5400 "Zend/zend_language_scanner.c" yy519: YYDEBUG(519, *YYCURSOR); yych = *++YYCURSOR; @@ -5409,7 +5425,7 @@ yy522: { return T_GOTO; } -#line 5413 "Zend/zend_language_scanner.c" +#line 5429 "Zend/zend_language_scanner.c" yy524: YYDEBUG(524, *YYCURSOR); yych = *++YYCURSOR; @@ -5437,7 +5453,7 @@ yy527: { return T_GLOBAL; } -#line 5441 "Zend/zend_language_scanner.c" +#line 5457 "Zend/zend_language_scanner.c" yy529: YYDEBUG(529, *YYCURSOR); yych = *++YYCURSOR; @@ -5478,7 +5494,7 @@ yy535: { return T_BREAK; } -#line 5482 "Zend/zend_language_scanner.c" +#line 5498 "Zend/zend_language_scanner.c" yy537: YYDEBUG(537, *YYCURSOR); yych = *++YYCURSOR; @@ -5522,7 +5538,7 @@ yy543: { return T_SWITCH; } -#line 5526 "Zend/zend_language_scanner.c" +#line 5542 "Zend/zend_language_scanner.c" yy545: YYDEBUG(545, *YYCURSOR); yych = *++YYCURSOR; @@ -5550,7 +5566,7 @@ yy548: { return T_STATIC; } -#line 5554 "Zend/zend_language_scanner.c" +#line 5570 "Zend/zend_language_scanner.c" yy550: YYDEBUG(550, *YYCURSOR); yych = *++YYCURSOR; @@ -5581,7 +5597,7 @@ yy553: { return T_AS; } -#line 5585 "Zend/zend_language_scanner.c" +#line 5601 "Zend/zend_language_scanner.c" yy555: YYDEBUG(555, *YYCURSOR); yych = *++YYCURSOR; @@ -5604,7 +5620,7 @@ yy557: { return T_ARRAY; } -#line 5608 "Zend/zend_language_scanner.c" +#line 5624 "Zend/zend_language_scanner.c" yy559: YYDEBUG(559, *YYCURSOR); ++YYCURSOR; @@ -5617,7 +5633,7 @@ yy559: { return T_LOGICAL_AND; } -#line 5621 "Zend/zend_language_scanner.c" +#line 5637 "Zend/zend_language_scanner.c" yy561: YYDEBUG(561, *YYCURSOR); yych = *++YYCURSOR; @@ -5655,7 +5671,7 @@ yy566: { return T_ABSTRACT; } -#line 5659 "Zend/zend_language_scanner.c" +#line 5675 "Zend/zend_language_scanner.c" yy568: YYDEBUG(568, *YYCURSOR); yych = *++YYCURSOR; @@ -5683,7 +5699,7 @@ yy571: { return T_WHILE; } -#line 5687 "Zend/zend_language_scanner.c" +#line 5703 "Zend/zend_language_scanner.c" yy573: YYDEBUG(573, *YYCURSOR); ++YYCURSOR; @@ -5696,7 +5712,7 @@ yy573: { return T_IF; } -#line 5700 "Zend/zend_language_scanner.c" +#line 5716 "Zend/zend_language_scanner.c" yy575: YYDEBUG(575, *YYCURSOR); yych = *++YYCURSOR; @@ -5752,7 +5768,7 @@ yy580: { return T_ISSET; } -#line 5756 "Zend/zend_language_scanner.c" +#line 5772 "Zend/zend_language_scanner.c" yy582: YYDEBUG(582, *YYCURSOR); yych = *++YYCURSOR; @@ -5810,7 +5826,7 @@ yy589: { return T_INCLUDE; } -#line 5814 "Zend/zend_language_scanner.c" +#line 5830 "Zend/zend_language_scanner.c" yy590: YYDEBUG(590, *YYCURSOR); yych = *++YYCURSOR; @@ -5843,7 +5859,7 @@ yy594: { return T_INCLUDE_ONCE; } -#line 5847 "Zend/zend_language_scanner.c" +#line 5863 "Zend/zend_language_scanner.c" yy596: YYDEBUG(596, *YYCURSOR); yych = *++YYCURSOR; @@ -5881,7 +5897,7 @@ yy601: { return T_INTERFACE; } -#line 5885 "Zend/zend_language_scanner.c" +#line 5901 "Zend/zend_language_scanner.c" yy603: YYDEBUG(603, *YYCURSOR); yych = *++YYCURSOR; @@ -5935,7 +5951,7 @@ yy609: { return T_INSTEADOF; } -#line 5939 "Zend/zend_language_scanner.c" +#line 5955 "Zend/zend_language_scanner.c" yy611: YYDEBUG(611, *YYCURSOR); yych = *++YYCURSOR; @@ -5968,7 +5984,7 @@ yy615: { return T_INSTANCEOF; } -#line 5972 "Zend/zend_language_scanner.c" +#line 5988 "Zend/zend_language_scanner.c" yy617: YYDEBUG(617, *YYCURSOR); yych = *++YYCURSOR; @@ -6016,7 +6032,7 @@ yy624: { return T_IMPLEMENTS; } -#line 6020 "Zend/zend_language_scanner.c" +#line 6036 "Zend/zend_language_scanner.c" yy626: YYDEBUG(626, *YYCURSOR); yych = *++YYCURSOR; @@ -6048,7 +6064,7 @@ yy627: { return T_TRY; } -#line 6052 "Zend/zend_language_scanner.c" +#line 6068 "Zend/zend_language_scanner.c" yy630: YYDEBUG(630, *YYCURSOR); yych = *++YYCURSOR; @@ -6071,7 +6087,7 @@ yy632: { return T_TRAIT; } -#line 6075 "Zend/zend_language_scanner.c" +#line 6091 "Zend/zend_language_scanner.c" yy634: YYDEBUG(634, *YYCURSOR); yych = *++YYCURSOR; @@ -6094,7 +6110,7 @@ yy636: { return T_THROW; } -#line 6098 "Zend/zend_language_scanner.c" +#line 6114 "Zend/zend_language_scanner.c" yy638: YYDEBUG(638, *YYCURSOR); yych = *++YYCURSOR; @@ -6122,7 +6138,7 @@ yy641: { return T_YIELD; } -#line 6126 "Zend/zend_language_scanner.c" +#line 6142 "Zend/zend_language_scanner.c" yy643: YYDEBUG(643, *YYCURSOR); yych = *++YYCURSOR; @@ -6187,7 +6203,7 @@ yy650: { return T_REQUIRE; } -#line 6191 "Zend/zend_language_scanner.c" +#line 6207 "Zend/zend_language_scanner.c" yy651: YYDEBUG(651, *YYCURSOR); yych = *++YYCURSOR; @@ -6220,7 +6236,7 @@ yy655: { return T_REQUIRE_ONCE; } -#line 6224 "Zend/zend_language_scanner.c" +#line 6240 "Zend/zend_language_scanner.c" yy657: YYDEBUG(657, *YYCURSOR); yych = *++YYCURSOR; @@ -6243,7 +6259,7 @@ yy659: { return T_RETURN; } -#line 6247 "Zend/zend_language_scanner.c" +#line 6263 "Zend/zend_language_scanner.c" yy661: YYDEBUG(661, *YYCURSOR); yych = *++YYCURSOR; @@ -6337,7 +6353,7 @@ yy670: { return T_CONTINUE; } -#line 6341 "Zend/zend_language_scanner.c" +#line 6357 "Zend/zend_language_scanner.c" yy672: YYDEBUG(672, *YYCURSOR); ++YYCURSOR; @@ -6350,7 +6366,7 @@ yy672: { return T_CONST; } -#line 6354 "Zend/zend_language_scanner.c" +#line 6370 "Zend/zend_language_scanner.c" yy674: YYDEBUG(674, *YYCURSOR); yych = *++YYCURSOR; @@ -6379,7 +6395,7 @@ yy677: { return T_CLONE; } -#line 6383 "Zend/zend_language_scanner.c" +#line 6399 "Zend/zend_language_scanner.c" yy679: YYDEBUG(679, *YYCURSOR); yych = *++YYCURSOR; @@ -6397,7 +6413,7 @@ yy680: { return T_CLASS; } -#line 6401 "Zend/zend_language_scanner.c" +#line 6417 "Zend/zend_language_scanner.c" yy682: YYDEBUG(682, *YYCURSOR); yych = *++YYCURSOR; @@ -6447,7 +6463,7 @@ yy689: { return T_CALLABLE; } -#line 6451 "Zend/zend_language_scanner.c" +#line 6467 "Zend/zend_language_scanner.c" yy691: YYDEBUG(691, *YYCURSOR); ++YYCURSOR; @@ -6460,7 +6476,7 @@ yy691: { return T_CASE; } -#line 6464 "Zend/zend_language_scanner.c" +#line 6480 "Zend/zend_language_scanner.c" yy693: YYDEBUG(693, *YYCURSOR); yych = *++YYCURSOR; @@ -6478,7 +6494,7 @@ yy694: { return T_CATCH; } -#line 6482 "Zend/zend_language_scanner.c" +#line 6498 "Zend/zend_language_scanner.c" yy696: YYDEBUG(696, *YYCURSOR); yych = *++YYCURSOR; @@ -6533,7 +6549,7 @@ yy704: { return T_FUNCTION; } -#line 6537 "Zend/zend_language_scanner.c" +#line 6553 "Zend/zend_language_scanner.c" yy706: YYDEBUG(706, *YYCURSOR); ++YYCURSOR; @@ -6561,7 +6577,7 @@ yy707: { return T_FOR; } -#line 6565 "Zend/zend_language_scanner.c" +#line 6581 "Zend/zend_language_scanner.c" yy708: YYDEBUG(708, *YYCURSOR); yych = *++YYCURSOR; @@ -6589,7 +6605,7 @@ yy711: { return T_FOREACH; } -#line 6593 "Zend/zend_language_scanner.c" +#line 6609 "Zend/zend_language_scanner.c" yy713: YYDEBUG(713, *YYCURSOR); yych = *++YYCURSOR; @@ -6627,7 +6643,7 @@ yy716: { return T_FINAL; } -#line 6631 "Zend/zend_language_scanner.c" +#line 6647 "Zend/zend_language_scanner.c" yy717: YYDEBUG(717, *YYCURSOR); yych = *++YYCURSOR; @@ -6645,7 +6661,7 @@ yy718: { return T_FINALLY; } -#line 6649 "Zend/zend_language_scanner.c" +#line 6665 "Zend/zend_language_scanner.c" yy720: YYDEBUG(720, *YYCURSOR); yych = *++YYCURSOR; @@ -6680,7 +6696,7 @@ yy722: { return T_DO; } -#line 6684 "Zend/zend_language_scanner.c" +#line 6700 "Zend/zend_language_scanner.c" yy724: YYDEBUG(724, *YYCURSOR); ++YYCURSOR; @@ -6693,7 +6709,7 @@ yy724: { return T_EXIT; } -#line 6697 "Zend/zend_language_scanner.c" +#line 6713 "Zend/zend_language_scanner.c" yy726: YYDEBUG(726, *YYCURSOR); yych = *++YYCURSOR; @@ -6732,7 +6748,7 @@ yy731: { return T_DEFAULT; } -#line 6736 "Zend/zend_language_scanner.c" +#line 6752 "Zend/zend_language_scanner.c" yy733: YYDEBUG(733, *YYCURSOR); yych = *++YYCURSOR; @@ -6760,7 +6776,7 @@ yy736: { return T_DECLARE; } -#line 6764 "Zend/zend_language_scanner.c" +#line 6780 "Zend/zend_language_scanner.c" yy738: YYDEBUG(738, *YYCURSOR); yych = *++YYCURSOR; @@ -6844,7 +6860,7 @@ yy749: { return T_EXTENDS; } -#line 6848 "Zend/zend_language_scanner.c" +#line 6864 "Zend/zend_language_scanner.c" yy751: YYDEBUG(751, *YYCURSOR); ++YYCURSOR; @@ -6857,7 +6873,7 @@ yy751: { return T_EXIT; } -#line 6861 "Zend/zend_language_scanner.c" +#line 6877 "Zend/zend_language_scanner.c" yy753: YYDEBUG(753, *YYCURSOR); yych = *++YYCURSOR; @@ -6875,7 +6891,7 @@ yy754: { return T_EVAL; } -#line 6879 "Zend/zend_language_scanner.c" +#line 6895 "Zend/zend_language_scanner.c" yy756: YYDEBUG(756, *YYCURSOR); yych = *++YYCURSOR; @@ -6949,7 +6965,7 @@ yy765: { return T_ENDWHILE; } -#line 6953 "Zend/zend_language_scanner.c" +#line 6969 "Zend/zend_language_scanner.c" yy767: YYDEBUG(767, *YYCURSOR); yych = *++YYCURSOR; @@ -6982,7 +6998,7 @@ yy771: { return T_ENDSWITCH; } -#line 6986 "Zend/zend_language_scanner.c" +#line 7002 "Zend/zend_language_scanner.c" yy773: YYDEBUG(773, *YYCURSOR); ++YYCURSOR; @@ -6995,7 +7011,7 @@ yy773: { return T_ENDIF; } -#line 6999 "Zend/zend_language_scanner.c" +#line 7015 "Zend/zend_language_scanner.c" yy775: YYDEBUG(775, *YYCURSOR); yych = *++YYCURSOR; @@ -7028,7 +7044,7 @@ yy777: { return T_ENDFOR; } -#line 7032 "Zend/zend_language_scanner.c" +#line 7048 "Zend/zend_language_scanner.c" yy778: YYDEBUG(778, *YYCURSOR); yych = *++YYCURSOR; @@ -7056,7 +7072,7 @@ yy781: { return T_ENDFOREACH; } -#line 7060 "Zend/zend_language_scanner.c" +#line 7076 "Zend/zend_language_scanner.c" yy783: YYDEBUG(783, *YYCURSOR); yych = *++YYCURSOR; @@ -7094,7 +7110,7 @@ yy788: { return T_ENDDECLARE; } -#line 7098 "Zend/zend_language_scanner.c" +#line 7114 "Zend/zend_language_scanner.c" yy790: YYDEBUG(790, *YYCURSOR); yych = *++YYCURSOR; @@ -7117,7 +7133,7 @@ yy792: { return T_EMPTY; } -#line 7121 "Zend/zend_language_scanner.c" +#line 7137 "Zend/zend_language_scanner.c" yy794: YYDEBUG(794, *YYCURSOR); yych = *++YYCURSOR; @@ -7150,7 +7166,7 @@ yy796: { return T_ELSE; } -#line 7154 "Zend/zend_language_scanner.c" +#line 7170 "Zend/zend_language_scanner.c" yy797: YYDEBUG(797, *YYCURSOR); yych = *++YYCURSOR; @@ -7168,7 +7184,7 @@ yy798: { return T_ELSEIF; } -#line 7172 "Zend/zend_language_scanner.c" +#line 7188 "Zend/zend_language_scanner.c" yy800: YYDEBUG(800, *YYCURSOR); yych = *++YYCURSOR; @@ -7186,7 +7202,7 @@ yy801: { return T_ECHO; } -#line 7190 "Zend/zend_language_scanner.c" +#line 7206 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_LOOKING_FOR_PROPERTY: @@ -7266,7 +7282,7 @@ yy806: HANDLE_NEWLINES(yytext, yyleng); return T_WHITESPACE; } -#line 7270 "Zend/zend_language_scanner.c" +#line 7286 "Zend/zend_language_scanner.c" yy807: YYDEBUG(807, *YYCURSOR); ++YYCURSOR; @@ -7280,7 +7296,7 @@ yy808: yy_pop_state(TSRMLS_C); goto restart; } -#line 7284 "Zend/zend_language_scanner.c" +#line 7300 "Zend/zend_language_scanner.c" yy809: YYDEBUG(809, *YYCURSOR); ++YYCURSOR; @@ -7295,7 +7311,7 @@ yy810: zend_copy_value(zendlval, yytext, yyleng); return T_STRING; } -#line 7299 "Zend/zend_language_scanner.c" +#line 7315 "Zend/zend_language_scanner.c" yy811: YYDEBUG(811, *YYCURSOR); yych = *++YYCURSOR; @@ -7320,7 +7336,7 @@ yy814: { return T_OBJECT_OPERATOR; } -#line 7324 "Zend/zend_language_scanner.c" +#line 7340 "Zend/zend_language_scanner.c" yy816: YYDEBUG(816, *YYCURSOR); ++YYCURSOR; @@ -7412,7 +7428,7 @@ yy821: yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); goto restart; } -#line 7416 "Zend/zend_language_scanner.c" +#line 7432 "Zend/zend_language_scanner.c" yy822: YYDEBUG(822, *YYCURSOR); yych = *++YYCURSOR; @@ -7445,7 +7461,7 @@ yy826: yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); return T_STRING_VARNAME; } -#line 7449 "Zend/zend_language_scanner.c" +#line 7465 "Zend/zend_language_scanner.c" } /* *********************************** */ yyc_ST_NOWDOC: @@ -7456,7 +7472,7 @@ yyc_ST_NOWDOC: ++YYCURSOR; YYDEBUG(831, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2300 "Zend/zend_language_scanner.l" +#line 2316 "Zend/zend_language_scanner.l" { int newline = 0; @@ -7512,7 +7528,7 @@ nowdoc_scan_done: HANDLE_NEWLINES(yytext, yyleng - newline); return T_ENCAPSED_AND_WHITESPACE; } -#line 7516 "Zend/zend_language_scanner.c" +#line 7532 "Zend/zend_language_scanner.c" /* *********************************** */ yyc_ST_VAR_OFFSET: { @@ -7628,7 +7644,7 @@ yy835: } return T_NUM_STRING; } -#line 7632 "Zend/zend_language_scanner.c" +#line 7648 "Zend/zend_language_scanner.c" yy836: YYDEBUG(836, *YYCURSOR); yych = *++YYCURSOR; @@ -7648,23 +7664,23 @@ yy837: yy838: YYDEBUG(838, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1833 "Zend/zend_language_scanner.l" +#line 1849 "Zend/zend_language_scanner.l" { /* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */ return yytext[0]; } -#line 7657 "Zend/zend_language_scanner.c" +#line 7673 "Zend/zend_language_scanner.c" yy839: YYDEBUG(839, *YYCURSOR); ++YYCURSOR; YYDEBUG(840, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1828 "Zend/zend_language_scanner.l" +#line 1844 "Zend/zend_language_scanner.l" { yy_pop_state(TSRMLS_C); return ']'; } -#line 7668 "Zend/zend_language_scanner.c" +#line 7684 "Zend/zend_language_scanner.c" yy841: YYDEBUG(841, *YYCURSOR); yych = *++YYCURSOR; @@ -7674,14 +7690,14 @@ yy842: ++YYCURSOR; YYDEBUG(843, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1838 "Zend/zend_language_scanner.l" +#line 1854 "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 7685 "Zend/zend_language_scanner.c" +#line 7701 "Zend/zend_language_scanner.c" yy844: YYDEBUG(844, *YYCURSOR); ++YYCURSOR; @@ -7690,18 +7706,18 @@ yy844: yy845: YYDEBUG(845, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1845 "Zend/zend_language_scanner.l" +#line 1861 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, yytext, yyleng); return T_STRING; } -#line 7699 "Zend/zend_language_scanner.c" +#line 7715 "Zend/zend_language_scanner.c" yy846: YYDEBUG(846, *YYCURSOR); ++YYCURSOR; YYDEBUG(847, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 2357 "Zend/zend_language_scanner.l" +#line 2373 "Zend/zend_language_scanner.l" { if (YYCURSOR > YYLIMIT) { return 0; @@ -7710,7 +7726,7 @@ yy846: zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); goto restart; } -#line 7714 "Zend/zend_language_scanner.c" +#line 7730 "Zend/zend_language_scanner.c" yy848: YYDEBUG(848, *YYCURSOR); ++YYCURSOR; @@ -7746,12 +7762,12 @@ yy850: yy852: YYDEBUG(852, *YYCURSOR); yyleng = YYCURSOR - SCNG(yy_text); -#line 1823 "Zend/zend_language_scanner.l" +#line 1839 "Zend/zend_language_scanner.l" { zend_copy_value(zendlval, (yytext+1), (yyleng-1)); return T_VARIABLE; } -#line 7755 "Zend/zend_language_scanner.c" +#line 7771 "Zend/zend_language_scanner.c" yy853: YYDEBUG(853, *YYCURSOR); ++YYCURSOR; @@ -7796,7 +7812,7 @@ yy860: ZVAL_STRINGL(zendlval, yytext, yyleng); return T_NUM_STRING; } -#line 7800 "Zend/zend_language_scanner.c" +#line 7816 "Zend/zend_language_scanner.c" yy861: YYDEBUG(861, *YYCURSOR); ++YYCURSOR; @@ -7819,6 +7835,6 @@ yy863: goto yy860; } } -#line 2366 "Zend/zend_language_scanner.l" +#line 2382 "Zend/zend_language_scanner.l" } diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index a4275a8695..032c8d0476 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -1603,8 +1603,7 @@ NEWLINE ("\r"|"\n"|"\r\n") "__FUNCTION__" { zend_op_array *op_array = CG(active_op_array); if (op_array && op_array->function_name) { - ZVAL_STR(zendlval, op_array->function_name); - Z_ADDREF_P(zendlval); + ZVAL_STR(zendlval, STR_COPY(op_array->function_name)); } else { ZVAL_EMPTY_STRING(zendlval); } @@ -1612,15 +1611,32 @@ NEWLINE ("\r"|"\n"|"\r\n") } "__METHOD__" { - const char *class_name = CG(active_class_entry) ? CG(active_class_entry)->name->val : NULL; - const char *func_name = CG(active_op_array)? CG(active_op_array)->function_name->val : NULL; - - Z_STRLEN_P(zendlval) = zend_spprintf((char**)&Z_STRVAL_P(zendlval), 0, "%s%s%s", - class_name ? class_name : "", - class_name && func_name ? "::" : "", - func_name ? func_name : "" - ); - zendlval->type = IS_STRING; + if (CG(active_class_entry)) { + int len = 2; + + if (CG(active_class_entry)->name) { + len += CG(active_class_entry)->name->len; + } + if (CG(active_op_array) && CG(active_op_array)->function_name) { + len += CG(active_op_array)->function_name->len; + } + ZVAL_STR(zendlval, STR_ALLOC(len, 0)); + len = 0; + if (CG(active_class_entry)->name) { + memcpy(Z_STRVAL_P(zendlval), CG(active_class_entry)->name->val, CG(active_class_entry)->name->len); + len += CG(active_class_entry)->name->len; + } + memcpy(Z_STRVAL_P(zendlval) + len, "::", sizeof("::")-1); + len += sizeof("::")-1; + if (CG(active_op_array) && CG(active_op_array)->function_name) { + memcpy(Z_STRVAL_P(zendlval) + len, CG(active_op_array)->function_name->val, CG(active_op_array)->function_name->len); + len += CG(active_op_array)->function_name->len; + } + } else if (CG(active_op_array) && CG(active_op_array)->function_name) { + ZVAL_STR(zendlval, STR_COPY(CG(active_op_array)->function_name)); + } else { + ZVAL_EMPTY_STRING(zendlval); + } return T_METHOD_C; }