]> granicus.if.org Git - php/commitdiff
Merge branch 'coroutineDelegation' of https://github.com/bwoebi/php-src
authorBob Weinand <bobwei9@hotmail.com>
Tue, 14 Apr 2015 15:58:58 +0000 (17:58 +0200)
committerBob Weinand <bobwei9@hotmail.com>
Tue, 14 Apr 2015 15:58:58 +0000 (17:58 +0200)
15 files changed:
1  2 
Zend/tests/generators/yield_from_deep_recursion.phpt
Zend/zend_ast.h
Zend/zend_builtin_functions.c
Zend/zend_compile.c
Zend/zend_execute.c
Zend/zend_generators.c
Zend/zend_generators.h
Zend/zend_hash.h
Zend/zend_language_parser.y
Zend/zend_language_scanner.c
Zend/zend_language_scanner.l
Zend/zend_vm_def.h
Zend/zend_vm_execute.h
Zend/zend_vm_opcodes.c
Zend/zend_vm_opcodes.h

index 0000000000000000000000000000000000000000,48dafcaf957af4d307bdc307449295051b98ab06..8ef3b891299d6496190ca7dccac234ed5f5ebf36
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,26 +1,26 @@@
 -ini_set("memory_limit", "60G");
+ --TEST--
+ Deep recursion with yield from
+ --FILE--
+ <?php
 -      if ($i < 1000) {
++ini_set("memory_limit", "512M");
+ function from($i) {
+       yield $i;
+ }
+ function gen($i = 0) {
 -int(1000)
 -int(1001)
++      if ($i < 50000) {
+               yield from gen(++$i);
+       } else {
+               yield $i;
+               yield from from(++$i);
+       }
+ }
+ foreach (gen() as $v) {
+       var_dump($v);
+ }
+ ?>
+ --EXPECT--
++int(50000)
++int(50001)
diff --cc Zend/zend_ast.h
Simple merge
Simple merge
Simple merge
index 92c9d23d5ba132d13d204c675467f18218d66e54,e73bfab9fd7113518fd97524b5c8634d4227e385..a0c01cfde2eecb413c1f6e3d7c579bcb2c784ae3
@@@ -2137,19 -2022,16 +2137,29 @@@ static zend_always_inline void zend_vm_
  }
  /* }}} */
  
+ static zend_always_inline zend_generator *zend_get_running_generator(zend_execute_data *execute_data) /* {{{ */
+ {
+       /* The generator object is stored in EX(return_value) */
+       zend_generator *generator = (zend_generator *) EX(return_value);
+       /* However control may currently be delegated to another generator.
+        * That's the one we're interested in. */
+       return generator;
+ }
+ /* }}} */
 +#ifdef HAVE_GCC_GLOBAL_REGS
 +# if defined(__GNUC__) && ZEND_GCC_VERSION >= 4008 && defined(i386)
 +#  define ZEND_VM_FP_GLOBAL_REG "%esi"
 +#  define ZEND_VM_IP_GLOBAL_REG "%edi"
 +# elif defined(__GNUC__) && ZEND_GCC_VERSION >= 4008 && defined(__x86_64__)
 +#  define ZEND_VM_FP_GLOBAL_REG "%r14"
 +#  define ZEND_VM_IP_GLOBAL_REG "%r15"
 +# elif defined(__GNUC__) && ZEND_GCC_VERSION >= 4008 && defined(__powerpc64__)
 +#  define ZEND_VM_FP_GLOBAL_REG "r28"
 +#  define ZEND_VM_IP_GLOBAL_REG "r29"
 +# endif
 +#endif
 +
  #define ZEND_VM_NEXT_OPCODE() \
        CHECK_SYMBOL_TABLES() \
        ZEND_VM_INC_OPCODE(); \
index bb9f0f07d38576d5173d503449e9fd124d90ae80,dba88cd57aaaebcdc2071d5700bf00b473bd03c3..8976a0fcc4fa69479c657364304fbbb5af16e049
@@@ -265,13 -655,28 +620,29 @@@ ZEND_API void zend_generator_resume(zen
                return;
        }
  
+       generator = zend_generator_get_current(orig_generator);
+ try_again:
        if (generator->flags & ZEND_GENERATOR_CURRENTLY_RUNNING) {
 -              zend_error(E_ERROR, "Cannot resume an already running generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot resume an already running generator");
 +              return;
        }
  
+       if (!Z_ISUNDEF(generator->values)) {
+               if (zend_generator_get_next_delegated_value(generator) == SUCCESS) {
+                       return;
+               }
+               /* If there are no more deletegated values, resume the generator
+                * after the "yield from" expression. */
+       }
+       if ((orig_generator->flags & ZEND_GENERATOR_DO_INIT) && !Z_ISUNDEF(generator->value)) {
+               /* We must not advance Generator if we yield from a Generator being currently run */
+               return;
+       }
        /* Drop the AT_FIRST_YIELD flag */
-       generator->flags &= ~ZEND_GENERATOR_AT_FIRST_YIELD;
+       orig_generator->flags &= ~ZEND_GENERATOR_AT_FIRST_YIELD;
  
        {
                /* Backup executor globals */
Simple merge
Simple merge
Simple merge
index 6f1bcd2f6d6c67612efa56160e3b0e706117cf7d,74aaf892acf75f36fd3ac299219832de43441445..37bfceef76407cc82c881b2cf956794566dbebc7
@@@ -1136,7 -1139,7 +1136,7 @@@ yyc_INITIAL
  yy3:
        YYDEBUG(3, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
--#line 1770 "Zend/zend_language_scanner.l"
++#line 1774 "Zend/zend_language_scanner.l"
        {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@@ -1199,7 -1202,7 +1199,7 @@@ yy5
  yy6:
        YYDEBUG(6, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
--#line 1761 "Zend/zend_language_scanner.l"
++#line 1765 "Zend/zend_language_scanner.l"
        {
        if (CG(short_tags)) {
                BEGIN(ST_IN_SCRIPTING);
@@@ -1214,7 -1217,7 +1214,7 @@@ yy7
        ++YYCURSOR;
        YYDEBUG(8, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
--#line 1748 "Zend/zend_language_scanner.l"
++#line 1752 "Zend/zend_language_scanner.l"
        {
        BEGIN(ST_IN_SCRIPTING);
        return T_OPEN_TAG_WITH_ECHO;
@@@ -1250,7 -1253,7 +1250,7 @@@ yy13
  yy14:
        YYDEBUG(14, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
--#line 1754 "Zend/zend_language_scanner.l"
++#line 1758 "Zend/zend_language_scanner.l"
        {
        HANDLE_NEWLINE(yytext[yyleng-1]);
        BEGIN(ST_IN_SCRIPTING);
@@@ -1326,7 -1329,7 +1326,7 @@@ yyc_ST_BACKQUOTE
  yy19:
                YYDEBUG(19, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2184 "Zend/zend_language_scanner.l"
 -#line 2180 "Zend/zend_language_scanner.l"
++#line 2188 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@@ -1380,7 -1381,7 +1380,7 @@@ yy21
                ++YYCURSOR;
                YYDEBUG(22, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2126 "Zend/zend_language_scanner.l"
 -#line 2124 "Zend/zend_language_scanner.l"
++#line 2130 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_IN_SCRIPTING);
        return '`';
@@@ -1395,7 -1396,7 +1395,7 @@@ yy24
                ++YYCURSOR;
                YYDEBUG(25, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2113 "Zend/zend_language_scanner.l"
 -#line 2111 "Zend/zend_language_scanner.l"
++#line 2117 "Zend/zend_language_scanner.l"
                {
        Z_LVAL_P(zendlval) = (zend_long) '{';
        yy_push_state(ST_IN_SCRIPTING);
@@@ -1418,7 -1419,7 +1418,7 @@@ yy26
  yy28:
                YYDEBUG(28, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1835 "Zend/zend_language_scanner.l"
++#line 1839 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        return T_VARIABLE;
@@@ -1429,7 -1430,7 +1429,7 @@@ yy29
                ++YYCURSOR;
                YYDEBUG(30, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1556 "Zend/zend_language_scanner.l"
 -#line 1559 "Zend/zend_language_scanner.l"
++#line 1560 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_LOOKING_FOR_VARNAME);
        return T_DOLLAR_OPEN_CURLY_BRACES;
@@@ -1448,7 -1449,7 +1448,7 @@@ yy33
                ++YYCURSOR;
                YYDEBUG(34, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1828 "Zend/zend_language_scanner.l"
++#line 1832 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET);
@@@ -1473,7 -1474,7 +1473,7 @@@ yy36
                ++YYCURSOR;
                YYDEBUG(37, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1819 "Zend/zend_language_scanner.l"
++#line 1823 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY);
@@@ -1548,7 -1549,7 +1548,7 @@@ yy40
  yy41:
                YYDEBUG(41, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2132 "Zend/zend_language_scanner.l"
 -#line 2130 "Zend/zend_language_scanner.l"
++#line 2136 "Zend/zend_language_scanner.l"
                {
        if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) {
                YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1;
@@@ -1610,7 -1609,7 +1610,7 @@@ yy43
                ++YYCURSOR;
                YYDEBUG(44, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2121 "Zend/zend_language_scanner.l"
 -#line 2119 "Zend/zend_language_scanner.l"
++#line 2125 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_IN_SCRIPTING);
        return '"';
@@@ -1625,7 -1624,7 +1625,7 @@@ yy46
                ++YYCURSOR;
                YYDEBUG(47, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2113 "Zend/zend_language_scanner.l"
 -#line 2111 "Zend/zend_language_scanner.l"
++#line 2117 "Zend/zend_language_scanner.l"
                {
        Z_LVAL_P(zendlval) = (zend_long) '{';
        yy_push_state(ST_IN_SCRIPTING);
@@@ -1648,7 -1647,7 +1648,7 @@@ yy48
  yy50:
                YYDEBUG(50, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1835 "Zend/zend_language_scanner.l"
++#line 1839 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        return T_VARIABLE;
@@@ -1659,7 -1658,7 +1659,7 @@@ yy51
                ++YYCURSOR;
                YYDEBUG(52, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1556 "Zend/zend_language_scanner.l"
 -#line 1559 "Zend/zend_language_scanner.l"
++#line 1560 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_LOOKING_FOR_VARNAME);
        return T_DOLLAR_OPEN_CURLY_BRACES;
@@@ -1678,7 -1677,7 +1678,7 @@@ yy55
                ++YYCURSOR;
                YYDEBUG(56, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1828 "Zend/zend_language_scanner.l"
++#line 1832 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET);
@@@ -1703,7 -1702,7 +1703,7 @@@ yy58
                ++YYCURSOR;
                YYDEBUG(59, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1819 "Zend/zend_language_scanner.l"
++#line 1823 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY);
@@@ -1721,7 -1720,7 +1721,7 @@@ yyc_ST_END_HEREDOC
        ++YYCURSOR;
        YYDEBUG(63, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
- #line 2099 "Zend/zend_language_scanner.l"
 -#line 2097 "Zend/zend_language_scanner.l"
++#line 2103 "Zend/zend_language_scanner.l"
        {
        zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack));
  
@@@ -1796,7 -1795,7 +1796,7 @@@ yy66
  yy67:
                YYDEBUG(67, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2228 "Zend/zend_language_scanner.l"
 -#line 2222 "Zend/zend_language_scanner.l"
++#line 2232 "Zend/zend_language_scanner.l"
                {
        int newline = 0;
  
@@@ -1886,7 -1883,7 +1886,7 @@@ yy70
                ++YYCURSOR;
                YYDEBUG(71, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2113 "Zend/zend_language_scanner.l"
 -#line 2111 "Zend/zend_language_scanner.l"
++#line 2117 "Zend/zend_language_scanner.l"
                {
        Z_LVAL_P(zendlval) = (zend_long) '{';
        yy_push_state(ST_IN_SCRIPTING);
@@@ -1909,7 -1906,7 +1909,7 @@@ yy72
  yy74:
                YYDEBUG(74, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1835 "Zend/zend_language_scanner.l"
++#line 1839 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        return T_VARIABLE;
@@@ -1920,7 -1917,7 +1920,7 @@@ yy75
                ++YYCURSOR;
                YYDEBUG(76, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1556 "Zend/zend_language_scanner.l"
 -#line 1559 "Zend/zend_language_scanner.l"
++#line 1560 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_LOOKING_FOR_VARNAME);
        return T_DOLLAR_OPEN_CURLY_BRACES;
@@@ -1939,7 -1936,7 +1939,7 @@@ yy79
                ++YYCURSOR;
                YYDEBUG(80, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1828 "Zend/zend_language_scanner.l"
++#line 1832 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET);
@@@ -1964,7 -1961,7 +1964,7 @@@ yy82
                ++YYCURSOR;
                YYDEBUG(83, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1819 "Zend/zend_language_scanner.l"
++#line 1823 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY);
@@@ -2138,23 -2135,23 +2138,23 @@@ yy86
                YYDEBUG(-1, yych);
                switch ((yych = *YYCURSOR)) {
                case 'C':
-               case 'c':       goto yy697;
 -              case 'c':       goto yy702;
++              case 'c':       goto yy704;
                case 'L':
-               case 'l':       goto yy698;
 -              case 'l':       goto yy703;
++              case 'l':       goto yy705;
                case 'M':
-               case 'm':       goto yy699;
 -              case 'm':       goto yy704;
++              case 'm':       goto yy706;
                case 'N':
-               case 'n':       goto yy700;
 -              case 'n':       goto yy705;
++              case 'n':       goto yy707;
                case 'V':
-               case 'v':       goto yy701;
 -              case 'v':       goto yy706;
++              case 'v':       goto yy708;
                case 'X':
-               case 'x':       goto yy702;
 -              case 'x':       goto yy707;
++              case 'x':       goto yy709;
                default:        goto yy150;
                }
  yy87:
                YYDEBUG(87, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1858 "Zend/zend_language_scanner.l"
++#line 1862 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, yytext, yyleng);
        return T_STRING;
@@@ -2165,20 -2162,20 +2165,20 @@@ yy88
                yych = *++YYCURSOR;
                if (yych <= 'O') {
                        if (yych <= 'H') {
-                               if (yych == 'E') goto yy679;
 -                              if (yych == 'E') goto yy684;
++                              if (yych == 'E') goto yy686;
                                goto yy150;
                        } else {
-                               if (yych <= 'I') goto yy680;
 -                              if (yych <= 'I') goto yy685;
++                              if (yych <= 'I') goto yy687;
                                if (yych <= 'N') goto yy150;
-                               goto yy681;
 -                              goto yy686;
++                              goto yy688;
                        }
                } else {
                        if (yych <= 'h') {
-                               if (yych == 'e') goto yy679;
 -                              if (yych == 'e') goto yy684;
++                              if (yych == 'e') goto yy686;
                                goto yy150;
                        } else {
-                               if (yych <= 'i') goto yy680;
-                               if (yych == 'o') goto yy681;
 -                              if (yych <= 'i') goto yy685;
 -                              if (yych == 'o') goto yy686;
++                              if (yych <= 'i') goto yy687;
++                              if (yych == 'o') goto yy688;
                                goto yy150;
                        }
                }
@@@ -2187,20 -2184,20 +2187,20 @@@ yy89
                yych = *++YYCURSOR;
                if (yych <= 'U') {
                        if (yych <= 'N') {
-                               if (yych == 'I') goto yy655;
 -                              if (yych == 'I') goto yy660;
++                              if (yych == 'I') goto yy662;
                                goto yy150;
                        } else {
-                               if (yych <= 'O') goto yy656;
 -                              if (yych <= 'O') goto yy661;
++                              if (yych <= 'O') goto yy663;
                                if (yych <= 'T') goto yy150;
-                               goto yy657;
 -                              goto yy662;
++                              goto yy664;
                        }
                } else {
                        if (yych <= 'n') {
-                               if (yych == 'i') goto yy655;
 -                              if (yych == 'i') goto yy660;
++                              if (yych == 'i') goto yy662;
                                goto yy150;
                        } else {
-                               if (yych <= 'o') goto yy656;
-                               if (yych == 'u') goto yy657;
 -                              if (yych <= 'o') goto yy661;
 -                              if (yych == 'u') goto yy662;
++                              if (yych <= 'o') goto yy663;
++                              if (yych == 'u') goto yy664;
                                goto yy150;
                        }
                }
@@@ -2209,28 -2206,28 +2209,28 @@@ yy90
                yych = *++YYCURSOR;
                if (yych <= 'O') {
                        if (yych <= 'K') {
-                               if (yych == 'A') goto yy620;
 -                              if (yych == 'A') goto yy625;
++                              if (yych == 'A') goto yy627;
                                goto yy150;
                        } else {
-                               if (yych <= 'L') goto yy621;
 -                              if (yych <= 'L') goto yy626;
++                              if (yych <= 'L') goto yy628;
                                if (yych <= 'N') goto yy150;
-                               goto yy622;
 -                              goto yy627;
++                              goto yy629;
                        }
                } else {
                        if (yych <= 'k') {
-                               if (yych == 'a') goto yy620;
 -                              if (yych == 'a') goto yy625;
++                              if (yych == 'a') goto yy627;
                                goto yy150;
                        } else {
-                               if (yych <= 'l') goto yy621;
-                               if (yych == 'o') goto yy622;
 -                              if (yych <= 'l') goto yy626;
 -                              if (yych == 'o') goto yy627;
++                              if (yych <= 'l') goto yy628;
++                              if (yych == 'o') goto yy629;
                                goto yy150;
                        }
                }
  yy91:
                YYDEBUG(91, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy602;
-               if (yych == 'e') goto yy602;
 -              if (yych == 'E') goto yy607;
 -              if (yych == 'e') goto yy607;
++              if (yych == 'E') goto yy609;
++              if (yych == 'e') goto yy609;
                goto yy150;
  yy92:
                YYDEBUG(92, *YYCURSOR);
@@@ -2391,7 -2388,7 +2391,7 @@@ yy101
  yy102:
                YYDEBUG(102, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1545 "Zend/zend_language_scanner.l"
 -#line 1548 "Zend/zend_language_scanner.l"
++#line 1549 "Zend/zend_language_scanner.l"
                {
        return yytext[0];
  }
@@@ -2404,7 -2401,7 +2404,7 @@@ yy103
  yy104:
                YYDEBUG(104, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1260 "Zend/zend_language_scanner.l"
 -#line 1267 "Zend/zend_language_scanner.l"
++#line 1264 "Zend/zend_language_scanner.l"
                {
        HANDLE_NEWLINES(yytext, yyleng);
        return T_WHITESPACE;
@@@ -2420,7 -2417,7 +2420,7 @@@ yy106
                ++YYCURSOR;
                YYDEBUG(107, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1285 "Zend/zend_language_scanner.l"
 -#line 1292 "Zend/zend_language_scanner.l"
++#line 1289 "Zend/zend_language_scanner.l"
                {
        return T_NS_SEPARATOR;
  }
@@@ -2653,7 -2650,7 +2653,7 @@@ yy131
                ++YYCURSOR;
                YYDEBUG(132, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1550 "Zend/zend_language_scanner.l"
 -#line 1553 "Zend/zend_language_scanner.l"
++#line 1554 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_IN_SCRIPTING);
        return '{';
@@@ -2664,7 -2661,7 +2664,7 @@@ yy133
                ++YYCURSOR;
                YYDEBUG(134, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1562 "Zend/zend_language_scanner.l"
 -#line 1565 "Zend/zend_language_scanner.l"
++#line 1566 "Zend/zend_language_scanner.l"
                {
        RESET_DOC_COMMENT();
        if (!zend_stack_is_empty(&SCNG(state_stack))) {
@@@ -2700,7 -2697,7 +2700,7 @@@ yy135
  yy136:
                YYDEBUG(136, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1615 "Zend/zend_language_scanner.l"
 -#line 1618 "Zend/zend_language_scanner.l"
++#line 1619 "Zend/zend_language_scanner.l"
                {
        char *end;
        if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */
@@@ -2770,7 -2764,7 +2770,7 @@@ yy139
  yy140:
                YYDEBUG(140, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1864 "Zend/zend_language_scanner.l"
++#line 1868 "Zend/zend_language_scanner.l"
                {
        while (YYCURSOR < YYLIMIT) {
                switch (*YYCURSOR++) {
@@@ -2806,7 -2800,7 +2806,7 @@@ yy141
  yy142:
                YYDEBUG(142, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1932 "Zend/zend_language_scanner.l"
++#line 1936 "Zend/zend_language_scanner.l"
                {
        register char *s, *t;
        char *end;
@@@ -2881,7 -2875,7 +2881,7 @@@ yy143
  yy144:
                YYDEBUG(144, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 2001 "Zend/zend_language_scanner.l"
++#line 2005 "Zend/zend_language_scanner.l"
                {
        int bprefix = (yytext[0] != '"') ? 1 : 0;
  
@@@ -2930,7 -2922,7 +2930,7 @@@ yy145
                ++YYCURSOR;
                YYDEBUG(146, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2093 "Zend/zend_language_scanner.l"
 -#line 2091 "Zend/zend_language_scanner.l"
++#line 2097 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_BACKQUOTE);
        return '`';
@@@ -2941,7 -2933,7 +2941,7 @@@ yy147
                ++YYCURSOR;
                YYDEBUG(148, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2361 "Zend/zend_language_scanner.l"
 -#line 2353 "Zend/zend_language_scanner.l"
++#line 2365 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@@ -2977,7 -2969,7 +2977,7 @@@ yy151
  yy153:
                YYDEBUG(153, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1706 "Zend/zend_language_scanner.l"
++#line 1710 "Zend/zend_language_scanner.l"
                {
        const char *end;
  
@@@ -3026,17 -3018,21 +3026,21 @@@ yy157
                                        goto yy102;
                                }
                        } else {
-                               goto yy136;
+                               if (yyaccept <= 2) {
+                                       goto yy136;
+                               } else {
+                                       goto yy153;
+                               }
                        }
                } else {
-                       if (yyaccept <= 4) {
-                               if (yyaccept <= 3) {
-                                       goto yy153;
-                               } else {
+                       if (yyaccept <= 5) {
+                               if (yyaccept <= 4) {
                                        goto yy190;
+                               } else {
+                                       goto yy210;
                                }
                        } else {
-                               goto yy210;
 -                              goto yy599;
++                              goto yy601;
                        }
                }
  yy158:
@@@ -3078,7 -3074,7 +3082,7 @@@ yy163
                }
                YYDEBUG(165, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1587 "Zend/zend_language_scanner.l"
 -#line 1590 "Zend/zend_language_scanner.l"
++#line 1591 "Zend/zend_language_scanner.l"
                {
        char *bin = yytext + 2; /* Skip "0b" */
        int len = yyleng - 2;
                return T_DNUMBER;
        }
  }
- #line 3110 "Zend/zend_language_scanner.c"
 -#line 3106 "Zend/zend_language_scanner.c"
++#line 3114 "Zend/zend_language_scanner.c"
  yy166:
                YYDEBUG(166, *YYCURSOR);
                ++YYCURSOR;
                }
                YYDEBUG(168, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1657 "Zend/zend_language_scanner.l"
++#line 1661 "Zend/zend_language_scanner.l"
                {
        char *hex = yytext + 2; /* Skip "0x" */
        int len = yyleng - 2;
                return T_DNUMBER;
        }
  }
- #line 3150 "Zend/zend_language_scanner.c"
 -#line 3146 "Zend/zend_language_scanner.c"
++#line 3154 "Zend/zend_language_scanner.c"
  yy169:
                YYDEBUG(169, *YYCURSOR);
                ++YYCURSOR;
  yy171:
                YYDEBUG(171, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1835 "Zend/zend_language_scanner.l"
++#line 1839 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        return T_VARIABLE;
  }
- #line 3180 "Zend/zend_language_scanner.c"
 -#line 3176 "Zend/zend_language_scanner.c"
++#line 3184 "Zend/zend_language_scanner.c"
  yy172:
                YYDEBUG(172, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -3190,11 -3186,11 +3194,11 @@@ yy173
                }
                YYDEBUG(174, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1533 "Zend/zend_language_scanner.l"
 -#line 1536 "Zend/zend_language_scanner.l"
++#line 1537 "Zend/zend_language_scanner.l"
                {
        return T_LOGICAL_XOR;
  }
- #line 3198 "Zend/zend_language_scanner.c"
 -#line 3194 "Zend/zend_language_scanner.c"
++#line 3202 "Zend/zend_language_scanner.c"
  yy175:
                YYDEBUG(175, *YYCURSOR);
                ++YYCURSOR;
                }
                YYDEBUG(176, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1525 "Zend/zend_language_scanner.l"
 -#line 1528 "Zend/zend_language_scanner.l"
++#line 1529 "Zend/zend_language_scanner.l"
                {
        return T_LOGICAL_OR;
  }
- #line 3211 "Zend/zend_language_scanner.c"
 -#line 3207 "Zend/zend_language_scanner.c"
++#line 3215 "Zend/zend_language_scanner.c"
  yy177:
                YYDEBUG(177, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(178, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1513 "Zend/zend_language_scanner.l"
 -#line 1516 "Zend/zend_language_scanner.l"
++#line 1517 "Zend/zend_language_scanner.l"
                {
        return T_XOR_EQUAL;
  }
- #line 3221 "Zend/zend_language_scanner.c"
 -#line 3217 "Zend/zend_language_scanner.c"
++#line 3225 "Zend/zend_language_scanner.c"
  yy179:
                YYDEBUG(179, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(180, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1517 "Zend/zend_language_scanner.l"
 -#line 1520 "Zend/zend_language_scanner.l"
++#line 1521 "Zend/zend_language_scanner.l"
                {
        return T_BOOLEAN_OR;
  }
- #line 3231 "Zend/zend_language_scanner.c"
 -#line 3227 "Zend/zend_language_scanner.c"
++#line 3235 "Zend/zend_language_scanner.c"
  yy181:
                YYDEBUG(181, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(182, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1509 "Zend/zend_language_scanner.l"
 -#line 1512 "Zend/zend_language_scanner.l"
++#line 1513 "Zend/zend_language_scanner.l"
                {
        return T_OR_EQUAL;
  }
- #line 3241 "Zend/zend_language_scanner.c"
 -#line 3237 "Zend/zend_language_scanner.c"
++#line 3245 "Zend/zend_language_scanner.c"
  yy183:
                YYDEBUG(183, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(184, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1521 "Zend/zend_language_scanner.l"
 -#line 1524 "Zend/zend_language_scanner.l"
++#line 1525 "Zend/zend_language_scanner.l"
                {
        return T_BOOLEAN_AND;
  }
- #line 3251 "Zend/zend_language_scanner.c"
 -#line 3247 "Zend/zend_language_scanner.c"
++#line 3255 "Zend/zend_language_scanner.c"
  yy185:
                YYDEBUG(185, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(186, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1505 "Zend/zend_language_scanner.l"
 -#line 1508 "Zend/zend_language_scanner.l"
++#line 1509 "Zend/zend_language_scanner.l"
                {
        return T_AND_EQUAL;
  }
- #line 3261 "Zend/zend_language_scanner.c"
 -#line 3257 "Zend/zend_language_scanner.c"
++#line 3265 "Zend/zend_language_scanner.c"
  yy187:
                YYDEBUG(187, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(188, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1493 "Zend/zend_language_scanner.l"
 -#line 1496 "Zend/zend_language_scanner.l"
++#line 1497 "Zend/zend_language_scanner.l"
                {
        return T_MOD_EQUAL;
  }
- #line 3271 "Zend/zend_language_scanner.c"
 -#line 3267 "Zend/zend_language_scanner.c"
++#line 3275 "Zend/zend_language_scanner.c"
  yy189:
                YYDEBUG(189, *YYCURSOR);
                yyaccept = 4;
  yy190:
                YYDEBUG(190, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1893 "Zend/zend_language_scanner.l"
++#line 1897 "Zend/zend_language_scanner.l"
                {
        int doc_com;
  
  
        return T_COMMENT;
  }
- #line 3313 "Zend/zend_language_scanner.c"
 -#line 3309 "Zend/zend_language_scanner.c"
++#line 3317 "Zend/zend_language_scanner.c"
  yy191:
                YYDEBUG(191, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -3319,11 -3315,11 +3323,11 @@@ yy192
                ++YYCURSOR;
                YYDEBUG(193, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1485 "Zend/zend_language_scanner.l"
 -#line 1488 "Zend/zend_language_scanner.l"
++#line 1489 "Zend/zend_language_scanner.l"
                {
        return T_DIV_EQUAL;
  }
- #line 3327 "Zend/zend_language_scanner.c"
 -#line 3323 "Zend/zend_language_scanner.c"
++#line 3331 "Zend/zend_language_scanner.c"
  yy194:
                YYDEBUG(194, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -3347,62 -3343,62 +3351,62 @@@ yy197
                if ((yych = *YYCURSOR) == '=') goto yy201;
                YYDEBUG(198, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1477 "Zend/zend_language_scanner.l"
 -#line 1480 "Zend/zend_language_scanner.l"
++#line 1481 "Zend/zend_language_scanner.l"
                {
        return T_POW;
  }
- #line 3355 "Zend/zend_language_scanner.c"
 -#line 3351 "Zend/zend_language_scanner.c"
++#line 3359 "Zend/zend_language_scanner.c"
  yy199:
                YYDEBUG(199, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(200, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1473 "Zend/zend_language_scanner.l"
 -#line 1476 "Zend/zend_language_scanner.l"
++#line 1477 "Zend/zend_language_scanner.l"
                {
        return T_MUL_EQUAL;
  }
- #line 3365 "Zend/zend_language_scanner.c"
 -#line 3361 "Zend/zend_language_scanner.c"
++#line 3369 "Zend/zend_language_scanner.c"
  yy201:
                YYDEBUG(201, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(202, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1481 "Zend/zend_language_scanner.l"
 -#line 1484 "Zend/zend_language_scanner.l"
++#line 1485 "Zend/zend_language_scanner.l"
                {
        return T_POW_EQUAL;
  }
- #line 3375 "Zend/zend_language_scanner.c"
 -#line 3371 "Zend/zend_language_scanner.c"
++#line 3379 "Zend/zend_language_scanner.c"
  yy203:
                YYDEBUG(203, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) == '=') goto yy207;
                YYDEBUG(204, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1541 "Zend/zend_language_scanner.l"
 -#line 1544 "Zend/zend_language_scanner.l"
++#line 1545 "Zend/zend_language_scanner.l"
                {
        return T_SR;
  }
- #line 3386 "Zend/zend_language_scanner.c"
 -#line 3382 "Zend/zend_language_scanner.c"
++#line 3390 "Zend/zend_language_scanner.c"
  yy205:
                YYDEBUG(205, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(206, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1461 "Zend/zend_language_scanner.l"
 -#line 1464 "Zend/zend_language_scanner.l"
++#line 1465 "Zend/zend_language_scanner.l"
                {
        return T_IS_GREATER_OR_EQUAL;
  }
- #line 3396 "Zend/zend_language_scanner.c"
 -#line 3392 "Zend/zend_language_scanner.c"
++#line 3400 "Zend/zend_language_scanner.c"
  yy207:
                YYDEBUG(207, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(208, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1501 "Zend/zend_language_scanner.l"
 -#line 1504 "Zend/zend_language_scanner.l"
++#line 1505 "Zend/zend_language_scanner.l"
                {
        return T_SR_EQUAL;
  }
- #line 3406 "Zend/zend_language_scanner.c"
 -#line 3402 "Zend/zend_language_scanner.c"
++#line 3410 "Zend/zend_language_scanner.c"
  yy209:
                YYDEBUG(209, *YYCURSOR);
                yyaccept = 5;
  yy210:
                YYDEBUG(210, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1537 "Zend/zend_language_scanner.l"
 -#line 1540 "Zend/zend_language_scanner.l"
++#line 1541 "Zend/zend_language_scanner.l"
                {
        return T_SL;
  }
- #line 3421 "Zend/zend_language_scanner.c"
 -#line 3417 "Zend/zend_language_scanner.c"
++#line 3425 "Zend/zend_language_scanner.c"
  yy211:
                YYDEBUG(211, *YYCURSOR);
                ++YYCURSOR;
 +              if ((yych = *YYCURSOR) == '>') goto yy215;
                YYDEBUG(212, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1457 "Zend/zend_language_scanner.l"
 -#line 1460 "Zend/zend_language_scanner.l"
++#line 1461 "Zend/zend_language_scanner.l"
                {
        return T_IS_SMALLER_OR_EQUAL;
  }
- #line 3432 "Zend/zend_language_scanner.c"
 -#line 3427 "Zend/zend_language_scanner.c"
++#line 3436 "Zend/zend_language_scanner.c"
  yy213:
                YYDEBUG(213, *YYCURSOR);
                ++YYCURSOR;
  yy214:
                YYDEBUG(214, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1449 "Zend/zend_language_scanner.l"
 -#line 1456 "Zend/zend_language_scanner.l"
++#line 1453 "Zend/zend_language_scanner.l"
                {
        return T_IS_NOT_EQUAL;
  }
- #line 3443 "Zend/zend_language_scanner.c"
 -#line 3438 "Zend/zend_language_scanner.c"
++#line 3447 "Zend/zend_language_scanner.c"
  yy215:
                YYDEBUG(215, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(216, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1453 "Zend/zend_language_scanner.l"
 -#line 1500 "Zend/zend_language_scanner.l"
++#line 1457 "Zend/zend_language_scanner.l"
                {
 -      return T_SL_EQUAL;
 +      return T_SPACESHIP;
  }
- #line 3453 "Zend/zend_language_scanner.c"
 -#line 3448 "Zend/zend_language_scanner.c"
++#line 3457 "Zend/zend_language_scanner.c"
  yy217:
                YYDEBUG(217, *YYCURSOR);
                ++YYCURSOR;
- #line 1497 "Zend/zend_language_scanner.l"
 +              YYDEBUG(218, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 3463 "Zend/zend_language_scanner.c"
++#line 1501 "Zend/zend_language_scanner.l"
 +              {
 +      return T_SL_EQUAL;
 +}
++#line 3467 "Zend/zend_language_scanner.c"
 +yy219:
 +              YYDEBUG(219, *YYCURSOR);
 +              ++YYCURSOR;
                YYFILL(2);
                yych = *YYCURSOR;
 -              YYDEBUG(218, *YYCURSOR);
 +              YYDEBUG(220, *YYCURSOR);
                if (yybm[0+yych] & 128) {
 -                      goto yy217;
 +                      goto yy219;
                }
                if (yych <= 'Z') {
                        if (yych <= '&') {
@@@ -3544,27 -3529,27 +3548,27 @@@ yy226
                        }
                } else {
                        if (yych <= '`') {
 -                              if (yych == '_') goto yy223;
 +                              if (yych == '_') goto yy225;
                                goto yy157;
                        } else {
 -                              if (yych <= 'z') goto yy223;
 +                              if (yych <= 'z') goto yy225;
                                if (yych <= '~') goto yy157;
 -                              goto yy223;
 +                              goto yy225;
                        }
                }
 -yy225:
 -              YYDEBUG(225, *YYCURSOR);
 +yy227:
 +              YYDEBUG(227, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == '\n') goto yy226;
 -              if (yych == '\r') goto yy228;
 +              if (yych == '\n') goto yy228;
 +              if (yych == '\r') goto yy230;
                goto yy157;
 -yy226:
 -              YYDEBUG(226, *YYCURSOR);
 +yy228:
 +              YYDEBUG(228, *YYCURSOR);
                ++YYCURSOR;
 -yy227:
 -              YYDEBUG(227, *YYCURSOR);
 +yy229:
 +              YYDEBUG(229, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2045 "Zend/zend_language_scanner.l"
 -#line 2043 "Zend/zend_language_scanner.l"
++#line 2049 "Zend/zend_language_scanner.l"
                {
        char *s;
        int bprefix = (yytext[0] != '<') ? 1 : 0;
  
        return T_START_HEREDOC;
  }
- #line 3615 "Zend/zend_language_scanner.c"
 -#line 3600 "Zend/zend_language_scanner.c"
 -yy228:
 -              YYDEBUG(228, *YYCURSOR);
++#line 3619 "Zend/zend_language_scanner.c"
 +yy230:
 +              YYDEBUG(230, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == '\n') goto yy226;
 -              goto yy227;
 -yy229:
 -              YYDEBUG(229, *YYCURSOR);
 +              if (yych == '\n') goto yy228;
 +              goto yy229;
 +yy231:
 +              YYDEBUG(231, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(3);
                yych = *YYCURSOR;
@@@ -3651,87 -3646,77 +3655,87 @@@ yy233
                ++YYCURSOR;
                YYDEBUG(235, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1441 "Zend/zend_language_scanner.l"
 -#line 1468 "Zend/zend_language_scanner.l"
++#line 1445 "Zend/zend_language_scanner.l"
                {
 -      return T_PLUS_EQUAL;
 +      return T_IS_NOT_IDENTICAL;
  }
- #line 3659 "Zend/zend_language_scanner.c"
 -#line 3654 "Zend/zend_language_scanner.c"
++#line 3663 "Zend/zend_language_scanner.c"
  yy236:
                YYDEBUG(236, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(237, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1465 "Zend/zend_language_scanner.l"
 -#line 1436 "Zend/zend_language_scanner.l"
++#line 1469 "Zend/zend_language_scanner.l"
                {
 -      return T_INC;
 +      return T_PLUS_EQUAL;
  }
- #line 3669 "Zend/zend_language_scanner.c"
 -#line 3664 "Zend/zend_language_scanner.c"
++#line 3673 "Zend/zend_language_scanner.c"
  yy238:
                YYDEBUG(238, *YYCURSOR);
- #line 1429 "Zend/zend_language_scanner.l"
 +              ++YYCURSOR;
 +              YYDEBUG(239, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 3679 "Zend/zend_language_scanner.c"
++#line 1433 "Zend/zend_language_scanner.l"
 +              {
 +      return T_INC;
 +}
++#line 3683 "Zend/zend_language_scanner.c"
 +yy240:
 +              YYDEBUG(240, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'S') goto yy239;
 +              if (yych == 'S') goto yy241;
                if (yych != 's') goto yy150;
 -yy239:
 -              YYDEBUG(239, *YYCURSOR);
 +yy241:
 +              YYDEBUG(241, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'T') goto yy240;
 +              if (yych == 'T') goto yy242;
                if (yych != 't') goto yy150;
 -yy240:
 -              YYDEBUG(240, *YYCURSOR);
 +yy242:
 +              YYDEBUG(242, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(241, *YYCURSOR);
 -              yyleng = YYCURSOR - SCNG(yy_text);
 -#line 1424 "Zend/zend_language_scanner.l"
 -              {
 -      return T_LIST;
 -}
 -#line 3687 "Zend/zend_language_scanner.c"
 -yy242:
 -              YYDEBUG(242, *YYCURSOR);
 -              ++YYCURSOR;
 -              if ((yych = *YYCURSOR) == '=') goto yy246;
                YYDEBUG(243, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1417 "Zend/zend_language_scanner.l"
 -#line 1452 "Zend/zend_language_scanner.l"
++#line 1421 "Zend/zend_language_scanner.l"
                {
 -      return T_IS_EQUAL;
 +      return T_LIST;
  }
- #line 3702 "Zend/zend_language_scanner.c"
 -#line 3698 "Zend/zend_language_scanner.c"
++#line 3706 "Zend/zend_language_scanner.c"
  yy244:
                YYDEBUG(244, *YYCURSOR);
                ++YYCURSOR;
 +              if ((yych = *YYCURSOR) == '=') goto yy248;
                YYDEBUG(245, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1445 "Zend/zend_language_scanner.l"
 -#line 1420 "Zend/zend_language_scanner.l"
++#line 1449 "Zend/zend_language_scanner.l"
                {
 -      return T_DOUBLE_ARROW;
 +      return T_IS_EQUAL;
  }
- #line 3713 "Zend/zend_language_scanner.c"
 -#line 3708 "Zend/zend_language_scanner.c"
++#line 3717 "Zend/zend_language_scanner.c"
  yy246:
                YYDEBUG(246, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(247, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1413 "Zend/zend_language_scanner.l"
 -#line 1444 "Zend/zend_language_scanner.l"
++#line 1417 "Zend/zend_language_scanner.l"
                {
 -      return T_IS_IDENTICAL;
 +      return T_DOUBLE_ARROW;
  }
- #line 3723 "Zend/zend_language_scanner.c"
 -#line 3718 "Zend/zend_language_scanner.c"
++#line 3727 "Zend/zend_language_scanner.c"
  yy248:
                YYDEBUG(248, *YYCURSOR);
- #line 1437 "Zend/zend_language_scanner.l"
 +              ++YYCURSOR;
 +              YYDEBUG(249, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 3733 "Zend/zend_language_scanner.c"
++#line 1441 "Zend/zend_language_scanner.l"
 +              {
 +      return T_IS_IDENTICAL;
 +}
++#line 3737 "Zend/zend_language_scanner.c"
 +yy250:
 +              YYDEBUG(250, *YYCURSOR);
                yych = *++YYCURSOR;
                YYDEBUG(-1, yych);
                switch (yych) {
@@@ -3857,66 -3842,76 +3861,66 @@@ yy266
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(267, *YYCURSOR);
 +              YYDEBUG(269, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1743 "Zend/zend_language_scanner.l"
++#line 1747 "Zend/zend_language_scanner.l"
                {
        return T_NS_C;
  }
- #line 3867 "Zend/zend_language_scanner.c"
 -#line 3852 "Zend/zend_language_scanner.c"
 -yy268:
 -              YYDEBUG(268, *YYCURSOR);
++#line 3871 "Zend/zend_language_scanner.c"
 +yy270:
 +              YYDEBUG(270, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'R') goto yy269;
 +              if (yych == 'R') goto yy271;
                if (yych != 'r') goto yy150;
 -yy269:
 -              YYDEBUG(269, *YYCURSOR);
 +yy271:
 +              YYDEBUG(271, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy150;
 -              YYDEBUG(270, *YYCURSOR);
 +              YYDEBUG(272, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy150;
 -              YYDEBUG(271, *YYCURSOR);
 +              YYDEBUG(273, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(272, *YYCURSOR);
 +              YYDEBUG(274, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1739 "Zend/zend_language_scanner.l"
++#line 1743 "Zend/zend_language_scanner.l"
                {
        return T_DIR;
  }
- #line 3891 "Zend/zend_language_scanner.c"
 -#line 3876 "Zend/zend_language_scanner.c"
 -yy273:
 -              YYDEBUG(273, *YYCURSOR);
++#line 3895 "Zend/zend_language_scanner.c"
 +yy275:
 +              YYDEBUG(275, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'N') goto yy274;
 +              if (yych == 'N') goto yy276;
                if (yych != 'n') goto yy150;
 -yy274:
 -              YYDEBUG(274, *YYCURSOR);
 +yy276:
 +              YYDEBUG(276, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'E') goto yy275;
 +              if (yych == 'E') goto yy277;
                if (yych != 'e') goto yy150;
 -yy275:
 -              YYDEBUG(275, *YYCURSOR);
 +yy277:
 +              YYDEBUG(277, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy150;
 -              YYDEBUG(276, *YYCURSOR);
 +              YYDEBUG(278, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy150;
 -              YYDEBUG(277, *YYCURSOR);
 +              YYDEBUG(279, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(278, *YYCURSOR);
 +              YYDEBUG(280, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1731 "Zend/zend_language_scanner.l"
++#line 1735 "Zend/zend_language_scanner.l"
                {
        return T_LINE;
  }
- #line 3920 "Zend/zend_language_scanner.c"
 -#line 3905 "Zend/zend_language_scanner.c"
 -yy279:
 -              YYDEBUG(279, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'T') goto yy280;
 -              if (yych != 't') goto yy150;
 -yy280:
 -              YYDEBUG(280, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'H') goto yy281;
 -              if (yych != 'h') goto yy150;
++#line 3924 "Zend/zend_language_scanner.c"
  yy281:
                YYDEBUG(281, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -3949,19 -3934,29 +3953,19 @@@ yy285
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(286, *YYCURSOR);
 +              YYDEBUG(288, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1727 "Zend/zend_language_scanner.l"
++#line 1731 "Zend/zend_language_scanner.l"
                {
        return T_METHOD_C;
  }
- #line 3959 "Zend/zend_language_scanner.c"
 -#line 3944 "Zend/zend_language_scanner.c"
 -yy287:
 -              YYDEBUG(287, *YYCURSOR);
++#line 3963 "Zend/zend_language_scanner.c"
 +yy289:
 +              YYDEBUG(289, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'L') goto yy298;
 -              if (yych == 'l') goto yy298;
 +              if (yych == 'L') goto yy300;
 +              if (yych == 'l') goto yy300;
                goto yy150;
 -yy288:
 -              YYDEBUG(288, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'N') goto yy289;
 -              if (yych != 'n') goto yy150;
 -yy289:
 -              YYDEBUG(289, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'C') goto yy290;
 -              if (yych != 'c') goto yy150;
  yy290:
                YYDEBUG(290, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(297, *YYCURSOR);
 +              YYDEBUG(299, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1723 "Zend/zend_language_scanner.l"
++#line 1727 "Zend/zend_language_scanner.l"
                {
        return T_FUNC_C;
  }
- #line 4014 "Zend/zend_language_scanner.c"
 -#line 3999 "Zend/zend_language_scanner.c"
 -yy298:
 -              YYDEBUG(298, *YYCURSOR);
++#line 4018 "Zend/zend_language_scanner.c"
 +yy300:
 +              YYDEBUG(300, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'E') goto yy299;
 +              if (yych == 'E') goto yy301;
                if (yych != 'e') goto yy150;
 -yy299:
 -              YYDEBUG(299, *YYCURSOR);
 +yy301:
 +              YYDEBUG(301, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy150;
 -              YYDEBUG(300, *YYCURSOR);
 +              YYDEBUG(302, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy150;
 -              YYDEBUG(301, *YYCURSOR);
 +              YYDEBUG(303, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(302, *YYCURSOR);
 +              YYDEBUG(304, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1735 "Zend/zend_language_scanner.l"
++#line 1739 "Zend/zend_language_scanner.l"
                {
        return T_FILE;
  }
- #line 4038 "Zend/zend_language_scanner.c"
 -#line 4023 "Zend/zend_language_scanner.c"
 -yy303:
 -              YYDEBUG(303, *YYCURSOR);
++#line 4042 "Zend/zend_language_scanner.c"
 +yy305:
 +              YYDEBUG(305, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'A') goto yy304;
 +              if (yych == 'A') goto yy306;
                if (yych != 'a') goto yy150;
 -yy304:
 -              YYDEBUG(304, *YYCURSOR);
 +yy306:
 +              YYDEBUG(306, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'I') goto yy305;
 +              if (yych == 'I') goto yy307;
                if (yych != 'i') goto yy150;
 -yy305:
 -              YYDEBUG(305, *YYCURSOR);
 +yy307:
 +              YYDEBUG(307, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'T') goto yy306;
 +              if (yych == 'T') goto yy308;
                if (yych != 't') goto yy150;
 -yy306:
 -              YYDEBUG(306, *YYCURSOR);
 +yy308:
 +              YYDEBUG(308, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy150;
 -              YYDEBUG(307, *YYCURSOR);
 +              YYDEBUG(309, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy150;
 -              YYDEBUG(308, *YYCURSOR);
 +              YYDEBUG(310, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(309, *YYCURSOR);
 +              YYDEBUG(311, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1719 "Zend/zend_language_scanner.l"
++#line 1723 "Zend/zend_language_scanner.l"
                {
        return T_TRAIT_C;
  }
- #line 4072 "Zend/zend_language_scanner.c"
 -#line 4057 "Zend/zend_language_scanner.c"
 -yy310:
 -              YYDEBUG(310, *YYCURSOR);
++#line 4076 "Zend/zend_language_scanner.c"
 +yy312:
 +              YYDEBUG(312, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'A') goto yy311;
 +              if (yych == 'A') goto yy313;
                if (yych != 'a') goto yy150;
 -yy311:
 -              YYDEBUG(311, *YYCURSOR);
 +yy313:
 +              YYDEBUG(313, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'S') goto yy312;
 +              if (yych == 'S') goto yy314;
                if (yych != 's') goto yy150;
 -yy312:
 -              YYDEBUG(312, *YYCURSOR);
 +yy314:
 +              YYDEBUG(314, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'S') goto yy313;
 +              if (yych == 'S') goto yy315;
                if (yych != 's') goto yy150;
 -yy313:
 -              YYDEBUG(313, *YYCURSOR);
 +yy315:
 +              YYDEBUG(315, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy150;
 -              YYDEBUG(314, *YYCURSOR);
 +              YYDEBUG(316, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '_') goto yy150;
 -              YYDEBUG(315, *YYCURSOR);
 +              YYDEBUG(317, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(316, *YYCURSOR);
 +              YYDEBUG(318, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1715 "Zend/zend_language_scanner.l"
++#line 1719 "Zend/zend_language_scanner.l"
                {
        return T_CLASS_C;
  }
- #line 4106 "Zend/zend_language_scanner.c"
 -#line 4091 "Zend/zend_language_scanner.c"
 -yy317:
 -              YYDEBUG(317, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'L') goto yy318;
 -              if (yych != 'l') goto yy150;
 -yy318:
 -              YYDEBUG(318, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'T') goto yy319;
 -              if (yych != 't') goto yy150;
++#line 4110 "Zend/zend_language_scanner.c"
  yy319:
                YYDEBUG(319, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -4162,62 -4147,62 +4166,62 @@@ yy330
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(329, *YYCURSOR);
 +              YYDEBUG(331, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1381 "Zend/zend_language_scanner.l"
 -#line 1388 "Zend/zend_language_scanner.l"
++#line 1385 "Zend/zend_language_scanner.l"
                {
        return T_HALT_COMPILER;
  }
- #line 4172 "Zend/zend_language_scanner.c"
 -#line 4157 "Zend/zend_language_scanner.c"
 -yy330:
 -              YYDEBUG(330, *YYCURSOR);
++#line 4176 "Zend/zend_language_scanner.c"
 +yy332:
 +              YYDEBUG(332, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'S') goto yy334;
 -              if (yych == 's') goto yy334;
 +              if (yych == 'S') goto yy336;
 +              if (yych == 's') goto yy336;
                goto yy150;
 -yy331:
 -              YYDEBUG(331, *YYCURSOR);
 +yy333:
 +              YYDEBUG(333, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'E') goto yy332;
 +              if (yych == 'E') goto yy334;
                if (yych != 'e') goto yy150;
 -yy332:
 -              YYDEBUG(332, *YYCURSOR);
 +yy334:
 +              YYDEBUG(334, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(333, *YYCURSOR);
 +              YYDEBUG(335, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1361 "Zend/zend_language_scanner.l"
 -#line 1368 "Zend/zend_language_scanner.l"
++#line 1365 "Zend/zend_language_scanner.l"
                {
        return T_USE;
  }
- #line 4196 "Zend/zend_language_scanner.c"
 -#line 4181 "Zend/zend_language_scanner.c"
 -yy334:
 -              YYDEBUG(334, *YYCURSOR);
++#line 4200 "Zend/zend_language_scanner.c"
 +yy336:
 +              YYDEBUG(336, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'E') goto yy335;
 +              if (yych == 'E') goto yy337;
                if (yych != 'e') goto yy150;
 -yy335:
 -              YYDEBUG(335, *YYCURSOR);
 +yy337:
 +              YYDEBUG(337, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'T') goto yy336;
 +              if (yych == 'T') goto yy338;
                if (yych != 't') goto yy150;
 -yy336:
 -              YYDEBUG(336, *YYCURSOR);
 +yy338:
 +              YYDEBUG(338, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(337, *YYCURSOR);
 +              YYDEBUG(339, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1409 "Zend/zend_language_scanner.l"
 -#line 1416 "Zend/zend_language_scanner.l"
++#line 1413 "Zend/zend_language_scanner.l"
                {
        return T_UNSET;
  }
- #line 4219 "Zend/zend_language_scanner.c"
 -#line 4204 "Zend/zend_language_scanner.c"
 -yy338:
 -              YYDEBUG(338, *YYCURSOR);
++#line 4223 "Zend/zend_language_scanner.c"
 +yy340:
 +              YYDEBUG(340, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(7);
                yych = *YYCURSOR;
@@@ -4374,24 -4359,35 +4378,24 @@@ yy354
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
 -yy353:
 -              YYDEBUG(353, *YYCURSOR);
 +yy355:
 +              YYDEBUG(355, *YYCURSOR);
                if (yych <= 0x1F) {
 -                      if (yych == '\t') goto yy352;
 +                      if (yych == '\t') goto yy354;
                        goto yy157;
                } else {
 -                      if (yych <= ' ') goto yy352;
 +                      if (yych <= ' ') goto yy354;
                        if (yych != ')') goto yy157;
                }
 -              YYDEBUG(354, *YYCURSOR);
 +              YYDEBUG(356, *YYCURSOR);
                ++YYCURSOR;
 -              YYDEBUG(355, *YYCURSOR);
 +              YYDEBUG(357, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1309 "Zend/zend_language_scanner.l"
 -#line 1316 "Zend/zend_language_scanner.l"
++#line 1313 "Zend/zend_language_scanner.l"
                {
        return T_INT_CAST;
  }
- #line 4395 "Zend/zend_language_scanner.c"
 -#line 4380 "Zend/zend_language_scanner.c"
 -yy356:
 -              YYDEBUG(356, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'E') goto yy357;
 -              if (yych != 'e') goto yy157;
 -yy357:
 -              YYDEBUG(357, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'R') goto yy352;
 -              if (yych == 'r') goto yy352;
 -              goto yy157;
++#line 4399 "Zend/zend_language_scanner.c"
  yy358:
                YYDEBUG(358, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -4423,23 -4408,33 +4427,23 @@@ yy363
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
 -              YYDEBUG(362, *YYCURSOR);
 +              YYDEBUG(364, *YYCURSOR);
                if (yych <= 0x1F) {
 -                      if (yych == '\t') goto yy361;
 +                      if (yych == '\t') goto yy363;
                        goto yy157;
                } else {
 -                      if (yych <= ' ') goto yy361;
 +                      if (yych <= ' ') goto yy363;
                        if (yych != ')') goto yy157;
                }
 -              YYDEBUG(363, *YYCURSOR);
 +              YYDEBUG(365, *YYCURSOR);
                ++YYCURSOR;
 -              YYDEBUG(364, *YYCURSOR);
 +              YYDEBUG(366, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1313 "Zend/zend_language_scanner.l"
 -#line 1320 "Zend/zend_language_scanner.l"
++#line 1317 "Zend/zend_language_scanner.l"
                {
        return T_DOUBLE_CAST;
  }
- #line 4443 "Zend/zend_language_scanner.c"
 -#line 4428 "Zend/zend_language_scanner.c"
 -yy365:
 -              YYDEBUG(365, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'U') goto yy366;
 -              if (yych != 'u') goto yy157;
 -yy366:
 -              YYDEBUG(366, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'B') goto yy367;
 -              if (yych != 'b') goto yy157;
++#line 4447 "Zend/zend_language_scanner.c"
  yy367:
                YYDEBUG(367, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -4497,60 -4482,70 +4501,60 @@@ yy377
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
 -              YYDEBUG(376, *YYCURSOR);
 +              YYDEBUG(378, *YYCURSOR);
                if (yych <= 0x1F) {
 -                      if (yych == '\t') goto yy375;
 +                      if (yych == '\t') goto yy377;
                        goto yy157;
                } else {
 -                      if (yych <= ' ') goto yy375;
 +                      if (yych <= ' ') goto yy377;
                        if (yych != ')') goto yy157;
                }
 -              YYDEBUG(377, *YYCURSOR);
 +              YYDEBUG(379, *YYCURSOR);
                ++YYCURSOR;
 -              YYDEBUG(378, *YYCURSOR);
 +              YYDEBUG(380, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1317 "Zend/zend_language_scanner.l"
 -#line 1324 "Zend/zend_language_scanner.l"
++#line 1321 "Zend/zend_language_scanner.l"
                {
        return T_STRING_CAST;
  }
- #line 4517 "Zend/zend_language_scanner.c"
 -#line 4502 "Zend/zend_language_scanner.c"
 -yy379:
 -              YYDEBUG(379, *YYCURSOR);
++#line 4521 "Zend/zend_language_scanner.c"
 +yy381:
 +              YYDEBUG(381, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'R') goto yy380;
 +              if (yych == 'R') goto yy382;
                if (yych != 'r') goto yy157;
 -yy380:
 -              YYDEBUG(380, *YYCURSOR);
 +yy382:
 +              YYDEBUG(382, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'A') goto yy381;
 +              if (yych == 'A') goto yy383;
                if (yych != 'a') goto yy157;
 -yy381:
 -              YYDEBUG(381, *YYCURSOR);
 +yy383:
 +              YYDEBUG(383, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'Y') goto yy382;
 +              if (yych == 'Y') goto yy384;
                if (yych != 'y') goto yy157;
 -yy382:
 -              YYDEBUG(382, *YYCURSOR);
 +yy384:
 +              YYDEBUG(384, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
 -              YYDEBUG(383, *YYCURSOR);
 +              YYDEBUG(385, *YYCURSOR);
                if (yych <= 0x1F) {
 -                      if (yych == '\t') goto yy382;
 +                      if (yych == '\t') goto yy384;
                        goto yy157;
                } else {
 -                      if (yych <= ' ') goto yy382;
 +                      if (yych <= ' ') goto yy384;
                        if (yych != ')') goto yy157;
                }
 -              YYDEBUG(384, *YYCURSOR);
 +              YYDEBUG(386, *YYCURSOR);
                ++YYCURSOR;
 -              YYDEBUG(385, *YYCURSOR);
 +              YYDEBUG(387, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1321 "Zend/zend_language_scanner.l"
 -#line 1328 "Zend/zend_language_scanner.l"
++#line 1325 "Zend/zend_language_scanner.l"
                {
        return T_ARRAY_CAST;
  }
- #line 4554 "Zend/zend_language_scanner.c"
 -#line 4539 "Zend/zend_language_scanner.c"
 -yy386:
 -              YYDEBUG(386, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'J') goto yy387;
 -              if (yych != 'j') goto yy157;
 -yy387:
 -              YYDEBUG(387, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'E') goto yy388;
 -              if (yych != 'e') goto yy157;
++#line 4558 "Zend/zend_language_scanner.c"
  yy388:
                YYDEBUG(388, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -4576,23 -4561,34 +4580,23 @@@ yy392
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
 -              YYDEBUG(391, *YYCURSOR);
 +              YYDEBUG(393, *YYCURSOR);
                if (yych <= 0x1F) {
 -                      if (yych == '\t') goto yy390;
 +                      if (yych == '\t') goto yy392;
                        goto yy157;
                } else {
 -                      if (yych <= ' ') goto yy390;
 +                      if (yych <= ' ') goto yy392;
                        if (yych != ')') goto yy157;
                }
 -              YYDEBUG(392, *YYCURSOR);
 +              YYDEBUG(394, *YYCURSOR);
                ++YYCURSOR;
 -              YYDEBUG(393, *YYCURSOR);
 +              YYDEBUG(395, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1325 "Zend/zend_language_scanner.l"
 -#line 1332 "Zend/zend_language_scanner.l"
++#line 1329 "Zend/zend_language_scanner.l"
                {
        return T_OBJECT_CAST;
  }
- #line 4596 "Zend/zend_language_scanner.c"
 -#line 4581 "Zend/zend_language_scanner.c"
 -yy394:
 -              YYDEBUG(394, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'N') goto yy404;
 -              if (yych == 'n') goto yy404;
 -              goto yy157;
 -yy395:
 -              YYDEBUG(395, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'O') goto yy396;
 -              if (yych != 'o') goto yy157;
++#line 4600 "Zend/zend_language_scanner.c"
  yy396:
                YYDEBUG(396, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -4620,24 -4605,35 +4624,24 @@@ yy400
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
 -yy399:
 -              YYDEBUG(399, *YYCURSOR);
 +yy401:
 +              YYDEBUG(401, *YYCURSOR);
                if (yych <= 0x1F) {
 -                      if (yych == '\t') goto yy398;
 +                      if (yych == '\t') goto yy400;
                        goto yy157;
                } else {
 -                      if (yych <= ' ') goto yy398;
 +                      if (yych <= ' ') goto yy400;
                        if (yych != ')') goto yy157;
                }
 -              YYDEBUG(400, *YYCURSOR);
 +              YYDEBUG(402, *YYCURSOR);
                ++YYCURSOR;
 -              YYDEBUG(401, *YYCURSOR);
 +              YYDEBUG(403, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1329 "Zend/zend_language_scanner.l"
 -#line 1336 "Zend/zend_language_scanner.l"
++#line 1333 "Zend/zend_language_scanner.l"
                {
        return T_BOOL_CAST;
  }
- #line 4641 "Zend/zend_language_scanner.c"
 -#line 4626 "Zend/zend_language_scanner.c"
 -yy402:
 -              YYDEBUG(402, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'A') goto yy403;
 -              if (yych != 'a') goto yy157;
 -yy403:
 -              YYDEBUG(403, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'N') goto yy398;
 -              if (yych == 'n') goto yy398;
 -              goto yy157;
++#line 4645 "Zend/zend_language_scanner.c"
  yy404:
                YYDEBUG(404, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -4685,65 -4670,75 +4689,65 @@@ yy412
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
 -              YYDEBUG(411, *YYCURSOR);
 +              YYDEBUG(413, *YYCURSOR);
                if (yych <= 0x1F) {
 -                      if (yych == '\t') goto yy410;
 +                      if (yych == '\t') goto yy412;
                        goto yy157;
                } else {
 -                      if (yych <= ' ') goto yy410;
 +                      if (yych <= ' ') goto yy412;
                        if (yych != ')') goto yy157;
                }
 -              YYDEBUG(412, *YYCURSOR);
 +              YYDEBUG(414, *YYCURSOR);
                ++YYCURSOR;
 -              YYDEBUG(413, *YYCURSOR);
 +              YYDEBUG(415, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1333 "Zend/zend_language_scanner.l"
 -#line 1340 "Zend/zend_language_scanner.l"
++#line 1337 "Zend/zend_language_scanner.l"
                {
        return T_UNSET_CAST;
  }
- #line 4705 "Zend/zend_language_scanner.c"
 -#line 4690 "Zend/zend_language_scanner.c"
 -yy414:
 -              YYDEBUG(414, *YYCURSOR);
++#line 4709 "Zend/zend_language_scanner.c"
 +yy416:
 +              YYDEBUG(416, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'R') goto yy415;
 +              if (yych == 'R') goto yy417;
                if (yych != 'r') goto yy150;
 -yy415:
 -              YYDEBUG(415, *YYCURSOR);
 +yy417:
 +              YYDEBUG(417, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(416, *YYCURSOR);
 +              YYDEBUG(418, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1305 "Zend/zend_language_scanner.l"
 -#line 1312 "Zend/zend_language_scanner.l"
++#line 1309 "Zend/zend_language_scanner.l"
                {
        return T_VAR;
  }
- #line 4723 "Zend/zend_language_scanner.c"
 -#line 4708 "Zend/zend_language_scanner.c"
 -yy417:
 -              YYDEBUG(417, *YYCURSOR);
++#line 4727 "Zend/zend_language_scanner.c"
 +yy419:
 +              YYDEBUG(419, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'M') goto yy421;
 -              if (yych == 'm') goto yy421;
 +              if (yych == 'M') goto yy423;
 +              if (yych == 'm') goto yy423;
                goto yy150;
 -yy418:
 -              YYDEBUG(418, *YYCURSOR);
 +yy420:
 +              YYDEBUG(420, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'W') goto yy419;
 +              if (yych == 'W') goto yy421;
                if (yych != 'w') goto yy150;
 -yy419:
 -              YYDEBUG(419, *YYCURSOR);
 +yy421:
 +              YYDEBUG(421, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(420, *YYCURSOR);
 +              YYDEBUG(422, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1297 "Zend/zend_language_scanner.l"
 -#line 1304 "Zend/zend_language_scanner.l"
++#line 1301 "Zend/zend_language_scanner.l"
                {
        return T_NEW;
  }
- #line 4747 "Zend/zend_language_scanner.c"
 -#line 4732 "Zend/zend_language_scanner.c"
 -yy421:
 -              YYDEBUG(421, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'E') goto yy422;
 -              if (yych != 'e') goto yy150;
 -yy422:
 -              YYDEBUG(422, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'S') goto yy423;
 -              if (yych != 's') goto yy150;
++#line 4751 "Zend/zend_language_scanner.c"
  yy423:
                YYDEBUG(423, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -4780,48 -4765,48 +4784,48 @@@ yy429
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(428, *YYCURSOR);
 +              YYDEBUG(430, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1357 "Zend/zend_language_scanner.l"
 -#line 1364 "Zend/zend_language_scanner.l"
++#line 1361 "Zend/zend_language_scanner.l"
                {
        return T_NAMESPACE;
  }
- #line 4790 "Zend/zend_language_scanner.c"
 -#line 4775 "Zend/zend_language_scanner.c"
 -yy429:
 -              YYDEBUG(429, *YYCURSOR);
++#line 4794 "Zend/zend_language_scanner.c"
 +yy431:
 +              YYDEBUG(431, *YYCURSOR);
                ++YYCURSOR;
 -              if ((yych = *YYCURSOR) == '\n') goto yy433;
 -              if (yych == '\r') goto yy434;
 -yy430:
 -              YYDEBUG(430, *YYCURSOR);
 +              if ((yych = *YYCURSOR) == '\n') goto yy435;
 +              if (yych == '\r') goto yy436;
 +yy432:
 +              YYDEBUG(432, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1926 "Zend/zend_language_scanner.l"
++#line 1930 "Zend/zend_language_scanner.l"
                {
        BEGIN(INITIAL);
        return T_CLOSE_TAG;  /* implicit ';' at php-end tag */
  }
- #line 4804 "Zend/zend_language_scanner.c"
 -#line 4789 "Zend/zend_language_scanner.c"
 -yy431:
 -              YYDEBUG(431, *YYCURSOR);
++#line 4808 "Zend/zend_language_scanner.c"
 +yy433:
 +              YYDEBUG(433, *YYCURSOR);
                ++YYCURSOR;
 -              YYDEBUG(432, *YYCURSOR);
 +              YYDEBUG(434, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1293 "Zend/zend_language_scanner.l"
 -#line 1300 "Zend/zend_language_scanner.l"
++#line 1297 "Zend/zend_language_scanner.l"
                {
        return T_COALESCE;
  }
- #line 4814 "Zend/zend_language_scanner.c"
 -#line 4799 "Zend/zend_language_scanner.c"
 -yy433:
 -              YYDEBUG(433, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              goto yy430;
 -yy434:
 -              YYDEBUG(434, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == '\n') goto yy433;
 -              goto yy430;
++#line 4818 "Zend/zend_language_scanner.c"
  yy435:
                YYDEBUG(435, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              goto yy432;
 +yy436:
 +              YYDEBUG(436, *YYCURSOR);
 +              yych = *++YYCURSOR;
 +              if (yych == '\n') goto yy435;
 +              goto yy432;
 +yy437:
 +              YYDEBUG(437, *YYCURSOR);
                yyaccept = 3;
                YYMARKER = ++YYCURSOR;
                YYFILL(3);
                        if (yych == 'e') goto yy156;
                        goto yy153;
                }
 -yy437:
 -              YYDEBUG(437, *YYCURSOR);
 +yy439:
 +              YYDEBUG(439, *YYCURSOR);
                ++YYCURSOR;
 -              YYDEBUG(438, *YYCURSOR);
 +              YYDEBUG(440, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1489 "Zend/zend_language_scanner.l"
 -#line 1492 "Zend/zend_language_scanner.l"
++#line 1493 "Zend/zend_language_scanner.l"
                {
        return T_CONCAT_EQUAL;
  }
- #line 4849 "Zend/zend_language_scanner.c"
 -#line 4834 "Zend/zend_language_scanner.c"
 -yy439:
 -              YYDEBUG(439, *YYCURSOR);
++#line 4853 "Zend/zend_language_scanner.c"
 +yy441:
 +              YYDEBUG(441, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych != '.') goto yy157;
 -              YYDEBUG(440, *YYCURSOR);
 +              YYDEBUG(442, *YYCURSOR);
                ++YYCURSOR;
 -              YYDEBUG(441, *YYCURSOR);
 +              YYDEBUG(443, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1289 "Zend/zend_language_scanner.l"
 -#line 1296 "Zend/zend_language_scanner.l"
++#line 1293 "Zend/zend_language_scanner.l"
                {
        return T_ELLIPSIS;
  }
- #line 4862 "Zend/zend_language_scanner.c"
 -#line 4847 "Zend/zend_language_scanner.c"
 -yy442:
 -              YYDEBUG(442, *YYCURSOR);
++#line 4866 "Zend/zend_language_scanner.c"
 +yy444:
 +              YYDEBUG(444, *YYCURSOR);
                ++YYCURSOR;
 -              YYDEBUG(443, *YYCURSOR);
 +              YYDEBUG(445, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1281 "Zend/zend_language_scanner.l"
 -#line 1288 "Zend/zend_language_scanner.l"
++#line 1285 "Zend/zend_language_scanner.l"
                {
        return T_PAAMAYIM_NEKUDOTAYIM;
  }
- #line 4872 "Zend/zend_language_scanner.c"
 -#line 4857 "Zend/zend_language_scanner.c"
 -yy444:
 -              YYDEBUG(444, *YYCURSOR);
++#line 4876 "Zend/zend_language_scanner.c"
 +yy446:
 +              YYDEBUG(446, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
@@@ -4890,39 -4885,29 +4894,39 @@@ yy448
                ++YYCURSOR;
                YYDEBUG(449, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1469 "Zend/zend_language_scanner.l"
 -#line 1440 "Zend/zend_language_scanner.l"
++#line 1473 "Zend/zend_language_scanner.l"
                {
 -      return T_DEC;
 +      return T_MINUS_EQUAL;
  }
- #line 4898 "Zend/zend_language_scanner.c"
 -#line 4893 "Zend/zend_language_scanner.c"
++#line 4902 "Zend/zend_language_scanner.c"
  yy450:
                YYDEBUG(450, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(451, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1433 "Zend/zend_language_scanner.l"
 -#line 1262 "Zend/zend_language_scanner.l"
++#line 1437 "Zend/zend_language_scanner.l"
                {
 -      yy_push_state(ST_LOOKING_FOR_PROPERTY);
 -      return T_OBJECT_OPERATOR;
 +      return T_DEC;
  }
- #line 4908 "Zend/zend_language_scanner.c"
 -#line 4904 "Zend/zend_language_scanner.c"
++#line 4912 "Zend/zend_language_scanner.c"
  yy452:
                YYDEBUG(452, *YYCURSOR);
- #line 1255 "Zend/zend_language_scanner.l"
 +              ++YYCURSOR;
 +              YYDEBUG(453, *YYCURSOR);
 +              yyleng = YYCURSOR - SCNG(yy_text);
- #line 4919 "Zend/zend_language_scanner.c"
++#line 1259 "Zend/zend_language_scanner.l"
 +              {
 +      yy_push_state(ST_LOOKING_FOR_PROPERTY);
 +      return T_OBJECT_OPERATOR;
 +}
++#line 4923 "Zend/zend_language_scanner.c"
 +yy454:
 +              YYDEBUG(454, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'O') {
 -                      if (yych == 'I') goto yy459;
 +                      if (yych == 'I') goto yy461;
                        if (yych <= 'N') goto yy150;
 -                      goto yy460;
 +                      goto yy462;
                } else {
                        if (yych <= 'i') {
                                if (yych <= 'h') goto yy150;
@@@ -4958,20 -4943,20 +4962,20 @@@ yy459
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(458, *YYCURSOR);
 +              YYDEBUG(460, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1405 "Zend/zend_language_scanner.l"
 -#line 1412 "Zend/zend_language_scanner.l"
++#line 1409 "Zend/zend_language_scanner.l"
                {
        return T_PUBLIC;
  }
- #line 4968 "Zend/zend_language_scanner.c"
 -#line 4953 "Zend/zend_language_scanner.c"
 -yy459:
 -              YYDEBUG(459, *YYCURSOR);
++#line 4972 "Zend/zend_language_scanner.c"
 +yy461:
 +              YYDEBUG(461, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'V') {
 -                      if (yych == 'N') goto yy468;
 +                      if (yych == 'N') goto yy470;
                        if (yych <= 'U') goto yy150;
 -                      goto yy469;
 +                      goto yy471;
                } else {
                        if (yych <= 'n') {
                                if (yych <= 'm') goto yy150;
@@@ -5017,13 -5002,24 +5021,13 @@@ yy468
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(467, *YYCURSOR);
 +              YYDEBUG(469, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1401 "Zend/zend_language_scanner.l"
 -#line 1408 "Zend/zend_language_scanner.l"
++#line 1405 "Zend/zend_language_scanner.l"
                {
        return T_PROTECTED;
  }
- #line 5027 "Zend/zend_language_scanner.c"
 -#line 5012 "Zend/zend_language_scanner.c"
 -yy468:
 -              YYDEBUG(468, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'T') goto yy474;
 -              if (yych == 't') goto yy474;
 -              goto yy150;
 -yy469:
 -              YYDEBUG(469, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'A') goto yy470;
 -              if (yych != 'a') goto yy150;
++#line 5031 "Zend/zend_language_scanner.c"
  yy470:
                YYDEBUG(470, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5051,83 -5036,92 +5055,83 @@@ yy474
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(473, *YYCURSOR);
 +              YYDEBUG(475, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1397 "Zend/zend_language_scanner.l"
 -#line 1404 "Zend/zend_language_scanner.l"
++#line 1401 "Zend/zend_language_scanner.l"
                {
        return T_PRIVATE;
  }
- #line 5061 "Zend/zend_language_scanner.c"
 -#line 5046 "Zend/zend_language_scanner.c"
 -yy474:
 -              YYDEBUG(474, *YYCURSOR);
++#line 5065 "Zend/zend_language_scanner.c"
 +yy476:
 +              YYDEBUG(476, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(475, *YYCURSOR);
 +              YYDEBUG(477, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1231 "Zend/zend_language_scanner.l"
 -#line 1238 "Zend/zend_language_scanner.l"
++#line 1235 "Zend/zend_language_scanner.l"
                {
        return T_PRINT;
  }
- #line 5074 "Zend/zend_language_scanner.c"
 -#line 5059 "Zend/zend_language_scanner.c"
 -yy476:
 -              YYDEBUG(476, *YYCURSOR);
++#line 5078 "Zend/zend_language_scanner.c"
 +yy478:
 +              YYDEBUG(478, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'O') goto yy481;
 -              if (yych == 'o') goto yy481;
 +              if (yych == 'O') goto yy483;
 +              if (yych == 'o') goto yy483;
                goto yy150;
 -yy477:
 -              YYDEBUG(477, *YYCURSOR);
 +yy479:
 +              YYDEBUG(479, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'T') goto yy478;
 +              if (yych == 'T') goto yy480;
                if (yych != 't') goto yy150;
 -yy478:
 -              YYDEBUG(478, *YYCURSOR);
 +yy480:
 +              YYDEBUG(480, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'O') goto yy479;
 +              if (yych == 'O') goto yy481;
                if (yych != 'o') goto yy150;
 -yy479:
 -              YYDEBUG(479, *YYCURSOR);
 +yy481:
 +              YYDEBUG(481, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(480, *YYCURSOR);
 +              YYDEBUG(482, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1223 "Zend/zend_language_scanner.l"
 -#line 1230 "Zend/zend_language_scanner.l"
++#line 1227 "Zend/zend_language_scanner.l"
                {
        return T_GOTO;
  }
- #line 5103 "Zend/zend_language_scanner.c"
 -#line 5088 "Zend/zend_language_scanner.c"
 -yy481:
 -              YYDEBUG(481, *YYCURSOR);
++#line 5107 "Zend/zend_language_scanner.c"
 +yy483:
 +              YYDEBUG(483, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'B') goto yy482;
 +              if (yych == 'B') goto yy484;
                if (yych != 'b') goto yy150;
 -yy482:
 -              YYDEBUG(482, *YYCURSOR);
 +yy484:
 +              YYDEBUG(484, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'A') goto yy483;
 +              if (yych == 'A') goto yy485;
                if (yych != 'a') goto yy150;
 -yy483:
 -              YYDEBUG(483, *YYCURSOR);
 +yy485:
 +              YYDEBUG(485, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'L') goto yy484;
 +              if (yych == 'L') goto yy486;
                if (yych != 'l') goto yy150;
 -yy484:
 -              YYDEBUG(484, *YYCURSOR);
 +yy486:
 +              YYDEBUG(486, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(485, *YYCURSOR);
 +              YYDEBUG(487, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1369 "Zend/zend_language_scanner.l"
 -#line 1376 "Zend/zend_language_scanner.l"
++#line 1373 "Zend/zend_language_scanner.l"
                {
        return T_GLOBAL;
  }
- #line 5131 "Zend/zend_language_scanner.c"
 -#line 5116 "Zend/zend_language_scanner.c"
 -yy486:
 -              YYDEBUG(486, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == '<') goto yy494;
 -              goto yy157;
 -yy487:
 -              YYDEBUG(487, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              goto yy144;
++#line 5135 "Zend/zend_language_scanner.c"
  yy488:
                YYDEBUG(488, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5162,13 -5147,24 +5166,13 @@@ yy494
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(493, *YYCURSOR);
 +              YYDEBUG(495, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1215 "Zend/zend_language_scanner.l"
 -#line 1222 "Zend/zend_language_scanner.l"
++#line 1219 "Zend/zend_language_scanner.l"
                {
        return T_BREAK;
  }
- #line 5172 "Zend/zend_language_scanner.c"
 -#line 5157 "Zend/zend_language_scanner.c"
 -yy494:
 -              YYDEBUG(494, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == '<') goto yy217;
 -              goto yy157;
 -yy495:
 -              YYDEBUG(495, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'A') goto yy502;
 -              if (yych == 'a') goto yy502;
 -              goto yy150;
++#line 5176 "Zend/zend_language_scanner.c"
  yy496:
                YYDEBUG(496, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5206,41 -5191,53 +5210,41 @@@ yy502
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(501, *YYCURSOR);
 +              YYDEBUG(503, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1199 "Zend/zend_language_scanner.l"
 -#line 1206 "Zend/zend_language_scanner.l"
++#line 1203 "Zend/zend_language_scanner.l"
                {
        return T_SWITCH;
  }
- #line 5216 "Zend/zend_language_scanner.c"
 -#line 5201 "Zend/zend_language_scanner.c"
 -yy502:
 -              YYDEBUG(502, *YYCURSOR);
++#line 5220 "Zend/zend_language_scanner.c"
 +yy504:
 +              YYDEBUG(504, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'T') goto yy503;
 +              if (yych == 'T') goto yy505;
                if (yych != 't') goto yy150;
 -yy503:
 -              YYDEBUG(503, *YYCURSOR);
 +yy505:
 +              YYDEBUG(505, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'I') goto yy504;
 +              if (yych == 'I') goto yy506;
                if (yych != 'i') goto yy150;
 -yy504:
 -              YYDEBUG(504, *YYCURSOR);
 +yy506:
 +              YYDEBUG(506, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'C') goto yy505;
 +              if (yych == 'C') goto yy507;
                if (yych != 'c') goto yy150;
 -yy505:
 -              YYDEBUG(505, *YYCURSOR);
 +yy507:
 +              YYDEBUG(507, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(506, *YYCURSOR);
 +              YYDEBUG(508, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1385 "Zend/zend_language_scanner.l"
 -#line 1392 "Zend/zend_language_scanner.l"
++#line 1389 "Zend/zend_language_scanner.l"
                {
        return T_STATIC;
  }
- #line 5244 "Zend/zend_language_scanner.c"
 -#line 5229 "Zend/zend_language_scanner.c"
 -yy507:
 -              YYDEBUG(507, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'S') goto yy518;
 -              if (yych == 's') goto yy518;
 -              goto yy150;
 -yy508:
 -              YYDEBUG(508, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'D') goto yy516;
 -              if (yych == 'd') goto yy516;
 -              goto yy150;
++#line 5248 "Zend/zend_language_scanner.c"
  yy509:
                YYDEBUG(509, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5265,49 -5250,59 +5269,49 @@@ yy512
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(511, *YYCURSOR);
 +              YYDEBUG(513, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1195 "Zend/zend_language_scanner.l"
 -#line 1202 "Zend/zend_language_scanner.l"
++#line 1199 "Zend/zend_language_scanner.l"
                {
        return T_AS;
  }
- #line 5275 "Zend/zend_language_scanner.c"
 -#line 5260 "Zend/zend_language_scanner.c"
 -yy512:
 -              YYDEBUG(512, *YYCURSOR);
++#line 5279 "Zend/zend_language_scanner.c"
 +yy514:
 +              YYDEBUG(514, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'A') goto yy513;
 +              if (yych == 'A') goto yy515;
                if (yych != 'a') goto yy150;
 -yy513:
 -              YYDEBUG(513, *YYCURSOR);
 +yy515:
 +              YYDEBUG(515, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'Y') goto yy514;
 +              if (yych == 'Y') goto yy516;
                if (yych != 'y') goto yy150;
 -yy514:
 -              YYDEBUG(514, *YYCURSOR);
 +yy516:
 +              YYDEBUG(516, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(515, *YYCURSOR);
 +              YYDEBUG(517, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1421 "Zend/zend_language_scanner.l"
 -#line 1428 "Zend/zend_language_scanner.l"
++#line 1425 "Zend/zend_language_scanner.l"
                {
        return T_ARRAY;
  }
- #line 5298 "Zend/zend_language_scanner.c"
 -#line 5283 "Zend/zend_language_scanner.c"
 -yy516:
 -              YYDEBUG(516, *YYCURSOR);
++#line 5302 "Zend/zend_language_scanner.c"
 +yy518:
 +              YYDEBUG(518, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(517, *YYCURSOR);
 +              YYDEBUG(519, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1529 "Zend/zend_language_scanner.l"
 -#line 1532 "Zend/zend_language_scanner.l"
++#line 1533 "Zend/zend_language_scanner.l"
                {
        return T_LOGICAL_AND;
  }
- #line 5311 "Zend/zend_language_scanner.c"
 -#line 5296 "Zend/zend_language_scanner.c"
 -yy518:
 -              YYDEBUG(518, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'T') goto yy519;
 -              if (yych != 't') goto yy150;
 -yy519:
 -              YYDEBUG(519, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'R') goto yy520;
 -              if (yych != 'r') goto yy150;
++#line 5315 "Zend/zend_language_scanner.c"
  yy520:
                YYDEBUG(520, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5339,62 -5324,62 +5343,62 @@@ yy525
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(524, *YYCURSOR);
 +              YYDEBUG(526, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1389 "Zend/zend_language_scanner.l"
 -#line 1396 "Zend/zend_language_scanner.l"
++#line 1393 "Zend/zend_language_scanner.l"
                {
        return T_ABSTRACT;
  }
- #line 5349 "Zend/zend_language_scanner.c"
 -#line 5334 "Zend/zend_language_scanner.c"
 -yy525:
 -              YYDEBUG(525, *YYCURSOR);
++#line 5353 "Zend/zend_language_scanner.c"
 +yy527:
 +              YYDEBUG(527, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'I') goto yy526;
 +              if (yych == 'I') goto yy528;
                if (yych != 'i') goto yy150;
 -yy526:
 -              YYDEBUG(526, *YYCURSOR);
 +yy528:
 +              YYDEBUG(528, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'L') goto yy527;
 +              if (yych == 'L') goto yy529;
                if (yych != 'l') goto yy150;
 -yy527:
 -              YYDEBUG(527, *YYCURSOR);
 +yy529:
 +              YYDEBUG(529, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'E') goto yy528;
 +              if (yych == 'E') goto yy530;
                if (yych != 'e') goto yy150;
 -yy528:
 -              YYDEBUG(528, *YYCURSOR);
 +yy530:
 +              YYDEBUG(530, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(529, *YYCURSOR);
 +              YYDEBUG(531, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1155 "Zend/zend_language_scanner.l"
 -#line 1162 "Zend/zend_language_scanner.l"
++#line 1159 "Zend/zend_language_scanner.l"
                {
        return T_WHILE;
  }
- #line 5377 "Zend/zend_language_scanner.c"
 -#line 5362 "Zend/zend_language_scanner.c"
 -yy530:
 -              YYDEBUG(530, *YYCURSOR);
++#line 5381 "Zend/zend_language_scanner.c"
 +yy532:
 +              YYDEBUG(532, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(531, *YYCURSOR);
 +              YYDEBUG(533, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1139 "Zend/zend_language_scanner.l"
 -#line 1146 "Zend/zend_language_scanner.l"
++#line 1143 "Zend/zend_language_scanner.l"
                {
        return T_IF;
  }
- #line 5390 "Zend/zend_language_scanner.c"
 -#line 5375 "Zend/zend_language_scanner.c"
 -yy532:
 -              YYDEBUG(532, *YYCURSOR);
++#line 5394 "Zend/zend_language_scanner.c"
 +yy534:
 +              YYDEBUG(534, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'P') goto yy574;
 -              if (yych == 'p') goto yy574;
 +              if (yych == 'P') goto yy576;
 +              if (yych == 'p') goto yy576;
                goto yy150;
 -yy533:
 -              YYDEBUG(533, *YYCURSOR);
 +yy535:
 +              YYDEBUG(535, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'T') {
                        if (yych <= 'C') {
@@@ -5436,13 -5421,25 +5440,13 @@@ yy539
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(538, *YYCURSOR);
 +              YYDEBUG(540, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1373 "Zend/zend_language_scanner.l"
 -#line 1380 "Zend/zend_language_scanner.l"
++#line 1377 "Zend/zend_language_scanner.l"
                {
        return T_ISSET;
  }
- #line 5446 "Zend/zend_language_scanner.c"
 -#line 5431 "Zend/zend_language_scanner.c"
 -yy539:
 -              YYDEBUG(539, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'T') goto yy560;
 -              if (yych == 't') goto yy560;
 -              goto yy150;
 -yy540:
 -              YYDEBUG(540, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'E') goto yy553;
 -              if (yych == 'e') goto yy553;
 -              goto yy150;
++#line 5450 "Zend/zend_language_scanner.c"
  yy541:
                YYDEBUG(541, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5493,14 -5478,24 +5497,14 @@@ yy547
                                if (yych >= 0x7F) goto yy149;
                        }
                }
 -yy546:
 -              YYDEBUG(546, *YYCURSOR);
 +yy548:
 +              YYDEBUG(548, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1341 "Zend/zend_language_scanner.l"
 -#line 1348 "Zend/zend_language_scanner.l"
++#line 1345 "Zend/zend_language_scanner.l"
                {
        return T_INCLUDE;
  }
- #line 5504 "Zend/zend_language_scanner.c"
 -#line 5489 "Zend/zend_language_scanner.c"
 -yy547:
 -              YYDEBUG(547, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'O') goto yy548;
 -              if (yych != 'o') goto yy150;
 -yy548:
 -              YYDEBUG(548, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'N') goto yy549;
 -              if (yych != 'n') goto yy150;
++#line 5508 "Zend/zend_language_scanner.c"
  yy549:
                YYDEBUG(549, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5527,13 -5512,23 +5531,13 @@@ yy553
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(552, *YYCURSOR);
 +              YYDEBUG(554, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1345 "Zend/zend_language_scanner.l"
 -#line 1352 "Zend/zend_language_scanner.l"
++#line 1349 "Zend/zend_language_scanner.l"
                {
        return T_INCLUDE_ONCE;
  }
- #line 5537 "Zend/zend_language_scanner.c"
 -#line 5522 "Zend/zend_language_scanner.c"
 -yy553:
 -              YYDEBUG(553, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'R') goto yy554;
 -              if (yych != 'r') goto yy150;
 -yy554:
 -              YYDEBUG(554, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'F') goto yy555;
 -              if (yych != 'f') goto yy150;
++#line 5541 "Zend/zend_language_scanner.c"
  yy555:
                YYDEBUG(555, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5565,20 -5550,20 +5569,20 @@@ yy560
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(559, *YYCURSOR);
 +              YYDEBUG(561, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1239 "Zend/zend_language_scanner.l"
 -#line 1246 "Zend/zend_language_scanner.l"
++#line 1243 "Zend/zend_language_scanner.l"
                {
        return T_INTERFACE;
  }
- #line 5575 "Zend/zend_language_scanner.c"
 -#line 5560 "Zend/zend_language_scanner.c"
 -yy560:
 -              YYDEBUG(560, *YYCURSOR);
++#line 5579 "Zend/zend_language_scanner.c"
 +yy562:
 +              YYDEBUG(562, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'E') {
 -                      if (yych == 'A') goto yy561;
 +                      if (yych == 'A') goto yy563;
                        if (yych <= 'D') goto yy150;
 -                      goto yy562;
 +                      goto yy564;
                } else {
                        if (yych <= 'a') {
                                if (yych <= '`') goto yy150;
@@@ -5619,13 -5604,23 +5623,13 @@@ yy568
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(567, *YYCURSOR);
 +              YYDEBUG(569, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1365 "Zend/zend_language_scanner.l"
 -#line 1372 "Zend/zend_language_scanner.l"
++#line 1369 "Zend/zend_language_scanner.l"
                {
          return T_INSTEADOF;
  }
- #line 5629 "Zend/zend_language_scanner.c"
 -#line 5614 "Zend/zend_language_scanner.c"
 -yy568:
 -              YYDEBUG(568, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'C') goto yy569;
 -              if (yych != 'c') goto yy150;
 -yy569:
 -              YYDEBUG(569, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'E') goto yy570;
 -              if (yych != 'e') goto yy150;
++#line 5633 "Zend/zend_language_scanner.c"
  yy570:
                YYDEBUG(570, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5652,13 -5637,23 +5656,13 @@@ yy574
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(573, *YYCURSOR);
 +              YYDEBUG(575, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1191 "Zend/zend_language_scanner.l"
 -#line 1198 "Zend/zend_language_scanner.l"
++#line 1195 "Zend/zend_language_scanner.l"
                {
        return T_INSTANCEOF;
  }
- #line 5662 "Zend/zend_language_scanner.c"
 -#line 5647 "Zend/zend_language_scanner.c"
 -yy574:
 -              YYDEBUG(574, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'L') goto yy575;
 -              if (yych != 'l') goto yy150;
 -yy575:
 -              YYDEBUG(575, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'E') goto yy576;
 -              if (yych != 'e') goto yy150;
++#line 5666 "Zend/zend_language_scanner.c"
  yy576:
                YYDEBUG(576, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5700,24 -5685,24 +5704,24 @@@ yy583
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(582, *YYCURSOR);
 +              YYDEBUG(584, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1251 "Zend/zend_language_scanner.l"
 -#line 1258 "Zend/zend_language_scanner.l"
++#line 1255 "Zend/zend_language_scanner.l"
                {
        return T_IMPLEMENTS;
  }
- #line 5710 "Zend/zend_language_scanner.c"
 -#line 5695 "Zend/zend_language_scanner.c"
 -yy583:
 -              YYDEBUG(583, *YYCURSOR);
++#line 5714 "Zend/zend_language_scanner.c"
 +yy585:
 +              YYDEBUG(585, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'R') goto yy591;
 -              if (yych == 'r') goto yy591;
 +              if (yych == 'R') goto yy593;
 +              if (yych == 'r') goto yy593;
                goto yy150;
 -yy584:
 -              YYDEBUG(584, *YYCURSOR);
 +yy586:
 +              YYDEBUG(586, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'Y') {
 -                      if (yych == 'A') goto yy587;
 +                      if (yych == 'A') goto yy589;
                        if (yych <= 'X') goto yy150;
                } else {
                        if (yych <= 'a') {
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(586, *YYCURSOR);
 +              YYDEBUG(588, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1123 "Zend/zend_language_scanner.l"
 -#line 1130 "Zend/zend_language_scanner.l"
++#line 1127 "Zend/zend_language_scanner.l"
                {
        return T_TRY;
  }
- #line 5742 "Zend/zend_language_scanner.c"
 -#line 5727 "Zend/zend_language_scanner.c"
 -yy587:
 -              YYDEBUG(587, *YYCURSOR);
++#line 5746 "Zend/zend_language_scanner.c"
 +yy589:
 +              YYDEBUG(589, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'I') goto yy588;
 +              if (yych == 'I') goto yy590;
                if (yych != 'i') goto yy150;
 -yy588:
 -              YYDEBUG(588, *YYCURSOR);
 +yy590:
 +              YYDEBUG(590, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'T') goto yy589;
 +              if (yych == 'T') goto yy591;
                if (yych != 't') goto yy150;
 -yy589:
 -              YYDEBUG(589, *YYCURSOR);
 +yy591:
 +              YYDEBUG(591, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(590, *YYCURSOR);
 +              YYDEBUG(592, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1243 "Zend/zend_language_scanner.l"
 -#line 1250 "Zend/zend_language_scanner.l"
++#line 1247 "Zend/zend_language_scanner.l"
                {
        return T_TRAIT;
  }
- #line 5765 "Zend/zend_language_scanner.c"
 -#line 5750 "Zend/zend_language_scanner.c"
 -yy591:
 -              YYDEBUG(591, *YYCURSOR);
++#line 5769 "Zend/zend_language_scanner.c"
 +yy593:
 +              YYDEBUG(593, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'O') goto yy592;
 +              if (yych == 'O') goto yy594;
                if (yych != 'o') goto yy150;
 -yy592:
 -              YYDEBUG(592, *YYCURSOR);
 +yy594:
 +              YYDEBUG(594, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'W') goto yy593;
 +              if (yych == 'W') goto yy595;
                if (yych != 'w') goto yy150;
 -yy593:
 -              YYDEBUG(593, *YYCURSOR);
 +yy595:
 +              YYDEBUG(595, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
 -              YYDEBUG(594, *YYCURSOR);
 +              YYDEBUG(596, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1135 "Zend/zend_language_scanner.l"
 -#line 1142 "Zend/zend_language_scanner.l"
++#line 1139 "Zend/zend_language_scanner.l"
                {
        return T_THROW;
  }
- #line 5788 "Zend/zend_language_scanner.c"
 -#line 5773 "Zend/zend_language_scanner.c"
 -yy595:
 -              YYDEBUG(595, *YYCURSOR);
++#line 5792 "Zend/zend_language_scanner.c"
 +yy597:
 +              YYDEBUG(597, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'E') goto yy596;
 +              if (yych == 'E') goto yy598;
                if (yych != 'e') goto yy150;
 -yy596:
 -              YYDEBUG(596, *YYCURSOR);
 +yy598:
 +              YYDEBUG(598, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'L') goto yy597;
 +              if (yych == 'L') goto yy599;
                if (yych != 'l') goto yy150;
 -yy597:
 -              YYDEBUG(597, *YYCURSOR);
 +yy599:
 +              YYDEBUG(599, *YYCURSOR);
                yych = *++YYCURSOR;
 -              if (yych == 'D') goto yy598;
 +              if (yych == 'D') goto yy600;
                if (yych != 'd') goto yy150;
 -yy598:
 -              YYDEBUG(598, *YYCURSOR);
 +yy600:
 +              YYDEBUG(600, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 4) {
+               yyaccept = 6;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if (yybm[0+yych] & 4) {
                        goto yy149;
                }
 -                      if (yych <= 0x08) goto yy599;
 -                      if (yych <= '\n') goto yy600;
+               if (yych <= '\f') {
 -                      if (yych <= '\r') goto yy600;
 -                      if (yych == ' ') goto yy600;
++                      if (yych <= 0x08) goto yy601;
++                      if (yych <= '\n') goto yy602;
+               } else {
 -yy599:
 -              YYDEBUG(599, *YYCURSOR);
++                      if (yych <= '\r') goto yy602;
++                      if (yych == ' ') goto yy602;
+               }
++yy601:
 +              YYDEBUG(601, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1119 "Zend/zend_language_scanner.l"
 -#line 1126 "Zend/zend_language_scanner.l"
++#line 1123 "Zend/zend_language_scanner.l"
                {
        return T_YIELD;
  }
- #line 5816 "Zend/zend_language_scanner.c"
 -#line 5810 "Zend/zend_language_scanner.c"
 -yy600:
 -              YYDEBUG(600, *YYCURSOR);
++#line 5829 "Zend/zend_language_scanner.c"
 +yy602:
 +              YYDEBUG(602, *YYCURSOR);
+               ++YYCURSOR;
+               YYFILL(4);
+               yych = *YYCURSOR;
 -              YYDEBUG(601, *YYCURSOR);
++              YYDEBUG(603, *YYCURSOR);
+               if (yych <= 0x1F) {
+                       if (yych <= '\n') {
+                               if (yych <= 0x08) goto yy157;
 -                              goto yy600;
++                              goto yy602;
+                       } else {
 -                              if (yych == '\r') goto yy600;
++                              if (yych == '\r') goto yy602;
+                               goto yy157;
+                       }
+               } else {
+                       if (yych <= 'F') {
 -                              if (yych <= ' ') goto yy600;
++                              if (yych <= ' ') goto yy602;
+                               if (yych <= 'E') goto yy157;
+                       } else {
+                               if (yych != 'f') goto yy157;
+                       }
+               }
 -              YYDEBUG(602, *YYCURSOR);
++              YYDEBUG(604, *YYCURSOR);
+               yych = *++YYCURSOR;
 -              if (yych == 'R') goto yy603;
++              if (yych == 'R') goto yy605;
+               if (yych != 'r') goto yy157;
 -yy603:
 -              YYDEBUG(603, *YYCURSOR);
++yy605:
++              YYDEBUG(605, *YYCURSOR);
+               yych = *++YYCURSOR;
 -              if (yych == 'O') goto yy604;
++              if (yych == 'O') goto yy606;
+               if (yych != 'o') goto yy157;
 -yy604:
 -              YYDEBUG(604, *YYCURSOR);
++yy606:
++              YYDEBUG(606, *YYCURSOR);
+               yych = *++YYCURSOR;
 -              if (yych == 'M') goto yy605;
++              if (yych == 'M') goto yy607;
+               if (yych != 'm') goto yy157;
 -yy605:
 -              YYDEBUG(605, *YYCURSOR);
++yy607:
++              YYDEBUG(607, *YYCURSOR);
+               ++YYCURSOR;
 -              YYDEBUG(606, *YYCURSOR);
++              YYDEBUG(608, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
 -#line 1122 "Zend/zend_language_scanner.l"
++#line 1119 "Zend/zend_language_scanner.l"
+               {
+       return T_YIELD_FROM;
+ }
 -#line 5856 "Zend/zend_language_scanner.c"
 -yy607:
 -              YYDEBUG(607, *YYCURSOR);
++#line 5875 "Zend/zend_language_scanner.c"
++yy609:
++              YYDEBUG(609, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'T') {
-                       if (yych == 'Q') goto yy604;
 -                      if (yych == 'Q') goto yy609;
++                      if (yych == 'Q') goto yy611;
                        if (yych <= 'S') goto yy150;
                } else {
                        if (yych <= 'q') {
                                if (yych <= 'p') goto yy150;
-                               goto yy604;
 -                              goto yy609;
++                              goto yy611;
                        } else {
                                if (yych != 't') goto yy150;
                        }
                }
-               YYDEBUG(603, *YYCURSOR);
 -              YYDEBUG(608, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'U') goto yy621;
 -              if (yych == 'u') goto yy621;
 -              goto yy150;
 -yy609:
 -              YYDEBUG(609, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'U') goto yy610;
 -              if (yych != 'u') goto yy150;
 -yy610:
+               YYDEBUG(610, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'U') goto yy616;
-               if (yych == 'u') goto yy616;
 -              if (yych == 'I') goto yy611;
 -              if (yych != 'i') goto yy150;
++              if (yych == 'U') goto yy623;
++              if (yych == 'u') goto yy623;
 +              goto yy150;
- yy604:
-               YYDEBUG(604, *YYCURSOR);
+ yy611:
+               YYDEBUG(611, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'U') goto yy605;
 -              if (yych == 'R') goto yy612;
 -              if (yych != 'r') goto yy150;
++              if (yych == 'U') goto yy612;
 +              if (yych != 'u') goto yy150;
- yy605:
-               YYDEBUG(605, *YYCURSOR);
+ yy612:
+               YYDEBUG(612, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy606;
 -              if (yych == 'E') goto yy613;
 -              if (yych != 'e') goto yy150;
++              if (yych == 'I') goto yy613;
 +              if (yych != 'i') goto yy150;
- yy606:
-               YYDEBUG(606, *YYCURSOR);
+ yy613:
+               YYDEBUG(613, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy607;
++              if (yych == 'R') goto yy614;
 +              if (yych != 'r') goto yy150;
- yy607:
-               YYDEBUG(607, *YYCURSOR);
++yy614:
++              YYDEBUG(614, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy608;
++              if (yych == 'E') goto yy615;
 +              if (yych != 'e') goto yy150;
- yy608:
-               YYDEBUG(608, *YYCURSOR);
++yy615:
++              YYDEBUG(615, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) <= '^') {
                        if (yych <= '9') {
                                if (yych >= '0') goto yy149;
                        } else {
-                               if (yych <= '@') goto yy609;
 -                              if (yych <= '@') goto yy614;
++                              if (yych <= '@') goto yy616;
                                if (yych <= 'Z') goto yy149;
                        }
                } else {
                        if (yych <= '`') {
-                               if (yych <= '_') goto yy610;
 -                              if (yych <= '_') goto yy615;
++                              if (yych <= '_') goto yy617;
                        } else {
                                if (yych <= 'z') goto yy149;
                                if (yych >= 0x7F) goto yy149;
                        }
                }
- yy609:
-               YYDEBUG(609, *YYCURSOR);
 -yy614:
 -              YYDEBUG(614, *YYCURSOR);
++yy616:
++              YYDEBUG(616, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1349 "Zend/zend_language_scanner.l"
 -#line 1356 "Zend/zend_language_scanner.l"
++#line 1353 "Zend/zend_language_scanner.l"
                {
        return T_REQUIRE;
  }
- #line 5881 "Zend/zend_language_scanner.c"
- yy610:
-               YYDEBUG(610, *YYCURSOR);
 -#line 5921 "Zend/zend_language_scanner.c"
 -yy615:
 -              YYDEBUG(615, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'O') goto yy616;
 -              if (yych != 'o') goto yy150;
 -yy616:
 -              YYDEBUG(616, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'N') goto yy617;
 -              if (yych != 'n') goto yy150;
++#line 5940 "Zend/zend_language_scanner.c"
+ yy617:
+               YYDEBUG(617, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy611;
 -              if (yych == 'C') goto yy618;
 -              if (yych != 'c') goto yy150;
++              if (yych == 'O') goto yy618;
 +              if (yych != 'o') goto yy150;
- yy611:
-               YYDEBUG(611, *YYCURSOR);
+ yy618:
+               YYDEBUG(618, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy612;
 -              if (yych == 'E') goto yy619;
 -              if (yych != 'e') goto yy150;
++              if (yych == 'N') goto yy619;
 +              if (yych != 'n') goto yy150;
- yy612:
-               YYDEBUG(612, *YYCURSOR);
+ yy619:
+               YYDEBUG(619, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy613;
++              if (yych == 'C') goto yy620;
 +              if (yych != 'c') goto yy150;
- yy613:
-               YYDEBUG(613, *YYCURSOR);
++yy620:
++              YYDEBUG(620, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy614;
++              if (yych == 'E') goto yy621;
 +              if (yych != 'e') goto yy150;
- yy614:
-               YYDEBUG(614, *YYCURSOR);
++yy621:
++              YYDEBUG(621, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(615, *YYCURSOR);
 -              YYDEBUG(620, *YYCURSOR);
++              YYDEBUG(622, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1353 "Zend/zend_language_scanner.l"
 -#line 1360 "Zend/zend_language_scanner.l"
++#line 1357 "Zend/zend_language_scanner.l"
                {
        return T_REQUIRE_ONCE;
  }
- #line 5914 "Zend/zend_language_scanner.c"
- yy616:
-               YYDEBUG(616, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'R') goto yy617;
 -#line 5954 "Zend/zend_language_scanner.c"
 -yy621:
 -              YYDEBUG(621, *YYCURSOR);
++#line 5973 "Zend/zend_language_scanner.c"
++yy623:
++              YYDEBUG(623, *YYCURSOR);
+               yych = *++YYCURSOR;
 -              if (yych == 'R') goto yy622;
++              if (yych == 'R') goto yy624;
                if (yych != 'r') goto yy150;
- yy617:
-               YYDEBUG(617, *YYCURSOR);
 -yy622:
 -              YYDEBUG(622, *YYCURSOR);
++yy624:
++              YYDEBUG(624, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy618;
 -              if (yych == 'N') goto yy623;
++              if (yych == 'N') goto yy625;
                if (yych != 'n') goto yy150;
- yy618:
-               YYDEBUG(618, *YYCURSOR);
 -yy623:
 -              YYDEBUG(623, *YYCURSOR);
++yy625:
++              YYDEBUG(625, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(619, *YYCURSOR);
 -              YYDEBUG(624, *YYCURSOR);
++              YYDEBUG(626, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
 -#line 1118 "Zend/zend_language_scanner.l"
 +#line 1115 "Zend/zend_language_scanner.l"
                {
        return T_RETURN;
  }
- #line 5937 "Zend/zend_language_scanner.c"
- yy620:
-               YYDEBUG(620, *YYCURSOR);
 -#line 5977 "Zend/zend_language_scanner.c"
 -yy625:
 -              YYDEBUG(625, *YYCURSOR);
++#line 5996 "Zend/zend_language_scanner.c"
++yy627:
++              YYDEBUG(627, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'T') {
                        if (yych <= 'L') {
                                if (yych <= 'K') goto yy150;
-                               goto yy643;
 -                              goto yy648;
++                              goto yy650;
                        } else {
                                if (yych <= 'R') goto yy150;
-                               if (yych <= 'S') goto yy642;
-                               goto yy641;
 -                              if (yych <= 'S') goto yy647;
 -                              goto yy646;
++                              if (yych <= 'S') goto yy649;
++                              goto yy648;
                        }
                } else {
                        if (yych <= 'r') {
-                               if (yych == 'l') goto yy643;
 -                              if (yych == 'l') goto yy648;
++                              if (yych == 'l') goto yy650;
                                goto yy150;
                        } else {
-                               if (yych <= 's') goto yy642;
-                               if (yych <= 't') goto yy641;
 -                              if (yych <= 's') goto yy647;
 -                              if (yych <= 't') goto yy646;
++                              if (yych <= 's') goto yy649;
++                              if (yych <= 't') goto yy648;
                                goto yy150;
                        }
                }
- yy621:
-               YYDEBUG(621, *YYCURSOR);
 -yy626:
 -              YYDEBUG(626, *YYCURSOR);
++yy628:
++              YYDEBUG(628, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'O') {
-                       if (yych == 'A') goto yy633;
 -                      if (yych == 'A') goto yy638;
++                      if (yych == 'A') goto yy640;
                        if (yych <= 'N') goto yy150;
-                       goto yy634;
 -                      goto yy639;
++                      goto yy641;
                } else {
                        if (yych <= 'a') {
                                if (yych <= '`') goto yy150;
-                               goto yy633;
 -                              goto yy638;
++                              goto yy640;
                        } else {
-                               if (yych == 'o') goto yy634;
 -                              if (yych == 'o') goto yy639;
++                              if (yych == 'o') goto yy641;
                                goto yy150;
                        }
                }
- yy622:
-               YYDEBUG(622, *YYCURSOR);
 -yy627:
 -              YYDEBUG(627, *YYCURSOR);
++yy629:
++              YYDEBUG(629, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy623;
 -              if (yych == 'N') goto yy628;
++              if (yych == 'N') goto yy630;
                if (yych != 'n') goto yy150;
- yy623:
-               YYDEBUG(623, *YYCURSOR);
 -yy628:
 -              YYDEBUG(628, *YYCURSOR);
++yy630:
++              YYDEBUG(630, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'T') {
                        if (yych <= 'R') goto yy150;
-                       if (yych >= 'T') goto yy625;
 -                      if (yych >= 'T') goto yy630;
++                      if (yych >= 'T') goto yy632;
                } else {
                        if (yych <= 'r') goto yy150;
-                       if (yych <= 's') goto yy624;
-                       if (yych <= 't') goto yy625;
 -                      if (yych <= 's') goto yy629;
 -                      if (yych <= 't') goto yy630;
++                      if (yych <= 's') goto yy631;
++                      if (yych <= 't') goto yy632;
                        goto yy150;
                }
- yy624:
-               YYDEBUG(624, *YYCURSOR);
 -yy629:
 -              YYDEBUG(629, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'T') goto yy636;
 -              if (yych == 't') goto yy636;
 -              goto yy150;
 -yy630:
 -              YYDEBUG(630, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'I') goto yy631;
 -              if (yych != 'i') goto yy150;
+ yy631:
+               YYDEBUG(631, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy631;
-               if (yych == 't') goto yy631;
 -              if (yych == 'N') goto yy632;
 -              if (yych != 'n') goto yy150;
++              if (yych == 'T') goto yy638;
++              if (yych == 't') goto yy638;
 +              goto yy150;
- yy625:
-               YYDEBUG(625, *YYCURSOR);
+ yy632:
+               YYDEBUG(632, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy626;
 -              if (yych == 'U') goto yy633;
 -              if (yych != 'u') goto yy150;
++              if (yych == 'I') goto yy633;
 +              if (yych != 'i') goto yy150;
- yy626:
-               YYDEBUG(626, *YYCURSOR);
+ yy633:
+               YYDEBUG(633, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy627;
 -              if (yych == 'E') goto yy634;
 -              if (yych != 'e') goto yy150;
++              if (yych == 'N') goto yy634;
 +              if (yych != 'n') goto yy150;
- yy627:
-               YYDEBUG(627, *YYCURSOR);
+ yy634:
+               YYDEBUG(634, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'U') goto yy628;
++              if (yych == 'U') goto yy635;
 +              if (yych != 'u') goto yy150;
- yy628:
-               YYDEBUG(628, *YYCURSOR);
++yy635:
++              YYDEBUG(635, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy629;
++              if (yych == 'E') goto yy636;
 +              if (yych != 'e') goto yy150;
- yy629:
-               YYDEBUG(629, *YYCURSOR);
++yy636:
++              YYDEBUG(636, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(630, *YYCURSOR);
 -              YYDEBUG(635, *YYCURSOR);
++              YYDEBUG(637, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1219 "Zend/zend_language_scanner.l"
 -#line 1226 "Zend/zend_language_scanner.l"
++#line 1223 "Zend/zend_language_scanner.l"
                {
        return T_CONTINUE;
  }
- #line 6031 "Zend/zend_language_scanner.c"
- yy631:
-               YYDEBUG(631, *YYCURSOR);
 -#line 6071 "Zend/zend_language_scanner.c"
 -yy636:
 -              YYDEBUG(636, *YYCURSOR);
++#line 6090 "Zend/zend_language_scanner.c"
++yy638:
++              YYDEBUG(638, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(632, *YYCURSOR);
 -              YYDEBUG(637, *YYCURSOR);
++              YYDEBUG(639, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
 -#line 1114 "Zend/zend_language_scanner.l"
 +#line 1111 "Zend/zend_language_scanner.l"
                {
        return T_CONST;
  }
- #line 6044 "Zend/zend_language_scanner.c"
- yy633:
-               YYDEBUG(633, *YYCURSOR);
 -#line 6084 "Zend/zend_language_scanner.c"
 -yy638:
 -              YYDEBUG(638, *YYCURSOR);
++#line 6103 "Zend/zend_language_scanner.c"
++yy640:
++              YYDEBUG(640, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy638;
-               if (yych == 's') goto yy638;
 -              if (yych == 'S') goto yy643;
 -              if (yych == 's') goto yy643;
++              if (yych == 'S') goto yy645;
++              if (yych == 's') goto yy645;
                goto yy150;
- yy634:
-               YYDEBUG(634, *YYCURSOR);
 -yy639:
 -              YYDEBUG(639, *YYCURSOR);
++yy641:
++              YYDEBUG(641, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy635;
 -              if (yych == 'N') goto yy640;
++              if (yych == 'N') goto yy642;
                if (yych != 'n') goto yy150;
- yy635:
-               YYDEBUG(635, *YYCURSOR);
 -yy640:
 -              YYDEBUG(640, *YYCURSOR);
++yy642:
++              YYDEBUG(642, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy636;
 -              if (yych == 'E') goto yy641;
++              if (yych == 'E') goto yy643;
                if (yych != 'e') goto yy150;
- yy636:
-               YYDEBUG(636, *YYCURSOR);
 -yy641:
 -              YYDEBUG(641, *YYCURSOR);
++yy643:
++              YYDEBUG(643, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(637, *YYCURSOR);
 -              YYDEBUG(642, *YYCURSOR);
++              YYDEBUG(644, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1301 "Zend/zend_language_scanner.l"
 -#line 1308 "Zend/zend_language_scanner.l"
++#line 1305 "Zend/zend_language_scanner.l"
                {
        return T_CLONE;
  }
- #line 6073 "Zend/zend_language_scanner.c"
- yy638:
-               YYDEBUG(638, *YYCURSOR);
 -#line 6113 "Zend/zend_language_scanner.c"
 -yy643:
 -              YYDEBUG(643, *YYCURSOR);
++#line 6132 "Zend/zend_language_scanner.c"
++yy645:
++              YYDEBUG(645, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy639;
 -              if (yych == 'S') goto yy644;
++              if (yych == 'S') goto yy646;
                if (yych != 's') goto yy150;
- yy639:
-               YYDEBUG(639, *YYCURSOR);
 -yy644:
 -              YYDEBUG(644, *YYCURSOR);
++yy646:
++              YYDEBUG(646, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(640, *YYCURSOR);
 -              YYDEBUG(645, *YYCURSOR);
++              YYDEBUG(647, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1235 "Zend/zend_language_scanner.l"
 -#line 1242 "Zend/zend_language_scanner.l"
++#line 1239 "Zend/zend_language_scanner.l"
                {
        return T_CLASS;
  }
- #line 6091 "Zend/zend_language_scanner.c"
- yy641:
-               YYDEBUG(641, *YYCURSOR);
 -#line 6131 "Zend/zend_language_scanner.c"
 -yy646:
 -              YYDEBUG(646, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'C') goto yy657;
 -              if (yych == 'c') goto yy657;
 -              goto yy150;
 -yy647:
 -              YYDEBUG(647, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'E') goto yy655;
 -              if (yych == 'e') goto yy655;
 -              goto yy150;
++#line 6150 "Zend/zend_language_scanner.c"
+ yy648:
+               YYDEBUG(648, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy652;
-               if (yych == 'c') goto yy652;
 -              if (yych == 'L') goto yy649;
 -              if (yych != 'l') goto yy150;
++              if (yych == 'C') goto yy659;
++              if (yych == 'c') goto yy659;
 +              goto yy150;
- yy642:
-               YYDEBUG(642, *YYCURSOR);
+ yy649:
+               YYDEBUG(649, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy650;
-               if (yych == 'e') goto yy650;
 -              if (yych == 'A') goto yy650;
 -              if (yych != 'a') goto yy150;
++              if (yych == 'E') goto yy657;
++              if (yych == 'e') goto yy657;
 +              goto yy150;
- yy643:
-               YYDEBUG(643, *YYCURSOR);
+ yy650:
+               YYDEBUG(650, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy644;
 -              if (yych == 'B') goto yy651;
 -              if (yych != 'b') goto yy150;
++              if (yych == 'L') goto yy651;
 +              if (yych != 'l') goto yy150;
- yy644:
-               YYDEBUG(644, *YYCURSOR);
+ yy651:
+               YYDEBUG(651, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy645;
 -              if (yych == 'L') goto yy652;
 -              if (yych != 'l') goto yy150;
++              if (yych == 'A') goto yy652;
 +              if (yych != 'a') goto yy150;
- yy645:
-               YYDEBUG(645, *YYCURSOR);
+ yy652:
+               YYDEBUG(652, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'B') goto yy646;
 -              if (yych == 'E') goto yy653;
 -              if (yych != 'e') goto yy150;
++              if (yych == 'B') goto yy653;
 +              if (yych != 'b') goto yy150;
- yy646:
-               YYDEBUG(646, *YYCURSOR);
+ yy653:
+               YYDEBUG(653, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy647;
++              if (yych == 'L') goto yy654;
 +              if (yych != 'l') goto yy150;
- yy647:
-               YYDEBUG(647, *YYCURSOR);
++yy654:
++              YYDEBUG(654, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy648;
++              if (yych == 'E') goto yy655;
 +              if (yych != 'e') goto yy150;
- yy648:
-               YYDEBUG(648, *YYCURSOR);
++yy655:
++              YYDEBUG(655, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(649, *YYCURSOR);
 -              YYDEBUG(654, *YYCURSOR);
++              YYDEBUG(656, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1425 "Zend/zend_language_scanner.l"
 -#line 1432 "Zend/zend_language_scanner.l"
++#line 1429 "Zend/zend_language_scanner.l"
                {
   return T_CALLABLE;
  }
- #line 6141 "Zend/zend_language_scanner.c"
- yy650:
-               YYDEBUG(650, *YYCURSOR);
 -#line 6181 "Zend/zend_language_scanner.c"
 -yy655:
 -              YYDEBUG(655, *YYCURSOR);
++#line 6200 "Zend/zend_language_scanner.c"
++yy657:
++              YYDEBUG(657, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(651, *YYCURSOR);
 -              YYDEBUG(656, *YYCURSOR);
++              YYDEBUG(658, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1207 "Zend/zend_language_scanner.l"
 -#line 1214 "Zend/zend_language_scanner.l"
++#line 1211 "Zend/zend_language_scanner.l"
                {
        return T_CASE;
  }
- #line 6154 "Zend/zend_language_scanner.c"
- yy652:
-               YYDEBUG(652, *YYCURSOR);
 -#line 6194 "Zend/zend_language_scanner.c"
 -yy657:
 -              YYDEBUG(657, *YYCURSOR);
++#line 6213 "Zend/zend_language_scanner.c"
++yy659:
++              YYDEBUG(659, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'H') goto yy653;
 -              if (yych == 'H') goto yy658;
++              if (yych == 'H') goto yy660;
                if (yych != 'h') goto yy150;
- yy653:
-               YYDEBUG(653, *YYCURSOR);
 -yy658:
 -              YYDEBUG(658, *YYCURSOR);
++yy660:
++              YYDEBUG(660, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(654, *YYCURSOR);
 -              YYDEBUG(659, *YYCURSOR);
++              YYDEBUG(661, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1127 "Zend/zend_language_scanner.l"
 -#line 1134 "Zend/zend_language_scanner.l"
++#line 1131 "Zend/zend_language_scanner.l"
                {
        return T_CATCH;
  }
- #line 6172 "Zend/zend_language_scanner.c"
- yy655:
-               YYDEBUG(655, *YYCURSOR);
 -#line 6212 "Zend/zend_language_scanner.c"
 -yy660:
 -              YYDEBUG(660, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'N') goto yy677;
 -              if (yych == 'n') goto yy677;
 -              goto yy150;
 -yy661:
 -              YYDEBUG(661, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'R') goto yy670;
 -              if (yych == 'r') goto yy670;
 -              goto yy150;
++#line 6231 "Zend/zend_language_scanner.c"
+ yy662:
+               YYDEBUG(662, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy672;
-               if (yych == 'n') goto yy672;
 -              if (yych == 'N') goto yy663;
 -              if (yych != 'n') goto yy150;
++              if (yych == 'N') goto yy679;
++              if (yych == 'n') goto yy679;
 +              goto yy150;
- yy656:
-               YYDEBUG(656, *YYCURSOR);
+ yy663:
+               YYDEBUG(663, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy665;
-               if (yych == 'r') goto yy665;
 -              if (yych == 'C') goto yy664;
 -              if (yych != 'c') goto yy150;
++              if (yych == 'R') goto yy672;
++              if (yych == 'r') goto yy672;
 +              goto yy150;
- yy657:
-               YYDEBUG(657, *YYCURSOR);
+ yy664:
+               YYDEBUG(664, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy658;
 -              if (yych == 'T') goto yy665;
 -              if (yych != 't') goto yy150;
++              if (yych == 'N') goto yy665;
 +              if (yych != 'n') goto yy150;
- yy658:
-               YYDEBUG(658, *YYCURSOR);
+ yy665:
+               YYDEBUG(665, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy659;
 -              if (yych == 'I') goto yy666;
 -              if (yych != 'i') goto yy150;
++              if (yych == 'C') goto yy666;
 +              if (yych != 'c') goto yy150;
- yy659:
-               YYDEBUG(659, *YYCURSOR);
+ yy666:
+               YYDEBUG(666, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy660;
 -              if (yych == 'O') goto yy667;
 -              if (yych != 'o') goto yy150;
++              if (yych == 'T') goto yy667;
 +              if (yych != 't') goto yy150;
- yy660:
-               YYDEBUG(660, *YYCURSOR);
+ yy667:
+               YYDEBUG(667, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy661;
 -              if (yych == 'N') goto yy668;
 -              if (yych != 'n') goto yy150;
++              if (yych == 'I') goto yy668;
 +              if (yych != 'i') goto yy150;
- yy661:
-               YYDEBUG(661, *YYCURSOR);
+ yy668:
+               YYDEBUG(668, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'O') goto yy662;
++              if (yych == 'O') goto yy669;
 +              if (yych != 'o') goto yy150;
- yy662:
-               YYDEBUG(662, *YYCURSOR);
++yy669:
++              YYDEBUG(669, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'N') goto yy663;
++              if (yych == 'N') goto yy670;
 +              if (yych != 'n') goto yy150;
- yy663:
-               YYDEBUG(663, *YYCURSOR);
++yy670:
++              YYDEBUG(670, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(664, *YYCURSOR);
 -              YYDEBUG(669, *YYCURSOR);
++              YYDEBUG(671, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
 -#line 1110 "Zend/zend_language_scanner.l"
 +#line 1107 "Zend/zend_language_scanner.l"
                {
        return T_FUNCTION;
  }
- #line 6227 "Zend/zend_language_scanner.c"
- yy665:
-               YYDEBUG(665, *YYCURSOR);
 -#line 6267 "Zend/zend_language_scanner.c"
 -yy670:
 -              YYDEBUG(670, *YYCURSOR);
++#line 6286 "Zend/zend_language_scanner.c"
++yy672:
++              YYDEBUG(672, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) <= '^') {
                        if (yych <= '@') {
-                               if (yych <= '/') goto yy666;
 -                              if (yych <= '/') goto yy671;
++                              if (yych <= '/') goto yy673;
                                if (yych <= '9') goto yy149;
                        } else {
-                               if (yych == 'E') goto yy667;
 -                              if (yych == 'E') goto yy672;
++                              if (yych == 'E') goto yy674;
                                if (yych <= 'Z') goto yy149;
                        }
                } else {
                        if (yych <= 'd') {
                                if (yych != '`') goto yy149;
                        } else {
-                               if (yych <= 'e') goto yy667;
 -                              if (yych <= 'e') goto yy672;
++                              if (yych <= 'e') goto yy674;
                                if (yych <= 'z') goto yy149;
                                if (yych >= 0x7F) goto yy149;
                        }
                }
- yy666:
-               YYDEBUG(666, *YYCURSOR);
 -yy671:
 -              YYDEBUG(671, *YYCURSOR);
++yy673:
++              YYDEBUG(673, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1167 "Zend/zend_language_scanner.l"
 -#line 1174 "Zend/zend_language_scanner.l"
++#line 1171 "Zend/zend_language_scanner.l"
                {
        return T_FOR;
  }
- #line 6255 "Zend/zend_language_scanner.c"
- yy667:
-               YYDEBUG(667, *YYCURSOR);
 -#line 6295 "Zend/zend_language_scanner.c"
 -yy672:
 -              YYDEBUG(672, *YYCURSOR);
++#line 6314 "Zend/zend_language_scanner.c"
++yy674:
++              YYDEBUG(674, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy668;
 -              if (yych == 'A') goto yy673;
++              if (yych == 'A') goto yy675;
                if (yych != 'a') goto yy150;
- yy668:
-               YYDEBUG(668, *YYCURSOR);
 -yy673:
 -              YYDEBUG(673, *YYCURSOR);
++yy675:
++              YYDEBUG(675, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy669;
 -              if (yych == 'C') goto yy674;
++              if (yych == 'C') goto yy676;
                if (yych != 'c') goto yy150;
- yy669:
-               YYDEBUG(669, *YYCURSOR);
 -yy674:
 -              YYDEBUG(674, *YYCURSOR);
++yy676:
++              YYDEBUG(676, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'H') goto yy670;
 -              if (yych == 'H') goto yy675;
++              if (yych == 'H') goto yy677;
                if (yych != 'h') goto yy150;
- yy670:
-               YYDEBUG(670, *YYCURSOR);
 -yy675:
 -              YYDEBUG(675, *YYCURSOR);
++yy677:
++              YYDEBUG(677, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(671, *YYCURSOR);
 -              YYDEBUG(676, *YYCURSOR);
++              YYDEBUG(678, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1175 "Zend/zend_language_scanner.l"
 -#line 1182 "Zend/zend_language_scanner.l"
++#line 1179 "Zend/zend_language_scanner.l"
                {
        return T_FOREACH;
  }
- #line 6283 "Zend/zend_language_scanner.c"
- yy672:
-               YYDEBUG(672, *YYCURSOR);
 -#line 6323 "Zend/zend_language_scanner.c"
 -yy677:
 -              YYDEBUG(677, *YYCURSOR);
++#line 6342 "Zend/zend_language_scanner.c"
++yy679:
++              YYDEBUG(679, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy673;
 -              if (yych == 'A') goto yy678;
++              if (yych == 'A') goto yy680;
                if (yych != 'a') goto yy150;
- yy673:
-               YYDEBUG(673, *YYCURSOR);
 -yy678:
 -              YYDEBUG(678, *YYCURSOR);
++yy680:
++              YYDEBUG(680, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy674;
 -              if (yych == 'L') goto yy679;
++              if (yych == 'L') goto yy681;
                if (yych != 'l') goto yy150;
- yy674:
-               YYDEBUG(674, *YYCURSOR);
 -yy679:
 -              YYDEBUG(679, *YYCURSOR);
++yy681:
++              YYDEBUG(681, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) <= '^') {
                        if (yych <= '@') {
-                               if (yych <= '/') goto yy675;
 -                              if (yych <= '/') goto yy680;
++                              if (yych <= '/') goto yy682;
                                if (yych <= '9') goto yy149;
                        } else {
-                               if (yych == 'L') goto yy676;
 -                              if (yych == 'L') goto yy681;
++                              if (yych == 'L') goto yy683;
                                if (yych <= 'Z') goto yy149;
                        }
                } else {
                        if (yych <= 'k') {
                                if (yych != '`') goto yy149;
                        } else {
-                               if (yych <= 'l') goto yy676;
 -                              if (yych <= 'l') goto yy681;
++                              if (yych <= 'l') goto yy683;
                                if (yych <= 'z') goto yy149;
                                if (yych >= 0x7F) goto yy149;
                        }
                }
- yy675:
-               YYDEBUG(675, *YYCURSOR);
 -yy680:
 -              YYDEBUG(680, *YYCURSOR);
++yy682:
++              YYDEBUG(682, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1393 "Zend/zend_language_scanner.l"
 -#line 1400 "Zend/zend_language_scanner.l"
++#line 1397 "Zend/zend_language_scanner.l"
                {
        return T_FINAL;
  }
- #line 6321 "Zend/zend_language_scanner.c"
- yy676:
-               YYDEBUG(676, *YYCURSOR);
 -#line 6361 "Zend/zend_language_scanner.c"
 -yy681:
 -              YYDEBUG(681, *YYCURSOR);
++#line 6380 "Zend/zend_language_scanner.c"
++yy683:
++              YYDEBUG(683, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'Y') goto yy677;
 -              if (yych == 'Y') goto yy682;
++              if (yych == 'Y') goto yy684;
                if (yych != 'y') goto yy150;
- yy677:
-               YYDEBUG(677, *YYCURSOR);
 -yy682:
 -              YYDEBUG(682, *YYCURSOR);
++yy684:
++              YYDEBUG(684, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(678, *YYCURSOR);
 -              YYDEBUG(683, *YYCURSOR);
++              YYDEBUG(685, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1131 "Zend/zend_language_scanner.l"
 -#line 1138 "Zend/zend_language_scanner.l"
++#line 1135 "Zend/zend_language_scanner.l"
                {
        return T_FINALLY;
  }
- #line 6339 "Zend/zend_language_scanner.c"
- yy679:
-               YYDEBUG(679, *YYCURSOR);
 -#line 6379 "Zend/zend_language_scanner.c"
 -yy684:
 -              YYDEBUG(684, *YYCURSOR);
++#line 6398 "Zend/zend_language_scanner.c"
++yy686:
++              YYDEBUG(686, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= 'F') {
-                       if (yych == 'C') goto yy685;
 -                      if (yych == 'C') goto yy690;
++                      if (yych == 'C') goto yy692;
                        if (yych <= 'E') goto yy150;
-                       goto yy686;
 -                      goto yy691;
++                      goto yy693;
                } else {
                        if (yych <= 'c') {
                                if (yych <= 'b') goto yy150;
-                               goto yy685;
 -                              goto yy690;
++                              goto yy692;
                        } else {
-                               if (yych == 'f') goto yy686;
 -                              if (yych == 'f') goto yy691;
++                              if (yych == 'f') goto yy693;
                                goto yy150;
                        }
                }
- yy680:
-               YYDEBUG(680, *YYCURSOR);
 -yy685:
 -              YYDEBUG(685, *YYCURSOR);
++yy687:
++              YYDEBUG(687, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy683;
-               if (yych == 'e') goto yy683;
 -              if (yych == 'E') goto yy688;
 -              if (yych == 'e') goto yy688;
++              if (yych == 'E') goto yy690;
++              if (yych == 'e') goto yy690;
                goto yy150;
- yy681:
-               YYDEBUG(681, *YYCURSOR);
 -yy686:
 -              YYDEBUG(686, *YYCURSOR);
++yy688:
++              YYDEBUG(688, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(682, *YYCURSOR);
 -              YYDEBUG(687, *YYCURSOR);
++              YYDEBUG(689, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1163 "Zend/zend_language_scanner.l"
 -#line 1170 "Zend/zend_language_scanner.l"
++#line 1167 "Zend/zend_language_scanner.l"
                {
        return T_DO;
  }
- #line 6374 "Zend/zend_language_scanner.c"
- yy683:
-               YYDEBUG(683, *YYCURSOR);
 -#line 6414 "Zend/zend_language_scanner.c"
 -yy688:
 -              YYDEBUG(688, *YYCURSOR);
++#line 6433 "Zend/zend_language_scanner.c"
++yy690:
++              YYDEBUG(690, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(684, *YYCURSOR);
 -              YYDEBUG(689, *YYCURSOR);
++              YYDEBUG(691, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
 -#line 1106 "Zend/zend_language_scanner.l"
 +#line 1103 "Zend/zend_language_scanner.l"
                {
        return T_EXIT;
  }
- #line 6387 "Zend/zend_language_scanner.c"
- yy685:
-               YYDEBUG(685, *YYCURSOR);
 -#line 6427 "Zend/zend_language_scanner.c"
 -yy690:
 -              YYDEBUG(690, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'L') goto yy697;
 -              if (yych == 'l') goto yy697;
 -              goto yy150;
 -yy691:
 -              YYDEBUG(691, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'A') goto yy692;
 -              if (yych != 'a') goto yy150;
++#line 6446 "Zend/zend_language_scanner.c"
+ yy692:
+               YYDEBUG(692, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy692;
-               if (yych == 'l') goto yy692;
 -              if (yych == 'U') goto yy693;
 -              if (yych != 'u') goto yy150;
++              if (yych == 'L') goto yy699;
++              if (yych == 'l') goto yy699;
 +              goto yy150;
- yy686:
-               YYDEBUG(686, *YYCURSOR);
+ yy693:
+               YYDEBUG(693, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy687;
 -              if (yych == 'L') goto yy694;
 -              if (yych != 'l') goto yy150;
++              if (yych == 'A') goto yy694;
 +              if (yych != 'a') goto yy150;
- yy687:
-               YYDEBUG(687, *YYCURSOR);
+ yy694:
+               YYDEBUG(694, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'U') goto yy688;
 -              if (yych == 'T') goto yy695;
 -              if (yych != 't') goto yy150;
++              if (yych == 'U') goto yy695;
 +              if (yych != 'u') goto yy150;
- yy688:
-               YYDEBUG(688, *YYCURSOR);
+ yy695:
+               YYDEBUG(695, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy689;
++              if (yych == 'L') goto yy696;
 +              if (yych != 'l') goto yy150;
- yy689:
-               YYDEBUG(689, *YYCURSOR);
++yy696:
++              YYDEBUG(696, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'T') goto yy690;
++              if (yych == 'T') goto yy697;
 +              if (yych != 't') goto yy150;
- yy690:
-               YYDEBUG(690, *YYCURSOR);
++yy697:
++              YYDEBUG(697, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(691, *YYCURSOR);
 -              YYDEBUG(696, *YYCURSOR);
++              YYDEBUG(698, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1211 "Zend/zend_language_scanner.l"
 -#line 1218 "Zend/zend_language_scanner.l"
++#line 1215 "Zend/zend_language_scanner.l"
                {
        return T_DEFAULT;
  }
- #line 6426 "Zend/zend_language_scanner.c"
- yy692:
-               YYDEBUG(692, *YYCURSOR);
 -#line 6466 "Zend/zend_language_scanner.c"
 -yy697:
 -              YYDEBUG(697, *YYCURSOR);
++#line 6485 "Zend/zend_language_scanner.c"
++yy699:
++              YYDEBUG(699, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy693;
 -              if (yych == 'A') goto yy698;
++              if (yych == 'A') goto yy700;
                if (yych != 'a') goto yy150;
- yy693:
-               YYDEBUG(693, *YYCURSOR);
 -yy698:
 -              YYDEBUG(698, *YYCURSOR);
++yy700:
++              YYDEBUG(700, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy694;
 -              if (yych == 'R') goto yy699;
++              if (yych == 'R') goto yy701;
                if (yych != 'r') goto yy150;
- yy694:
-               YYDEBUG(694, *YYCURSOR);
 -yy699:
 -              YYDEBUG(699, *YYCURSOR);
++yy701:
++              YYDEBUG(701, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy695;
 -              if (yych == 'E') goto yy700;
++              if (yych == 'E') goto yy702;
                if (yych != 'e') goto yy150;
- yy695:
-               YYDEBUG(695, *YYCURSOR);
 -yy700:
 -              YYDEBUG(700, *YYCURSOR);
++yy702:
++              YYDEBUG(702, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(696, *YYCURSOR);
 -              YYDEBUG(701, *YYCURSOR);
++              YYDEBUG(703, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1183 "Zend/zend_language_scanner.l"
 -#line 1190 "Zend/zend_language_scanner.l"
++#line 1187 "Zend/zend_language_scanner.l"
                {
        return T_DECLARE;
  }
- #line 6454 "Zend/zend_language_scanner.c"
- yy697:
-               YYDEBUG(697, *YYCURSOR);
 -#line 6494 "Zend/zend_language_scanner.c"
 -yy702:
 -              YYDEBUG(702, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'H') goto yy764;
 -              if (yych == 'h') goto yy764;
 -              goto yy150;
 -yy703:
 -              YYDEBUG(703, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'S') goto yy758;
 -              if (yych == 's') goto yy758;
 -              goto yy150;
++#line 6513 "Zend/zend_language_scanner.c"
+ yy704:
+               YYDEBUG(704, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'H') goto yy759;
-               if (yych == 'h') goto yy759;
 -              if (yych == 'P') goto yy754;
 -              if (yych == 'p') goto yy754;
++              if (yych == 'H') goto yy766;
++              if (yych == 'h') goto yy766;
                goto yy150;
- yy698:
-               YYDEBUG(698, *YYCURSOR);
+ yy705:
+               YYDEBUG(705, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy753;
-               if (yych == 's') goto yy753;
 -              if (yych == 'D') goto yy720;
 -              if (yych == 'd') goto yy720;
++              if (yych == 'S') goto yy760;
++              if (yych == 's') goto yy760;
                goto yy150;
- yy699:
-               YYDEBUG(699, *YYCURSOR);
+ yy706:
+               YYDEBUG(706, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'P') goto yy749;
-               if (yych == 'p') goto yy749;
 -              if (yych == 'A') goto yy717;
 -              if (yych == 'a') goto yy717;
++              if (yych == 'P') goto yy756;
++              if (yych == 'p') goto yy756;
                goto yy150;
- yy700:
-               YYDEBUG(700, *YYCURSOR);
+ yy707:
+               YYDEBUG(707, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'D') goto yy715;
-               if (yych == 'd') goto yy715;
++              if (yych == 'D') goto yy722;
++              if (yych == 'd') goto yy722;
 +              goto yy150;
- yy701:
-               YYDEBUG(701, *YYCURSOR);
++yy708:
++              YYDEBUG(708, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'A') goto yy712;
-               if (yych == 'a') goto yy712;
++              if (yych == 'A') goto yy719;
++              if (yych == 'a') goto yy719;
 +              goto yy150;
- yy702:
-               YYDEBUG(702, *YYCURSOR);
++yy709:
++              YYDEBUG(709, *YYCURSOR);
 +              yych = *++YYCURSOR;
                if (yych <= 'T') {
-                       if (yych == 'I') goto yy703;
 -                      if (yych == 'I') goto yy708;
++                      if (yych == 'I') goto yy710;
                        if (yych <= 'S') goto yy150;
-                       goto yy704;
 -                      goto yy709;
++                      goto yy711;
                } else {
                        if (yych <= 'i') {
                                if (yych <= 'h') goto yy150;
                        } else {
-                               if (yych == 't') goto yy704;
 -                              if (yych == 't') goto yy709;
++                              if (yych == 't') goto yy711;
                                goto yy150;
                        }
                }
- yy703:
-               YYDEBUG(703, *YYCURSOR);
 -yy708:
 -              YYDEBUG(708, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'T') goto yy715;
 -              if (yych == 't') goto yy715;
 -              goto yy150;
 -yy709:
 -              YYDEBUG(709, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'E') goto yy710;
 -              if (yych != 'e') goto yy150;
+ yy710:
+               YYDEBUG(710, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy710;
-               if (yych == 't') goto yy710;
 -              if (yych == 'N') goto yy711;
 -              if (yych != 'n') goto yy150;
++              if (yych == 'T') goto yy717;
++              if (yych == 't') goto yy717;
 +              goto yy150;
- yy704:
-               YYDEBUG(704, *YYCURSOR);
+ yy711:
+               YYDEBUG(711, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy705;
 -              if (yych == 'D') goto yy712;
 -              if (yych != 'd') goto yy150;
++              if (yych == 'E') goto yy712;
 +              if (yych != 'e') goto yy150;
- yy705:
-               YYDEBUG(705, *YYCURSOR);
+ yy712:
+               YYDEBUG(712, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy706;
 -              if (yych == 'S') goto yy713;
 -              if (yych != 's') goto yy150;
++              if (yych == 'N') goto yy713;
 +              if (yych != 'n') goto yy150;
- yy706:
-               YYDEBUG(706, *YYCURSOR);
+ yy713:
+               YYDEBUG(713, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'D') goto yy707;
++              if (yych == 'D') goto yy714;
 +              if (yych != 'd') goto yy150;
- yy707:
-               YYDEBUG(707, *YYCURSOR);
++yy714:
++              YYDEBUG(714, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'S') goto yy708;
++              if (yych == 'S') goto yy715;
 +              if (yych != 's') goto yy150;
- yy708:
-               YYDEBUG(708, *YYCURSOR);
++yy715:
++              YYDEBUG(715, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(709, *YYCURSOR);
 -              YYDEBUG(714, *YYCURSOR);
++              YYDEBUG(716, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1247 "Zend/zend_language_scanner.l"
 -#line 1254 "Zend/zend_language_scanner.l"
++#line 1251 "Zend/zend_language_scanner.l"
                {
        return T_EXTENDS;
  }
- #line 6538 "Zend/zend_language_scanner.c"
- yy710:
-               YYDEBUG(710, *YYCURSOR);
 -#line 6578 "Zend/zend_language_scanner.c"
 -yy715:
 -              YYDEBUG(715, *YYCURSOR);
++#line 6597 "Zend/zend_language_scanner.c"
++yy717:
++              YYDEBUG(717, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(711, *YYCURSOR);
 -              YYDEBUG(716, *YYCURSOR);
++              YYDEBUG(718, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
 -#line 1102 "Zend/zend_language_scanner.l"
 +#line 1099 "Zend/zend_language_scanner.l"
                {
        return T_EXIT;
  }
- #line 6551 "Zend/zend_language_scanner.c"
- yy712:
-               YYDEBUG(712, *YYCURSOR);
 -#line 6591 "Zend/zend_language_scanner.c"
 -yy717:
 -              YYDEBUG(717, *YYCURSOR);
++#line 6610 "Zend/zend_language_scanner.c"
++yy719:
++              YYDEBUG(719, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy713;
 -              if (yych == 'L') goto yy718;
++              if (yych == 'L') goto yy720;
                if (yych != 'l') goto yy150;
- yy713:
-               YYDEBUG(713, *YYCURSOR);
 -yy718:
 -              YYDEBUG(718, *YYCURSOR);
++yy720:
++              YYDEBUG(720, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(714, *YYCURSOR);
 -              YYDEBUG(719, *YYCURSOR);
++              YYDEBUG(721, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1337 "Zend/zend_language_scanner.l"
 -#line 1344 "Zend/zend_language_scanner.l"
++#line 1341 "Zend/zend_language_scanner.l"
                {
        return T_EVAL;
  }
- #line 6569 "Zend/zend_language_scanner.c"
- yy715:
-               YYDEBUG(715, *YYCURSOR);
 -#line 6609 "Zend/zend_language_scanner.c"
 -yy720:
 -              YYDEBUG(720, *YYCURSOR);
++#line 6628 "Zend/zend_language_scanner.c"
++yy722:
++              YYDEBUG(722, *YYCURSOR);
                yych = *++YYCURSOR;
                YYDEBUG(-1, yych);
                switch (yych) {
                case 'D':
-               case 'd':       goto yy716;
 -              case 'd':       goto yy721;
++              case 'd':       goto yy723;
                case 'F':
-               case 'f':       goto yy717;
 -              case 'f':       goto yy722;
++              case 'f':       goto yy724;
                case 'I':
-               case 'i':       goto yy718;
 -              case 'i':       goto yy723;
++              case 'i':       goto yy725;
                case 'S':
-               case 's':       goto yy719;
 -              case 's':       goto yy724;
++              case 's':       goto yy726;
                case 'W':
-               case 'w':       goto yy720;
 -              case 'w':       goto yy725;
++              case 'w':       goto yy727;
                default:        goto yy150;
                }
- yy716:
-               YYDEBUG(716, *YYCURSOR);
 -yy721:
 -              YYDEBUG(721, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'E') goto yy747;
 -              if (yych == 'e') goto yy747;
 -              goto yy150;
 -yy722:
 -              YYDEBUG(722, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'O') goto yy739;
 -              if (yych == 'o') goto yy739;
 -              goto yy150;
+ yy723:
+               YYDEBUG(723, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy742;
-               if (yych == 'e') goto yy742;
 -              if (yych == 'F') goto yy737;
 -              if (yych == 'f') goto yy737;
++              if (yych == 'E') goto yy749;
++              if (yych == 'e') goto yy749;
                goto yy150;
- yy717:
-               YYDEBUG(717, *YYCURSOR);
+ yy724:
+               YYDEBUG(724, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy734;
-               if (yych == 'o') goto yy734;
 -              if (yych == 'W') goto yy731;
 -              if (yych == 'w') goto yy731;
++              if (yych == 'O') goto yy741;
++              if (yych == 'o') goto yy741;
                goto yy150;
- yy718:
-               YYDEBUG(718, *YYCURSOR);
+ yy725:
+               YYDEBUG(725, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'F') goto yy732;
-               if (yych == 'f') goto yy732;
 -              if (yych == 'H') goto yy726;
 -              if (yych != 'h') goto yy150;
++              if (yych == 'F') goto yy739;
++              if (yych == 'f') goto yy739;
 +              goto yy150;
- yy719:
-               YYDEBUG(719, *YYCURSOR);
+ yy726:
+               YYDEBUG(726, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'W') goto yy726;
-               if (yych == 'w') goto yy726;
 -              if (yych == 'I') goto yy727;
 -              if (yych != 'i') goto yy150;
++              if (yych == 'W') goto yy733;
++              if (yych == 'w') goto yy733;
 +              goto yy150;
- yy720:
-               YYDEBUG(720, *YYCURSOR);
+ yy727:
+               YYDEBUG(727, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'H') goto yy721;
 -              if (yych == 'L') goto yy728;
 -              if (yych != 'l') goto yy150;
++              if (yych == 'H') goto yy728;
 +              if (yych != 'h') goto yy150;
- yy721:
-               YYDEBUG(721, *YYCURSOR);
+ yy728:
+               YYDEBUG(728, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy722;
 -              if (yych == 'E') goto yy729;
 -              if (yych != 'e') goto yy150;
++              if (yych == 'I') goto yy729;
 +              if (yych != 'i') goto yy150;
- yy722:
-               YYDEBUG(722, *YYCURSOR);
+ yy729:
+               YYDEBUG(729, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'L') goto yy723;
++              if (yych == 'L') goto yy730;
 +              if (yych != 'l') goto yy150;
- yy723:
-               YYDEBUG(723, *YYCURSOR);
++yy730:
++              YYDEBUG(730, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy724;
++              if (yych == 'E') goto yy731;
 +              if (yych != 'e') goto yy150;
- yy724:
-               YYDEBUG(724, *YYCURSOR);
++yy731:
++              YYDEBUG(731, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(725, *YYCURSOR);
 -              YYDEBUG(730, *YYCURSOR);
++              YYDEBUG(732, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1159 "Zend/zend_language_scanner.l"
 -#line 1166 "Zend/zend_language_scanner.l"
++#line 1163 "Zend/zend_language_scanner.l"
                {
        return T_ENDWHILE;
  }
- #line 6643 "Zend/zend_language_scanner.c"
- yy726:
-               YYDEBUG(726, *YYCURSOR);
 -#line 6683 "Zend/zend_language_scanner.c"
 -yy731:
 -              YYDEBUG(731, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'I') goto yy732;
 -              if (yych != 'i') goto yy150;
 -yy732:
 -              YYDEBUG(732, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'T') goto yy733;
 -              if (yych != 't') goto yy150;
++#line 6702 "Zend/zend_language_scanner.c"
+ yy733:
+               YYDEBUG(733, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy727;
 -              if (yych == 'C') goto yy734;
 -              if (yych != 'c') goto yy150;
++              if (yych == 'I') goto yy734;
 +              if (yych != 'i') goto yy150;
- yy727:
-               YYDEBUG(727, *YYCURSOR);
+ yy734:
+               YYDEBUG(734, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy728;
 -              if (yych == 'H') goto yy735;
 -              if (yych != 'h') goto yy150;
++              if (yych == 'T') goto yy735;
 +              if (yych != 't') goto yy150;
- yy728:
-               YYDEBUG(728, *YYCURSOR);
+ yy735:
+               YYDEBUG(735, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'C') goto yy729;
++              if (yych == 'C') goto yy736;
 +              if (yych != 'c') goto yy150;
- yy729:
-               YYDEBUG(729, *YYCURSOR);
++yy736:
++              YYDEBUG(736, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'H') goto yy730;
++              if (yych == 'H') goto yy737;
 +              if (yych != 'h') goto yy150;
- yy730:
-               YYDEBUG(730, *YYCURSOR);
++yy737:
++              YYDEBUG(737, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(731, *YYCURSOR);
 -              YYDEBUG(736, *YYCURSOR);
++              YYDEBUG(738, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1203 "Zend/zend_language_scanner.l"
 -#line 1210 "Zend/zend_language_scanner.l"
++#line 1207 "Zend/zend_language_scanner.l"
                {
        return T_ENDSWITCH;
  }
- #line 6676 "Zend/zend_language_scanner.c"
- yy732:
-               YYDEBUG(732, *YYCURSOR);
 -#line 6716 "Zend/zend_language_scanner.c"
 -yy737:
 -              YYDEBUG(737, *YYCURSOR);
++#line 6735 "Zend/zend_language_scanner.c"
++yy739:
++              YYDEBUG(739, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(733, *YYCURSOR);
 -              YYDEBUG(738, *YYCURSOR);
++              YYDEBUG(740, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1147 "Zend/zend_language_scanner.l"
 -#line 1154 "Zend/zend_language_scanner.l"
++#line 1151 "Zend/zend_language_scanner.l"
                {
        return T_ENDIF;
  }
- #line 6689 "Zend/zend_language_scanner.c"
- yy734:
-               YYDEBUG(734, *YYCURSOR);
 -#line 6729 "Zend/zend_language_scanner.c"
 -yy739:
 -              YYDEBUG(739, *YYCURSOR);
++#line 6748 "Zend/zend_language_scanner.c"
++yy741:
++              YYDEBUG(741, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy735;
 -              if (yych == 'R') goto yy740;
++              if (yych == 'R') goto yy742;
                if (yych != 'r') goto yy150;
- yy735:
-               YYDEBUG(735, *YYCURSOR);
 -yy740:
 -              YYDEBUG(740, *YYCURSOR);
++yy742:
++              YYDEBUG(742, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) <= '^') {
                        if (yych <= '@') {
-                               if (yych <= '/') goto yy736;
 -                              if (yych <= '/') goto yy741;
++                              if (yych <= '/') goto yy743;
                                if (yych <= '9') goto yy149;
                        } else {
-                               if (yych == 'E') goto yy737;
 -                              if (yych == 'E') goto yy742;
++                              if (yych == 'E') goto yy744;
                                if (yych <= 'Z') goto yy149;
                        }
                } else {
                        if (yych <= 'd') {
                                if (yych != '`') goto yy149;
                        } else {
-                               if (yych <= 'e') goto yy737;
 -                              if (yych <= 'e') goto yy742;
++                              if (yych <= 'e') goto yy744;
                                if (yych <= 'z') goto yy149;
                                if (yych >= 0x7F) goto yy149;
                        }
                }
- yy736:
-               YYDEBUG(736, *YYCURSOR);
 -yy741:
 -              YYDEBUG(741, *YYCURSOR);
++yy743:
++              YYDEBUG(743, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1171 "Zend/zend_language_scanner.l"
 -#line 1178 "Zend/zend_language_scanner.l"
++#line 1175 "Zend/zend_language_scanner.l"
                {
        return T_ENDFOR;
  }
- #line 6722 "Zend/zend_language_scanner.c"
- yy737:
-               YYDEBUG(737, *YYCURSOR);
 -#line 6762 "Zend/zend_language_scanner.c"
 -yy742:
 -              YYDEBUG(742, *YYCURSOR);
++#line 6781 "Zend/zend_language_scanner.c"
++yy744:
++              YYDEBUG(744, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy738;
 -              if (yych == 'A') goto yy743;
++              if (yych == 'A') goto yy745;
                if (yych != 'a') goto yy150;
- yy738:
-               YYDEBUG(738, *YYCURSOR);
 -yy743:
 -              YYDEBUG(743, *YYCURSOR);
++yy745:
++              YYDEBUG(745, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy739;
 -              if (yych == 'C') goto yy744;
++              if (yych == 'C') goto yy746;
                if (yych != 'c') goto yy150;
- yy739:
-               YYDEBUG(739, *YYCURSOR);
 -yy744:
 -              YYDEBUG(744, *YYCURSOR);
++yy746:
++              YYDEBUG(746, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'H') goto yy740;
 -              if (yych == 'H') goto yy745;
++              if (yych == 'H') goto yy747;
                if (yych != 'h') goto yy150;
- yy740:
-               YYDEBUG(740, *YYCURSOR);
 -yy745:
 -              YYDEBUG(745, *YYCURSOR);
++yy747:
++              YYDEBUG(747, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(741, *YYCURSOR);
 -              YYDEBUG(746, *YYCURSOR);
++              YYDEBUG(748, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1179 "Zend/zend_language_scanner.l"
 -#line 1186 "Zend/zend_language_scanner.l"
++#line 1183 "Zend/zend_language_scanner.l"
                {
        return T_ENDFOREACH;
  }
- #line 6750 "Zend/zend_language_scanner.c"
- yy742:
-               YYDEBUG(742, *YYCURSOR);
 -#line 6790 "Zend/zend_language_scanner.c"
 -yy747:
 -              YYDEBUG(747, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'C') goto yy748;
 -              if (yych != 'c') goto yy150;
 -yy748:
 -              YYDEBUG(748, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              if (yych == 'L') goto yy749;
 -              if (yych != 'l') goto yy150;
++#line 6809 "Zend/zend_language_scanner.c"
+ yy749:
+               YYDEBUG(749, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy743;
 -              if (yych == 'A') goto yy750;
 -              if (yych != 'a') goto yy150;
++              if (yych == 'C') goto yy750;
 +              if (yych != 'c') goto yy150;
- yy743:
-               YYDEBUG(743, *YYCURSOR);
+ yy750:
+               YYDEBUG(750, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy744;
 -              if (yych == 'R') goto yy751;
 -              if (yych != 'r') goto yy150;
++              if (yych == 'L') goto yy751;
 +              if (yych != 'l') goto yy150;
- yy744:
-               YYDEBUG(744, *YYCURSOR);
+ yy751:
+               YYDEBUG(751, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy745;
 -              if (yych == 'E') goto yy752;
 -              if (yych != 'e') goto yy150;
++              if (yych == 'A') goto yy752;
 +              if (yych != 'a') goto yy150;
- yy745:
-               YYDEBUG(745, *YYCURSOR);
+ yy752:
+               YYDEBUG(752, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'R') goto yy746;
++              if (yych == 'R') goto yy753;
 +              if (yych != 'r') goto yy150;
- yy746:
-               YYDEBUG(746, *YYCURSOR);
++yy753:
++              YYDEBUG(753, *YYCURSOR);
 +              yych = *++YYCURSOR;
-               if (yych == 'E') goto yy747;
++              if (yych == 'E') goto yy754;
 +              if (yych != 'e') goto yy150;
- yy747:
-               YYDEBUG(747, *YYCURSOR);
++yy754:
++              YYDEBUG(754, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(748, *YYCURSOR);
 -              YYDEBUG(753, *YYCURSOR);
++              YYDEBUG(755, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1187 "Zend/zend_language_scanner.l"
 -#line 1194 "Zend/zend_language_scanner.l"
++#line 1191 "Zend/zend_language_scanner.l"
                {
        return T_ENDDECLARE;
  }
- #line 6788 "Zend/zend_language_scanner.c"
- yy749:
-               YYDEBUG(749, *YYCURSOR);
 -#line 6828 "Zend/zend_language_scanner.c"
 -yy754:
 -              YYDEBUG(754, *YYCURSOR);
++#line 6847 "Zend/zend_language_scanner.c"
++yy756:
++              YYDEBUG(756, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy750;
 -              if (yych == 'T') goto yy755;
++              if (yych == 'T') goto yy757;
                if (yych != 't') goto yy150;
- yy750:
-               YYDEBUG(750, *YYCURSOR);
 -yy755:
 -              YYDEBUG(755, *YYCURSOR);
++yy757:
++              YYDEBUG(757, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'Y') goto yy751;
 -              if (yych == 'Y') goto yy756;
++              if (yych == 'Y') goto yy758;
                if (yych != 'y') goto yy150;
- yy751:
-               YYDEBUG(751, *YYCURSOR);
 -yy756:
 -              YYDEBUG(756, *YYCURSOR);
++yy758:
++              YYDEBUG(758, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(752, *YYCURSOR);
 -              YYDEBUG(757, *YYCURSOR);
++              YYDEBUG(759, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1377 "Zend/zend_language_scanner.l"
 -#line 1384 "Zend/zend_language_scanner.l"
++#line 1381 "Zend/zend_language_scanner.l"
                {
        return T_EMPTY;
  }
- #line 6811 "Zend/zend_language_scanner.c"
- yy753:
-               YYDEBUG(753, *YYCURSOR);
 -#line 6851 "Zend/zend_language_scanner.c"
 -yy758:
 -              YYDEBUG(758, *YYCURSOR);
++#line 6870 "Zend/zend_language_scanner.c"
++yy760:
++              YYDEBUG(760, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy754;
 -              if (yych == 'E') goto yy759;
++              if (yych == 'E') goto yy761;
                if (yych != 'e') goto yy150;
- yy754:
-               YYDEBUG(754, *YYCURSOR);
 -yy759:
 -              YYDEBUG(759, *YYCURSOR);
++yy761:
++              YYDEBUG(761, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) <= '^') {
                        if (yych <= '@') {
-                               if (yych <= '/') goto yy755;
 -                              if (yych <= '/') goto yy760;
++                              if (yych <= '/') goto yy762;
                                if (yych <= '9') goto yy149;
                        } else {
-                               if (yych == 'I') goto yy756;
 -                              if (yych == 'I') goto yy761;
++                              if (yych == 'I') goto yy763;
                                if (yych <= 'Z') goto yy149;
                        }
                } else {
                        if (yych <= 'h') {
                                if (yych != '`') goto yy149;
                        } else {
-                               if (yych <= 'i') goto yy756;
 -                              if (yych <= 'i') goto yy761;
++                              if (yych <= 'i') goto yy763;
                                if (yych <= 'z') goto yy149;
                                if (yych >= 0x7F) goto yy149;
                        }
                }
- yy755:
-               YYDEBUG(755, *YYCURSOR);
 -yy760:
 -              YYDEBUG(760, *YYCURSOR);
++yy762:
++              YYDEBUG(762, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1151 "Zend/zend_language_scanner.l"
 -#line 1158 "Zend/zend_language_scanner.l"
++#line 1155 "Zend/zend_language_scanner.l"
                {
        return T_ELSE;
  }
- #line 6844 "Zend/zend_language_scanner.c"
- yy756:
-               YYDEBUG(756, *YYCURSOR);
 -#line 6884 "Zend/zend_language_scanner.c"
 -yy761:
 -              YYDEBUG(761, *YYCURSOR);
++#line 6903 "Zend/zend_language_scanner.c"
++yy763:
++              YYDEBUG(763, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'F') goto yy757;
 -              if (yych == 'F') goto yy762;
++              if (yych == 'F') goto yy764;
                if (yych != 'f') goto yy150;
- yy757:
-               YYDEBUG(757, *YYCURSOR);
 -yy762:
 -              YYDEBUG(762, *YYCURSOR);
++yy764:
++              YYDEBUG(764, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(758, *YYCURSOR);
 -              YYDEBUG(763, *YYCURSOR);
++              YYDEBUG(765, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1143 "Zend/zend_language_scanner.l"
 -#line 1150 "Zend/zend_language_scanner.l"
++#line 1147 "Zend/zend_language_scanner.l"
                {
        return T_ELSEIF;
  }
- #line 6862 "Zend/zend_language_scanner.c"
- yy759:
-               YYDEBUG(759, *YYCURSOR);
 -#line 6902 "Zend/zend_language_scanner.c"
 -yy764:
 -              YYDEBUG(764, *YYCURSOR);
++#line 6921 "Zend/zend_language_scanner.c"
++yy766:
++              YYDEBUG(766, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy760;
 -              if (yych == 'O') goto yy765;
++              if (yych == 'O') goto yy767;
                if (yych != 'o') goto yy150;
- yy760:
-               YYDEBUG(760, *YYCURSOR);
 -yy765:
 -              YYDEBUG(765, *YYCURSOR);
++yy767:
++              YYDEBUG(767, *YYCURSOR);
                ++YYCURSOR;
                if (yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy149;
                }
-               YYDEBUG(761, *YYCURSOR);
 -              YYDEBUG(766, *YYCURSOR);
++              YYDEBUG(768, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1227 "Zend/zend_language_scanner.l"
 -#line 1234 "Zend/zend_language_scanner.l"
++#line 1231 "Zend/zend_language_scanner.l"
                {
        return T_ECHO;
  }
- #line 6880 "Zend/zend_language_scanner.c"
 -#line 6920 "Zend/zend_language_scanner.c"
++#line 6939 "Zend/zend_language_scanner.c"
        }
  /* *********************************** */
  yyc_ST_LOOKING_FOR_PROPERTY:
                         64,  64,  64,  64,  64,  64,  64,  64, 
                         64,  64,  64,  64,  64,  64,  64,  64, 
                };
-               YYDEBUG(762, *YYCURSOR);
 -              YYDEBUG(767, *YYCURSOR);
++              YYDEBUG(769, *YYCURSOR);
                YYFILL(2);
                yych = *YYCURSOR;
                if (yych <= '-') {
                        if (yych <= '\r') {
-                               if (yych <= 0x08) goto yy770;
-                               if (yych <= '\n') goto yy764;
-                               if (yych <= '\f') goto yy770;
 -                              if (yych <= 0x08) goto yy775;
 -                              if (yych <= '\n') goto yy769;
 -                              if (yych <= '\f') goto yy775;
++                              if (yych <= 0x08) goto yy777;
++                              if (yych <= '\n') goto yy771;
++                              if (yych <= '\f') goto yy777;
                        } else {
-                               if (yych == ' ') goto yy764;
-                               if (yych <= ',') goto yy770;
-                               goto yy766;
 -                              if (yych == ' ') goto yy769;
 -                              if (yych <= ',') goto yy775;
 -                              goto yy771;
++                              if (yych == ' ') goto yy771;
++                              if (yych <= ',') goto yy777;
++                              goto yy773;
                        }
                } else {
                        if (yych <= '_') {
-                               if (yych <= '@') goto yy770;
-                               if (yych <= 'Z') goto yy768;
-                               if (yych <= '^') goto yy770;
-                               goto yy768;
 -                              if (yych <= '@') goto yy775;
 -                              if (yych <= 'Z') goto yy773;
 -                              if (yych <= '^') goto yy775;
 -                              goto yy773;
++                              if (yych <= '@') goto yy777;
++                              if (yych <= 'Z') goto yy775;
++                              if (yych <= '^') goto yy777;
++                              goto yy775;
                        } else {
-                               if (yych <= '`') goto yy770;
-                               if (yych <= 'z') goto yy768;
-                               if (yych <= '~') goto yy770;
-                               goto yy768;
 -                              if (yych <= '`') goto yy775;
 -                              if (yych <= 'z') goto yy773;
 -                              if (yych <= '~') goto yy775;
 -                              goto yy773;
++                              if (yych <= '`') goto yy777;
++                              if (yych <= 'z') goto yy775;
++                              if (yych <= '~') goto yy777;
++                              goto yy775;
                        }
                }
- yy764:
-               YYDEBUG(764, *YYCURSOR);
 -yy769:
 -              YYDEBUG(769, *YYCURSOR);
++yy771:
++              YYDEBUG(771, *YYCURSOR);
                ++YYCURSOR;
                yych = *YYCURSOR;
-               goto yy776;
- yy765:
-               YYDEBUG(765, *YYCURSOR);
 -              goto yy781;
 -yy770:
 -              YYDEBUG(770, *YYCURSOR);
++              goto yy783;
++yy772:
++              YYDEBUG(772, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1260 "Zend/zend_language_scanner.l"
 -#line 1267 "Zend/zend_language_scanner.l"
++#line 1264 "Zend/zend_language_scanner.l"
                {
        HANDLE_NEWLINES(yytext, yyleng);
        return T_WHITESPACE;
  }
- #line 6958 "Zend/zend_language_scanner.c"
- yy766:
-               YYDEBUG(766, *YYCURSOR);
 -#line 6998 "Zend/zend_language_scanner.c"
 -yy771:
 -              YYDEBUG(771, *YYCURSOR);
++#line 7017 "Zend/zend_language_scanner.c"
++yy773:
++              YYDEBUG(773, *YYCURSOR);
                ++YYCURSOR;
-               if ((yych = *YYCURSOR) == '>') goto yy773;
- yy767:
-               YYDEBUG(767, *YYCURSOR);
 -              if ((yych = *YYCURSOR) == '>') goto yy778;
 -yy772:
 -              YYDEBUG(772, *YYCURSOR);
++              if ((yych = *YYCURSOR) == '>') goto yy780;
++yy774:
++              YYDEBUG(774, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1275 "Zend/zend_language_scanner.l"
 -#line 1282 "Zend/zend_language_scanner.l"
++#line 1279 "Zend/zend_language_scanner.l"
                {
        yyless(0);
        yy_pop_state();
        goto restart;
  }
- #line 6972 "Zend/zend_language_scanner.c"
- yy768:
-               YYDEBUG(768, *YYCURSOR);
 -#line 7012 "Zend/zend_language_scanner.c"
 -yy773:
 -              YYDEBUG(773, *YYCURSOR);
++#line 7031 "Zend/zend_language_scanner.c"
++yy775:
++              YYDEBUG(775, *YYCURSOR);
                ++YYCURSOR;
                yych = *YYCURSOR;
-               goto yy772;
- yy769:
-               YYDEBUG(769, *YYCURSOR);
 -              goto yy777;
 -yy774:
 -              YYDEBUG(774, *YYCURSOR);
++              goto yy779;
++yy776:
++              YYDEBUG(776, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1269 "Zend/zend_language_scanner.l"
 -#line 1276 "Zend/zend_language_scanner.l"
++#line 1273 "Zend/zend_language_scanner.l"
                {
        yy_pop_state();
        zend_copy_value(zendlval, yytext, yyleng);
        return T_STRING;
  }
- #line 6987 "Zend/zend_language_scanner.c"
- yy770:
-               YYDEBUG(770, *YYCURSOR);
 -#line 7027 "Zend/zend_language_scanner.c"
 -yy775:
 -              YYDEBUG(775, *YYCURSOR);
 -              yych = *++YYCURSOR;
 -              goto yy772;
 -yy776:
 -              YYDEBUG(776, *YYCURSOR);
 -              ++YYCURSOR;
 -              YYFILL(1);
 -              yych = *YYCURSOR;
++#line 7046 "Zend/zend_language_scanner.c"
+ yy777:
+               YYDEBUG(777, *YYCURSOR);
 -              if (yybm[0+yych] & 64) {
 -                      goto yy776;
 -              }
 +              yych = *++YYCURSOR;
-               goto yy767;
- yy771:
-               YYDEBUG(771, *YYCURSOR);
+               goto yy774;
+ yy778:
+               YYDEBUG(778, *YYCURSOR);
                ++YYCURSOR;
- yy772:
-               YYDEBUG(772, *YYCURSOR);
 +              YYFILL(1);
 +              yych = *YYCURSOR;
-                       goto yy771;
++yy779:
+               YYDEBUG(779, *YYCURSOR);
 +              if (yybm[0+yych] & 64) {
-               goto yy769;
- yy773:
-               YYDEBUG(773, *YYCURSOR);
++                      goto yy778;
 +              }
-               YYDEBUG(774, *YYCURSOR);
++              goto yy776;
++yy780:
++              YYDEBUG(780, *YYCURSOR);
 +              ++YYCURSOR;
++              YYDEBUG(781, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1265 "Zend/zend_language_scanner.l"
 -#line 1272 "Zend/zend_language_scanner.l"
++#line 1269 "Zend/zend_language_scanner.l"
                {
        return T_OBJECT_OPERATOR;
  }
- #line 7012 "Zend/zend_language_scanner.c"
- yy775:
-               YYDEBUG(775, *YYCURSOR);
 -#line 7052 "Zend/zend_language_scanner.c"
 -yy780:
 -              YYDEBUG(780, *YYCURSOR);
++#line 7071 "Zend/zend_language_scanner.c"
++yy782:
++              YYDEBUG(782, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
- yy776:
-               YYDEBUG(776, *YYCURSOR);
 -yy781:
 -              YYDEBUG(781, *YYCURSOR);
++yy783:
++              YYDEBUG(783, *YYCURSOR);
                if (yybm[0+yych] & 128) {
-                       goto yy775;
 -                      goto yy780;
++                      goto yy782;
                }
-               goto yy765;
 -              goto yy770;
++              goto yy772;
        }
  /* *********************************** */
  yyc_ST_LOOKING_FOR_VARNAME:
                        128, 128, 128, 128, 128, 128, 128, 128, 
                        128, 128, 128, 128, 128, 128, 128, 128, 
                };
-               YYDEBUG(777, *YYCURSOR);
 -              YYDEBUG(782, *YYCURSOR);
++              YYDEBUG(784, *YYCURSOR);
                YYFILL(2);
                yych = *YYCURSOR;
                if (yych <= '_') {
-                       if (yych <= '@') goto yy781;
-                       if (yych <= 'Z') goto yy779;
-                       if (yych <= '^') goto yy781;
 -                      if (yych <= '@') goto yy786;
 -                      if (yych <= 'Z') goto yy784;
 -                      if (yych <= '^') goto yy786;
++                      if (yych <= '@') goto yy788;
++                      if (yych <= 'Z') goto yy786;
++                      if (yych <= '^') goto yy788;
                } else {
-                       if (yych <= '`') goto yy781;
-                       if (yych <= 'z') goto yy779;
-                       if (yych <= '~') goto yy781;
 -                      if (yych <= '`') goto yy786;
 -                      if (yych <= 'z') goto yy784;
 -                      if (yych <= '~') goto yy786;
++                      if (yych <= '`') goto yy788;
++                      if (yych <= 'z') goto yy786;
++                      if (yych <= '~') goto yy788;
                }
- yy779:
-               YYDEBUG(779, *YYCURSOR);
 -yy784:
 -              YYDEBUG(784, *YYCURSOR);
++yy786:
++              YYDEBUG(786, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
                if (yych <= '_') {
                        if (yych <= '@') {
-                               if (yych <= '/') goto yy780;
-                               if (yych <= '9') goto yy783;
 -                              if (yych <= '/') goto yy785;
 -                              if (yych <= '9') goto yy788;
++                              if (yych <= '/') goto yy787;
++                              if (yych <= '9') goto yy790;
                        } else {
-                               if (yych <= '[') goto yy783;
-                               if (yych >= '_') goto yy783;
 -                              if (yych <= '[') goto yy788;
 -                              if (yych >= '_') goto yy788;
++                              if (yych <= '[') goto yy790;
++                              if (yych >= '_') goto yy790;
                        }
                } else {
                        if (yych <= '|') {
-                               if (yych <= '`') goto yy780;
-                               if (yych <= 'z') goto yy783;
 -                              if (yych <= '`') goto yy785;
 -                              if (yych <= 'z') goto yy788;
++                              if (yych <= '`') goto yy787;
++                              if (yych <= 'z') goto yy790;
                        } else {
-                               if (yych != '~') goto yy783;
 -                              if (yych != '~') goto yy788;
++                              if (yych != '~') goto yy790;
                        }
                }
- yy780:
-               YYDEBUG(780, *YYCURSOR);
 -yy785:
 -              YYDEBUG(785, *YYCURSOR);
++yy787:
++              YYDEBUG(787, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1580 "Zend/zend_language_scanner.l"
 -#line 1583 "Zend/zend_language_scanner.l"
++#line 1584 "Zend/zend_language_scanner.l"
                {
        yyless(0);
        yy_pop_state();
        yy_push_state(ST_IN_SCRIPTING);
        goto restart;
  }
- #line 7104 "Zend/zend_language_scanner.c"
- yy781:
-               YYDEBUG(781, *YYCURSOR);
 -#line 7144 "Zend/zend_language_scanner.c"
 -yy786:
 -              YYDEBUG(786, *YYCURSOR);
++#line 7163 "Zend/zend_language_scanner.c"
++yy788:
++              YYDEBUG(788, *YYCURSOR);
                yych = *++YYCURSOR;
-               goto yy780;
- yy782:
-               YYDEBUG(782, *YYCURSOR);
 -              goto yy785;
 -yy787:
 -              YYDEBUG(787, *YYCURSOR);
++              goto yy787;
++yy789:
++              YYDEBUG(789, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
- yy783:
-               YYDEBUG(783, *YYCURSOR);
 -yy788:
 -              YYDEBUG(788, *YYCURSOR);
++yy790:
++              YYDEBUG(790, *YYCURSOR);
                if (yybm[0+yych] & 128) {
-                       goto yy782;
 -                      goto yy787;
++                      goto yy789;
                }
-               if (yych == '[') goto yy785;
-               if (yych == '}') goto yy785;
-               YYDEBUG(784, *YYCURSOR);
 -              if (yych == '[') goto yy790;
 -              if (yych == '}') goto yy790;
 -              YYDEBUG(789, *YYCURSOR);
++              if (yych == '[') goto yy792;
++              if (yych == '}') goto yy792;
++              YYDEBUG(791, *YYCURSOR);
                YYCURSOR = YYMARKER;
-               goto yy780;
- yy785:
-               YYDEBUG(785, *YYCURSOR);
 -              goto yy785;
 -yy790:
 -              YYDEBUG(790, *YYCURSOR);
++              goto yy787;
++yy792:
++              YYDEBUG(792, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(786, *YYCURSOR);
 -              YYDEBUG(791, *YYCURSOR);
++              YYDEBUG(793, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1571 "Zend/zend_language_scanner.l"
 -#line 1574 "Zend/zend_language_scanner.l"
++#line 1575 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        zend_copy_value(zendlval, yytext, yyleng);
        yy_push_state(ST_IN_SCRIPTING);
        return T_STRING_VARNAME;
  }
- #line 7137 "Zend/zend_language_scanner.c"
 -#line 7177 "Zend/zend_language_scanner.c"
++#line 7196 "Zend/zend_language_scanner.c"
        }
  /* *********************************** */
  yyc_ST_NOWDOC:
-       YYDEBUG(787, *YYCURSOR);
 -      YYDEBUG(792, *YYCURSOR);
++      YYDEBUG(794, *YYCURSOR);
        YYFILL(1);
        yych = *YYCURSOR;
-       YYDEBUG(789, *YYCURSOR);
 -      YYDEBUG(794, *YYCURSOR);
++      YYDEBUG(796, *YYCURSOR);
        ++YYCURSOR;
-       YYDEBUG(790, *YYCURSOR);
 -      YYDEBUG(795, *YYCURSOR);
++      YYDEBUG(797, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
- #line 2304 "Zend/zend_language_scanner.l"
 -#line 2296 "Zend/zend_language_scanner.l"
++#line 2308 "Zend/zend_language_scanner.l"
        {
        int newline = 0;
  
@@@ -7200,7 -7240,7 +7259,7 @@@ nowdoc_scan_done
        HANDLE_NEWLINES(yytext, yyleng - newline);
        return T_ENCAPSED_AND_WHITESPACE;
  }
- #line 7204 "Zend/zend_language_scanner.c"
 -#line 7244 "Zend/zend_language_scanner.c"
++#line 7263 "Zend/zend_language_scanner.c"
  /* *********************************** */
  yyc_ST_VAR_OFFSET:
        {
                         16,  16,  16,  16,  16,  16,  16,  16, 
                         16,  16,  16,  16,  16,  16,  16,  16, 
                };
-               YYDEBUG(791, *YYCURSOR);
 -              YYDEBUG(796, *YYCURSOR);
++              YYDEBUG(798, *YYCURSOR);
                YYFILL(3);
                yych = *YYCURSOR;
                if (yych <= '/') {
                        if (yych <= ' ') {
                                if (yych <= '\f') {
-                                       if (yych <= 0x08) goto yy805;
-                                       if (yych <= '\n') goto yy801;
-                                       goto yy805;
 -                                      if (yych <= 0x08) goto yy810;
 -                                      if (yych <= '\n') goto yy806;
 -                                      goto yy810;
++                                      if (yych <= 0x08) goto yy812;
++                                      if (yych <= '\n') goto yy808;
++                                      goto yy812;
                                } else {
-                                       if (yych <= '\r') goto yy801;
-                                       if (yych <= 0x1F) goto yy805;
-                                       goto yy801;
 -                                      if (yych <= '\r') goto yy806;
 -                                      if (yych <= 0x1F) goto yy810;
 -                                      goto yy806;
++                                      if (yych <= '\r') goto yy808;
++                                      if (yych <= 0x1F) goto yy812;
++                                      goto yy808;
                                }
                        } else {
                                if (yych <= '$') {
-                                       if (yych <= '"') goto yy800;
-                                       if (yych <= '#') goto yy801;
-                                       goto yy796;
 -                                      if (yych <= '"') goto yy805;
 -                                      if (yych <= '#') goto yy806;
 -                                      goto yy801;
++                                      if (yych <= '"') goto yy807;
++                                      if (yych <= '#') goto yy808;
++                                      goto yy803;
                                } else {
-                                       if (yych == '\'') goto yy801;
-                                       goto yy800;
 -                                      if (yych == '\'') goto yy806;
 -                                      goto yy805;
++                                      if (yych == '\'') goto yy808;
++                                      goto yy807;
                                }
                        }
                } else {
                        if (yych <= '\\') {
                                if (yych <= '@') {
-                                       if (yych <= '0') goto yy793;
-                                       if (yych <= '9') goto yy795;
-                                       goto yy800;
 -                                      if (yych <= '0') goto yy798;
 -                                      if (yych <= '9') goto yy800;
 -                                      goto yy805;
++                                      if (yych <= '0') goto yy800;
++                                      if (yych <= '9') goto yy802;
++                                      goto yy807;
                                } else {
-                                       if (yych <= 'Z') goto yy803;
-                                       if (yych <= '[') goto yy800;
-                                       goto yy801;
 -                                      if (yych <= 'Z') goto yy808;
 -                                      if (yych <= '[') goto yy805;
 -                                      goto yy806;
++                                      if (yych <= 'Z') goto yy810;
++                                      if (yych <= '[') goto yy807;
++                                      goto yy808;
                                }
                        } else {
                                if (yych <= '_') {
-                                       if (yych <= ']') goto yy798;
-                                       if (yych <= '^') goto yy800;
-                                       goto yy803;
 -                                      if (yych <= ']') goto yy803;
 -                                      if (yych <= '^') goto yy805;
 -                                      goto yy808;
++                                      if (yych <= ']') goto yy805;
++                                      if (yych <= '^') goto yy807;
++                                      goto yy810;
                                } else {
-                                       if (yych <= '`') goto yy800;
-                                       if (yych <= 'z') goto yy803;
-                                       if (yych <= '~') goto yy800;
-                                       goto yy803;
 -                                      if (yych <= '`') goto yy805;
 -                                      if (yych <= 'z') goto yy808;
 -                                      if (yych <= '~') goto yy805;
 -                                      goto yy808;
++                                      if (yych <= '`') goto yy807;
++                                      if (yych <= 'z') goto yy810;
++                                      if (yych <= '~') goto yy807;
++                                      goto yy810;
                                }
                        }
                }
- yy793:
-               YYDEBUG(793, *YYCURSOR);
 -yy798:
 -              YYDEBUG(798, *YYCURSOR);
++yy800:
++              YYDEBUG(800, *YYCURSOR);
                yyaccept = 0;
                yych = *(YYMARKER = ++YYCURSOR);
                if (yych <= 'W') {
                        if (yych <= '9') {
-                               if (yych >= '0') goto yy817;
 -                              if (yych >= '0') goto yy822;
++                              if (yych >= '0') goto yy824;
                        } else {
-                               if (yych == 'B') goto yy814;
 -                              if (yych == 'B') goto yy819;
++                              if (yych == 'B') goto yy821;
                        }
                } else {
                        if (yych <= 'b') {
-                               if (yych <= 'X') goto yy816;
-                               if (yych >= 'b') goto yy814;
 -                              if (yych <= 'X') goto yy821;
 -                              if (yych >= 'b') goto yy819;
++                              if (yych <= 'X') goto yy823;
++                              if (yych >= 'b') goto yy821;
                        } else {
-                               if (yych == 'x') goto yy816;
 -                              if (yych == 'x') goto yy821;
++                              if (yych == 'x') goto yy823;
                        }
                }
- yy794:
-               YYDEBUG(794, *YYCURSOR);
 -yy799:
 -              YYDEBUG(799, *YYCURSOR);
++yy801:
++              YYDEBUG(801, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1685 "Zend/zend_language_scanner.l"
++#line 1689 "Zend/zend_language_scanner.l"
                { /* Offset could be treated as a long */
        if (yyleng < MAX_LENGTH_OF_LONG - 1 || (yyleng == MAX_LENGTH_OF_LONG - 1 && strcmp(yytext, long_min_digits) < 0)) {
                char *end;
@@@ -7323,53 -7363,53 +7382,53 @@@ string
        }
        return T_NUM_STRING;
  }
- #line 7327 "Zend/zend_language_scanner.c"
- yy795:
-               YYDEBUG(795, *YYCURSOR);
 -#line 7367 "Zend/zend_language_scanner.c"
 -yy800:
 -              YYDEBUG(800, *YYCURSOR);
++#line 7386 "Zend/zend_language_scanner.c"
++yy802:
++              YYDEBUG(802, *YYCURSOR);
                yych = *++YYCURSOR;
-               goto yy813;
- yy796:
-               YYDEBUG(796, *YYCURSOR);
 -              goto yy818;
 -yy801:
 -              YYDEBUG(801, *YYCURSOR);
++              goto yy820;
++yy803:
++              YYDEBUG(803, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) <= '_') {
-                       if (yych <= '@') goto yy797;
-                       if (yych <= 'Z') goto yy809;
-                       if (yych >= '_') goto yy809;
 -                      if (yych <= '@') goto yy802;
 -                      if (yych <= 'Z') goto yy814;
 -                      if (yych >= '_') goto yy814;
++                      if (yych <= '@') goto yy804;
++                      if (yych <= 'Z') goto yy816;
++                      if (yych >= '_') goto yy816;
                } else {
-                       if (yych <= '`') goto yy797;
-                       if (yych <= 'z') goto yy809;
-                       if (yych >= 0x7F) goto yy809;
 -                      if (yych <= '`') goto yy802;
 -                      if (yych <= 'z') goto yy814;
 -                      if (yych >= 0x7F) goto yy814;
++                      if (yych <= '`') goto yy804;
++                      if (yych <= 'z') goto yy816;
++                      if (yych >= 0x7F) goto yy816;
                }
- yy797:
-               YYDEBUG(797, *YYCURSOR);
 -yy802:
 -              YYDEBUG(802, *YYCURSOR);
++yy804:
++              YYDEBUG(804, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1845 "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 7352 "Zend/zend_language_scanner.c"
- yy798:
-               YYDEBUG(798, *YYCURSOR);
 -#line 7392 "Zend/zend_language_scanner.c"
 -yy803:
 -              YYDEBUG(803, *YYCURSOR);
++#line 7411 "Zend/zend_language_scanner.c"
++yy805:
++              YYDEBUG(805, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(799, *YYCURSOR);
 -              YYDEBUG(804, *YYCURSOR);
++              YYDEBUG(806, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1840 "Zend/zend_language_scanner.l"
++#line 1844 "Zend/zend_language_scanner.l"
                {
        yy_pop_state();
        return ']';
  }
- #line 7363 "Zend/zend_language_scanner.c"
- yy800:
-               YYDEBUG(800, *YYCURSOR);
 -#line 7403 "Zend/zend_language_scanner.c"
 -yy805:
 -              YYDEBUG(805, *YYCURSOR);
++#line 7422 "Zend/zend_language_scanner.c"
++yy807:
++              YYDEBUG(807, *YYCURSOR);
                yych = *++YYCURSOR;
-               goto yy797;
- yy801:
-               YYDEBUG(801, *YYCURSOR);
 -              goto yy802;
 -yy806:
 -              YYDEBUG(806, *YYCURSOR);
++              goto yy804;
++yy808:
++              YYDEBUG(808, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(802, *YYCURSOR);
 -              YYDEBUG(807, *YYCURSOR);
++              YYDEBUG(809, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1850 "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);
        ZVAL_NULL(zendlval);
        return T_ENCAPSED_AND_WHITESPACE;
  }
- #line 7381 "Zend/zend_language_scanner.c"
- yy803:
-               YYDEBUG(803, *YYCURSOR);
 -#line 7421 "Zend/zend_language_scanner.c"
 -yy808:
 -              YYDEBUG(808, *YYCURSOR);
++#line 7440 "Zend/zend_language_scanner.c"
++yy810:
++              YYDEBUG(810, *YYCURSOR);
                ++YYCURSOR;
                yych = *YYCURSOR;
-               goto yy808;
- yy804:
-               YYDEBUG(804, *YYCURSOR);
 -              goto yy813;
 -yy809:
 -              YYDEBUG(809, *YYCURSOR);
++              goto yy815;
++yy811:
++              YYDEBUG(811, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1858 "Zend/zend_language_scanner.l"
++#line 1862 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, yytext, yyleng);
        return T_STRING;
  }
- #line 7395 "Zend/zend_language_scanner.c"
- yy805:
-               YYDEBUG(805, *YYCURSOR);
 -#line 7435 "Zend/zend_language_scanner.c"
 -yy810:
 -              YYDEBUG(810, *YYCURSOR);
++#line 7454 "Zend/zend_language_scanner.c"
++yy812:
++              YYDEBUG(812, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(806, *YYCURSOR);
 -              YYDEBUG(811, *YYCURSOR);
++              YYDEBUG(813, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2361 "Zend/zend_language_scanner.l"
 -#line 2353 "Zend/zend_language_scanner.l"
++#line 2365 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
        zend_error(E_COMPILE_WARNING,"Unexpected character in input:  '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
        goto restart;
  }
- #line 7410 "Zend/zend_language_scanner.c"
- yy807:
-               YYDEBUG(807, *YYCURSOR);
 -#line 7450 "Zend/zend_language_scanner.c"
 -yy812:
 -              YYDEBUG(812, *YYCURSOR);
++#line 7469 "Zend/zend_language_scanner.c"
++yy814:
++              YYDEBUG(814, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
- yy808:
-               YYDEBUG(808, *YYCURSOR);
 -yy813:
 -              YYDEBUG(813, *YYCURSOR);
++yy815:
++              YYDEBUG(815, *YYCURSOR);
                if (yybm[0+yych] & 16) {
-                       goto yy807;
 -                      goto yy812;
++                      goto yy814;
                }
-               goto yy804;
- yy809:
-               YYDEBUG(809, *YYCURSOR);
 -              goto yy809;
 -yy814:
 -              YYDEBUG(814, *YYCURSOR);
++              goto yy811;
++yy816:
++              YYDEBUG(816, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(810, *YYCURSOR);
 -              YYDEBUG(815, *YYCURSOR);
++              YYDEBUG(817, *YYCURSOR);
                if (yych <= '^') {
                        if (yych <= '9') {
-                               if (yych >= '0') goto yy809;
 -                              if (yych >= '0') goto yy814;
++                              if (yych >= '0') goto yy816;
                        } else {
-                               if (yych <= '@') goto yy811;
-                               if (yych <= 'Z') goto yy809;
 -                              if (yych <= '@') goto yy816;
 -                              if (yych <= 'Z') goto yy814;
++                              if (yych <= '@') goto yy818;
++                              if (yych <= 'Z') goto yy816;
                        }
                } else {
                        if (yych <= '`') {
-                               if (yych <= '_') goto yy809;
 -                              if (yych <= '_') goto yy814;
++                              if (yych <= '_') goto yy816;
                        } else {
-                               if (yych <= 'z') goto yy809;
-                               if (yych >= 0x7F) goto yy809;
 -                              if (yych <= 'z') goto yy814;
 -                              if (yych >= 0x7F) goto yy814;
++                              if (yych <= 'z') goto yy816;
++                              if (yych >= 0x7F) goto yy816;
                        }
                }
- yy811:
-               YYDEBUG(811, *YYCURSOR);
 -yy816:
 -              YYDEBUG(816, *YYCURSOR);
++yy818:
++              YYDEBUG(818, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1835 "Zend/zend_language_scanner.l"
++#line 1839 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        return T_VARIABLE;
  }
- #line 7451 "Zend/zend_language_scanner.c"
- yy812:
-               YYDEBUG(812, *YYCURSOR);
 -#line 7491 "Zend/zend_language_scanner.c"
 -yy817:
 -              YYDEBUG(817, *YYCURSOR);
++#line 7510 "Zend/zend_language_scanner.c"
++yy819:
++              YYDEBUG(819, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
- yy813:
-               YYDEBUG(813, *YYCURSOR);
 -yy818:
 -              YYDEBUG(818, *YYCURSOR);
++yy820:
++              YYDEBUG(820, *YYCURSOR);
                if (yybm[0+yych] & 32) {
-                       goto yy812;
 -                      goto yy817;
++                      goto yy819;
                }
-               goto yy794;
- yy814:
-               YYDEBUG(814, *YYCURSOR);
 -              goto yy799;
 -yy819:
 -              YYDEBUG(819, *YYCURSOR);
++              goto yy801;
++yy821:
++              YYDEBUG(821, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yybm[0+yych] & 128) {
-                       goto yy822;
 -                      goto yy827;
++                      goto yy829;
                }
- yy815:
-               YYDEBUG(815, *YYCURSOR);
 -yy820:
 -              YYDEBUG(820, *YYCURSOR);
++yy822:
++              YYDEBUG(822, *YYCURSOR);
                YYCURSOR = YYMARKER;
-               goto yy794;
- yy816:
-               YYDEBUG(816, *YYCURSOR);
 -              goto yy799;
 -yy821:
 -              YYDEBUG(821, *YYCURSOR);
++              goto yy801;
++yy823:
++              YYDEBUG(823, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yybm[0+yych] & 64) {
-                       goto yy820;
 -                      goto yy825;
++                      goto yy827;
                }
-               goto yy815;
- yy817:
-               YYDEBUG(817, *YYCURSOR);
 -              goto yy820;
 -yy822:
 -              YYDEBUG(822, *YYCURSOR);
++              goto yy822;
++yy824:
++              YYDEBUG(824, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(818, *YYCURSOR);
-               if (yych <= '/') goto yy819;
-               if (yych <= '9') goto yy817;
- yy819:
-               YYDEBUG(819, *YYCURSOR);
 -              YYDEBUG(823, *YYCURSOR);
 -              if (yych <= '/') goto yy824;
 -              if (yych <= '9') goto yy822;
 -yy824:
 -              YYDEBUG(824, *YYCURSOR);
++              YYDEBUG(825, *YYCURSOR);
++              if (yych <= '/') goto yy826;
++              if (yych <= '9') goto yy824;
++yy826:
++              YYDEBUG(826, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
--#line 1701 "Zend/zend_language_scanner.l"
++#line 1705 "Zend/zend_language_scanner.l"
                { /* Offset must be treated as a string */
        ZVAL_STRINGL(zendlval, yytext, yyleng);
        return T_NUM_STRING;
  }
- #line 7496 "Zend/zend_language_scanner.c"
- yy820:
-               YYDEBUG(820, *YYCURSOR);
 -#line 7536 "Zend/zend_language_scanner.c"
 -yy825:
 -              YYDEBUG(825, *YYCURSOR);
++#line 7555 "Zend/zend_language_scanner.c"
++yy827:
++              YYDEBUG(827, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(821, *YYCURSOR);
 -              YYDEBUG(826, *YYCURSOR);
++              YYDEBUG(828, *YYCURSOR);
                if (yybm[0+yych] & 64) {
-                       goto yy820;
 -                      goto yy825;
++                      goto yy827;
                }
-               goto yy819;
- yy822:
-               YYDEBUG(822, *YYCURSOR);
 -              goto yy824;
 -yy827:
 -              YYDEBUG(827, *YYCURSOR);
++              goto yy826;
++yy829:
++              YYDEBUG(829, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(823, *YYCURSOR);
 -              YYDEBUG(828, *YYCURSOR);
++              YYDEBUG(830, *YYCURSOR);
                if (yybm[0+yych] & 128) {
-                       goto yy822;
 -                      goto yy827;
++                      goto yy829;
                }
-               goto yy819;
 -              goto yy824;
++              goto yy826;
        }
  }
- #line 2370 "Zend/zend_language_scanner.l"
 -#line 2362 "Zend/zend_language_scanner.l"
++#line 2374 "Zend/zend_language_scanner.l"
  
  }
Simple merge
index 2d39662701da64510f3cd70b7854be95460b2ae8,53cb3db12858de1e631accce85c3db9517c32bd5..27c9084e30013a4e626ca5c29bd3b92e596591b0
@@@ -7162,15 -6240,10 +7159,14 @@@ ZEND_VM_HANDLER(160, ZEND_YIELD, CONST|
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              FREE_UNFETCHED_OP2();
 +              FREE_UNFETCHED_OP1();
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
        ZEND_VM_RETURN();
  }
  
 -ZEND_VM_HANDLER(170, ZEND_YIELD_FROM, CONST|TMP|VAR|CV, ANY)
++ZEND_VM_HANDLER(142, ZEND_YIELD_FROM, CONST|TMP|VAR|CV, ANY)
+ {
+       USE_OPLINE
+       /* The generator object is stored in EX(return_value) */
+       zend_generator *generator = (zend_generator *) EX(return_value);
+       zval *val;
+       zend_free_op free_op1;
+       SAVE_OPLINE();
+       val = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
+       if (Z_TYPE_P(val) == IS_ARRAY) {
+               ZVAL_COPY_VALUE(&generator->values, val);
+               if (OP1_TYPE != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
+                       Z_ADDREF_P(val);
+               }
+               Z_FE_POS(generator->values) = 0;
+               FREE_OP1_IF_VAR();
+       } else if (OP1_TYPE != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
+               zend_class_entry *ce = Z_OBJCE_P(val);
+               if (ce == zend_ce_generator) {
+                       zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
+                       if (OP1_TYPE != IS_TMP_VAR) {
+                               Z_ADDREF_P(val);
+                       }
+                       FREE_OP1_IF_VAR();
+                       if (Z_ISUNDEF(new_gen->retval)) {
+                               zend_generator_yield_from(generator, new_gen);
+                       } else if (new_gen->execute_data == NULL) {
+                               // TODO: Should be an engine exception
+                               zend_error(E_RECOVERABLE_ERROR, "Generator passed to yield from was aborted without proper return and is unable to continue");
+                               CHECK_EXCEPTION();
+                               ZEND_VM_NEXT_OPCODE();
+                       } else {
+                               if (RETURN_VALUE_USED(opline)) {
+                                       ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
+                               }
+                               CHECK_EXCEPTION();
+                               ZEND_VM_NEXT_OPCODE();
+                       }
+               } else {
+                       zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
+                       FREE_OP1();
+                       if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
+                               if (!EG(exception)) {
+                                       zend_throw_exception_ex(NULL, 0,
+                                               "Object of type %s did not create an Iterator", ce->name->val);
+                               }
+                               zend_throw_exception_internal(NULL);
+                               HANDLE_EXCEPTION();
+                       }
+                       iter->index = 0;
+                       if (iter->funcs->rewind) {
+                               iter->funcs->rewind(iter);
+                               if (UNEXPECTED(EG(exception) != NULL)) {
+                                       OBJ_RELEASE(&iter->std);
+                                       HANDLE_EXCEPTION();
+                               }
+                       }
+                       ZVAL_OBJ(&generator->values, &iter->std);
+               }
+       } else {
+               // TODO: Should be an engine exception
+               zend_throw_exception(NULL, "Can use \"yield from\" only with arrays and Traversables", 0);
+               HANDLE_EXCEPTION();
+       }
+       /* This is the default return value
+        * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
+       if (RETURN_VALUE_USED(opline)) {
+               ZVAL_NULL(EX_VAR(opline->result.var));
+       }
+       /* We increment to the next op, so we are at the correct position when the
+        * generator is resumed. */
+       ZEND_VM_INC_OPCODE();
+       /* The GOTO VM uses a local opline variable. We need to set the opline
+        * variable in execute_data so we don't resume at an old position. */
+       SAVE_OPLINE();
+       ZEND_VM_RETURN();
+ }
  ZEND_VM_HANDLER(159, ZEND_DISCARD_EXCEPTION, ANY, ANY)
  {
        USE_OPLINE
index 122463396a323e0b68203d386a30ad5a31f0c488,f7f5cb4f244ccc56ceee119d32eddf8f3b8158d6..9b686775c413af460ec112e8bdb6e32f3a76c46f
@@@ -3966,7 -3481,97 +3962,97 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
        ZEND_VM_NEXT_OPCODE();
  }
  
 -static int ZEND_FASTCALL  ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
++static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       USE_OPLINE
+       /* The generator object is stored in EX(return_value) */
+       zend_generator *generator = (zend_generator *) EX(return_value);
+       zval *val;
+       SAVE_OPLINE();
+       val = EX_CONSTANT(opline->op1);
+       if (Z_TYPE_P(val) == IS_ARRAY) {
+               ZVAL_COPY_VALUE(&generator->values, val);
+               if (IS_CONST != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
+                       Z_ADDREF_P(val);
+               }
+               Z_FE_POS(generator->values) = 0;
+       } else if (IS_CONST != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
+               zend_class_entry *ce = Z_OBJCE_P(val);
+               if (ce == zend_ce_generator) {
+                       zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
+                       if (IS_CONST != IS_TMP_VAR) {
+                               Z_ADDREF_P(val);
+                       }
+                       if (Z_ISUNDEF(new_gen->retval)) {
+                               zend_generator_yield_from(generator, new_gen);
+                       } else if (new_gen->execute_data == NULL) {
+                               // TODO: Should be an engine exception
+                               zend_error(E_RECOVERABLE_ERROR, "Generator passed to yield from was aborted without proper return and is unable to continue");
+                               CHECK_EXCEPTION();
+                               ZEND_VM_NEXT_OPCODE();
+                       } else {
+                               if (RETURN_VALUE_USED(opline)) {
+                                       ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
+                               }
+                               CHECK_EXCEPTION();
+                               ZEND_VM_NEXT_OPCODE();
+                       }
+               } else {
+                       zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
+                       if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
+                               if (!EG(exception)) {
+                                       zend_throw_exception_ex(NULL, 0,
+                                               "Object of type %s did not create an Iterator", ce->name->val);
+                               }
+                               zend_throw_exception_internal(NULL);
+                               HANDLE_EXCEPTION();
+                       }
+                       iter->index = 0;
+                       if (iter->funcs->rewind) {
+                               iter->funcs->rewind(iter);
+                               if (UNEXPECTED(EG(exception) != NULL)) {
+                                       OBJ_RELEASE(&iter->std);
+                                       HANDLE_EXCEPTION();
+                               }
+                       }
+                       ZVAL_OBJ(&generator->values, &iter->std);
+               }
+       } else {
+               // TODO: Should be an engine exception
+               zend_throw_exception(NULL, "Can use \"yield from\" only with arrays and Traversables", 0);
+               HANDLE_EXCEPTION();
+       }
+       /* This is the default return value
+        * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
+       if (RETURN_VALUE_USED(opline)) {
+               ZVAL_NULL(EX_VAR(opline->result.var));
+       }
+       /* We increment to the next op, so we are at the correct position when the
+        * generator is resumed. */
+       ZEND_VM_INC_OPCODE();
+       /* The GOTO VM uses a local opline variable. We need to set the opline
+        * variable in execute_data so we don't resume at an old position. */
+       SAVE_OPLINE();
+       ZEND_VM_RETURN();
+ }
 -static int ZEND_FASTCALL  ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 +static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
        zval *value;
@@@ -6024,15 -5168,10 +6110,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +
 +
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -6208,15 -5344,10 +6293,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
 +
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -6738,15 -5851,10 +6822,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
 +
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -7615,15 -6649,10 +7698,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +
 +
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -9218,15 -7800,10 +9300,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +
 +
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -11476,7 -9580,98 +11556,98 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
        ZEND_VM_NEXT_OPCODE();
  }
  
 -static int ZEND_FASTCALL  ZEND_YIELD_FROM_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
++static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       USE_OPLINE
+       /* The generator object is stored in EX(return_value) */
+       zend_generator *generator = (zend_generator *) EX(return_value);
+       zval *val;
+       zend_free_op free_op1;
+       SAVE_OPLINE();
+       val = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+       if (Z_TYPE_P(val) == IS_ARRAY) {
+               ZVAL_COPY_VALUE(&generator->values, val);
+               if (IS_TMP_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
+                       Z_ADDREF_P(val);
+               }
+               Z_FE_POS(generator->values) = 0;
+       } else if (IS_TMP_VAR != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
+               zend_class_entry *ce = Z_OBJCE_P(val);
+               if (ce == zend_ce_generator) {
+                       zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
+                       if (IS_TMP_VAR != IS_TMP_VAR) {
+                               Z_ADDREF_P(val);
+                       }
+                       if (Z_ISUNDEF(new_gen->retval)) {
+                               zend_generator_yield_from(generator, new_gen);
+                       } else if (new_gen->execute_data == NULL) {
+                               // TODO: Should be an engine exception
+                               zend_error(E_RECOVERABLE_ERROR, "Generator passed to yield from was aborted without proper return and is unable to continue");
+                               CHECK_EXCEPTION();
+                               ZEND_VM_NEXT_OPCODE();
+                       } else {
+                               if (RETURN_VALUE_USED(opline)) {
+                                       ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
+                               }
+                               CHECK_EXCEPTION();
+                               ZEND_VM_NEXT_OPCODE();
+                       }
+               } else {
+                       zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
+                       zval_ptr_dtor_nogc(free_op1);
+                       if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
+                               if (!EG(exception)) {
+                                       zend_throw_exception_ex(NULL, 0,
+                                               "Object of type %s did not create an Iterator", ce->name->val);
+                               }
+                               zend_throw_exception_internal(NULL);
+                               HANDLE_EXCEPTION();
+                       }
+                       iter->index = 0;
+                       if (iter->funcs->rewind) {
+                               iter->funcs->rewind(iter);
+                               if (UNEXPECTED(EG(exception) != NULL)) {
+                                       OBJ_RELEASE(&iter->std);
+                                       HANDLE_EXCEPTION();
+                               }
+                       }
+                       ZVAL_OBJ(&generator->values, &iter->std);
+               }
+       } else {
+               // TODO: Should be an engine exception
+               zend_throw_exception(NULL, "Can use \"yield from\" only with arrays and Traversables", 0);
+               HANDLE_EXCEPTION();
+       }
+       /* This is the default return value
+        * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
+       if (RETURN_VALUE_USED(opline)) {
+               ZVAL_NULL(EX_VAR(opline->result.var));
+       }
+       /* We increment to the next op, so we are at the correct position when the
+        * generator is resumed. */
+       ZEND_VM_INC_OPCODE();
+       /* The GOTO VM uses a local opline variable. We need to set the opline
+        * variable in execute_data so we don't resume at an old position. */
+       SAVE_OPLINE();
+       ZEND_VM_RETURN();
+ }
 -static int ZEND_FASTCALL  ZEND_TYPE_CHECK_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 +static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
        zval *value;
@@@ -11911,15 -10043,10 +12082,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +
 +              zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -12080,15 -10204,10 +12250,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
 +              zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -12249,15 -10365,10 +12418,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
 +              zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -12614,15 -10668,10 +12782,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +
 +              zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -13136,15 -11121,10 +13303,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +
 +              zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -15052,7 -12933,100 +15217,100 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
        ZEND_VM_NEXT_OPCODE();
  }
  
 -static int ZEND_FASTCALL  ZEND_YIELD_FROM_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
++static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       USE_OPLINE
+       /* The generator object is stored in EX(return_value) */
+       zend_generator *generator = (zend_generator *) EX(return_value);
+       zval *val;
+       zend_free_op free_op1;
+       SAVE_OPLINE();
+       val = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
+       if (Z_TYPE_P(val) == IS_ARRAY) {
+               ZVAL_COPY_VALUE(&generator->values, val);
+               if (IS_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
+                       Z_ADDREF_P(val);
+               }
+               Z_FE_POS(generator->values) = 0;
+               zval_ptr_dtor_nogc(free_op1);
+       } else if (IS_VAR != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
+               zend_class_entry *ce = Z_OBJCE_P(val);
+               if (ce == zend_ce_generator) {
+                       zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
+                       if (IS_VAR != IS_TMP_VAR) {
+                               Z_ADDREF_P(val);
+                       }
+                       zval_ptr_dtor_nogc(free_op1);
+                       if (Z_ISUNDEF(new_gen->retval)) {
+                               zend_generator_yield_from(generator, new_gen);
+                       } else if (new_gen->execute_data == NULL) {
+                               // TODO: Should be an engine exception
+                               zend_error(E_RECOVERABLE_ERROR, "Generator passed to yield from was aborted without proper return and is unable to continue");
+                               CHECK_EXCEPTION();
+                               ZEND_VM_NEXT_OPCODE();
+                       } else {
+                               if (RETURN_VALUE_USED(opline)) {
+                                       ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
+                               }
+                               CHECK_EXCEPTION();
+                               ZEND_VM_NEXT_OPCODE();
+                       }
+               } else {
+                       zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
+                       zval_ptr_dtor_nogc(free_op1);
+                       if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
+                               if (!EG(exception)) {
+                                       zend_throw_exception_ex(NULL, 0,
+                                               "Object of type %s did not create an Iterator", ce->name->val);
+                               }
+                               zend_throw_exception_internal(NULL);
+                               HANDLE_EXCEPTION();
+                       }
+                       iter->index = 0;
+                       if (iter->funcs->rewind) {
+                               iter->funcs->rewind(iter);
+                               if (UNEXPECTED(EG(exception) != NULL)) {
+                                       OBJ_RELEASE(&iter->std);
+                                       HANDLE_EXCEPTION();
+                               }
+                       }
+                       ZVAL_OBJ(&generator->values, &iter->std);
+               }
+       } else {
+               // TODO: Should be an engine exception
+               zend_throw_exception(NULL, "Can use \"yield from\" only with arrays and Traversables", 0);
+               HANDLE_EXCEPTION();
+       }
+       /* This is the default return value
+        * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
+       if (RETURN_VALUE_USED(opline)) {
+               ZVAL_NULL(EX_VAR(opline->result.var));
+       }
+       /* We increment to the next op, so we are at the correct position when the
+        * generator is resumed. */
+       ZEND_VM_INC_OPCODE();
+       /* The GOTO VM uses a local opline variable. We need to set the opline
+        * variable in execute_data so we don't resume at an old position. */
+       SAVE_OPLINE();
+       ZEND_VM_RETURN();
+ }
 -static int ZEND_FASTCALL  ZEND_TYPE_CHECK_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 +static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
        zval *value;
@@@ -16756,15 -14533,10 +17014,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +
 +              zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -16960,15 -14732,10 +17217,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
 +              zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -17223,15 -14982,10 +17479,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
 +              zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -18183,15 -15823,10 +18438,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +
 +              zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -19938,15 -17366,10 +20192,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +
 +              zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -23162,15 -20254,10 +23415,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +
 +
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -23300,15 -20384,10 +23552,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
 +
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -23438,15 -20514,10 +23689,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
 +
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -23951,15 -20975,10 +24201,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +
 +
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -25455,15 -22358,10 +25704,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +
 +
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -28495,7 -25197,97 +28742,97 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
        ZEND_VM_NEXT_OPCODE();
  }
  
 -static int ZEND_FASTCALL  ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
++static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+ {
+       USE_OPLINE
+       /* The generator object is stored in EX(return_value) */
+       zend_generator *generator = (zend_generator *) EX(return_value);
+       zval *val;
+       SAVE_OPLINE();
+       val = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
+       if (Z_TYPE_P(val) == IS_ARRAY) {
+               ZVAL_COPY_VALUE(&generator->values, val);
+               if (IS_CV != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
+                       Z_ADDREF_P(val);
+               }
+               Z_FE_POS(generator->values) = 0;
+       } else if (IS_CV != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
+               zend_class_entry *ce = Z_OBJCE_P(val);
+               if (ce == zend_ce_generator) {
+                       zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
+                       if (IS_CV != IS_TMP_VAR) {
+                               Z_ADDREF_P(val);
+                       }
+                       if (Z_ISUNDEF(new_gen->retval)) {
+                               zend_generator_yield_from(generator, new_gen);
+                       } else if (new_gen->execute_data == NULL) {
+                               // TODO: Should be an engine exception
+                               zend_error(E_RECOVERABLE_ERROR, "Generator passed to yield from was aborted without proper return and is unable to continue");
+                               CHECK_EXCEPTION();
+                               ZEND_VM_NEXT_OPCODE();
+                       } else {
+                               if (RETURN_VALUE_USED(opline)) {
+                                       ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
+                               }
+                               CHECK_EXCEPTION();
+                               ZEND_VM_NEXT_OPCODE();
+                       }
+               } else {
+                       zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
+                       if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
+                               if (!EG(exception)) {
+                                       zend_throw_exception_ex(NULL, 0,
+                                               "Object of type %s did not create an Iterator", ce->name->val);
+                               }
+                               zend_throw_exception_internal(NULL);
+                               HANDLE_EXCEPTION();
+                       }
+                       iter->index = 0;
+                       if (iter->funcs->rewind) {
+                               iter->funcs->rewind(iter);
+                               if (UNEXPECTED(EG(exception) != NULL)) {
+                                       OBJ_RELEASE(&iter->std);
+                                       HANDLE_EXCEPTION();
+                               }
+                       }
+                       ZVAL_OBJ(&generator->values, &iter->std);
+               }
+       } else {
+               // TODO: Should be an engine exception
+               zend_throw_exception(NULL, "Can use \"yield from\" only with arrays and Traversables", 0);
+               HANDLE_EXCEPTION();
+       }
+       /* This is the default return value
+        * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
+       if (RETURN_VALUE_USED(opline)) {
+               ZVAL_NULL(EX_VAR(opline->result.var));
+       }
+       /* We increment to the next op, so we are at the correct position when the
+        * generator is resumed. */
+       ZEND_VM_INC_OPCODE();
+       /* The GOTO VM uses a local opline variable. We need to set the opline
+        * variable in execute_data so we don't resume at an old position. */
+       SAVE_OPLINE();
+       ZEND_VM_RETURN();
+ }
 -static int ZEND_FASTCALL  ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 +static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
  {
        USE_OPLINE
        zval *value;
@@@ -31453,15 -27667,10 +31790,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +
 +
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -31727,15 -27936,10 +32063,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
 +
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -32392,15 -28573,10 +32727,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
 +
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -33566,15 -29617,10 +33900,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +
 +
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -36192,15 -31659,10 +36525,14 @@@ static ZEND_OPCODE_HANDLER_RET ZEND_FAS
  {
        USE_OPLINE
  
-       /* The generator object is stored in EX(return_value) */
-       zend_generator *generator = (zend_generator *) EX(return_value);
+       zend_generator *generator = zend_get_running_generator(execute_data);
  
 +      SAVE_OPLINE();
        if (generator->flags & ZEND_GENERATOR_FORCED_CLOSE) {
 -              zend_error_noreturn(E_ERROR, "Cannot yield from finally in a force-closed generator");
 +              zend_error(E_EXCEPTION | E_ERROR, "Cannot yield from finally in a force-closed generator");
 +
 +
 +              HANDLE_EXCEPTION();
        }
  
        /* Destroy the previously yielded value */
@@@ -47148,31 -40840,31 +47480,31 @@@ void zend_init_opcodes_handlers(void
        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
        ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
-       ZEND_NULL_HANDLER,
++      ZEND_YIELD_FROM_SPEC_CONST_HANDLER,
++      ZEND_YIELD_FROM_SPEC_CONST_HANDLER,
++      ZEND_YIELD_FROM_SPEC_CONST_HANDLER,
++      ZEND_YIELD_FROM_SPEC_CONST_HANDLER,
++      ZEND_YIELD_FROM_SPEC_CONST_HANDLER,
++      ZEND_YIELD_FROM_SPEC_TMP_HANDLER,
++      ZEND_YIELD_FROM_SPEC_TMP_HANDLER,
++      ZEND_YIELD_FROM_SPEC_TMP_HANDLER,
++      ZEND_YIELD_FROM_SPEC_TMP_HANDLER,
++      ZEND_YIELD_FROM_SPEC_TMP_HANDLER,
++      ZEND_YIELD_FROM_SPEC_VAR_HANDLER,
++      ZEND_YIELD_FROM_SPEC_VAR_HANDLER,
++      ZEND_YIELD_FROM_SPEC_VAR_HANDLER,
++      ZEND_YIELD_FROM_SPEC_VAR_HANDLER,
++      ZEND_YIELD_FROM_SPEC_VAR_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
 -      ZEND_NULL_HANDLER,
 -      ZEND_NULL_HANDLER,
 -      ZEND_NULL_HANDLER,
 -      ZEND_NULL_HANDLER,
 -      ZEND_NULL_HANDLER,
 -      ZEND_NULL_HANDLER,
 -      ZEND_NULL_HANDLER,
 -      ZEND_NULL_HANDLER,
 -      ZEND_NULL_HANDLER,
 -      ZEND_NULL_HANDLER,
 -      ZEND_NULL_HANDLER,
 -      ZEND_NULL_HANDLER,
 -      ZEND_NULL_HANDLER,
 -      ZEND_NULL_HANDLER,
 -      ZEND_NULL_HANDLER,
 -      ZEND_NULL_HANDLER,
 -      ZEND_NULL_HANDLER,
 -      ZEND_NULL_HANDLER,
 -      ZEND_NULL_HANDLER,
 -      ZEND_NULL_HANDLER,
++      ZEND_YIELD_FROM_SPEC_CV_HANDLER,
++      ZEND_YIELD_FROM_SPEC_CV_HANDLER,
++      ZEND_YIELD_FROM_SPEC_CV_HANDLER,
++      ZEND_YIELD_FROM_SPEC_CV_HANDLER,
++      ZEND_YIELD_FROM_SPEC_CV_HANDLER,
        ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER,
        ZEND_NULL_HANDLER,
        ZEND_NULL_HANDLER,
index 2214cd9dc44783b2cb67f31259e29901c27b9884,a6d7ecedc43ae82383297e761ce2e7c919a9a22f..ff986d1855c154ac0a735f9a758e93537974e895
@@@ -164,7 -164,7 +164,7 @@@ const char *zend_vm_opcodes_map[171] = 
        "ZEND_DECLARE_CLASS",
        "ZEND_DECLARE_INHERITED_CLASS",
        "ZEND_DECLARE_FUNCTION",
--      NULL,
++      "ZEND_YIELD_FROM",
        "ZEND_DECLARE_CONST",
        "ZEND_ADD_INTERFACE",
        "ZEND_DECLARE_INHERITED_CLASS_DELAYED",
index 8b9321a99177c0e99fa76f8ba453ba2c63fe95cc,0bb6dd345d83e33ea51190f3875783ff29220f7f..edee61f6c9baf58a7b162c86277b360c819dd2db
@@@ -173,6 -161,6 +173,7 @@@ END_EXTERN_C(
  #define ZEND_DECLARE_CLASS                   139
  #define ZEND_DECLARE_INHERITED_CLASS         140
  #define ZEND_DECLARE_FUNCTION                141
++#define ZEND_YIELD_FROM                      142
  #define ZEND_DECLARE_CONST                   143
  #define ZEND_ADD_INTERFACE                   144
  #define ZEND_DECLARE_INHERITED_CLASS_DELAYED 145