]> granicus.if.org Git - php/commitdiff
Handle trait __CLASS__ in parser
authorNikita Popov <nikic@php.net>
Thu, 26 Jun 2014 12:00:20 +0000 (14:00 +0200)
committerNikita Popov <nikic@php.net>
Thu, 26 Jun 2014 12:00:20 +0000 (14:00 +0200)
Zend/zend_language_parser.y
Zend/zend_language_scanner.c
Zend/zend_language_scanner.l

index 5edc41e59723d0d5c04ec9838807d8fd2577de35..bf2162b643e9f565723770b0c77a14795f0efaee 100644 (file)
@@ -982,7 +982,6 @@ static_scalar: /* compile-time evaluated scalars */
 
 static_scalar_base:
                T_CONSTANT_ENCAPSED_STRING      { $$ = $1; }
-       |       T_CLASS_C                                       { $$ = $1; }
        |       static_class_name_scalar        { $$ = $1; }
        |       static_class_constant           { $$ = $1; }
        |       namespace_name          { zend_do_fetch_constant(&$$, NULL, &$1, ZEND_CT, 1 TSRMLS_CC); }
@@ -996,6 +995,15 @@ static_scalar_value:
        |       T_ARRAY '(' static_array_pair_list ')' { $$.u.ast = $3.u.ast; }
        |       '[' static_array_pair_list ']' { $$.u.ast = $2.u.ast; }
        |       static_operation { $$.u.ast = $1.u.ast; }
+       |       T_CLASS_C
+                       { if (Z_TYPE($1.u.constant) == IS_UNDEF) {
+                             zval class_const;
+                             ZVAL_STRING(&class_const, "__CLASS__");
+                             Z_TYPE_INFO(class_const) = IS_CONSTANT_EX;
+                             $$.u.ast = zend_ast_create_constant(&class_const);
+                         } else {
+                             $$.u.ast = AST_ZVAL(&$1);
+                         } }
 ;
 
 static_operation:
@@ -1082,7 +1090,14 @@ scalar:
        |       common_scalar                   { $$.u.ast = $1.u.ast; }
        |       '"' encaps_list '"'     { $$.u.ast = $2.u.ast; }
        |       T_START_HEREDOC encaps_list T_END_HEREDOC { $$.u.ast = $2.u.ast; }
-       |       T_CLASS_C                               { if (Z_TYPE($1.u.constant) == IS_CONSTANT) {zend_do_fetch_constant(&$$, NULL, &$1, ZEND_RT, 1 TSRMLS_CC); AZ($$); } else { $$.u.ast = AST_ZVAL(&$1); } }
+       |       T_CLASS_C
+                       { if (Z_TYPE($1.u.constant) == IS_UNDEF) {
+                             zval class_const; ZVAL_STRING(&class_const, "__CLASS__");
+                             $$.u.ast = zend_ast_create_unary(ZEND_AST_CONST,
+                                     zend_ast_create_constant(&class_const));
+                         } else {
+                             $$.u.ast = AST_ZVAL(&$1);
+                         } }
        |       dereferencable_scalar   { $$.u.ast = $1.u.ast; }
 ;
 
index 8858e8be9e9da4707f523411c32c67df4b175c12..1b42761fa55eee58f45209d7fa9c0c2f6148fe2c 100644 (file)
@@ -1115,7 +1115,7 @@ yyc_INITIAL:
 yy3:
                YYDEBUG(3, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1779 "Zend/zend_language_scanner.l"
+#line 1777 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@ -1194,7 +1194,7 @@ yy5:
 yy6:
                YYDEBUG(6, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1769 "Zend/zend_language_scanner.l"
+#line 1767 "Zend/zend_language_scanner.l"
                {
        if (CG(short_tags)) {
                DUMMY_STRINGL(zendlval, yytext, yyleng);
@@ -1211,7 +1211,7 @@ yy7:
                if ((yych = *YYCURSOR) == '=') goto yy43;
                YYDEBUG(8, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1750 "Zend/zend_language_scanner.l"
+#line 1748 "Zend/zend_language_scanner.l"
                {
        if (CG(asp_tags)) {
                DUMMY_STRINGL(zendlval, yytext, yyleng);
@@ -1407,7 +1407,7 @@ yy35:
                ++YYCURSOR;
                YYDEBUG(38, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1716 "Zend/zend_language_scanner.l"
+#line 1714 "Zend/zend_language_scanner.l"
                {
        YYCTYPE *bracket = (YYCTYPE*)zend_memrchr(yytext, '<', yyleng - (sizeof("script language=php>") - 1));
 
@@ -1449,7 +1449,7 @@ yy43:
                ++YYCURSOR;
                YYDEBUG(44, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1732 "Zend/zend_language_scanner.l"
+#line 1730 "Zend/zend_language_scanner.l"
                {
        if (CG(asp_tags)) {
                DUMMY_STRINGL(zendlval, yytext, yyleng);
@@ -1465,7 +1465,7 @@ yy45:
                ++YYCURSOR;
                YYDEBUG(46, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1743 "Zend/zend_language_scanner.l"
+#line 1741 "Zend/zend_language_scanner.l"
                {
        DUMMY_STRINGL(zendlval, yytext, yyleng);
        BEGIN(ST_IN_SCRIPTING);
@@ -1498,7 +1498,7 @@ yy50:
 yy51:
                YYDEBUG(51, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1761 "Zend/zend_language_scanner.l"
+#line 1759 "Zend/zend_language_scanner.l"
                {
        DUMMY_STRINGL(zendlval, yytext, yyleng);
        HANDLE_NEWLINE(yytext[yyleng-1]);
@@ -1576,7 +1576,7 @@ yyc_ST_BACKQUOTE:
 yy56:
                YYDEBUG(56, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2222 "Zend/zend_language_scanner.l"
+#line 2220 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@ -1628,7 +1628,7 @@ yy58:
                ++YYCURSOR;
                YYDEBUG(59, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2166 "Zend/zend_language_scanner.l"
+#line 2164 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_IN_SCRIPTING);
        return '`';
@@ -1643,7 +1643,7 @@ yy61:
                ++YYCURSOR;
                YYDEBUG(62, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2153 "Zend/zend_language_scanner.l"
+#line 2151 "Zend/zend_language_scanner.l"
                {
        Z_LVAL_P(zendlval) = (long) '{';
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
@@ -1666,7 +1666,7 @@ yy63:
 yy65:
                YYDEBUG(65, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1860 "Zend/zend_language_scanner.l"
+#line 1858 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        return T_VARIABLE;
@@ -1696,7 +1696,7 @@ yy70:
                ++YYCURSOR;
                YYDEBUG(71, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1853 "Zend/zend_language_scanner.l"
+#line 1851 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
@@ -1721,7 +1721,7 @@ yy73:
                ++YYCURSOR;
                YYDEBUG(74, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1844 "Zend/zend_language_scanner.l"
+#line 1842 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
@@ -1796,7 +1796,7 @@ yy77:
 yy78:
                YYDEBUG(78, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2172 "Zend/zend_language_scanner.l"
+#line 2170 "Zend/zend_language_scanner.l"
                {
        if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) {
                YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1;
@@ -1856,7 +1856,7 @@ yy80:
                ++YYCURSOR;
                YYDEBUG(81, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2161 "Zend/zend_language_scanner.l"
+#line 2159 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_IN_SCRIPTING);
        return '"';
@@ -1871,7 +1871,7 @@ yy83:
                ++YYCURSOR;
                YYDEBUG(84, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2153 "Zend/zend_language_scanner.l"
+#line 2151 "Zend/zend_language_scanner.l"
                {
        Z_LVAL_P(zendlval) = (long) '{';
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
@@ -1894,7 +1894,7 @@ yy85:
 yy87:
                YYDEBUG(87, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1860 "Zend/zend_language_scanner.l"
+#line 1858 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        return T_VARIABLE;
@@ -1924,7 +1924,7 @@ yy92:
                ++YYCURSOR;
                YYDEBUG(93, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1853 "Zend/zend_language_scanner.l"
+#line 1851 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
@@ -1949,7 +1949,7 @@ yy95:
                ++YYCURSOR;
                YYDEBUG(96, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1844 "Zend/zend_language_scanner.l"
+#line 1842 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
@@ -1967,7 +1967,7 @@ yyc_ST_END_HEREDOC:
        ++YYCURSOR;
        YYDEBUG(100, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
-#line 2139 "Zend/zend_language_scanner.l"
+#line 2137 "Zend/zend_language_scanner.l"
        {
        zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack));
 
@@ -2042,7 +2042,7 @@ yy103:
 yy104:
                YYDEBUG(104, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2264 "Zend/zend_language_scanner.l"
+#line 2262 "Zend/zend_language_scanner.l"
                {
        int newline = 0;
 
@@ -2130,7 +2130,7 @@ yy107:
                ++YYCURSOR;
                YYDEBUG(108, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2153 "Zend/zend_language_scanner.l"
+#line 2151 "Zend/zend_language_scanner.l"
                {
        Z_LVAL_P(zendlval) = (long) '{';
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
@@ -2153,7 +2153,7 @@ yy109:
 yy111:
                YYDEBUG(111, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1860 "Zend/zend_language_scanner.l"
+#line 1858 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        return T_VARIABLE;
@@ -2183,7 +2183,7 @@ yy116:
                ++YYCURSOR;
                YYDEBUG(117, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1853 "Zend/zend_language_scanner.l"
+#line 1851 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
@@ -2208,7 +2208,7 @@ yy119:
                ++YYCURSOR;
                YYDEBUG(120, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1844 "Zend/zend_language_scanner.l"
+#line 1842 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
@@ -2398,7 +2398,7 @@ yy123:
 yy124:
                YYDEBUG(124, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1882 "Zend/zend_language_scanner.l"
+#line 1880 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, yytext, yyleng);
        return T_STRING;
@@ -2996,7 +2996,7 @@ yy176:
 yy177:
                YYDEBUG(177, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1888 "Zend/zend_language_scanner.l"
+#line 1886 "Zend/zend_language_scanner.l"
                {
        while (YYCURSOR < YYLIMIT) {
                switch (*YYCURSOR++) {
@@ -3037,7 +3037,7 @@ yy178:
 yy179:
                YYDEBUG(179, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1974 "Zend/zend_language_scanner.l"
+#line 1972 "Zend/zend_language_scanner.l"
                {
        register char *s, *t;
        char *end;
@@ -3112,7 +3112,7 @@ yy180:
 yy181:
                YYDEBUG(181, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2043 "Zend/zend_language_scanner.l"
+#line 2041 "Zend/zend_language_scanner.l"
                {
        int bprefix = (yytext[0] != '"') ? 1 : 0;
 
@@ -3159,7 +3159,7 @@ yy182:
                ++YYCURSOR;
                YYDEBUG(183, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2133 "Zend/zend_language_scanner.l"
+#line 2131 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_BACKQUOTE);
        return '`';
@@ -3170,7 +3170,7 @@ yy184:
                ++YYCURSOR;
                YYDEBUG(185, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2395 "Zend/zend_language_scanner.l"
+#line 2393 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@ -3370,7 +3370,7 @@ yy206:
 yy207:
                YYDEBUG(207, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1955 "Zend/zend_language_scanner.l"
+#line 1953 "Zend/zend_language_scanner.l"
                {
        DUMMY_STRINGL(zendlval, yytext, yyleng);
        BEGIN(INITIAL);
@@ -3410,7 +3410,7 @@ yy210:
 yy212:
                YYDEBUG(212, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1860 "Zend/zend_language_scanner.l"
+#line 1858 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        return T_VARIABLE;
@@ -3505,7 +3505,7 @@ yy228:
 yy229:
                YYDEBUG(229, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1962 "Zend/zend_language_scanner.l"
+#line 1960 "Zend/zend_language_scanner.l"
                {
        if (CG(asp_tags)) {
                BEGIN(INITIAL);
@@ -3544,7 +3544,7 @@ yy234:
 yy235:
                YYDEBUG(235, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1922 "Zend/zend_language_scanner.l"
+#line 1920 "Zend/zend_language_scanner.l"
                {
        int doc_com;
 
@@ -3872,7 +3872,7 @@ yy279:
 yy280:
                YYDEBUG(280, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2085 "Zend/zend_language_scanner.l"
+#line 2083 "Zend/zend_language_scanner.l"
                {
        char *s;
        int bprefix = (yytext[0] != '<') ? 1 : 0;
@@ -4167,7 +4167,7 @@ yy317:
                }
                YYDEBUG(320, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1707 "Zend/zend_language_scanner.l"
+#line 1705 "Zend/zend_language_scanner.l"
                {
        if (Z_TYPE(CG(current_namespace)) != IS_UNDEF) {
                ZVAL_DUP(zendlval, &CG(current_namespace));
@@ -4196,7 +4196,7 @@ yy322:
                }
                YYDEBUG(325, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1682 "Zend/zend_language_scanner.l"
+#line 1680 "Zend/zend_language_scanner.l"
                {
        zend_string *filename = zend_get_compiled_filename(TSRMLS_C);
        zend_string *dirname;
@@ -4246,7 +4246,7 @@ yy328:
                }
                YYDEBUG(331, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1666 "Zend/zend_language_scanner.l"
+#line 1664 "Zend/zend_language_scanner.l"
                {
        ZVAL_LONG(zendlval, CG(zend_lineno));
        return T_LINE;
@@ -4286,7 +4286,7 @@ yy336:
                }
                YYDEBUG(339, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1634 "Zend/zend_language_scanner.l"
+#line 1632 "Zend/zend_language_scanner.l"
                {
        if (CG(active_class_entry)) {
                int len = 0;
@@ -4369,7 +4369,7 @@ yy347:
                }
                YYDEBUG(350, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1624 "Zend/zend_language_scanner.l"
+#line 1622 "Zend/zend_language_scanner.l"
                {
        zend_op_array *op_array = CG(active_op_array);
        if (op_array && op_array->function_name) {
@@ -4399,7 +4399,7 @@ yy352:
                }
                YYDEBUG(355, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1671 "Zend/zend_language_scanner.l"
+#line 1669 "Zend/zend_language_scanner.l"
                {
        zend_string *filename = zend_get_compiled_filename(TSRMLS_C);
 
@@ -4440,7 +4440,7 @@ yy359:
                }
                YYDEBUG(362, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1614 "Zend/zend_language_scanner.l"
+#line 1612 "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)) {
@@ -4484,10 +4484,8 @@ yy366:
                {
        zend_class_entry *ce = CG(active_class_entry);
        if (ce && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) {
-               /* We create a special __CLASS__ constant that is going to be resolved
-                  at run-time */
-               ZVAL_STRINGL(zendlval, "__CLASS__", sizeof("__CLASS__") - 1);
-               Z_TYPE_INFO_P(zendlval) = IS_CONSTANT_EX;
+               /* Signal that the __CLASS__ needs to be resolved at runtime */
+               ZVAL_UNDEF(zendlval);
        } else {
                if (ce && ce->name) {
                        ZVAL_STR(zendlval, STR_COPY(ce->name));
@@ -4497,7 +4495,7 @@ yy366:
        }
        return T_CLASS_C;
 }
-#line 4501 "Zend/zend_language_scanner.c"
+#line 4499 "Zend/zend_language_scanner.c"
 yy370:
                YYDEBUG(370, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4563,7 +4561,7 @@ yy381:
                {
        return T_HALT_COMPILER;
 }
-#line 4567 "Zend/zend_language_scanner.c"
+#line 4565 "Zend/zend_language_scanner.c"
 yy383:
                YYDEBUG(383, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4587,7 +4585,7 @@ yy385:
                {
        return T_USE;
 }
-#line 4591 "Zend/zend_language_scanner.c"
+#line 4589 "Zend/zend_language_scanner.c"
 yy387:
                YYDEBUG(387, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4610,7 +4608,7 @@ yy389:
                {
        return T_UNSET;
 }
-#line 4614 "Zend/zend_language_scanner.c"
+#line 4612 "Zend/zend_language_scanner.c"
 yy391:
                YYDEBUG(391, *YYCURSOR);
                ++YYCURSOR;
@@ -4786,7 +4784,7 @@ yy406:
                {
        return T_INT_CAST;
 }
-#line 4790 "Zend/zend_language_scanner.c"
+#line 4788 "Zend/zend_language_scanner.c"
 yy409:
                YYDEBUG(409, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4834,7 +4832,7 @@ yy414:
                {
        return T_DOUBLE_CAST;
 }
-#line 4838 "Zend/zend_language_scanner.c"
+#line 4836 "Zend/zend_language_scanner.c"
 yy418:
                YYDEBUG(418, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4908,7 +4906,7 @@ yy428:
                {
        return T_STRING_CAST;
 }
-#line 4912 "Zend/zend_language_scanner.c"
+#line 4910 "Zend/zend_language_scanner.c"
 yy432:
                YYDEBUG(432, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4945,7 +4943,7 @@ yy435:
                {
        return T_ARRAY_CAST;
 }
-#line 4949 "Zend/zend_language_scanner.c"
+#line 4947 "Zend/zend_language_scanner.c"
 yy439:
                YYDEBUG(439, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4987,7 +4985,7 @@ yy443:
                {
        return T_OBJECT_CAST;
 }
-#line 4991 "Zend/zend_language_scanner.c"
+#line 4989 "Zend/zend_language_scanner.c"
 yy447:
                YYDEBUG(447, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5032,7 +5030,7 @@ yy452:
                {
        return T_BOOL_CAST;
 }
-#line 5036 "Zend/zend_language_scanner.c"
+#line 5034 "Zend/zend_language_scanner.c"
 yy455:
                YYDEBUG(455, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5096,7 +5094,7 @@ yy463:
                {
        return T_UNSET_CAST;
 }
-#line 5100 "Zend/zend_language_scanner.c"
+#line 5098 "Zend/zend_language_scanner.c"
 yy467:
                YYDEBUG(467, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5114,7 +5112,7 @@ yy468:
                {
        return T_VAR;
 }
-#line 5118 "Zend/zend_language_scanner.c"
+#line 5116 "Zend/zend_language_scanner.c"
 yy470:
                YYDEBUG(470, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5138,7 +5136,7 @@ yy472:
                {
        return T_NEW;
 }
-#line 5142 "Zend/zend_language_scanner.c"
+#line 5140 "Zend/zend_language_scanner.c"
 yy474:
                YYDEBUG(474, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5181,7 +5179,7 @@ yy480:
                {
        return T_NAMESPACE;
 }
-#line 5185 "Zend/zend_language_scanner.c"
+#line 5183 "Zend/zend_language_scanner.c"
 yy482:
                YYDEBUG(482, *YYCURSOR);
                yyaccept = 3;
@@ -5207,7 +5205,7 @@ yy484:
                {
        return T_CONCAT_EQUAL;
 }
-#line 5211 "Zend/zend_language_scanner.c"
+#line 5209 "Zend/zend_language_scanner.c"
 yy486:
                YYDEBUG(486, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5220,7 +5218,7 @@ yy486:
                {
        return T_ELLIPSIS;
 }
-#line 5224 "Zend/zend_language_scanner.c"
+#line 5222 "Zend/zend_language_scanner.c"
 yy489:
                YYDEBUG(489, *YYCURSOR);
                ++YYCURSOR;
@@ -5230,7 +5228,7 @@ yy489:
                {
        return T_PAAMAYIM_NEKUDOTAYIM;
 }
-#line 5234 "Zend/zend_language_scanner.c"
+#line 5232 "Zend/zend_language_scanner.c"
 yy491:
                YYDEBUG(491, *YYCURSOR);
                ++YYCURSOR;
@@ -5256,7 +5254,7 @@ yy493:
                {
        return T_MINUS_EQUAL;
 }
-#line 5260 "Zend/zend_language_scanner.c"
+#line 5258 "Zend/zend_language_scanner.c"
 yy495:
                YYDEBUG(495, *YYCURSOR);
                ++YYCURSOR;
@@ -5266,7 +5264,7 @@ yy495:
                {
        return T_DEC;
 }
-#line 5270 "Zend/zend_language_scanner.c"
+#line 5268 "Zend/zend_language_scanner.c"
 yy497:
                YYDEBUG(497, *YYCURSOR);
                ++YYCURSOR;
@@ -5277,7 +5275,7 @@ yy497:
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
        return T_OBJECT_OPERATOR;
 }
-#line 5281 "Zend/zend_language_scanner.c"
+#line 5279 "Zend/zend_language_scanner.c"
 yy499:
                YYDEBUG(499, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5326,7 +5324,7 @@ yy504:
                {
        return T_PUBLIC;
 }
-#line 5330 "Zend/zend_language_scanner.c"
+#line 5328 "Zend/zend_language_scanner.c"
 yy506:
                YYDEBUG(506, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5385,7 +5383,7 @@ yy513:
                {
        return T_PROTECTED;
 }
-#line 5389 "Zend/zend_language_scanner.c"
+#line 5387 "Zend/zend_language_scanner.c"
 yy515:
                YYDEBUG(515, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5419,7 +5417,7 @@ yy519:
                {
        return T_PRIVATE;
 }
-#line 5423 "Zend/zend_language_scanner.c"
+#line 5421 "Zend/zend_language_scanner.c"
 yy521:
                YYDEBUG(521, *YYCURSOR);
                ++YYCURSOR;
@@ -5432,7 +5430,7 @@ yy521:
                {
        return T_PRINT;
 }
-#line 5436 "Zend/zend_language_scanner.c"
+#line 5434 "Zend/zend_language_scanner.c"
 yy523:
                YYDEBUG(523, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5461,7 +5459,7 @@ yy526:
                {
        return T_GOTO;
 }
-#line 5465 "Zend/zend_language_scanner.c"
+#line 5463 "Zend/zend_language_scanner.c"
 yy528:
                YYDEBUG(528, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5489,7 +5487,7 @@ yy531:
                {
        return T_GLOBAL;
 }
-#line 5493 "Zend/zend_language_scanner.c"
+#line 5491 "Zend/zend_language_scanner.c"
 yy533:
                YYDEBUG(533, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5530,7 +5528,7 @@ yy539:
                {
        return T_BREAK;
 }
-#line 5534 "Zend/zend_language_scanner.c"
+#line 5532 "Zend/zend_language_scanner.c"
 yy541:
                YYDEBUG(541, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5574,7 +5572,7 @@ yy547:
                {
        return T_SWITCH;
 }
-#line 5578 "Zend/zend_language_scanner.c"
+#line 5576 "Zend/zend_language_scanner.c"
 yy549:
                YYDEBUG(549, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5602,7 +5600,7 @@ yy552:
                {
        return T_STATIC;
 }
-#line 5606 "Zend/zend_language_scanner.c"
+#line 5604 "Zend/zend_language_scanner.c"
 yy554:
                YYDEBUG(554, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5633,7 +5631,7 @@ yy557:
                {
        return T_AS;
 }
-#line 5637 "Zend/zend_language_scanner.c"
+#line 5635 "Zend/zend_language_scanner.c"
 yy559:
                YYDEBUG(559, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5656,7 +5654,7 @@ yy561:
                {
        return T_ARRAY;
 }
-#line 5660 "Zend/zend_language_scanner.c"
+#line 5658 "Zend/zend_language_scanner.c"
 yy563:
                YYDEBUG(563, *YYCURSOR);
                ++YYCURSOR;
@@ -5669,7 +5667,7 @@ yy563:
                {
        return T_LOGICAL_AND;
 }
-#line 5673 "Zend/zend_language_scanner.c"
+#line 5671 "Zend/zend_language_scanner.c"
 yy565:
                YYDEBUG(565, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5707,7 +5705,7 @@ yy570:
                {
        return T_ABSTRACT;
 }
-#line 5711 "Zend/zend_language_scanner.c"
+#line 5709 "Zend/zend_language_scanner.c"
 yy572:
                YYDEBUG(572, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5735,7 +5733,7 @@ yy575:
                {
        return T_WHILE;
 }
-#line 5739 "Zend/zend_language_scanner.c"
+#line 5737 "Zend/zend_language_scanner.c"
 yy577:
                YYDEBUG(577, *YYCURSOR);
                ++YYCURSOR;
@@ -5748,7 +5746,7 @@ yy577:
                {
        return T_IF;
 }
-#line 5752 "Zend/zend_language_scanner.c"
+#line 5750 "Zend/zend_language_scanner.c"
 yy579:
                YYDEBUG(579, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5804,7 +5802,7 @@ yy584:
                {
        return T_ISSET;
 }
-#line 5808 "Zend/zend_language_scanner.c"
+#line 5806 "Zend/zend_language_scanner.c"
 yy586:
                YYDEBUG(586, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5862,7 +5860,7 @@ yy593:
                {
        return T_INCLUDE;
 }
-#line 5866 "Zend/zend_language_scanner.c"
+#line 5864 "Zend/zend_language_scanner.c"
 yy594:
                YYDEBUG(594, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5895,7 +5893,7 @@ yy598:
                {
        return T_INCLUDE_ONCE;
 }
-#line 5899 "Zend/zend_language_scanner.c"
+#line 5897 "Zend/zend_language_scanner.c"
 yy600:
                YYDEBUG(600, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5933,7 +5931,7 @@ yy605:
                {
        return T_INTERFACE;
 }
-#line 5937 "Zend/zend_language_scanner.c"
+#line 5935 "Zend/zend_language_scanner.c"
 yy607:
                YYDEBUG(607, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5987,7 +5985,7 @@ yy613:
                {
         return T_INSTEADOF;
 }
-#line 5991 "Zend/zend_language_scanner.c"
+#line 5989 "Zend/zend_language_scanner.c"
 yy615:
                YYDEBUG(615, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6020,7 +6018,7 @@ yy619:
                {
        return T_INSTANCEOF;
 }
-#line 6024 "Zend/zend_language_scanner.c"
+#line 6022 "Zend/zend_language_scanner.c"
 yy621:
                YYDEBUG(621, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6068,7 +6066,7 @@ yy628:
                {
        return T_IMPLEMENTS;
 }
-#line 6072 "Zend/zend_language_scanner.c"
+#line 6070 "Zend/zend_language_scanner.c"
 yy630:
                YYDEBUG(630, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6100,7 +6098,7 @@ yy631:
                {
        return T_TRY;
 }
-#line 6104 "Zend/zend_language_scanner.c"
+#line 6102 "Zend/zend_language_scanner.c"
 yy634:
                YYDEBUG(634, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6123,7 +6121,7 @@ yy636:
                {
        return T_TRAIT;
 }
-#line 6127 "Zend/zend_language_scanner.c"
+#line 6125 "Zend/zend_language_scanner.c"
 yy638:
                YYDEBUG(638, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6146,7 +6144,7 @@ yy640:
                {
        return T_THROW;
 }
-#line 6150 "Zend/zend_language_scanner.c"
+#line 6148 "Zend/zend_language_scanner.c"
 yy642:
                YYDEBUG(642, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6174,7 +6172,7 @@ yy645:
                {
        return T_YIELD;
 }
-#line 6178 "Zend/zend_language_scanner.c"
+#line 6176 "Zend/zend_language_scanner.c"
 yy647:
                YYDEBUG(647, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6239,7 +6237,7 @@ yy654:
                {
        return T_REQUIRE;
 }
-#line 6243 "Zend/zend_language_scanner.c"
+#line 6241 "Zend/zend_language_scanner.c"
 yy655:
                YYDEBUG(655, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6272,7 +6270,7 @@ yy659:
                {
        return T_REQUIRE_ONCE;
 }
-#line 6276 "Zend/zend_language_scanner.c"
+#line 6274 "Zend/zend_language_scanner.c"
 yy661:
                YYDEBUG(661, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6295,7 +6293,7 @@ yy663:
                {
        return T_RETURN;
 }
-#line 6299 "Zend/zend_language_scanner.c"
+#line 6297 "Zend/zend_language_scanner.c"
 yy665:
                YYDEBUG(665, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6389,7 +6387,7 @@ yy674:
                {
        return T_CONTINUE;
 }
-#line 6393 "Zend/zend_language_scanner.c"
+#line 6391 "Zend/zend_language_scanner.c"
 yy676:
                YYDEBUG(676, *YYCURSOR);
                ++YYCURSOR;
@@ -6402,7 +6400,7 @@ yy676:
                {
        return T_CONST;
 }
-#line 6406 "Zend/zend_language_scanner.c"
+#line 6404 "Zend/zend_language_scanner.c"
 yy678:
                YYDEBUG(678, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6431,7 +6429,7 @@ yy681:
                {
        return T_CLONE;
 }
-#line 6435 "Zend/zend_language_scanner.c"
+#line 6433 "Zend/zend_language_scanner.c"
 yy683:
                YYDEBUG(683, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6449,7 +6447,7 @@ yy684:
                {
        return T_CLASS;
 }
-#line 6453 "Zend/zend_language_scanner.c"
+#line 6451 "Zend/zend_language_scanner.c"
 yy686:
                YYDEBUG(686, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6499,7 +6497,7 @@ yy693:
                {
  return T_CALLABLE;
 }
-#line 6503 "Zend/zend_language_scanner.c"
+#line 6501 "Zend/zend_language_scanner.c"
 yy695:
                YYDEBUG(695, *YYCURSOR);
                ++YYCURSOR;
@@ -6512,7 +6510,7 @@ yy695:
                {
        return T_CASE;
 }
-#line 6516 "Zend/zend_language_scanner.c"
+#line 6514 "Zend/zend_language_scanner.c"
 yy697:
                YYDEBUG(697, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6530,7 +6528,7 @@ yy698:
                {
        return T_CATCH;
 }
-#line 6534 "Zend/zend_language_scanner.c"
+#line 6532 "Zend/zend_language_scanner.c"
 yy700:
                YYDEBUG(700, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6585,7 +6583,7 @@ yy708:
                {
        return T_FUNCTION;
 }
-#line 6589 "Zend/zend_language_scanner.c"
+#line 6587 "Zend/zend_language_scanner.c"
 yy710:
                YYDEBUG(710, *YYCURSOR);
                ++YYCURSOR;
@@ -6613,7 +6611,7 @@ yy711:
                {
        return T_FOR;
 }
-#line 6617 "Zend/zend_language_scanner.c"
+#line 6615 "Zend/zend_language_scanner.c"
 yy712:
                YYDEBUG(712, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6641,7 +6639,7 @@ yy715:
                {
        return T_FOREACH;
 }
-#line 6645 "Zend/zend_language_scanner.c"
+#line 6643 "Zend/zend_language_scanner.c"
 yy717:
                YYDEBUG(717, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6679,7 +6677,7 @@ yy720:
                {
        return T_FINAL;
 }
-#line 6683 "Zend/zend_language_scanner.c"
+#line 6681 "Zend/zend_language_scanner.c"
 yy721:
                YYDEBUG(721, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6697,7 +6695,7 @@ yy722:
                {
        return T_FINALLY;
 }
-#line 6701 "Zend/zend_language_scanner.c"
+#line 6699 "Zend/zend_language_scanner.c"
 yy724:
                YYDEBUG(724, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6732,7 +6730,7 @@ yy726:
                {
        return T_DO;
 }
-#line 6736 "Zend/zend_language_scanner.c"
+#line 6734 "Zend/zend_language_scanner.c"
 yy728:
                YYDEBUG(728, *YYCURSOR);
                ++YYCURSOR;
@@ -6745,7 +6743,7 @@ yy728:
                {
        return T_EXIT;
 }
-#line 6749 "Zend/zend_language_scanner.c"
+#line 6747 "Zend/zend_language_scanner.c"
 yy730:
                YYDEBUG(730, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6784,7 +6782,7 @@ yy735:
                {
        return T_DEFAULT;
 }
-#line 6788 "Zend/zend_language_scanner.c"
+#line 6786 "Zend/zend_language_scanner.c"
 yy737:
                YYDEBUG(737, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6812,7 +6810,7 @@ yy740:
                {
        return T_DECLARE;
 }
-#line 6816 "Zend/zend_language_scanner.c"
+#line 6814 "Zend/zend_language_scanner.c"
 yy742:
                YYDEBUG(742, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6896,7 +6894,7 @@ yy753:
                {
        return T_EXTENDS;
 }
-#line 6900 "Zend/zend_language_scanner.c"
+#line 6898 "Zend/zend_language_scanner.c"
 yy755:
                YYDEBUG(755, *YYCURSOR);
                ++YYCURSOR;
@@ -6909,7 +6907,7 @@ yy755:
                {
        return T_EXIT;
 }
-#line 6913 "Zend/zend_language_scanner.c"
+#line 6911 "Zend/zend_language_scanner.c"
 yy757:
                YYDEBUG(757, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6927,7 +6925,7 @@ yy758:
                {
        return T_EVAL;
 }
-#line 6931 "Zend/zend_language_scanner.c"
+#line 6929 "Zend/zend_language_scanner.c"
 yy760:
                YYDEBUG(760, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7001,7 +6999,7 @@ yy769:
                {
        return T_ENDWHILE;
 }
-#line 7005 "Zend/zend_language_scanner.c"
+#line 7003 "Zend/zend_language_scanner.c"
 yy771:
                YYDEBUG(771, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7034,7 +7032,7 @@ yy775:
                {
        return T_ENDSWITCH;
 }
-#line 7038 "Zend/zend_language_scanner.c"
+#line 7036 "Zend/zend_language_scanner.c"
 yy777:
                YYDEBUG(777, *YYCURSOR);
                ++YYCURSOR;
@@ -7047,7 +7045,7 @@ yy777:
                {
        return T_ENDIF;
 }
-#line 7051 "Zend/zend_language_scanner.c"
+#line 7049 "Zend/zend_language_scanner.c"
 yy779:
                YYDEBUG(779, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7080,7 +7078,7 @@ yy781:
                {
        return T_ENDFOR;
 }
-#line 7084 "Zend/zend_language_scanner.c"
+#line 7082 "Zend/zend_language_scanner.c"
 yy782:
                YYDEBUG(782, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7108,7 +7106,7 @@ yy785:
                {
        return T_ENDFOREACH;
 }
-#line 7112 "Zend/zend_language_scanner.c"
+#line 7110 "Zend/zend_language_scanner.c"
 yy787:
                YYDEBUG(787, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7146,7 +7144,7 @@ yy792:
                {
        return T_ENDDECLARE;
 }
-#line 7150 "Zend/zend_language_scanner.c"
+#line 7148 "Zend/zend_language_scanner.c"
 yy794:
                YYDEBUG(794, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7169,7 +7167,7 @@ yy796:
                {
        return T_EMPTY;
 }
-#line 7173 "Zend/zend_language_scanner.c"
+#line 7171 "Zend/zend_language_scanner.c"
 yy798:
                YYDEBUG(798, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7202,7 +7200,7 @@ yy800:
                {
        return T_ELSE;
 }
-#line 7206 "Zend/zend_language_scanner.c"
+#line 7204 "Zend/zend_language_scanner.c"
 yy801:
                YYDEBUG(801, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7220,7 +7218,7 @@ yy802:
                {
        return T_ELSEIF;
 }
-#line 7224 "Zend/zend_language_scanner.c"
+#line 7222 "Zend/zend_language_scanner.c"
 yy804:
                YYDEBUG(804, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7238,7 +7236,7 @@ yy805:
                {
        return T_ECHO;
 }
-#line 7242 "Zend/zend_language_scanner.c"
+#line 7240 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_LOOKING_FOR_PROPERTY:
@@ -7317,7 +7315,7 @@ yy810:
        HANDLE_NEWLINES(yytext, yyleng);
        return T_WHITESPACE;
 }
-#line 7321 "Zend/zend_language_scanner.c"
+#line 7319 "Zend/zend_language_scanner.c"
 yy811:
                YYDEBUG(811, *YYCURSOR);
                ++YYCURSOR;
@@ -7331,7 +7329,7 @@ yy812:
        yy_pop_state(TSRMLS_C);
        goto restart;
 }
-#line 7335 "Zend/zend_language_scanner.c"
+#line 7333 "Zend/zend_language_scanner.c"
 yy813:
                YYDEBUG(813, *YYCURSOR);
                ++YYCURSOR;
@@ -7346,7 +7344,7 @@ yy814:
        zend_copy_value(zendlval, yytext, yyleng);
        return T_STRING;
 }
-#line 7350 "Zend/zend_language_scanner.c"
+#line 7348 "Zend/zend_language_scanner.c"
 yy815:
                YYDEBUG(815, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7371,7 +7369,7 @@ yy818:
                {
        return T_OBJECT_OPERATOR;
 }
-#line 7375 "Zend/zend_language_scanner.c"
+#line 7373 "Zend/zend_language_scanner.c"
 yy820:
                YYDEBUG(820, *YYCURSOR);
                ++YYCURSOR;
@@ -7463,7 +7461,7 @@ yy825:
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        goto restart;
 }
-#line 7467 "Zend/zend_language_scanner.c"
+#line 7465 "Zend/zend_language_scanner.c"
 yy826:
                YYDEBUG(826, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7496,7 +7494,7 @@ yy830:
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        return T_STRING_VARNAME;
 }
-#line 7500 "Zend/zend_language_scanner.c"
+#line 7498 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_NOWDOC:
@@ -7507,7 +7505,7 @@ yyc_ST_NOWDOC:
        ++YYCURSOR;
        YYDEBUG(835, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
-#line 2338 "Zend/zend_language_scanner.l"
+#line 2336 "Zend/zend_language_scanner.l"
        {
        int newline = 0;
 
@@ -7563,7 +7561,7 @@ nowdoc_scan_done:
        HANDLE_NEWLINES(yytext, yyleng - newline);
        return T_ENCAPSED_AND_WHITESPACE;
 }
-#line 7567 "Zend/zend_language_scanner.c"
+#line 7565 "Zend/zend_language_scanner.c"
 /* *********************************** */
 yyc_ST_VAR_OFFSET:
        {
@@ -7679,7 +7677,7 @@ yy839:
        }
        return T_NUM_STRING;
 }
-#line 7683 "Zend/zend_language_scanner.c"
+#line 7681 "Zend/zend_language_scanner.c"
 yy840:
                YYDEBUG(840, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7699,23 +7697,23 @@ yy841:
 yy842:
                YYDEBUG(842, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1870 "Zend/zend_language_scanner.l"
+#line 1868 "Zend/zend_language_scanner.l"
                {
        /* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */
        return yytext[0];
 }
-#line 7708 "Zend/zend_language_scanner.c"
+#line 7706 "Zend/zend_language_scanner.c"
 yy843:
                YYDEBUG(843, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(844, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1865 "Zend/zend_language_scanner.l"
+#line 1863 "Zend/zend_language_scanner.l"
                {
        yy_pop_state(TSRMLS_C);
        return ']';
 }
-#line 7719 "Zend/zend_language_scanner.c"
+#line 7717 "Zend/zend_language_scanner.c"
 yy845:
                YYDEBUG(845, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7725,14 +7723,14 @@ yy846:
                ++YYCURSOR;
                YYDEBUG(847, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1875 "Zend/zend_language_scanner.l"
+#line 1873 "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 7736 "Zend/zend_language_scanner.c"
+#line 7734 "Zend/zend_language_scanner.c"
 yy848:
                YYDEBUG(848, *YYCURSOR);
                ++YYCURSOR;
@@ -7741,18 +7739,18 @@ yy848:
 yy849:
                YYDEBUG(849, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1882 "Zend/zend_language_scanner.l"
+#line 1880 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, yytext, yyleng);
        return T_STRING;
 }
-#line 7750 "Zend/zend_language_scanner.c"
+#line 7748 "Zend/zend_language_scanner.c"
 yy850:
                YYDEBUG(850, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(851, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2395 "Zend/zend_language_scanner.l"
+#line 2393 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@ -7761,7 +7759,7 @@ yy850:
        zend_error(E_COMPILE_WARNING,"Unexpected character in input:  '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
        goto restart;
 }
-#line 7765 "Zend/zend_language_scanner.c"
+#line 7763 "Zend/zend_language_scanner.c"
 yy852:
                YYDEBUG(852, *YYCURSOR);
                ++YYCURSOR;
@@ -7797,12 +7795,12 @@ yy854:
 yy856:
                YYDEBUG(856, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1860 "Zend/zend_language_scanner.l"
+#line 1858 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        return T_VARIABLE;
 }
-#line 7806 "Zend/zend_language_scanner.c"
+#line 7804 "Zend/zend_language_scanner.c"
 yy857:
                YYDEBUG(857, *YYCURSOR);
                ++YYCURSOR;
@@ -7847,7 +7845,7 @@ yy864:
        ZVAL_STRINGL(zendlval, yytext, yyleng);
        return T_NUM_STRING;
 }
-#line 7851 "Zend/zend_language_scanner.c"
+#line 7849 "Zend/zend_language_scanner.c"
 yy865:
                YYDEBUG(865, *YYCURSOR);
                ++YYCURSOR;
@@ -7870,6 +7868,6 @@ yy867:
                goto yy864;
        }
 }
-#line 2404 "Zend/zend_language_scanner.l"
+#line 2402 "Zend/zend_language_scanner.l"
 
 }
index b5100860c1204db0e977bd7d4a40198207cb5eb5..d0ef6307ff8b751cc587d71b08e60d85686b1b65 100644 (file)
@@ -1597,10 +1597,8 @@ NEWLINE ("\r"|"\n"|"\r\n")
 <ST_IN_SCRIPTING>"__CLASS__" {
        zend_class_entry *ce = CG(active_class_entry);
        if (ce && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) {
-               /* We create a special __CLASS__ constant that is going to be resolved
-                  at run-time */
-               ZVAL_STRINGL(zendlval, "__CLASS__", sizeof("__CLASS__") - 1);
-               Z_TYPE_INFO_P(zendlval) = IS_CONSTANT_EX;
+               /* Signal that the __CLASS__ needs to be resolved at runtime */
+               ZVAL_UNDEF(zendlval);
        } else {
                if (ce && ce->name) {
                        ZVAL_STR(zendlval, STR_COPY(ce->name));