]> granicus.if.org Git - php/commitdiff
Fixed __METHOD__ handling
authorDmitry Stogov <dmitry@zend.com>
Fri, 21 Feb 2014 13:52:43 +0000 (17:52 +0400)
committerDmitry Stogov <dmitry@zend.com>
Fri, 21 Feb 2014 13:52:43 +0000 (17:52 +0400)
Zend/zend_language_scanner.c
Zend/zend_language_scanner.l

index 9bcbd552985f693f13c2a3565709fca6fb35dc03..3bded7bda25b4f0531797acaa5c9e8ac4598017a 100644 (file)
@@ -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"
 
 }
index a4275a8695bf01780f9ebc23f06d2c566a93852b..032c8d04769ef20d7a812d1b5fe50aae4da3cf21 100644 (file)
@@ -1603,8 +1603,7 @@ NEWLINE ("\r"|"\n"|"\r\n")
 <ST_IN_SCRIPTING>"__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")
 }
 
 <ST_IN_SCRIPTING>"__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;
 }