]> granicus.if.org Git - php/commitdiff
Fixed bug #76439
authorNikita Popov <nikita.ppv@gmail.com>
Wed, 27 Jun 2018 12:06:03 +0000 (14:06 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Wed, 27 Jun 2018 12:15:56 +0000 (14:15 +0200)
NEWS
Zend/tests/bug76439.phpt [new file with mode: 0644]
Zend/tests/bug76439_2.phpt [new file with mode: 0644]
Zend/zend_language_scanner.c
Zend/zend_language_scanner.l
Zend/zend_language_scanner_defs.h

diff --git a/NEWS b/NEWS
index 07e5d1900b416057ead5af14a3acf4614fcb9a3a..a9f8ae656d1f2c3658f0981349fa59fadc2faa90 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -11,6 +11,7 @@ PHP                                                                        NEWS
     properly). (Nikita)
   . Fixed bug #76509 (Inherited static properties can be desynchronized from
     their parent by ref). (Nikita)
+  . Fixed bug #76439 (Changed behaviour in unclosed HereDoc). (Nikita, tpunt)
 
 - FPM:
   . Fixed bug #73342 (Vulnerability in php-fpm by changing stdin to
diff --git a/Zend/tests/bug76439.phpt b/Zend/tests/bug76439.phpt
new file mode 100644 (file)
index 0000000..0572e9f
--- /dev/null
@@ -0,0 +1,68 @@
+--TEST--
+Bug #76439: Don't always strip leading whitespace from heredoc T_ENCAPSED_AND_WHITESPACE tokens
+--FILE--
+<?php
+
+[$one, $two, $three, $four, $five, $six, $seven, $eight, $nine] = [1, 2, 3, 4, 5, 6, 7, 8, 9];
+
+var_dump(<<<BAR
+ $one-
+ BAR);
+
+var_dump(<<<BAR
+ $two -
+ BAR);
+
+var_dump(<<<BAR
+ $three        -
+ BAR);
+
+var_dump(<<<BAR
+ $four-$four
+ BAR);
+
+var_dump(<<<BAR
+ $five-$five-
+ BAR);
+
+var_dump(<<<BAR
+ $six-$six-$six
+ BAR);
+
+var_dump(<<<BAR
+ $seven
+ -
+ BAR);
+
+var_dump(<<<BAR
+ $eight
+  -
+ BAR);
+
+var_dump(<<<BAR
+$nine
+BAR);
+
+var_dump(<<<BAR
+ -
+ BAR);
+
+var_dump(<<<BAR
+  -
+ BAR);
+
+?>
+--EXPECT--
+string(2) "1-"
+string(3) "2 -"
+string(3) "3   -"
+string(3) "4-4"
+string(4) "5-5-"
+string(5) "6-6-6"
+string(3) "7
+-"
+string(4) "8
+ -"
+string(1) "9"
+string(1) "-"
+string(2) " -"
diff --git a/Zend/tests/bug76439_2.phpt b/Zend/tests/bug76439_2.phpt
new file mode 100644 (file)
index 0000000..c91303b
--- /dev/null
@@ -0,0 +1,15 @@
+--TEST--
+Bug #76439: Don't always strip leading whitespace from heredoc T_ENCAPSED_AND_WHITESPACE tokens (error case)
+--FILE--
+<?php
+
+$foo = 1;
+
+var_dump(<<<BAR
+ $foo
+$foo
+ BAR);
+
+?>
+--EXPECTF--
+Parse error: Invalid body indentation level (expecting an indentation level of at least 1) in %s on line 7
index 8db317915df83526a1e0cc904e4a74666038e526..db713464deda538c4ce240e129d2b721ba148646 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.16 */
+/* Generated by re2c 1.0.1 */
 #line 1 "Zend/zend_language_scanner.l"
 /*
    +----------------------------------------------------------------------+
@@ -75,6 +75,7 @@
 /* perform sanity check. If this message is triggered you should
    increase the ZEND_MMAP_AHEAD value in the zend_streams.h file */
 #define YYMAXFILL 16
+
 #if ZEND_MMAP_AHEAD < YYMAXFILL
 # error ZEND_MMAP_AHEAD should be greater than or equal to YYMAXFILL
 #endif
@@ -1111,65 +1112,86 @@ skip_escape_conversion:
 #define HEREDOC_USING_SPACES 1
 #define HEREDOC_USING_TABS 2
 
-static zend_bool strip_multiline_string_indentation(zval *zendlval, int newline, int indentation, zend_bool using_spaces)
+static const char *next_newline(const char *str, const char *end, size_t *newline_len) {
+       for (; str < end; str++) {
+               if (*str == '\r') {
+                       *newline_len = str + 1 < end && *(str + 1) == '\n' ? 2 : 1;
+               } else if (*str == '\n') {
+                       *newline_len = 1;
+                       return str;
+               }
+       }
+       *newline_len = 0;
+       return NULL;
+}
+
+static zend_bool strip_multiline_string_indentation(
+       zval *zendlval, int indentation, zend_bool using_spaces,
+       zend_bool newline_at_start, zend_bool newline_at_end)
 {
-       int len = Z_STRLEN_P(zendlval), new_len = len, i = 0, j = 0, skip, newline_count = 0;
+       const char *str = Z_STRVAL_P(zendlval), *end = str + Z_STRLEN_P(zendlval);
        char *copy = Z_STRVAL_P(zendlval);
-       zend_bool trailing_newline = 0;
 
-       while (j < len) {
-               trailing_newline = 0;
+       int newline_count = 0;
+       size_t newline_len;
+       const char *nl;
+
+       if (!newline_at_start) {
+               nl = next_newline(str, end, &newline_len);
+               if (!nl) {
+                       return 1;
+               }
+
+               str = nl + newline_len;
+               copy = (char *) nl + newline_len;
+               newline_count++;
+       } else {
+               nl = str;
+       }
+
+       /* <= intentional */
+       while (str <= end && nl) {
+               size_t skip;
+               nl = next_newline(str, end, &newline_len);
+               if (!nl && newline_at_end) {
+                       nl = end;
+               }
 
-               for (skip = 0; skip < indentation; ++skip, ++j, --new_len) {
-                       if (copy[j] == '\r' || copy[j] == '\n') {
-                               goto skip;
+               /* Try to skip indentation */
+               for (skip = 0; skip < indentation; skip++, str++) {
+                       if (str == nl) {
+                               /* Don't require full indentation on whitespace-only lines */
+                               break;
                        }
 
-                       if (copy[j] != ' ' && copy[j] != '\t') {
+                       if (str == end || (*str != ' ' && *str != '\t')) {
                                CG(zend_lineno) += newline_count;
-                               zend_throw_exception_ex(zend_ce_parse_error, 0, "Invalid body indentation level (expecting an indentation level of at least %d)", indentation);
+                               zend_throw_exception_ex(zend_ce_parse_error, 0,
+                                       "Invalid body indentation level (expecting an indentation level of at least %d)", indentation);
                                goto error;
                        }
 
-                       if ((!using_spaces && copy[j] == ' ') || (using_spaces && copy[j] == '\t')) {
+                       if ((!using_spaces && *str == ' ') || (using_spaces && *str == '\t')) {
                                CG(zend_lineno) += newline_count;
-                               zend_throw_exception(zend_ce_parse_error, "Invalid indentation - tabs and spaces cannot be mixed", 0);
+                               zend_throw_exception(zend_ce_parse_error,
+                                       "Invalid indentation - tabs and spaces cannot be mixed", 0);
                                goto error;
                        }
                }
 
-               while (j < len && copy[j] != '\r' && copy[j] != '\n') {
-                       copy[i++] = copy[j++];
-               }
-
-               if (j == len) {
+               if (str == end) {
                        break;
                }
-skip:
-               if (copy[j] == '\r') {
-                       copy[i++] = copy[j++];
-                       trailing_newline = 1;
-               }
-
-               if (copy[j] == '\n') {
-                       copy[i++] = copy[j++];
-                       trailing_newline = 1;
-               }
-
-               if (trailing_newline) {
-                       ++newline_count;
-               }
-       }
 
-       if (YYSTATE != STATE(ST_END_HEREDOC) && trailing_newline && indentation) {
-               CG(zend_lineno) += newline_count;
-               zend_throw_exception_ex(zend_ce_parse_error, 0, "Invalid body indentation level (expecting an indentation level of at least %d)", indentation);
-               goto error;
+               size_t len = nl ? (nl - str + newline_len) : (end - str);
+               memmove(copy, str, len);
+               str += len;
+               copy += len;
+               newline_count++;
        }
 
-       Z_STRVAL_P(zendlval)[new_len - newline] = '\0';
-       Z_STRLEN_P(zendlval) = new_len - newline;
-
+       *copy = '\0';
+       Z_STRLEN_P(zendlval) = copy - Z_STRVAL_P(zendlval);
        return 1;
 
 error:
@@ -1225,7 +1247,7 @@ restart:
        SCNG(yy_text) = YYCURSOR;
 
 
-#line 1229 "Zend/zend_language_scanner.c"
+#line 1251 "Zend/zend_language_scanner.c"
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
@@ -1267,6331 +1289,6160 @@ restart:
                }
        }
 /* *********************************** */
-yyc_INITIAL:
-       YYDEBUG(1, *YYCURSOR);
-       YYFILL(7);
-       yych = *YYCURSOR;
-       if (yych == '<') goto yy5;
-       YYDEBUG(3, *YYCURSOR);
-       ++YYCURSOR;
-yy4:
-       YYDEBUG(4, *YYCURSOR);
-       yyleng = YYCURSOR - SCNG(yy_text);
-#line 1938 "Zend/zend_language_scanner.l"
+yyc_ST_IN_SCRIPTING:
        {
+               static const unsigned char yybm[] = {
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                         0,  36,   4,   0,   0,   4,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                        36,   0,   0,   0,   0,   0,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                       216, 216, 152, 152, 152, 152, 152, 152, 
+                       152, 152,   0,   0,   0,   0,   0,   0, 
+                         0, 144, 144, 144, 144, 144, 144,  16, 
+                        16,  16,  16,  16,  16,  16,  16,  16, 
+                        16,  16,  16,  16,  16,  16,  16,  16, 
+                        16,  16,  16,   0,   0,   0,   0,  16, 
+                         0, 144, 144, 144, 144, 144, 144,  16, 
+                        16,  16,  16,  16,  16,  16,  16,  16, 
+                        16,  16,  16,  16,  16,  16,  16,  16, 
+                        16,  16,  16,   0,   0,   0,   0,   0, 
+                        16,  16,  16,  16,  16,  16,  16,  16, 
+                        16,  16,  16,  16,  16,  16,  16,  16, 
+                        16,  16,  16,  16,  16,  16,  16,  16, 
+                        16,  16,  16,  16,  16,  16,  16,  16, 
+                        16,  16,  16,  16,  16,  16,  16,  16, 
+                        16,  16,  16,  16,  16,  16,  16,  16, 
+                        16,  16,  16,  16,  16,  16,  16,  16, 
+                        16,  16,  16,  16,  16,  16,  16,  16, 
+                        16,  16,  16,  16,  16,  16,  16,  16, 
+                        16,  16,  16,  16,  16,  16,  16,  16, 
+                        16,  16,  16,  16,  16,  16,  16,  16, 
+                        16,  16,  16,  16,  16,  16,  16,  16, 
+                        16,  16,  16,  16,  16,  16,  16,  16, 
+                        16,  16,  16,  16,  16,  16,  16,  16, 
+                        16,  16,  16,  16,  16,  16,  16,  16, 
+                        16,  16,  16,  16,  16,  16,  16,  16, 
+               };
+               YYDEBUG(1, *YYCURSOR);
+               YYFILL(16);
+               yych = *YYCURSOR;
+               if (yybm[0+yych] & 4) {
+                       goto yy5;
+               }
+               switch (yych) {
+               case 0x00:
+               case 0x01:
+               case 0x02:
+               case 0x03:
+               case 0x04:
+               case 0x05:
+               case 0x06:
+               case 0x07:
+               case 0x08:
+               case '\t':
+               case '\n':
+               case '\v':
+               case '\f':
+               case '\r':
+               case 0x0E:
+               case 0x0F:
+               case 0x10:
+               case 0x11:
+               case 0x12:
+               case 0x13:
+               case 0x14:
+               case 0x15:
+               case 0x16:
+               case 0x17:
+               case 0x18:
+               case 0x19:
+               case 0x1A:
+               case 0x1B:
+               case 0x1C:
+               case 0x1D:
+               case 0x1E:
+               case 0x1F:
+               case 0x7F:      goto yy3;
+               case ' ':
+               case '!':       goto yy8;
+               case '"':       goto yy10;
+               case '#':       goto yy12;
+               case '$':       goto yy14;
+               case '%':       goto yy15;
+               case '&':       goto yy16;
+               case '\'':      goto yy17;
+               case '(':       goto yy19;
+               case ')':
+               case ',':
+               case ';':
+               case '@':
+               case '[':
+               case ']':
+               case '~':       goto yy20;
+               case '*':       goto yy21;
+               case '+':       goto yy22;
+               case '-':       goto yy23;
+               case '.':       goto yy24;
+               case '/':       goto yy25;
+               case '0':       goto yy26;
+               case '1':
+               case '2':
+               case '3':
+               case '4':
+               case '5':
+               case '6':
+               case '7':
+               case '8':
+               case '9':       goto yy28;
+               case ':':       goto yy30;
+               case '<':       goto yy31;
+               case '=':       goto yy32;
+               case '>':       goto yy33;
+               case '?':       goto yy34;
+               case 'A':
+               case 'a':       goto yy35;
+               case 'B':
+               case 'b':       goto yy37;
+               case 'C':
+               case 'c':       goto yy38;
+               case 'D':
+               case 'd':       goto yy39;
+               case 'E':
+               case 'e':       goto yy40;
+               case 'F':
+               case 'f':       goto yy41;
+               case 'G':
+               case 'g':       goto yy42;
+               case 'I':
+               case 'i':       goto yy45;
+               case 'L':
+               case 'l':       goto yy46;
+               case 'N':
+               case 'n':       goto yy47;
+               case 'O':
+               case 'o':       goto yy48;
+               case 'P':
+               case 'p':       goto yy49;
+               case 'R':
+               case 'r':       goto yy50;
+               case 'S':
+               case 's':       goto yy51;
+               case 'T':
+               case 't':       goto yy52;
+               case 'U':
+               case 'u':       goto yy53;
+               case 'V':
+               case 'v':       goto yy54;
+               case 'W':
+               case 'w':       goto yy55;
+               case 'X':
+               case 'x':       goto yy56;
+               case 'Y':
+               case 'y':       goto yy57;
+               case '\\':      goto yy58;
+               case '^':       goto yy60;
+               case '_':       goto yy61;
+               case '`':       goto yy62;
+               case '{':       goto yy64;
+               case '|':       goto yy66;
+               case '}':       goto yy67;
+               default:        goto yy43;
+               }
+yy3:
+               YYDEBUG(3, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(4, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 2748 "Zend/zend_language_scanner.l"
+               {
        if (YYCURSOR > YYLIMIT) {
                RETURN_TOKEN(END);
        }
 
-inline_char_handler:
+       zend_error(E_COMPILE_WARNING,"Unexpected character in input:  '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
+       goto restart;
+}
+#line 1468 "Zend/zend_language_scanner.c"
+yy5:
+               YYDEBUG(5, *YYCURSOR);
+               ++YYCURSOR;
+               YYFILL(1);
+               yych = *YYCURSOR;
+               YYDEBUG(6, *YYCURSOR);
+               if (yybm[0+yych] & 4) {
+                       goto yy5;
+               }
+               YYDEBUG(7, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1430 "Zend/zend_language_scanner.l"
+               {
+       goto return_whitespace;
+}
+#line 1484 "Zend/zend_language_scanner.c"
+yy8:
+               YYDEBUG(8, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == '=') goto yy69;
+yy9:
+               YYDEBUG(9, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1713 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(yytext[0]);
+}
+#line 1496 "Zend/zend_language_scanner.c"
+yy10:
+               YYDEBUG(10, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(11, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 2224 "Zend/zend_language_scanner.l"
+               {
+       int bprefix = (yytext[0] != '"') ? 1 : 0;
 
-       while (1) {
-               YYCTYPE *ptr = memchr(YYCURSOR, '<', YYLIMIT - YYCURSOR);
+       while (YYCURSOR < YYLIMIT) {
+               switch (*YYCURSOR++) {
+                       case '"':
+                               yyleng = YYCURSOR - SCNG(yy_text);
+                               if (EXPECTED(zend_scan_escape_string(zendlval, yytext+bprefix+1, yyleng-bprefix-2, '"') == SUCCESS)
+                                || !PARSER_MODE()) {
+                                       RETURN_TOKEN_WITH_VAL(T_CONSTANT_ENCAPSED_STRING);
+                               } else {
+                                       RETURN_TOKEN(T_ERROR);
+                               }
+                       case '$':
+                               if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
+                                       break;
+                               }
+                               continue;
+                       case '{':
+                               if (*YYCURSOR == '$') {
+                                       break;
+                               }
+                               continue;
+                       case '\\':
+                               if (YYCURSOR < YYLIMIT) {
+                                       YYCURSOR++;
+                               }
+                               /* fall through */
+                       default:
+                               continue;
+               }
 
-               YYCURSOR = ptr ? ptr + 1 : YYLIMIT;
+               YYCURSOR--;
+               break;
+       }
 
-               if (YYCURSOR >= YYLIMIT) {
-                       break;
-               }
+       /* Remember how much was scanned to save rescanning */
+       SET_DOUBLE_QUOTES_SCANNED_LENGTH(YYCURSOR - SCNG(yy_text) - yyleng);
 
-               if (*YYCURSOR == '?') {
-                       if (CG(short_tags) || !strncasecmp((char*)YYCURSOR + 1, "php", 3) || (*(YYCURSOR + 1) == '=')) { /* Assume [ \t\n\r] follows "php" */
+       YYCURSOR = SCNG(yy_text) + yyleng;
 
-                               YYCURSOR--;
+       BEGIN(ST_DOUBLE_QUOTES);
+       RETURN_TOKEN('"');
+}
+#line 1547 "Zend/zend_language_scanner.c"
+yy12:
+               YYDEBUG(12, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(13, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 2051 "Zend/zend_language_scanner.l"
+               {
+       while (YYCURSOR < YYLIMIT) {
+               switch (*YYCURSOR++) {
+                       case '\r':
+                               if (*YYCURSOR == '\n') {
+                                       YYCURSOR++;
+                               }
+                               /* fall through */
+                       case '\n':
+                               CG(zend_lineno)++;
                                break;
-                       }
+                       case '?':
+                               if (*YYCURSOR == '>') {
+                                       YYCURSOR--;
+                                       break;
+                               }
+                               /* fall through */
+                       default:
+                               continue;
                }
+
+               break;
        }
 
        yyleng = YYCURSOR - SCNG(yy_text);
 
-       if (SCNG(output_filter)) {
-               size_t readsize;
-               char *s = NULL;
-               size_t sz = 0;
-               // TODO: avoid reallocation ???
-               readsize = SCNG(output_filter)((unsigned char **)&s, &sz, (unsigned char *)yytext, (size_t)yyleng);
-               ZVAL_STRINGL(zendlval, s, sz);
-               efree(s);
-               if (readsize < yyleng) {
-                       yyless(readsize);
-               }
-       } else if (yyleng == 1) {
-               ZVAL_INTERNED_STR(zendlval, ZSTR_CHAR((zend_uchar)*yytext));
-       } else {
-               ZVAL_STRINGL(zendlval, yytext, yyleng);
+       if (PARSER_MODE()) {
+               SKIP_TOKEN(T_COMMENT);
        }
-       HANDLE_NEWLINES(yytext, yyleng);
-       RETURN_TOKEN_WITH_VAL(T_INLINE_HTML);
+       RETURN_TOKEN(T_COMMENT);
 }
-#line 1328 "Zend/zend_language_scanner.c"
-yy5:
-       YYDEBUG(5, *YYCURSOR);
-       yych = *++YYCURSOR;
-       if (yych != '?') goto yy4;
-       YYDEBUG(6, *YYCURSOR);
-       yych = *(YYMARKER = ++YYCURSOR);
-       if (yych <= 'O') {
-               if (yych == '=') goto yy8;
-       } else {
-               if (yych <= 'P') goto yy10;
-               if (yych == 'p') goto yy10;
-       }
-yy7:
-       YYDEBUG(7, *YYCURSOR);
-       yyleng = YYCURSOR - SCNG(yy_text);
-#line 1926 "Zend/zend_language_scanner.l"
-       {
-       if (CG(short_tags)) {
-               BEGIN(ST_IN_SCRIPTING);
-               if (PARSER_MODE()) {
-                       SKIP_TOKEN(T_OPEN_TAG);
-               }
-               RETURN_TOKEN(T_OPEN_TAG);
-       } else {
-               goto inline_char_handler;
-       }
-}
-#line 1356 "Zend/zend_language_scanner.c"
-yy8:
-       YYDEBUG(8, *YYCURSOR);
-       ++YYCURSOR;
-       YYDEBUG(9, *YYCURSOR);
-       yyleng = YYCURSOR - SCNG(yy_text);
-#line 1907 "Zend/zend_language_scanner.l"
-       {
-       BEGIN(ST_IN_SCRIPTING);
-       if (PARSER_MODE()) {
-               RETURN_TOKEN(T_ECHO);
-       }
-       RETURN_TOKEN(T_OPEN_TAG_WITH_ECHO);
-}
-#line 1370 "Zend/zend_language_scanner.c"
-yy10:
-       YYDEBUG(10, *YYCURSOR);
-       yych = *++YYCURSOR;
-       if (yych == 'H') goto yy12;
-       if (yych == 'h') goto yy12;
-yy11:
-       YYDEBUG(11, *YYCURSOR);
-       YYCURSOR = YYMARKER;
-       goto yy7;
-yy12:
-       YYDEBUG(12, *YYCURSOR);
-       yych = *++YYCURSOR;
-       if (yych == 'P') goto yy13;
-       if (yych != 'p') goto yy11;
-yy13:
-       YYDEBUG(13, *YYCURSOR);
-       yych = *++YYCURSOR;
-       if (yych <= '\f') {
-               if (yych <= 0x08) goto yy11;
-               if (yych >= '\v') goto yy11;
-       } else {
-               if (yych <= '\r') goto yy16;
-               if (yych != ' ') goto yy11;
-       }
+#line 1585 "Zend/zend_language_scanner.c"
 yy14:
-       YYDEBUG(14, *YYCURSOR);
-       ++YYCURSOR;
-yy15:
-       YYDEBUG(15, *YYCURSOR);
-       yyleng = YYCURSOR - SCNG(yy_text);
-#line 1916 "Zend/zend_language_scanner.l"
-       {
-       HANDLE_NEWLINE(yytext[yyleng-1]);
-       BEGIN(ST_IN_SCRIPTING);
-       if (PARSER_MODE()) {
-               SKIP_TOKEN(T_OPEN_TAG);
-       }
-       RETURN_TOKEN(T_OPEN_TAG);
-}
-#line 1410 "Zend/zend_language_scanner.c"
-yy16:
-       YYDEBUG(16, *YYCURSOR);
-       ++YYCURSOR;
-       if ((yych = *YYCURSOR) == '\n') goto yy14;
-       goto yy15;
-/* *********************************** */
-yyc_ST_BACKQUOTE:
-       {
-               static const unsigned char yybm[] = {
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128,   0,   0,   0,   0,   0,   0, 
-                         0, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128,   0,   0,   0,   0, 128, 
-                         0, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128,   0,   0,   0,   0,   0, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-               };
-               YYDEBUG(17, *YYCURSOR);
-               YYFILL(2);
-               yych = *YYCURSOR;
+               YYDEBUG(14, *YYCURSOR);
+               yych = *++YYCURSOR;
                if (yych <= '_') {
-                       if (yych == '$') goto yy21;
+                       if (yych <= '@') goto yy9;
+                       if (yych <= 'Z') goto yy71;
+                       if (yych <= '^') goto yy9;
+                       goto yy71;
                } else {
-                       if (yych <= '`') goto yy22;
-                       if (yych == '{') goto yy24;
+                       if (yych <= '`') goto yy9;
+                       if (yych <= 'z') goto yy71;
+                       if (yych <= 0x7F) goto yy9;
+                       goto yy71;
                }
-               YYDEBUG(19, *YYCURSOR);
+yy15:
+               YYDEBUG(15, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == '=') goto yy74;
+               goto yy9;
+yy16:
+               YYDEBUG(16, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == '&') goto yy76;
+               if (yych == '=') goto yy78;
+               goto yy9;
+yy17:
+               YYDEBUG(17, *YYCURSOR);
                ++YYCURSOR;
-yy20:
-               YYDEBUG(20, *YYCURSOR);
+               YYDEBUG(18, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2472 "Zend/zend_language_scanner.l"
+#line 2134 "Zend/zend_language_scanner.l"
                {
-       if (YYCURSOR > YYLIMIT) {
-               RETURN_TOKEN(END);
-       }
-       if (yytext[0] == '\\' && YYCURSOR < YYLIMIT) {
-               YYCURSOR++;
-       }
+       register char *s, *t;
+       char *end;
+       int bprefix = (yytext[0] != '\'') ? 1 : 0;
+
+       while (1) {
+               if (YYCURSOR < YYLIMIT) {
+                       if (*YYCURSOR == '\'') {
+                               YYCURSOR++;
+                               yyleng = YYCURSOR - SCNG(yy_text);
 
-       while (YYCURSOR < YYLIMIT) {
-               switch (*YYCURSOR++) {
-                       case '`':
                                break;
-                       case '$':
-                               if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
-                                       break;
-                               }
-                               continue;
-                       case '{':
-                               if (*YYCURSOR == '$') {
-                                       break;
-                               }
-                               continue;
-                       case '\\':
-                               if (YYCURSOR < YYLIMIT) {
-                                       YYCURSOR++;
-                               }
-                               /* fall through */
-                       default:
-                               continue;
+                       } else if (*YYCURSOR++ == '\\' && YYCURSOR < YYLIMIT) {
+                               YYCURSOR++;
+                       }
+               } else {
+                       yyleng = YYLIMIT - SCNG(yy_text);
+
+                       /* Unclosed single quotes; treat similar to double quotes, but without a separate token
+                        * for ' (unrecognized by parser), instead of old flex fallback to "Unexpected character..."
+                        * rule, which continued in ST_IN_SCRIPTING state after the quote */
+                       ZVAL_NULL(zendlval);
+                       RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE);
                }
+       }
 
-               YYCURSOR--;
-               break;
+       if (yyleng-bprefix-2 <= 1) {
+               if (yyleng-bprefix-2 < 1) {
+                       ZVAL_EMPTY_STRING(zendlval);
+               } else {
+                       zend_uchar c = (zend_uchar)*(yytext+bprefix+1);
+                       if (c == '\n' || c == '\r') {
+                               CG(zend_lineno)++;
+                       }
+                       ZVAL_INTERNED_STR(zendlval, ZSTR_CHAR(c));
+               }
+               goto skip_escape_conversion;
        }
+       ZVAL_STRINGL(zendlval, yytext+bprefix+1, yyleng-bprefix-2);
 
-       yyleng = YYCURSOR - SCNG(yy_text);
+       /* convert escape sequences */
+       s = Z_STRVAL_P(zendlval);
+       end = s+Z_STRLEN_P(zendlval);
+       while (1) {
+               if (UNEXPECTED(*s=='\\')) {
+                       break;
+               }
+               if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) {
+                       CG(zend_lineno)++;
+               }
+               s++;
+               if (s == end) {
+                       goto skip_escape_conversion;
+               }
+       }
 
-       if (EXPECTED(zend_scan_escape_string(zendlval, yytext, yyleng, '`') == SUCCESS)
-        || !PARSER_MODE()) {
-               RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE);
-       } else {
-               RETURN_TOKEN(T_ERROR);
+       t = s;
+       while (s<end) {
+               if (*s=='\\') {
+                       s++;
+                       if (*s == '\\' || *s == '\'') {
+                               *t++ = *s;
+                       } else {
+                               *t++ = '\\';
+                               *t++ = *s;
+                       }
+               } else {
+                       *t++ = *s;
+               }
+               if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) {
+                       CG(zend_lineno)++;
+               }
+               s++;
+       }
+       *t = 0;
+       Z_STRLEN_P(zendlval) = t - Z_STRVAL_P(zendlval);
+
+skip_escape_conversion:
+       if (SCNG(output_filter)) {
+               size_t sz = 0;
+               char *str = NULL;
+               s = Z_STRVAL_P(zendlval);
+               // TODO: avoid reallocation ???
+               SCNG(output_filter)((unsigned char **)&str, &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval));
+               ZVAL_STRINGL(zendlval, str, sz);
        }
+       RETURN_TOKEN_WITH_VAL(T_CONSTANT_ENCAPSED_STRING);
 }
-#line 1512 "Zend/zend_language_scanner.c"
-yy21:
-               YYDEBUG(21, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych <= '_') {
-                       if (yych <= '@') goto yy20;
-                       if (yych <= 'Z') goto yy25;
-                       if (yych <= '^') goto yy20;
-                       goto yy25;
+#line 1705 "Zend/zend_language_scanner.c"
+yy19:
+               YYDEBUG(19, *YYCURSOR);
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if (yych <= 'S') {
+                       if (yych <= 'D') {
+                               if (yych <= ' ') {
+                                       if (yych == '\t') goto yy81;
+                                       if (yych <= 0x1F) goto yy9;
+                                       goto yy81;
+                               } else {
+                                       if (yych <= '@') goto yy9;
+                                       if (yych == 'C') goto yy9;
+                                       goto yy81;
+                               }
+                       } else {
+                               if (yych <= 'I') {
+                                       if (yych == 'F') goto yy81;
+                                       if (yych <= 'H') goto yy9;
+                                       goto yy81;
+                               } else {
+                                       if (yych == 'O') goto yy81;
+                                       if (yych <= 'Q') goto yy9;
+                                       goto yy81;
+                               }
+                       }
                } else {
-                       if (yych <= 'z') {
-                               if (yych <= '`') goto yy20;
-                               goto yy25;
+                       if (yych <= 'f') {
+                               if (yych <= 'b') {
+                                       if (yych == 'U') goto yy81;
+                                       if (yych <= '`') goto yy9;
+                                       goto yy81;
+                               } else {
+                                       if (yych == 'd') goto yy81;
+                                       if (yych <= 'e') goto yy9;
+                                       goto yy81;
+                               }
                        } else {
-                               if (yych <= '{') goto yy28;
-                               if (yych <= 0x7F) goto yy20;
-                               goto yy25;
+                               if (yych <= 'o') {
+                                       if (yych == 'i') goto yy81;
+                                       if (yych <= 'n') goto yy9;
+                                       goto yy81;
+                               } else {
+                                       if (yych <= 's') {
+                                               if (yych <= 'q') goto yy9;
+                                               goto yy81;
+                                       } else {
+                                               if (yych == 'u') goto yy81;
+                                               goto yy9;
+                                       }
+                               }
                        }
                }
+yy20:
+               YYDEBUG(20, *YYCURSOR);
+               ++YYCURSOR;
+               goto yy9;
+yy21:
+               YYDEBUG(21, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == '*') goto yy92;
+               if (yych == '=') goto yy94;
+               goto yy9;
 yy22:
                YYDEBUG(22, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == '+') goto yy96;
+               if (yych == '=') goto yy98;
+               goto yy9;
+yy23:
                YYDEBUG(23, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 2412 "Zend/zend_language_scanner.l"
-               {
-       BEGIN(ST_IN_SCRIPTING);
-       RETURN_TOKEN('`');
-}
-#line 1541 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych <= '<') {
+                       if (yych == '-') goto yy100;
+                       goto yy9;
+               } else {
+                       if (yych <= '=') goto yy102;
+                       if (yych <= '>') goto yy104;
+                       goto yy9;
+               }
 yy24:
                YYDEBUG(24, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '$') goto yy30;
-               goto yy20;
+               yyaccept = 0;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if (yych <= '/') {
+                       if (yych == '.') goto yy106;
+                       goto yy9;
+               } else {
+                       if (yych <= '9') goto yy107;
+                       if (yych == '=') goto yy110;
+                       goto yy9;
+               }
 yy25:
                YYDEBUG(25, *YYCURSOR);
-               YYMARKER = ++YYCURSOR;
-               YYFILL(3);
-               yych = *YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych <= '.') {
+                       if (yych == '*') goto yy112;
+                       goto yy9;
+               } else {
+                       if (yych <= '/') goto yy12;
+                       if (yych == '=') goto yy114;
+                       goto yy9;
+               }
+yy26:
                YYDEBUG(26, *YYCURSOR);
-               if (yybm[0+yych] & 128) {
-                       goto yy25;
+               yyaccept = 1;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if (yych <= 'X') {
+                       if (yych == 'B') goto yy116;
+                       if (yych <= 'W') goto yy29;
+                       goto yy118;
+               } else {
+                       if (yych <= 'b') {
+                               if (yych <= 'a') goto yy29;
+                               goto yy116;
+                       } else {
+                               if (yych == 'x') goto yy118;
+                               goto yy29;
+                       }
                }
-               if (yych == '-') goto yy32;
-               if (yych <= '@') goto yy27;
-               if (yych <= '[') goto yy34;
 yy27:
                YYDEBUG(27, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2003 "Zend/zend_language_scanner.l"
+#line 1782 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
+       char *end;
+       if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */
+               errno = 0;
+               ZVAL_LONG(zendlval, ZEND_STRTOL(yytext, &end, 0));
+               /* This isn't an assert, we need to ensure 019 isn't valid octal
+                * Because the lexing itself doesn't do that for us
+                */
+               if (end != yytext + yyleng) {
+                       zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", 0);
+                       ZVAL_UNDEF(zendlval);
+                       if (PARSER_MODE()) {
+                               RETURN_TOKEN(T_ERROR);
+                       }
+                       RETURN_TOKEN_WITH_VAL(T_LNUMBER);
+               }
+       } else {
+               errno = 0;
+               ZVAL_LONG(zendlval, ZEND_STRTOL(yytext, &end, 0));
+               if (errno == ERANGE) { /* Overflow */
+                       errno = 0;
+                       if (yytext[0] == '0') { /* octal overflow */
+                               ZVAL_DOUBLE(zendlval, zend_oct_strtod(yytext, (const char **)&end));
+                       } else {
+                               ZVAL_DOUBLE(zendlval, zend_strtod(yytext, (const char **)&end));
+                       }
+                       /* Also not an assert for the same reason */
+                       if (end != yytext + yyleng) {
+                               zend_throw_exception(zend_ce_parse_error,
+                                       "Invalid numeric literal", 0);
+                               ZVAL_UNDEF(zendlval);
+                               if (PARSER_MODE()) {
+                                       RETURN_TOKEN(T_ERROR);
+                               }
+                       }
+                       RETURN_TOKEN_WITH_VAL(T_DNUMBER);
+               }
+               /* Also not an assert for the same reason */
+               if (end != yytext + yyleng) {
+                       zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", 0);
+                       ZVAL_UNDEF(zendlval);
+                       if (PARSER_MODE()) {
+                               RETURN_TOKEN(T_ERROR);
+                       }
+                       RETURN_TOKEN_WITH_VAL(T_DNUMBER);
+               }
+       }
+       ZEND_ASSERT(!errno);
+       RETURN_TOKEN_WITH_VAL(T_LNUMBER);
 }
-#line 1566 "Zend/zend_language_scanner.c"
+#line 1880 "Zend/zend_language_scanner.c"
 yy28:
                YYDEBUG(28, *YYCURSOR);
-               ++YYCURSOR;
+               yyaccept = 1;
+               YYMARKER = ++YYCURSOR;
+               YYFILL(3);
+               yych = *YYCURSOR;
+yy29:
                YYDEBUG(29, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1703 "Zend/zend_language_scanner.l"
-               {
-       yy_push_state(ST_LOOKING_FOR_VARNAME);
-       RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES);
-}
-#line 1577 "Zend/zend_language_scanner.c"
+               if (yybm[0+yych] & 8) {
+                       goto yy28;
+               }
+               if (yych <= 'D') {
+                       if (yych == '.') goto yy107;
+                       goto yy27;
+               } else {
+                       if (yych <= 'E') goto yy117;
+                       if (yych == 'e') goto yy117;
+                       goto yy27;
+               }
 yy30:
                YYDEBUG(30, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == ':') goto yy119;
+               goto yy9;
+yy31:
                YYDEBUG(31, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 2400 "Zend/zend_language_scanner.l"
-               {
-       yy_push_state(ST_IN_SCRIPTING);
-       yyless(1);
-       RETURN_TOKEN(T_CURLY_OPEN);
-}
-#line 1589 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych <= ';') goto yy9;
+               if (yych <= '<') goto yy121;
+               if (yych <= '=') goto yy123;
+               if (yych <= '>') goto yy125;
+               goto yy9;
 yy32:
                YYDEBUG(32, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '>') goto yy36;
+               if (yych <= '<') goto yy9;
+               if (yych <= '=') goto yy126;
+               if (yych <= '>') goto yy128;
+               goto yy9;
 yy33:
                YYDEBUG(33, *YYCURSOR);
-               YYCURSOR = YYMARKER;
-               goto yy27;
+               yych = *++YYCURSOR;
+               if (yych <= '<') goto yy9;
+               if (yych <= '=') goto yy130;
+               if (yych <= '>') goto yy132;
+               goto yy9;
 yy34:
                YYDEBUG(34, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych <= '=') goto yy9;
+               if (yych <= '>') goto yy134;
+               if (yych <= '?') goto yy136;
+               goto yy9;
+yy35:
                YYDEBUG(35, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1997 "Zend/zend_language_scanner.l"
-               {
-       yyless(yyleng - 1);
-       yy_push_state(ST_VAR_OFFSET);
-       RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
-}
-#line 1609 "Zend/zend_language_scanner.c"
-yy36:
-               YYDEBUG(36, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= '_') {
-                       if (yych <= '@') goto yy33;
-                       if (yych <= 'Z') goto yy37;
-                       if (yych <= '^') goto yy33;
+               if (yych <= 'S') {
+                       if (yych <= 'M') {
+                               if (yych == 'B') goto yy138;
+                               goto yy44;
+                       } else {
+                               if (yych <= 'N') goto yy139;
+                               if (yych <= 'Q') goto yy44;
+                               if (yych <= 'R') goto yy140;
+                               goto yy141;
+                       }
                } else {
-                       if (yych <= '`') goto yy33;
-                       if (yych <= 'z') goto yy37;
-                       if (yych <= 0x7F) goto yy33;
+                       if (yych <= 'n') {
+                               if (yych == 'b') goto yy138;
+                               if (yych <= 'm') goto yy44;
+                               goto yy139;
+                       } else {
+                               if (yych <= 'q') goto yy44;
+                               if (yych <= 'r') goto yy140;
+                               if (yych <= 's') goto yy141;
+                               goto yy44;
+                       }
                }
-yy37:
-               YYDEBUG(37, *YYCURSOR);
-               ++YYCURSOR;
-               YYDEBUG(38, *YYCURSOR);
+yy36:
+               YYDEBUG(36, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1989 "Zend/zend_language_scanner.l"
+#line 2046 "Zend/zend_language_scanner.l"
                {
-       yyless(yyleng - 3);
-       yy_push_state(ST_LOOKING_FOR_PROPERTY);
-       RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
+       RETURN_TOKEN_WITH_STR(T_STRING, 0);
 }
-#line 1633 "Zend/zend_language_scanner.c"
-       }
-/* *********************************** */
-yyc_ST_DOUBLE_QUOTES:
-       {
-               static const unsigned char yybm[] = {
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128,   0,   0,   0,   0,   0,   0, 
-                         0, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128,   0,   0,   0,   0, 128, 
-                         0, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128,   0,   0,   0,   0,   0, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-               };
+#line 1966 "Zend/zend_language_scanner.c"
+yy37:
+               YYDEBUG(37, *YYCURSOR);
+               yyaccept = 2;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if (yych <= ';') {
+                       if (yych <= '"') {
+                               if (yych <= '!') goto yy44;
+                               goto yy10;
+                       } else {
+                               if (yych == '\'') goto yy17;
+                               goto yy44;
+                       }
+               } else {
+                       if (yych <= 'R') {
+                               if (yych <= '<') goto yy143;
+                               if (yych <= 'Q') goto yy44;
+                               goto yy144;
+                       } else {
+                               if (yych == 'r') goto yy144;
+                               goto yy44;
+                       }
+               }
+yy38:
+               YYDEBUG(38, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych <= 'O') {
+                       if (yych <= 'K') {
+                               if (yych == 'A') goto yy145;
+                               goto yy44;
+                       } else {
+                               if (yych <= 'L') goto yy146;
+                               if (yych <= 'N') goto yy44;
+                               goto yy147;
+                       }
+               } else {
+                       if (yych <= 'k') {
+                               if (yych == 'a') goto yy145;
+                               goto yy44;
+                       } else {
+                               if (yych <= 'l') goto yy146;
+                               if (yych == 'o') goto yy147;
+                               goto yy44;
+                       }
+               }
+yy39:
                YYDEBUG(39, *YYCURSOR);
-               YYFILL(2);
-               yych = *YYCURSOR;
-               if (yych <= '#') {
-                       if (yych == '"') goto yy43;
+               yych = *++YYCURSOR;
+               if (yych <= 'O') {
+                       if (yych <= 'H') {
+                               if (yych == 'E') goto yy148;
+                               goto yy44;
+                       } else {
+                               if (yych <= 'I') goto yy149;
+                               if (yych <= 'N') goto yy44;
+                               goto yy150;
+                       }
                } else {
-                       if (yych <= '$') goto yy45;
-                       if (yych == '{') goto yy46;
+                       if (yych <= 'h') {
+                               if (yych == 'e') goto yy148;
+                               goto yy44;
+                       } else {
+                               if (yych <= 'i') goto yy149;
+                               if (yych == 'o') goto yy150;
+                               goto yy44;
+                       }
+               }
+yy40:
+               YYDEBUG(40, *YYCURSOR);
+               yych = *++YYCURSOR;
+               switch (yych) {
+               case 'C':
+               case 'c':       goto yy152;
+               case 'L':
+               case 'l':       goto yy153;
+               case 'M':
+               case 'm':       goto yy154;
+               case 'N':
+               case 'n':       goto yy155;
+               case 'V':
+               case 'v':       goto yy156;
+               case 'X':
+               case 'x':       goto yy157;
+               default:        goto yy44;
                }
+yy41:
                YYDEBUG(41, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych <= 'U') {
+                       if (yych <= 'N') {
+                               if (yych == 'I') goto yy158;
+                               goto yy44;
+                       } else {
+                               if (yych <= 'O') goto yy159;
+                               if (yych <= 'T') goto yy44;
+                               goto yy160;
+                       }
+               } else {
+                       if (yych <= 'n') {
+                               if (yych == 'i') goto yy158;
+                               goto yy44;
+                       } else {
+                               if (yych <= 'o') goto yy159;
+                               if (yych == 'u') goto yy160;
+                               goto yy44;
+                       }
+               }
 yy42:
                YYDEBUG(42, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 2418 "Zend/zend_language_scanner.l"
-               {
-       if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) {
-               YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1;
-               SET_DOUBLE_QUOTES_SCANNED_LENGTH(0);
-
-               goto double_quotes_scan_done;
-       }
-
-       if (YYCURSOR > YYLIMIT) {
-               RETURN_TOKEN(END);
-       }
-       if (yytext[0] == '\\' && YYCURSOR < YYLIMIT) {
-               YYCURSOR++;
-       }
-
-       while (YYCURSOR < YYLIMIT) {
-               switch (*YYCURSOR++) {
-                       case '"':
-                               break;
-                       case '$':
-                               if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
-                                       break;
-                               }
-                               continue;
-                       case '{':
-                               if (*YYCURSOR == '$') {
-                                       break;
-                               }
-                               continue;
-                       case '\\':
-                               if (YYCURSOR < YYLIMIT) {
-                                       YYCURSOR++;
-                               }
-                               /* fall through */
-                       default:
-                               continue;
+               yych = *++YYCURSOR;
+               if (yych <= 'O') {
+                       if (yych == 'L') goto yy161;
+                       if (yych <= 'N') goto yy44;
+                       goto yy162;
+               } else {
+                       if (yych <= 'l') {
+                               if (yych <= 'k') goto yy44;
+                               goto yy161;
+                       } else {
+                               if (yych == 'o') goto yy162;
+                               goto yy44;
+                       }
                }
-
-               YYCURSOR--;
-               break;
-       }
-
-double_quotes_scan_done:
-       yyleng = YYCURSOR - SCNG(yy_text);
-
-       if (EXPECTED(zend_scan_escape_string(zendlval, yytext, yyleng, '"') == SUCCESS)
-        || !PARSER_MODE()) {
-               RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE);
-       } else {
-               RETURN_TOKEN(T_ERROR);
-       }
-}
-#line 1739 "Zend/zend_language_scanner.c"
 yy43:
                YYDEBUG(43, *YYCURSOR);
                ++YYCURSOR;
+               YYFILL(1);
+               yych = *YYCURSOR;
+yy44:
                YYDEBUG(44, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 2407 "Zend/zend_language_scanner.l"
-               {
-       BEGIN(ST_IN_SCRIPTING);
-       RETURN_TOKEN('"');
-}
-#line 1750 "Zend/zend_language_scanner.c"
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
+               goto yy36;
 yy45:
                YYDEBUG(45, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= '_') {
-                       if (yych <= '@') goto yy42;
-                       if (yych <= 'Z') goto yy47;
-                       if (yych <= '^') goto yy42;
-                       goto yy47;
+               if (yych <= 'S') {
+                       if (yych <= 'L') {
+                               if (yych == 'F') goto yy163;
+                               goto yy44;
+                       } else {
+                               if (yych <= 'M') goto yy165;
+                               if (yych <= 'N') goto yy166;
+                               if (yych <= 'R') goto yy44;
+                               goto yy167;
+                       }
                } else {
-                       if (yych <= 'z') {
-                               if (yych <= '`') goto yy42;
-                               goto yy47;
+                       if (yych <= 'm') {
+                               if (yych == 'f') goto yy163;
+                               if (yych <= 'l') goto yy44;
+                               goto yy165;
                        } else {
-                               if (yych <= '{') goto yy50;
-                               if (yych <= 0x7F) goto yy42;
-                               goto yy47;
+                               if (yych <= 'n') goto yy166;
+                               if (yych == 's') goto yy167;
+                               goto yy44;
                        }
                }
 yy46:
                YYDEBUG(46, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '$') goto yy52;
-               goto yy42;
+               if (yych == 'I') goto yy168;
+               if (yych == 'i') goto yy168;
+               goto yy44;
 yy47:
                YYDEBUG(47, *YYCURSOR);
-               YYMARKER = ++YYCURSOR;
-               YYFILL(3);
-               yych = *YYCURSOR;
-               YYDEBUG(48, *YYCURSOR);
-               if (yybm[0+yych] & 128) {
-                       goto yy47;
+               yych = *++YYCURSOR;
+               if (yych <= 'E') {
+                       if (yych == 'A') goto yy169;
+                       if (yych <= 'D') goto yy44;
+                       goto yy170;
+               } else {
+                       if (yych <= 'a') {
+                               if (yych <= '`') goto yy44;
+                               goto yy169;
+                       } else {
+                               if (yych == 'e') goto yy170;
+                               goto yy44;
+                       }
                }
-               if (yych == '-') goto yy54;
-               if (yych <= '@') goto yy49;
-               if (yych <= '[') goto yy56;
+yy48:
+               YYDEBUG(48, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'R') goto yy171;
+               if (yych == 'r') goto yy171;
+               goto yy44;
 yy49:
                YYDEBUG(49, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 2003 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
-}
-#line 1793 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych <= 'U') {
+                       if (yych == 'R') goto yy173;
+                       if (yych <= 'T') goto yy44;
+                       goto yy174;
+               } else {
+                       if (yych <= 'r') {
+                               if (yych <= 'q') goto yy44;
+                               goto yy173;
+                       } else {
+                               if (yych == 'u') goto yy174;
+                               goto yy44;
+                       }
+               }
 yy50:
                YYDEBUG(50, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy175;
+               if (yych == 'e') goto yy175;
+               goto yy44;
+yy51:
                YYDEBUG(51, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1703 "Zend/zend_language_scanner.l"
-               {
-       yy_push_state(ST_LOOKING_FOR_VARNAME);
-       RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES);
-}
-#line 1804 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych <= 'W') {
+                       if (yych == 'T') goto yy176;
+                       if (yych <= 'V') goto yy44;
+                       goto yy177;
+               } else {
+                       if (yych <= 't') {
+                               if (yych <= 's') goto yy44;
+                               goto yy176;
+                       } else {
+                               if (yych == 'w') goto yy177;
+                               goto yy44;
+                       }
+               }
 yy52:
                YYDEBUG(52, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych <= 'R') {
+                       if (yych == 'H') goto yy178;
+                       if (yych <= 'Q') goto yy44;
+                       goto yy179;
+               } else {
+                       if (yych <= 'h') {
+                               if (yych <= 'g') goto yy44;
+                               goto yy178;
+                       } else {
+                               if (yych == 'r') goto yy179;
+                               goto yy44;
+                       }
+               }
+yy53:
                YYDEBUG(53, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 2400 "Zend/zend_language_scanner.l"
-               {
-       yy_push_state(ST_IN_SCRIPTING);
-       yyless(1);
-       RETURN_TOKEN(T_CURLY_OPEN);
-}
-#line 1816 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych <= 'S') {
+                       if (yych == 'N') goto yy180;
+                       if (yych <= 'R') goto yy44;
+                       goto yy181;
+               } else {
+                       if (yych <= 'n') {
+                               if (yych <= 'm') goto yy44;
+                               goto yy180;
+                       } else {
+                               if (yych == 's') goto yy181;
+                               goto yy44;
+                       }
+               }
 yy54:
                YYDEBUG(54, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '>') goto yy58;
+               if (yych == 'A') goto yy182;
+               if (yych == 'a') goto yy182;
+               goto yy44;
 yy55:
                YYDEBUG(55, *YYCURSOR);
-               YYCURSOR = YYMARKER;
-               goto yy49;
+               yych = *++YYCURSOR;
+               if (yych == 'H') goto yy183;
+               if (yych == 'h') goto yy183;
+               goto yy44;
 yy56:
                YYDEBUG(56, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'O') goto yy184;
+               if (yych == 'o') goto yy184;
+               goto yy44;
+yy57:
                YYDEBUG(57, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'I') goto yy185;
+               if (yych == 'i') goto yy185;
+               goto yy44;
+yy58:
+               YYDEBUG(58, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(59, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1997 "Zend/zend_language_scanner.l"
+#line 1453 "Zend/zend_language_scanner.l"
                {
-       yyless(yyleng - 1);
-       yy_push_state(ST_VAR_OFFSET);
-       RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
+       RETURN_TOKEN(T_NS_SEPARATOR);
 }
-#line 1836 "Zend/zend_language_scanner.c"
-yy58:
-               YYDEBUG(58, *YYCURSOR);
+#line 2255 "Zend/zend_language_scanner.c"
+yy60:
+               YYDEBUG(60, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= '_') {
-                       if (yych <= '@') goto yy55;
-                       if (yych <= 'Z') goto yy59;
-                       if (yych <= '^') goto yy55;
-               } else {
-                       if (yych <= '`') goto yy55;
-                       if (yych <= 'z') goto yy59;
-                       if (yych <= 0x7F) goto yy55;
-               }
-yy59:
-               YYDEBUG(59, *YYCURSOR);
+               if (yych == '=') goto yy186;
+               goto yy9;
+yy61:
+               YYDEBUG(61, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == '_') goto yy188;
+               goto yy44;
+yy62:
+               YYDEBUG(62, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(60, *YYCURSOR);
+               YYDEBUG(63, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1989 "Zend/zend_language_scanner.l"
+#line 2401 "Zend/zend_language_scanner.l"
                {
-       yyless(yyleng - 3);
-       yy_push_state(ST_LOOKING_FOR_PROPERTY);
-       RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
-}
-#line 1860 "Zend/zend_language_scanner.c"
-       }
-/* *********************************** */
-yyc_ST_END_HEREDOC:
-       YYDEBUG(61, *YYCURSOR);
-       YYFILL(1);
-       yych = *YYCURSOR;
-       YYDEBUG(63, *YYCURSOR);
-       ++YYCURSOR;
-       YYDEBUG(64, *YYCURSOR);
-       yyleng = YYCURSOR - SCNG(yy_text);
-#line 2386 "Zend/zend_language_scanner.l"
-       {
-       zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack));
-
-       yyleng = heredoc_label->indentation + heredoc_label->length;
-       YYCURSOR += yyleng - 1;
-
-       heredoc_label_dtor(heredoc_label);
-       efree(heredoc_label);
-
-       BEGIN(ST_IN_SCRIPTING);
-       RETURN_TOKEN(T_END_HEREDOC);
+       BEGIN(ST_BACKQUOTE);
+       RETURN_TOKEN('`');
 }
-#line 1884 "Zend/zend_language_scanner.c"
-/* *********************************** */
-yyc_ST_HEREDOC:
-       {
-               static const unsigned char yybm[] = {
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128,   0,   0,   0,   0,   0,   0, 
-                         0, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128,   0,   0,   0,   0, 128, 
-                         0, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128,   0,   0,   0,   0,   0, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-               };
+#line 2276 "Zend/zend_language_scanner.c"
+yy64:
+               YYDEBUG(64, *YYCURSOR);
+               ++YYCURSOR;
                YYDEBUG(65, *YYCURSOR);
-               YYFILL(2);
-               yych = *YYCURSOR;
-               if (yych == '$') goto yy69;
-               if (yych == '{') goto yy70;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1718 "Zend/zend_language_scanner.l"
+               {
+       yy_push_state(ST_IN_SCRIPTING);
+       RETURN_TOKEN('{');
+}
+#line 2287 "Zend/zend_language_scanner.c"
+yy66:
+               YYDEBUG(66, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == '=') goto yy189;
+               if (yych == '|') goto yy191;
+               goto yy9;
+yy67:
                YYDEBUG(67, *YYCURSOR);
                ++YYCURSOR;
-yy68:
                YYDEBUG(68, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2518 "Zend/zend_language_scanner.l"
+#line 1730 "Zend/zend_language_scanner.l"
                {
-       zend_heredoc_label *heredoc_label = zend_ptr_stack_top(&SCNG(heredoc_label_stack));
-       int newline = 0, indentation = 0, spacing = 0;
-
-       if (YYCURSOR > YYLIMIT) {
-               RETURN_TOKEN(END);
+       RESET_DOC_COMMENT();
+       if (!zend_stack_is_empty(&SCNG(state_stack))) {
+               yy_pop_state();
        }
-
-       YYCURSOR--;
-
-       while (YYCURSOR < YYLIMIT) {
-               switch (*YYCURSOR++) {
-                       case '\r':
-                               if (*YYCURSOR == '\n') {
-                                       YYCURSOR++;
-                               }
-                               /* fall through */
-                       case '\n':
-                               indentation = spacing = 0;
-
-                               while (YYCURSOR < YYLIMIT && (*YYCURSOR == ' ' || *YYCURSOR == '\t')) {
-                                       if (*YYCURSOR == '\t') {
-                                               spacing |= HEREDOC_USING_TABS;
-                                       } else {
-                                               spacing |= HEREDOC_USING_SPACES;
-                                       }
-                                       ++YYCURSOR;
-                                       ++indentation;
-                               }
-
-                               if (YYCURSOR == YYLIMIT) {
-                                       yyleng = YYCURSOR - SCNG(yy_text);
-                                       HANDLE_NEWLINES(yytext, yyleng);
-                                       ZVAL_NULL(zendlval);
-                                       RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE);
-                               }
-
-                               /* Check for ending label on the next line */
-                               if (IS_LABEL_START(*YYCURSOR) && heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, heredoc_label->label, heredoc_label->length)) {
-                                       if (IS_LABEL_START(YYCURSOR[heredoc_label->length])) {
-                                               continue;
-                                       }
-
-                                       if (spacing == (HEREDOC_USING_SPACES | HEREDOC_USING_TABS)) {
-                                               zend_throw_exception(zend_ce_parse_error, "Invalid indentation - tabs and spaces cannot be mixed", 0);
-                                       }
-
-                                       /* newline before label will be subtracted from returned text, but
-                                        * yyleng/yytext will include it, for zend_highlight/strip, tokenizer, etc. */
-                                       if (YYCURSOR[-indentation - 2] == '\r' && YYCURSOR[-indentation - 1] == '\n') {
-                                               newline = 2; /* Windows newline */
-                                       } else {
-                                               newline = 1;
-                                       }
-
-                                       CG(increment_lineno) = 1; /* For newline before label */
-
-                                       if (SCNG(heredoc_scan_ahead)) {
-                                               SCNG(heredoc_indentation) = indentation;
-                                               SCNG(heredoc_indentation_uses_spaces) = (spacing == HEREDOC_USING_SPACES);
-                                       } else {
-                                               YYCURSOR -= indentation;
-                                       }
-
-                                       BEGIN(ST_END_HEREDOC);
-
-                                       goto heredoc_scan_done;
-                               }
-                               continue;
-                       case '$':
-                               if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
-                                       break;
-                               }
-                               continue;
-                       case '{':
-                               if (*YYCURSOR == '$') {
-                                       break;
-                               }
-                               continue;
-                       case '\\':
-                               if (YYCURSOR < YYLIMIT && *YYCURSOR != '\n' && *YYCURSOR != '\r') {
-                                       YYCURSOR++;
-                               }
-                               /* fall through */
-                       default:
-                               continue;
-               }
-
-               YYCURSOR--;
-               break;
-       }
-
-heredoc_scan_done:
-
-       yyleng = YYCURSOR - SCNG(yy_text);
-       ZVAL_STRINGL(zendlval, yytext, yyleng);
-
-       if (!SCNG(heredoc_scan_ahead) && !EG(exception) && PARSER_MODE()) {
-               zend_string *copy = Z_STR_P(zendlval);
-
-           if (!strip_multiline_string_indentation(zendlval, newline, heredoc_label->indentation, heredoc_label->indentation_uses_spaces)) {
-                       RETURN_TOKEN(T_ERROR);
-               }
-
-               if (UNEXPECTED(zend_scan_escape_string(zendlval, ZSTR_VAL(copy), ZSTR_LEN(copy), 0) != SUCCESS)) {
-                       zend_string_efree(copy);
-                       RETURN_TOKEN(T_ERROR);
-               }
-
-               zend_string_efree(copy);
-       } else {
-               HANDLE_NEWLINES(yytext, yyleng - newline);
-       }
-
-       RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE);
+       RETURN_TOKEN('}');
 }
-#line 2049 "Zend/zend_language_scanner.c"
+#line 2307 "Zend/zend_language_scanner.c"
 yy69:
                YYDEBUG(69, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= '_') {
-                       if (yych <= '@') goto yy68;
-                       if (yych <= 'Z') goto yy71;
-                       if (yych <= '^') goto yy68;
-                       goto yy71;
-               } else {
-                       if (yych <= 'z') {
-                               if (yych <= '`') goto yy68;
-                               goto yy71;
-                       } else {
-                               if (yych <= '{') goto yy74;
-                               if (yych <= 0x7F) goto yy68;
-                               goto yy71;
-                       }
-               }
+               if (yych == '=') goto yy193;
 yy70:
                YYDEBUG(70, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '$') goto yy76;
-               goto yy68;
-yy71:
-               YYDEBUG(71, *YYCURSOR);
-               YYMARKER = ++YYCURSOR;
-               YYFILL(3);
-               yych = *YYCURSOR;
-               YYDEBUG(72, *YYCURSOR);
-               if (yybm[0+yych] & 128) {
-                       goto yy71;
-               }
-               if (yych == '-') goto yy78;
-               if (yych <= '@') goto yy73;
-               if (yych <= '[') goto yy80;
-yy73:
-               YYDEBUG(73, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 2003 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
-}
-#line 2092 "Zend/zend_language_scanner.c"
-yy74:
-               YYDEBUG(74, *YYCURSOR);
-               ++YYCURSOR;
-               YYDEBUG(75, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1703 "Zend/zend_language_scanner.l"
-               {
-       yy_push_state(ST_LOOKING_FOR_VARNAME);
-       RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES);
-}
-#line 2103 "Zend/zend_language_scanner.c"
-yy76:
-               YYDEBUG(76, *YYCURSOR);
-               ++YYCURSOR;
-               YYDEBUG(77, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 2400 "Zend/zend_language_scanner.l"
-               {
-       yy_push_state(ST_IN_SCRIPTING);
-       yyless(1);
-       RETURN_TOKEN(T_CURLY_OPEN);
-}
-#line 2115 "Zend/zend_language_scanner.c"
-yy78:
-               YYDEBUG(78, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '>') goto yy82;
-yy79:
-               YYDEBUG(79, *YYCURSOR);
-               YYCURSOR = YYMARKER;
-               goto yy73;
-yy80:
-               YYDEBUG(80, *YYCURSOR);
-               ++YYCURSOR;
-               YYDEBUG(81, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1997 "Zend/zend_language_scanner.l"
-               {
-       yyless(yyleng - 1);
-       yy_push_state(ST_VAR_OFFSET);
-       RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
-}
-#line 2135 "Zend/zend_language_scanner.c"
-yy82:
-               YYDEBUG(82, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych <= '_') {
-                       if (yych <= '@') goto yy79;
-                       if (yych <= 'Z') goto yy83;
-                       if (yych <= '^') goto yy79;
-               } else {
-                       if (yych <= '`') goto yy79;
-                       if (yych <= 'z') goto yy83;
-                       if (yych <= 0x7F) goto yy79;
-               }
-yy83:
-               YYDEBUG(83, *YYCURSOR);
-               ++YYCURSOR;
-               YYDEBUG(84, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1989 "Zend/zend_language_scanner.l"
+#line 1617 "Zend/zend_language_scanner.l"
                {
-       yyless(yyleng - 3);
-       yy_push_state(ST_LOOKING_FOR_PROPERTY);
-       RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
-}
-#line 2159 "Zend/zend_language_scanner.c"
-       }
-/* *********************************** */
-yyc_ST_IN_SCRIPTING:
-       {
-               static const unsigned char yybm[] = {
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,  36,   4,   0,   0,   4,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                        36,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                       216, 216, 152, 152, 152, 152, 152, 152, 
-                       152, 152,   0,   0,   0,   0,   0,   0, 
-                         0, 144, 144, 144, 144, 144, 144,  16, 
-                        16,  16,  16,  16,  16,  16,  16,  16, 
-                        16,  16,  16,  16,  16,  16,  16,  16, 
-                        16,  16,  16,   0,   0,   0,   0,  16, 
-                         0, 144, 144, 144, 144, 144, 144,  16, 
-                        16,  16,  16,  16,  16,  16,  16,  16, 
-                        16,  16,  16,  16,  16,  16,  16,  16, 
-                        16,  16,  16,   0,   0,   0,   0,   0, 
-                        16,  16,  16,  16,  16,  16,  16,  16, 
-                        16,  16,  16,  16,  16,  16,  16,  16, 
-                        16,  16,  16,  16,  16,  16,  16,  16, 
-                        16,  16,  16,  16,  16,  16,  16,  16, 
-                        16,  16,  16,  16,  16,  16,  16,  16, 
-                        16,  16,  16,  16,  16,  16,  16,  16, 
-                        16,  16,  16,  16,  16,  16,  16,  16, 
-                        16,  16,  16,  16,  16,  16,  16,  16, 
-                        16,  16,  16,  16,  16,  16,  16,  16, 
-                        16,  16,  16,  16,  16,  16,  16,  16, 
-                        16,  16,  16,  16,  16,  16,  16,  16, 
-                        16,  16,  16,  16,  16,  16,  16,  16, 
-                        16,  16,  16,  16,  16,  16,  16,  16, 
-                        16,  16,  16,  16,  16,  16,  16,  16, 
-                        16,  16,  16,  16,  16,  16,  16,  16, 
-                        16,  16,  16,  16,  16,  16,  16,  16, 
-               };
-               YYDEBUG(85, *YYCURSOR);
-               YYFILL(16);
-               yych = *YYCURSOR;
-               if (yybm[0+yych] & 4) {
-                       goto yy89;
-               }
-               switch (yych) {
-               case 0x00:
-               case 0x01:
-               case 0x02:
-               case 0x03:
-               case 0x04:
-               case 0x05:
-               case 0x06:
-               case 0x07:
-               case 0x08:
-               case '\t':
-               case '\n':
-               case '\v':
-               case '\f':
-               case '\r':
-               case 0x0E:
-               case 0x0F:
-               case 0x10:
-               case 0x11:
-               case 0x12:
-               case 0x13:
-               case 0x14:
-               case 0x15:
-               case 0x16:
-               case 0x17:
-               case 0x18:
-               case 0x19:
-               case 0x1A:
-               case 0x1B:
-               case 0x1C:
-               case 0x1D:
-               case 0x1E:
-               case 0x1F:
-               case 0x7F:      goto yy87;
-               case ' ':
-               case '!':       goto yy92;
-               case '"':       goto yy94;
-               case '#':       goto yy96;
-               case '$':       goto yy98;
-               case '%':       goto yy99;
-               case '&':       goto yy100;
-               case '\'':      goto yy101;
-               case '(':       goto yy103;
-               case ')':
-               case ',':
-               case ';':
-               case '@':
-               case '[':
-               case ']':
-               case '~':       goto yy104;
-               case '*':       goto yy105;
-               case '+':       goto yy106;
-               case '-':       goto yy107;
-               case '.':       goto yy108;
-               case '/':       goto yy109;
-               case '0':       goto yy110;
-               case '1':
-               case '2':
-               case '3':
-               case '4':
-               case '5':
-               case '6':
-               case '7':
-               case '8':
-               case '9':       goto yy112;
-               case ':':       goto yy114;
-               case '<':       goto yy115;
-               case '=':       goto yy116;
-               case '>':       goto yy117;
-               case '?':       goto yy118;
-               case 'A':
-               case 'a':       goto yy119;
-               case 'B':
-               case 'b':       goto yy121;
-               case 'C':
-               case 'c':       goto yy122;
-               case 'D':
-               case 'd':       goto yy123;
-               case 'E':
-               case 'e':       goto yy124;
-               case 'F':
-               case 'f':       goto yy125;
-               case 'G':
-               case 'g':       goto yy126;
-               case 'I':
-               case 'i':       goto yy129;
-               case 'L':
-               case 'l':       goto yy130;
-               case 'N':
-               case 'n':       goto yy131;
-               case 'O':
-               case 'o':       goto yy132;
-               case 'P':
-               case 'p':       goto yy133;
-               case 'R':
-               case 'r':       goto yy134;
-               case 'S':
-               case 's':       goto yy135;
-               case 'T':
-               case 't':       goto yy136;
-               case 'U':
-               case 'u':       goto yy137;
-               case 'V':
-               case 'v':       goto yy138;
-               case 'W':
-               case 'w':       goto yy139;
-               case 'X':
-               case 'x':       goto yy140;
-               case 'Y':
-               case 'y':       goto yy141;
-               case '\\':      goto yy142;
-               case '^':       goto yy144;
-               case '_':       goto yy145;
-               case '`':       goto yy146;
-               case '{':       goto yy148;
-               case '|':       goto yy150;
-               case '}':       goto yy151;
-               default:        goto yy127;
-               }
-yy87:
-               YYDEBUG(87, *YYCURSOR);
-               ++YYCURSOR;
-               YYDEBUG(88, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 2720 "Zend/zend_language_scanner.l"
-               {
-       if (YYCURSOR > YYLIMIT) {
-               RETURN_TOKEN(END);
-       }
-
-       zend_error(E_COMPILE_WARNING,"Unexpected character in input:  '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
-       goto restart;
-}
-#line 2337 "Zend/zend_language_scanner.c"
-yy89:
-               YYDEBUG(89, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(1);
-               yych = *YYCURSOR;
-               YYDEBUG(90, *YYCURSOR);
-               if (yybm[0+yych] & 4) {
-                       goto yy89;
-               }
-               YYDEBUG(91, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1409 "Zend/zend_language_scanner.l"
-               {
-       goto return_whitespace;
-}
-#line 2353 "Zend/zend_language_scanner.c"
-yy92:
-               YYDEBUG(92, *YYCURSOR);
-               ++YYCURSOR;
-               if ((yych = *YYCURSOR) == '=') goto yy153;
-yy93:
-               YYDEBUG(93, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1692 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(yytext[0]);
-}
-#line 2365 "Zend/zend_language_scanner.c"
-yy94:
-               YYDEBUG(94, *YYCURSOR);
-               ++YYCURSOR;
-               YYDEBUG(95, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 2203 "Zend/zend_language_scanner.l"
-               {
-       int bprefix = (yytext[0] != '"') ? 1 : 0;
-
-       while (YYCURSOR < YYLIMIT) {
-               switch (*YYCURSOR++) {
-                       case '"':
-                               yyleng = YYCURSOR - SCNG(yy_text);
-                               if (EXPECTED(zend_scan_escape_string(zendlval, yytext+bprefix+1, yyleng-bprefix-2, '"') == SUCCESS)
-                                || !PARSER_MODE()) {
-                                       RETURN_TOKEN_WITH_VAL(T_CONSTANT_ENCAPSED_STRING);
-                               } else {
-                                       RETURN_TOKEN(T_ERROR);
-                               }
-                       case '$':
-                               if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
-                                       break;
-                               }
-                               continue;
-                       case '{':
-                               if (*YYCURSOR == '$') {
-                                       break;
-                               }
-                               continue;
-                       case '\\':
-                               if (YYCURSOR < YYLIMIT) {
-                                       YYCURSOR++;
-                               }
-                               /* fall through */
-                       default:
-                               continue;
-               }
-
-               YYCURSOR--;
-               break;
-       }
-
-       /* Remember how much was scanned to save rescanning */
-       SET_DOUBLE_QUOTES_SCANNED_LENGTH(YYCURSOR - SCNG(yy_text) - yyleng);
-
-       YYCURSOR = SCNG(yy_text) + yyleng;
-
-       BEGIN(ST_DOUBLE_QUOTES);
-       RETURN_TOKEN('"');
-}
-#line 2416 "Zend/zend_language_scanner.c"
-yy96:
-               YYDEBUG(96, *YYCURSOR);
-               ++YYCURSOR;
-               YYDEBUG(97, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 2030 "Zend/zend_language_scanner.l"
-               {
-       while (YYCURSOR < YYLIMIT) {
-               switch (*YYCURSOR++) {
-                       case '\r':
-                               if (*YYCURSOR == '\n') {
-                                       YYCURSOR++;
-                               }
-                               /* fall through */
-                       case '\n':
-                               CG(zend_lineno)++;
-                               break;
-                       case '?':
-                               if (*YYCURSOR == '>') {
-                                       YYCURSOR--;
-                                       break;
-                               }
-                               /* fall through */
-                       default:
-                               continue;
-               }
-
-               break;
-       }
-
-       yyleng = YYCURSOR - SCNG(yy_text);
-
-       if (PARSER_MODE()) {
-               SKIP_TOKEN(T_COMMENT);
-       }
-       RETURN_TOKEN(T_COMMENT);
-}
-#line 2454 "Zend/zend_language_scanner.c"
-yy98:
-               YYDEBUG(98, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych <= '_') {
-                       if (yych <= '@') goto yy93;
-                       if (yych <= 'Z') goto yy155;
-                       if (yych <= '^') goto yy93;
-                       goto yy155;
-               } else {
-                       if (yych <= '`') goto yy93;
-                       if (yych <= 'z') goto yy155;
-                       if (yych <= 0x7F) goto yy93;
-                       goto yy155;
-               }
-yy99:
-               YYDEBUG(99, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '=') goto yy158;
-               goto yy93;
-yy100:
-               YYDEBUG(100, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '&') goto yy160;
-               if (yych == '=') goto yy162;
-               goto yy93;
-yy101:
-               YYDEBUG(101, *YYCURSOR);
-               ++YYCURSOR;
-               YYDEBUG(102, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 2113 "Zend/zend_language_scanner.l"
-               {
-       register char *s, *t;
-       char *end;
-       int bprefix = (yytext[0] != '\'') ? 1 : 0;
-
-       while (1) {
-               if (YYCURSOR < YYLIMIT) {
-                       if (*YYCURSOR == '\'') {
-                               YYCURSOR++;
-                               yyleng = YYCURSOR - SCNG(yy_text);
-
-                               break;
-                       } else if (*YYCURSOR++ == '\\' && YYCURSOR < YYLIMIT) {
-                               YYCURSOR++;
-                       }
-               } else {
-                       yyleng = YYLIMIT - SCNG(yy_text);
-
-                       /* Unclosed single quotes; treat similar to double quotes, but without a separate token
-                        * for ' (unrecognized by parser), instead of old flex fallback to "Unexpected character..."
-                        * rule, which continued in ST_IN_SCRIPTING state after the quote */
-                       ZVAL_NULL(zendlval);
-                       RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE);
-               }
-       }
-
-       if (yyleng-bprefix-2 <= 1) {
-               if (yyleng-bprefix-2 < 1) {
-                       ZVAL_EMPTY_STRING(zendlval);
-               } else {
-                       zend_uchar c = (zend_uchar)*(yytext+bprefix+1);
-                       if (c == '\n' || c == '\r') {
-                               CG(zend_lineno)++;
-                       }
-                       ZVAL_INTERNED_STR(zendlval, ZSTR_CHAR(c));
-               }
-               goto skip_escape_conversion;
-       }
-       ZVAL_STRINGL(zendlval, yytext+bprefix+1, yyleng-bprefix-2);
-
-       /* convert escape sequences */
-       s = Z_STRVAL_P(zendlval);
-       end = s+Z_STRLEN_P(zendlval);
-       while (1) {
-               if (UNEXPECTED(*s=='\\')) {
-                       break;
-               }
-               if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) {
-                       CG(zend_lineno)++;
-               }
-               s++;
-               if (s == end) {
-                       goto skip_escape_conversion;
-               }
-       }
-
-       t = s;
-       while (s<end) {
-               if (*s=='\\') {
-                       s++;
-                       if (*s == '\\' || *s == '\'') {
-                               *t++ = *s;
+       RETURN_TOKEN(T_IS_NOT_EQUAL);
+}
+#line 2319 "Zend/zend_language_scanner.c"
+yy71:
+               YYDEBUG(71, *YYCURSOR);
+               ++YYCURSOR;
+               YYFILL(1);
+               yych = *YYCURSOR;
+               YYDEBUG(72, *YYCURSOR);
+               if (yych <= '^') {
+                       if (yych <= '9') {
+                               if (yych >= '0') goto yy71;
                        } else {
-                               *t++ = '\\';
-                               *t++ = *s;
+                               if (yych <= '@') goto yy73;
+                               if (yych <= 'Z') goto yy71;
                        }
                } else {
-                       *t++ = *s;
-               }
-               if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) {
-                       CG(zend_lineno)++;
+                       if (yych <= '`') {
+                               if (yych <= '_') goto yy71;
+                       } else {
+                               if (yych <= 'z') goto yy71;
+                               if (yych >= 0x80) goto yy71;
+                       }
                }
-               s++;
-       }
-       *t = 0;
-       Z_STRLEN_P(zendlval) = t - Z_STRVAL_P(zendlval);
-
-skip_escape_conversion:
-       if (SCNG(output_filter)) {
-               size_t sz = 0;
-               char *str = NULL;
-               s = Z_STRVAL_P(zendlval);
-               // TODO: avoid reallocation ???
-               SCNG(output_filter)((unsigned char **)&str, &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval));
-               ZVAL_STRINGL(zendlval, str, sz);
-       }
-       RETURN_TOKEN_WITH_VAL(T_CONSTANT_ENCAPSED_STRING);
+yy73:
+               YYDEBUG(73, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 2024 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
 }
-#line 2574 "Zend/zend_language_scanner.c"
-yy103:
-               YYDEBUG(103, *YYCURSOR);
-               yyaccept = 0;
-               yych = *(YYMARKER = ++YYCURSOR);
-               if (yych <= 'S') {
-                       if (yych <= 'D') {
-                               if (yych <= ' ') {
-                                       if (yych == '\t') goto yy165;
-                                       if (yych <= 0x1F) goto yy93;
-                                       goto yy165;
+#line 2348 "Zend/zend_language_scanner.c"
+yy74:
+               YYDEBUG(74, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(75, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1661 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_MOD_EQUAL);
+}
+#line 2358 "Zend/zend_language_scanner.c"
+yy76:
+               YYDEBUG(76, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(77, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1689 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_BOOLEAN_AND);
+}
+#line 2368 "Zend/zend_language_scanner.c"
+yy78:
+               YYDEBUG(78, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(79, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1673 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_AND_EQUAL);
+}
+#line 2378 "Zend/zend_language_scanner.c"
+yy80:
+               YYDEBUG(80, *YYCURSOR);
+               ++YYCURSOR;
+               YYFILL(7);
+               yych = *YYCURSOR;
+yy81:
+               YYDEBUG(81, *YYCURSOR);
+               if (yybm[0+yych] & 32) {
+                       goto yy80;
+               }
+               switch (yych) {
+               case 'A':
+               case 'a':       goto yy83;
+               case 'B':
+               case 'b':       goto yy84;
+               case 'D':
+               case 'd':       goto yy85;
+               case 'F':
+               case 'f':       goto yy86;
+               case 'I':
+               case 'i':       goto yy87;
+               case 'O':
+               case 'o':       goto yy88;
+               case 'R':
+               case 'r':       goto yy89;
+               case 'S':
+               case 's':       goto yy90;
+               case 'U':
+               case 'u':       goto yy91;
+               default:        goto yy82;
+               }
+yy82:
+               YYDEBUG(82, *YYCURSOR);
+               YYCURSOR = YYMARKER;
+               if (yyaccept <= 3) {
+                       if (yyaccept <= 1) {
+                               if (yyaccept == 0) {
+                                       goto yy9;
                                } else {
-                                       if (yych <= '@') goto yy93;
-                                       if (yych == 'C') goto yy93;
-                                       goto yy165;
+                                       goto yy27;
                                }
                        } else {
-                               if (yych <= 'I') {
-                                       if (yych == 'F') goto yy165;
-                                       if (yych <= 'H') goto yy93;
-                                       goto yy165;
+                               if (yyaccept == 2) {
+                                       goto yy36;
                                } else {
-                                       if (yych == 'O') goto yy165;
-                                       if (yych <= 'Q') goto yy93;
-                                       goto yy165;
+                                       goto yy109;
                                }
                        }
                } else {
-                       if (yych <= 'f') {
-                               if (yych <= 'b') {
-                                       if (yych == 'U') goto yy165;
-                                       if (yych <= '`') goto yy93;
-                                       goto yy165;
+                       if (yyaccept <= 5) {
+                               if (yyaccept == 4) {
+                                       goto yy113;
                                } else {
-                                       if (yych == 'd') goto yy165;
-                                       if (yych <= 'e') goto yy93;
-                                       goto yy165;
+                                       goto yy122;
                                }
                        } else {
-                               if (yych <= 'o') {
-                                       if (yych == 'i') goto yy165;
-                                       if (yych <= 'n') goto yy93;
-                                       goto yy165;
-                               } else {
-                                       if (yych <= 's') {
-                                               if (yych <= 'q') goto yy93;
-                                               goto yy165;
-                                       } else {
-                                               if (yych == 'u') goto yy165;
-                                               goto yy93;
-                                       }
-                               }
+                               goto yy457;
                        }
                }
-yy104:
-               YYDEBUG(104, *YYCURSOR);
-               yych = *++YYCURSOR;
-               goto yy93;
-yy105:
-               YYDEBUG(105, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '*') goto yy176;
-               if (yych == '=') goto yy178;
-               goto yy93;
-yy106:
-               YYDEBUG(106, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '+') goto yy180;
-               if (yych == '=') goto yy182;
-               goto yy93;
-yy107:
-               YYDEBUG(107, *YYCURSOR);
+yy83:
+               YYDEBUG(83, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= '<') {
-                       if (yych == '-') goto yy184;
-                       goto yy93;
-               } else {
-                       if (yych <= '=') goto yy186;
-                       if (yych <= '>') goto yy188;
-                       goto yy93;
-               }
-yy108:
-               YYDEBUG(108, *YYCURSOR);
-               yyaccept = 0;
-               yych = *(YYMARKER = ++YYCURSOR);
-               if (yych <= '/') {
-                       if (yych == '.') goto yy190;
-                       goto yy93;
-               } else {
-                       if (yych <= '9') goto yy191;
-                       if (yych == '=') goto yy194;
-                       goto yy93;
-               }
-yy109:
-               YYDEBUG(109, *YYCURSOR);
+               if (yych == 'R') goto yy195;
+               if (yych == 'r') goto yy195;
+               goto yy82;
+yy84:
+               YYDEBUG(84, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= '.') {
-                       if (yych == '*') goto yy196;
-                       goto yy93;
-               } else {
-                       if (yych <= '/') goto yy96;
-                       if (yych == '=') goto yy198;
-                       goto yy93;
-               }
-yy110:
-               YYDEBUG(110, *YYCURSOR);
-               yyaccept = 1;
-               yych = *(YYMARKER = ++YYCURSOR);
-               if (yybm[0+yych] & 8) {
-                       goto yy112;
-               }
-               if (yych <= 'W') {
-                       if (yych <= 'A') {
-                               if (yych == '.') goto yy191;
-                       } else {
-                               if (yych <= 'B') goto yy200;
-                               if (yych == 'E') goto yy201;
-                       }
+               if (yych <= 'O') {
+                       if (yych == 'I') goto yy196;
+                       if (yych <= 'N') goto yy82;
+                       goto yy197;
                } else {
-                       if (yych <= 'd') {
-                               if (yych <= 'X') goto yy202;
-                               if (yych == 'b') goto yy200;
+                       if (yych <= 'i') {
+                               if (yych <= 'h') goto yy82;
+                               goto yy196;
                        } else {
-                               if (yych <= 'e') goto yy201;
-                               if (yych == 'x') goto yy202;
+                               if (yych == 'o') goto yy197;
+                               goto yy82;
                        }
                }
-yy111:
-               YYDEBUG(111, *YYCURSOR);
+yy85:
+               YYDEBUG(85, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'O') goto yy198;
+               if (yych == 'o') goto yy198;
+               goto yy82;
+yy86:
+               YYDEBUG(86, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'L') goto yy199;
+               if (yych == 'l') goto yy199;
+               goto yy82;
+yy87:
+               YYDEBUG(87, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'N') goto yy200;
+               if (yych == 'n') goto yy200;
+               goto yy82;
+yy88:
+               YYDEBUG(88, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'B') goto yy201;
+               if (yych == 'b') goto yy201;
+               goto yy82;
+yy89:
+               YYDEBUG(89, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy202;
+               if (yych == 'e') goto yy202;
+               goto yy82;
+yy90:
+               YYDEBUG(90, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'T') goto yy203;
+               if (yych == 't') goto yy203;
+               goto yy82;
+yy91:
+               YYDEBUG(91, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'N') goto yy204;
+               if (yych == 'n') goto yy204;
+               goto yy82;
+yy92:
+               YYDEBUG(92, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == '=') goto yy205;
+               YYDEBUG(93, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1761 "Zend/zend_language_scanner.l"
+#line 1645 "Zend/zend_language_scanner.l"
                {
-       char *end;
-       if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */
-               errno = 0;
-               ZVAL_LONG(zendlval, ZEND_STRTOL(yytext, &end, 0));
-               /* This isn't an assert, we need to ensure 019 isn't valid octal
-                * Because the lexing itself doesn't do that for us
-                */
-               if (end != yytext + yyleng) {
-                       zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", 0);
-                       ZVAL_UNDEF(zendlval);
-                       if (PARSER_MODE()) {
-                               RETURN_TOKEN(T_ERROR);
-                       }
-                       RETURN_TOKEN_WITH_VAL(T_LNUMBER);
-               }
-       } else {
-               errno = 0;
-               ZVAL_LONG(zendlval, ZEND_STRTOL(yytext, &end, 0));
-               if (errno == ERANGE) { /* Overflow */
-                       errno = 0;
-                       if (yytext[0] == '0') { /* octal overflow */
-                               ZVAL_DOUBLE(zendlval, zend_oct_strtod(yytext, (const char **)&end));
-                       } else {
-                               ZVAL_DOUBLE(zendlval, zend_strtod(yytext, (const char **)&end));
-                       }
-                       /* Also not an assert for the same reason */
-                       if (end != yytext + yyleng) {
-                               zend_throw_exception(zend_ce_parse_error,
-                                       "Invalid numeric literal", 0);
-                               ZVAL_UNDEF(zendlval);
-                               if (PARSER_MODE()) {
-                                       RETURN_TOKEN(T_ERROR);
-                               }
-                       }
-                       RETURN_TOKEN_WITH_VAL(T_DNUMBER);
-               }
-               /* Also not an assert for the same reason */
-               if (end != yytext + yyleng) {
-                       zend_throw_exception(zend_ce_parse_error, "Invalid numeric literal", 0);
-                       ZVAL_UNDEF(zendlval);
-                       if (PARSER_MODE()) {
-                               RETURN_TOKEN(T_ERROR);
-                       }
-                       RETURN_TOKEN_WITH_VAL(T_DNUMBER);
-               }
-       }
-       ZEND_ASSERT(!errno);
-       RETURN_TOKEN_WITH_VAL(T_LNUMBER);
+       RETURN_TOKEN(T_POW);
+}
+#line 2512 "Zend/zend_language_scanner.c"
+yy94:
+               YYDEBUG(94, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(95, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1641 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_MUL_EQUAL);
+}
+#line 2522 "Zend/zend_language_scanner.c"
+yy96:
+               YYDEBUG(96, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(97, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1597 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_INC);
+}
+#line 2532 "Zend/zend_language_scanner.c"
+yy98:
+               YYDEBUG(98, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(99, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1633 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_PLUS_EQUAL);
+}
+#line 2542 "Zend/zend_language_scanner.c"
+yy100:
+               YYDEBUG(100, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(101, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1601 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_DEC);
+}
+#line 2552 "Zend/zend_language_scanner.c"
+yy102:
+               YYDEBUG(102, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(103, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1637 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_MINUS_EQUAL);
+}
+#line 2562 "Zend/zend_language_scanner.c"
+yy104:
+               YYDEBUG(104, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(105, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1425 "Zend/zend_language_scanner.l"
+               {
+       yy_push_state(ST_LOOKING_FOR_PROPERTY);
+       RETURN_TOKEN(T_OBJECT_OPERATOR);
 }
-#line 2755 "Zend/zend_language_scanner.c"
-yy112:
-               YYDEBUG(112, *YYCURSOR);
-               yyaccept = 1;
+#line 2573 "Zend/zend_language_scanner.c"
+yy106:
+               YYDEBUG(106, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == '.') goto yy207;
+               goto yy82;
+yy107:
+               YYDEBUG(107, *YYCURSOR);
+               yyaccept = 3;
                YYMARKER = ++YYCURSOR;
                YYFILL(3);
                yych = *YYCURSOR;
-               YYDEBUG(113, *YYCURSOR);
-               if (yybm[0+yych] & 8) {
-                       goto yy112;
-               }
+               YYDEBUG(108, *YYCURSOR);
                if (yych <= 'D') {
-                       if (yych == '.') goto yy191;
-                       goto yy111;
+                       if (yych <= '/') goto yy109;
+                       if (yych <= '9') goto yy107;
                } else {
-                       if (yych <= 'E') goto yy201;
-                       if (yych == 'e') goto yy201;
-                       goto yy111;
+                       if (yych <= 'E') goto yy117;
+                       if (yych == 'e') goto yy117;
+               }
+yy109:
+               YYDEBUG(109, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1886 "Zend/zend_language_scanner.l"
+               {
+       const char *end;
+
+       ZVAL_DOUBLE(zendlval, zend_strtod(yytext, &end));
+       /* errno isn't checked since we allow HUGE_VAL/INF overflow */
+       ZEND_ASSERT(end == yytext + yyleng);
+       RETURN_TOKEN_WITH_VAL(T_DNUMBER);
+}
+#line 2605 "Zend/zend_language_scanner.c"
+yy110:
+               YYDEBUG(110, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(111, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1657 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_CONCAT_EQUAL);
+}
+#line 2615 "Zend/zend_language_scanner.c"
+yy112:
+               YYDEBUG(112, *YYCURSOR);
+               yyaccept = 4;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if (yych == '*') goto yy209;
+yy113:
+               YYDEBUG(113, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 2083 "Zend/zend_language_scanner.l"
+               {
+       int doc_com;
+
+       if (yyleng > 2) {
+               doc_com = 1;
+               RESET_DOC_COMMENT();
+       } else {
+               doc_com = 0;
+       }
+
+       while (YYCURSOR < YYLIMIT) {
+               if (*YYCURSOR++ == '*' && *YYCURSOR == '/') {
+                       break;
+               }
+       }
+
+       if (YYCURSOR < YYLIMIT) {
+               YYCURSOR++;
+       } else {
+               zend_error(E_COMPILE_WARNING, "Unterminated comment starting line %d", CG(zend_lineno));
+       }
+
+       yyleng = YYCURSOR - SCNG(yy_text);
+       HANDLE_NEWLINES(yytext, yyleng);
+
+       if (doc_com) {
+               CG(doc_comment) = zend_string_init(yytext, yyleng, 0);
+               if (PARSER_MODE()) {
+                       SKIP_TOKEN(T_DOC_COMMENT);
                }
+               RETURN_TOKEN(T_DOC_COMMENT);
+       }
+
+       if (PARSER_MODE()) {
+               SKIP_TOKEN(T_COMMENT);
+       }
+       RETURN_TOKEN(T_COMMENT);
+}
+#line 2663 "Zend/zend_language_scanner.c"
 yy114:
                YYDEBUG(114, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == ':') goto yy203;
-               goto yy93;
-yy115:
+               ++YYCURSOR;
                YYDEBUG(115, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych <= ';') goto yy93;
-               if (yych <= '<') goto yy205;
-               if (yych <= '=') goto yy207;
-               if (yych <= '>') goto yy209;
-               goto yy93;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1653 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_DIV_EQUAL);
+}
+#line 2673 "Zend/zend_language_scanner.c"
 yy116:
                YYDEBUG(116, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= '<') goto yy93;
-               if (yych <= '=') goto yy210;
-               if (yych <= '>') goto yy212;
-               goto yy93;
+               if (yybm[0+yych] & 64) {
+                       goto yy210;
+               }
+               goto yy82;
 yy117:
                YYDEBUG(117, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= '<') goto yy93;
-               if (yych <= '=') goto yy214;
-               if (yych <= '>') goto yy216;
-               goto yy93;
+               if (yych <= ',') {
+                       if (yych == '+') goto yy213;
+                       goto yy82;
+               } else {
+                       if (yych <= '-') goto yy213;
+                       if (yych <= '/') goto yy82;
+                       if (yych <= '9') goto yy214;
+                       goto yy82;
+               }
 yy118:
                YYDEBUG(118, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= '=') goto yy93;
-               if (yych <= '>') goto yy218;
-               if (yych <= '?') goto yy220;
-               goto yy93;
+               if (yybm[0+yych] & 128) {
+                       goto yy216;
+               }
+               goto yy82;
 yy119:
                YYDEBUG(119, *YYCURSOR);
                ++YYCURSOR;
-               if ((yych = *YYCURSOR) <= 'S') {
-                       if (yych <= 'M') {
-                               if (yych == 'B') goto yy222;
-                               goto yy128;
-                       } else {
-                               if (yych <= 'N') goto yy223;
-                               if (yych <= 'Q') goto yy128;
-                               if (yych <= 'R') goto yy224;
-                               goto yy225;
-                       }
-               } else {
-                       if (yych <= 'n') {
-                               if (yych == 'b') goto yy222;
-                               if (yych <= 'm') goto yy128;
-                               goto yy223;
-                       } else {
-                               if (yych <= 'q') goto yy128;
-                               if (yych <= 'r') goto yy224;
-                               if (yych <= 's') goto yy225;
-                               goto yy128;
-                       }
-               }
-yy120:
                YYDEBUG(120, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2025 "Zend/zend_language_scanner.l"
+#line 1449 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN_WITH_STR(T_STRING, 0);
+       RETURN_TOKEN(T_PAAMAYIM_NEKUDOTAYIM);
 }
-#line 2840 "Zend/zend_language_scanner.c"
+#line 2709 "Zend/zend_language_scanner.c"
 yy121:
                YYDEBUG(121, *YYCURSOR);
-               yyaccept = 2;
+               yyaccept = 5;
                yych = *(YYMARKER = ++YYCURSOR);
-               if (yych <= ';') {
-                       if (yych <= '"') {
-                               if (yych <= '!') goto yy128;
-                               goto yy94;
-                       } else {
-                               if (yych == '\'') goto yy101;
-                               goto yy128;
-                       }
-               } else {
-                       if (yych <= 'R') {
-                               if (yych <= '<') goto yy227;
-                               if (yych <= 'Q') goto yy128;
-                               goto yy228;
-                       } else {
-                               if (yych == 'r') goto yy228;
-                               goto yy128;
-                       }
-               }
+               if (yych <= ';') goto yy122;
+               if (yych <= '<') goto yy219;
+               if (yych <= '=') goto yy221;
 yy122:
                YYDEBUG(122, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych <= 'O') {
-                       if (yych <= 'K') {
-                               if (yych == 'A') goto yy229;
-                               goto yy128;
-                       } else {
-                               if (yych <= 'L') goto yy230;
-                               if (yych <= 'N') goto yy128;
-                               goto yy231;
-                       }
-               } else {
-                       if (yych <= 'k') {
-                               if (yych == 'a') goto yy229;
-                               goto yy128;
-                       } else {
-                               if (yych <= 'l') goto yy230;
-                               if (yych == 'o') goto yy231;
-                               goto yy128;
-                       }
-               }
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1705 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_SL);
+}
+#line 2724 "Zend/zend_language_scanner.c"
 yy123:
                YYDEBUG(123, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= 'O') {
-                       if (yych <= 'H') {
-                               if (yych == 'E') goto yy232;
-                               goto yy128;
-                       } else {
-                               if (yych <= 'I') goto yy233;
-                               if (yych <= 'N') goto yy128;
-                               goto yy234;
-                       }
-               } else {
-                       if (yych <= 'h') {
-                               if (yych == 'e') goto yy232;
-                               goto yy128;
-                       } else {
-                               if (yych <= 'i') goto yy233;
-                               if (yych == 'o') goto yy234;
-                               goto yy128;
-                       }
-               }
-yy124:
+               if (yych == '>') goto yy223;
                YYDEBUG(124, *YYCURSOR);
-               yych = *++YYCURSOR;
-               switch (yych) {
-               case 'C':
-               case 'c':       goto yy236;
-               case 'L':
-               case 'l':       goto yy237;
-               case 'M':
-               case 'm':       goto yy238;
-               case 'N':
-               case 'n':       goto yy239;
-               case 'V':
-               case 'v':       goto yy240;
-               case 'X':
-               case 'x':       goto yy241;
-               default:        goto yy128;
-               }
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1625 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_IS_SMALLER_OR_EQUAL);
+}
+#line 2735 "Zend/zend_language_scanner.c"
 yy125:
                YYDEBUG(125, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych <= 'U') {
-                       if (yych <= 'N') {
-                               if (yych == 'I') goto yy242;
-                               goto yy128;
-                       } else {
-                               if (yych <= 'O') goto yy243;
-                               if (yych <= 'T') goto yy128;
-                               goto yy244;
-                       }
-               } else {
-                       if (yych <= 'n') {
-                               if (yych == 'i') goto yy242;
-                               goto yy128;
-                       } else {
-                               if (yych <= 'o') goto yy243;
-                               if (yych == 'u') goto yy244;
-                               goto yy128;
-                       }
-               }
+               ++YYCURSOR;
+               goto yy70;
 yy126:
                YYDEBUG(126, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= 'O') {
-                       if (yych == 'L') goto yy245;
-                       if (yych <= 'N') goto yy128;
-                       goto yy246;
-               } else {
-                       if (yych <= 'l') {
-                               if (yych <= 'k') goto yy128;
-                               goto yy245;
-                       } else {
-                               if (yych == 'o') goto yy246;
-                               goto yy128;
-                       }
-               }
-yy127:
+               if (yych == '=') goto yy225;
                YYDEBUG(127, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(1);
-               yych = *YYCURSOR;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1613 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_IS_EQUAL);
+}
+#line 2750 "Zend/zend_language_scanner.c"
 yy128:
                YYDEBUG(128, *YYCURSOR);
-               if (yybm[0+yych] & 16) {
-                       goto yy127;
-               }
-               goto yy120;
-yy129:
+               ++YYCURSOR;
                YYDEBUG(129, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych <= 'S') {
-                       if (yych <= 'L') {
-                               if (yych == 'F') goto yy247;
-                               goto yy128;
-                       } else {
-                               if (yych <= 'M') goto yy249;
-                               if (yych <= 'N') goto yy250;
-                               if (yych <= 'R') goto yy128;
-                               goto yy251;
-                       }
-               } else {
-                       if (yych <= 'm') {
-                               if (yych == 'f') goto yy247;
-                               if (yych <= 'l') goto yy128;
-                               goto yy249;
-                       } else {
-                               if (yych <= 'n') goto yy250;
-                               if (yych == 's') goto yy251;
-                               goto yy128;
-                       }
-               }
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1581 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_DOUBLE_ARROW);
+}
+#line 2760 "Zend/zend_language_scanner.c"
 yy130:
                YYDEBUG(130, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'I') goto yy252;
-               if (yych == 'i') goto yy252;
-               goto yy128;
-yy131:
+               ++YYCURSOR;
                YYDEBUG(131, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych <= 'E') {
-                       if (yych == 'A') goto yy253;
-                       if (yych <= 'D') goto yy128;
-                       goto yy254;
-               } else {
-                       if (yych <= 'a') {
-                               if (yych <= '`') goto yy128;
-                               goto yy253;
-                       } else {
-                               if (yych == 'e') goto yy254;
-                               goto yy128;
-                       }
-               }
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1629 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_IS_GREATER_OR_EQUAL);
+}
+#line 2770 "Zend/zend_language_scanner.c"
 yy132:
                YYDEBUG(132, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy255;
-               if (yych == 'r') goto yy255;
-               goto yy128;
-yy133:
+               if (yych == '=') goto yy227;
                YYDEBUG(133, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych <= 'U') {
-                       if (yych == 'R') goto yy257;
-                       if (yych <= 'T') goto yy128;
-                       goto yy258;
-               } else {
-                       if (yych <= 'r') {
-                               if (yych <= 'q') goto yy128;
-                               goto yy257;
-                       } else {
-                               if (yych == 'u') goto yy258;
-                               goto yy128;
-                       }
-               }
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1709 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_SR);
+}
+#line 2781 "Zend/zend_language_scanner.c"
 yy134:
                YYDEBUG(134, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy259;
-               if (yych == 'e') goto yy259;
-               goto yy128;
+               if (yych == '\n') goto yy229;
+               if (yych == '\r') goto yy230;
 yy135:
                YYDEBUG(135, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych <= 'W') {
-                       if (yych == 'T') goto yy260;
-                       if (yych <= 'V') goto yy128;
-                       goto yy261;
-               } else {
-                       if (yych <= 't') {
-                               if (yych <= 's') goto yy128;
-                               goto yy260;
-                       } else {
-                               if (yych == 'w') goto yy261;
-                               goto yy128;
-                       }
-               }
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 2122 "Zend/zend_language_scanner.l"
+               {
+       BEGIN(INITIAL);
+       if (yytext[yyleng-1] != '>') {
+               CG(increment_lineno) = 1;
+       }
+       if (PARSER_MODE()) {
+               RETURN_TOKEN(';');  /* implicit ';' at php-end tag */
+       }
+       RETURN_TOKEN(T_CLOSE_TAG);
+}
+#line 2801 "Zend/zend_language_scanner.c"
 yy136:
                YYDEBUG(136, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych <= 'R') {
-                       if (yych == 'H') goto yy262;
-                       if (yych <= 'Q') goto yy128;
-                       goto yy263;
-               } else {
-                       if (yych <= 'h') {
-                               if (yych <= 'g') goto yy128;
-                               goto yy262;
-                       } else {
-                               if (yych == 'r') goto yy263;
-                               goto yy128;
-                       }
-               }
-yy137:
-               YYDEBUG(137, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych <= 'S') {
-                       if (yych == 'N') goto yy264;
-                       if (yych <= 'R') goto yy128;
-                       goto yy265;
-               } else {
-                       if (yych <= 'n') {
-                               if (yych <= 'm') goto yy128;
-                               goto yy264;
-                       } else {
-                               if (yych == 's') goto yy265;
-                               goto yy128;
-                       }
-               }
+               ++YYCURSOR;
+               YYDEBUG(137, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1461 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_COALESCE);
+}
+#line 2811 "Zend/zend_language_scanner.c"
 yy138:
                YYDEBUG(138, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy266;
-               if (yych == 'a') goto yy266;
-               goto yy128;
+               if (yych == 'S') goto yy231;
+               if (yych == 's') goto yy231;
+               goto yy44;
 yy139:
                YYDEBUG(139, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'H') goto yy267;
-               if (yych == 'h') goto yy267;
-               goto yy128;
+               if (yych == 'D') goto yy232;
+               if (yych == 'd') goto yy232;
+               goto yy44;
 yy140:
                YYDEBUG(140, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy268;
-               if (yych == 'o') goto yy268;
-               goto yy128;
+               if (yych == 'R') goto yy234;
+               if (yych == 'r') goto yy234;
+               goto yy44;
 yy141:
                YYDEBUG(141, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy269;
-               if (yych == 'i') goto yy269;
-               goto yy128;
-yy142:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(142, *YYCURSOR);
-               ++YYCURSOR;
-               YYDEBUG(143, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1432 "Zend/zend_language_scanner.l"
+#line 1365 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_NS_SEPARATOR);
+       RETURN_TOKEN(T_AS);
 }
-#line 3129 "Zend/zend_language_scanner.c"
+#line 2842 "Zend/zend_language_scanner.c"
+yy143:
+               YYDEBUG(143, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == '<') goto yy235;
+               goto yy82;
 yy144:
                YYDEBUG(144, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '=') goto yy270;
-               goto yy93;
+               if (yych == 'E') goto yy236;
+               if (yych == 'e') goto yy236;
+               goto yy44;
 yy145:
                YYDEBUG(145, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '_') goto yy272;
-               goto yy128;
+               if (yych <= 'T') {
+                       if (yych <= 'L') {
+                               if (yych <= 'K') goto yy44;
+                               goto yy237;
+                       } else {
+                               if (yych <= 'R') goto yy44;
+                               if (yych <= 'S') goto yy238;
+                               goto yy239;
+                       }
+               } else {
+                       if (yych <= 'r') {
+                               if (yych == 'l') goto yy237;
+                               goto yy44;
+                       } else {
+                               if (yych <= 's') goto yy238;
+                               if (yych <= 't') goto yy239;
+                               goto yy44;
+                       }
+               }
 yy146:
                YYDEBUG(146, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych <= 'O') {
+                       if (yych == 'A') goto yy240;
+                       if (yych <= 'N') goto yy44;
+                       goto yy241;
+               } else {
+                       if (yych <= 'a') {
+                               if (yych <= '`') goto yy44;
+                               goto yy240;
+                       } else {
+                               if (yych == 'o') goto yy241;
+                               goto yy44;
+                       }
+               }
+yy147:
                YYDEBUG(147, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 2380 "Zend/zend_language_scanner.l"
-               {
-       BEGIN(ST_BACKQUOTE);
-       RETURN_TOKEN('`');
-}
-#line 3150 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'N') goto yy242;
+               if (yych == 'n') goto yy242;
+               goto yy44;
 yy148:
                YYDEBUG(148, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych <= 'F') {
+                       if (yych == 'C') goto yy243;
+                       if (yych <= 'E') goto yy44;
+                       goto yy244;
+               } else {
+                       if (yych <= 'c') {
+                               if (yych <= 'b') goto yy44;
+                               goto yy243;
+                       } else {
+                               if (yych == 'f') goto yy244;
+                               goto yy44;
+                       }
+               }
+yy149:
                YYDEBUG(149, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1697 "Zend/zend_language_scanner.l"
-               {
-       yy_push_state(ST_IN_SCRIPTING);
-       RETURN_TOKEN('{');
-}
-#line 3161 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy245;
+               if (yych == 'e') goto yy245;
+               goto yy44;
 yy150:
                YYDEBUG(150, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '=') goto yy273;
-               if (yych == '|') goto yy275;
-               goto yy93;
-yy151:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(151, *YYCURSOR);
-               ++YYCURSOR;
-               YYDEBUG(152, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1709 "Zend/zend_language_scanner.l"
+#line 1333 "Zend/zend_language_scanner.l"
                {
-       RESET_DOC_COMMENT();
-       if (!zend_stack_is_empty(&SCNG(state_stack))) {
-               yy_pop_state();
-       }
-       RETURN_TOKEN('}');
+       RETURN_TOKEN(T_DO);
 }
-#line 3181 "Zend/zend_language_scanner.c"
+#line 2932 "Zend/zend_language_scanner.c"
+yy152:
+               YYDEBUG(152, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'H') goto yy247;
+               if (yych == 'h') goto yy247;
+               goto yy44;
 yy153:
                YYDEBUG(153, *YYCURSOR);
-               ++YYCURSOR;
-               if ((yych = *YYCURSOR) == '=') goto yy277;
+               yych = *++YYCURSOR;
+               if (yych == 'S') goto yy248;
+               if (yych == 's') goto yy248;
+               goto yy44;
 yy154:
                YYDEBUG(154, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1596 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_IS_NOT_EQUAL);
-}
-#line 3193 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'P') goto yy249;
+               if (yych == 'p') goto yy249;
+               goto yy44;
 yy155:
                YYDEBUG(155, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(1);
-               yych = *YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'D') goto yy250;
+               if (yych == 'd') goto yy250;
+               goto yy44;
+yy156:
                YYDEBUG(156, *YYCURSOR);
-               if (yych <= '^') {
-                       if (yych <= '9') {
-                               if (yych >= '0') goto yy155;
-                       } else {
-                               if (yych <= '@') goto yy157;
-                               if (yych <= 'Z') goto yy155;
-                       }
+               yych = *++YYCURSOR;
+               if (yych == 'A') goto yy251;
+               if (yych == 'a') goto yy251;
+               goto yy44;
+yy157:
+               YYDEBUG(157, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych <= 'T') {
+                       if (yych == 'I') goto yy252;
+                       if (yych <= 'S') goto yy44;
+                       goto yy253;
                } else {
-                       if (yych <= '`') {
-                               if (yych <= '_') goto yy155;
+                       if (yych <= 'i') {
+                               if (yych <= 'h') goto yy44;
+                               goto yy252;
                        } else {
-                               if (yych <= 'z') goto yy155;
-                               if (yych >= 0x80) goto yy155;
+                               if (yych == 't') goto yy253;
+                               goto yy44;
                        }
                }
-yy157:
-               YYDEBUG(157, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 2003 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
-}
-#line 3222 "Zend/zend_language_scanner.c"
 yy158:
                YYDEBUG(158, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'N') goto yy254;
+               if (yych == 'n') goto yy254;
+               goto yy44;
+yy159:
                YYDEBUG(159, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1640 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_MOD_EQUAL);
-}
-#line 3232 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'R') goto yy255;
+               if (yych == 'r') goto yy255;
+               goto yy44;
 yy160:
                YYDEBUG(160, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'N') goto yy257;
+               if (yych == 'n') goto yy257;
+               goto yy44;
+yy161:
                YYDEBUG(161, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1668 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_BOOLEAN_AND);
-}
-#line 3242 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'O') goto yy258;
+               if (yych == 'o') goto yy258;
+               goto yy44;
 yy162:
                YYDEBUG(162, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'T') goto yy259;
+               if (yych == 't') goto yy259;
+               goto yy44;
+yy163:
                YYDEBUG(163, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
+               YYDEBUG(164, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1652 "Zend/zend_language_scanner.l"
+#line 1309 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_AND_EQUAL);
+       RETURN_TOKEN(T_IF);
 }
-#line 3252 "Zend/zend_language_scanner.c"
-yy164:
-               YYDEBUG(164, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(7);
-               yych = *YYCURSOR;
+#line 3021 "Zend/zend_language_scanner.c"
 yy165:
                YYDEBUG(165, *YYCURSOR);
-               if (yybm[0+yych] & 32) {
-                       goto yy164;
-               }
-               switch (yych) {
-               case 'A':
-               case 'a':       goto yy167;
-               case 'B':
-               case 'b':       goto yy168;
-               case 'D':
-               case 'd':       goto yy169;
-               case 'F':
-               case 'f':       goto yy170;
-               case 'I':
-               case 'i':       goto yy171;
-               case 'O':
-               case 'o':       goto yy172;
-               case 'R':
-               case 'r':       goto yy173;
-               case 'S':
-               case 's':       goto yy174;
-               case 'U':
-               case 'u':       goto yy175;
-               default:        goto yy166;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'P') goto yy260;
+               if (yych == 'p') goto yy260;
+               goto yy44;
 yy166:
                YYDEBUG(166, *YYCURSOR);
-               YYCURSOR = YYMARKER;
-               if (yyaccept <= 3) {
-                       if (yyaccept <= 1) {
-                               if (yyaccept == 0) {
-                                       goto yy93;
-                               } else {
-                                       goto yy111;
-                               }
+               yych = *++YYCURSOR;
+               if (yych <= 'T') {
+                       if (yych <= 'C') {
+                               if (yych <= 'B') goto yy44;
+                               goto yy261;
                        } else {
-                               if (yyaccept == 2) {
-                                       goto yy120;
-                               } else {
-                                       goto yy193;
-                               }
+                               if (yych <= 'R') goto yy44;
+                               if (yych <= 'S') goto yy262;
+                               goto yy263;
                        }
                } else {
-                       if (yyaccept <= 5) {
-                               if (yyaccept == 4) {
-                                       goto yy197;
-                               } else {
-                                       goto yy206;
-                               }
+                       if (yych <= 'r') {
+                               if (yych == 'c') goto yy261;
+                               goto yy44;
                        } else {
-                               goto yy541;
+                               if (yych <= 's') goto yy262;
+                               if (yych <= 't') goto yy263;
+                               goto yy44;
                        }
                }
 yy167:
                YYDEBUG(167, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy279;
-               if (yych == 'r') goto yy279;
-               goto yy166;
+               if (yych == 'S') goto yy264;
+               if (yych == 's') goto yy264;
+               goto yy44;
 yy168:
                YYDEBUG(168, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= 'O') {
-                       if (yych == 'I') goto yy280;
-                       if (yych <= 'N') goto yy166;
-                       goto yy281;
-               } else {
-                       if (yych <= 'i') {
-                               if (yych <= 'h') goto yy166;
-                               goto yy280;
-                       } else {
-                               if (yych == 'o') goto yy281;
-                               goto yy166;
-                       }
-               }
+               if (yych == 'S') goto yy265;
+               if (yych == 's') goto yy265;
+               goto yy44;
 yy169:
                YYDEBUG(169, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy282;
-               if (yych == 'o') goto yy282;
-               goto yy166;
+               if (yych == 'M') goto yy266;
+               if (yych == 'm') goto yy266;
+               goto yy44;
 yy170:
                YYDEBUG(170, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy283;
-               if (yych == 'l') goto yy283;
-               goto yy166;
+               if (yych == 'W') goto yy267;
+               if (yych == 'w') goto yy267;
+               goto yy44;
 yy171:
                YYDEBUG(171, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy284;
-               if (yych == 'n') goto yy284;
-               goto yy166;
-yy172:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(172, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'B') goto yy285;
-               if (yych == 'b') goto yy285;
-               goto yy166;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1693 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_LOGICAL_OR);
+}
+#line 3086 "Zend/zend_language_scanner.c"
 yy173:
                YYDEBUG(173, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy286;
-               if (yych == 'e') goto yy286;
-               goto yy166;
+               if (yych <= 'O') {
+                       if (yych == 'I') goto yy269;
+                       if (yych <= 'N') goto yy44;
+                       goto yy270;
+               } else {
+                       if (yych <= 'i') {
+                               if (yych <= 'h') goto yy44;
+                               goto yy269;
+                       } else {
+                               if (yych == 'o') goto yy270;
+                               goto yy44;
+                       }
+               }
 yy174:
                YYDEBUG(174, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy287;
-               if (yych == 't') goto yy287;
-               goto yy166;
+               if (yych == 'B') goto yy271;
+               if (yych == 'b') goto yy271;
+               goto yy44;
 yy175:
                YYDEBUG(175, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy288;
-               if (yych == 'n') goto yy288;
-               goto yy166;
+               if (yych <= 'T') {
+                       if (yych == 'Q') goto yy272;
+                       if (yych <= 'S') goto yy44;
+                       goto yy273;
+               } else {
+                       if (yych <= 'q') {
+                               if (yych <= 'p') goto yy44;
+                               goto yy272;
+                       } else {
+                               if (yych == 't') goto yy273;
+                               goto yy44;
+                       }
+               }
 yy176:
                YYDEBUG(176, *YYCURSOR);
-               ++YYCURSOR;
-               if ((yych = *YYCURSOR) == '=') goto yy289;
+               yych = *++YYCURSOR;
+               if (yych == 'A') goto yy274;
+               if (yych == 'a') goto yy274;
+               goto yy44;
+yy177:
                YYDEBUG(177, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1624 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_POW);
-}
-#line 3386 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'I') goto yy275;
+               if (yych == 'i') goto yy275;
+               goto yy44;
 yy178:
                YYDEBUG(178, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'R') goto yy276;
+               if (yych == 'r') goto yy276;
+               goto yy44;
+yy179:
                YYDEBUG(179, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1620 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_MUL_EQUAL);
-}
-#line 3396 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych <= 'Y') {
+                       if (yych == 'A') goto yy277;
+                       if (yych <= 'X') goto yy44;
+                       goto yy278;
+               } else {
+                       if (yych <= 'a') {
+                               if (yych <= '`') goto yy44;
+                               goto yy277;
+                       } else {
+                               if (yych == 'y') goto yy278;
+                               goto yy44;
+                       }
+               }
 yy180:
                YYDEBUG(180, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'S') goto yy280;
+               if (yych == 's') goto yy280;
+               goto yy44;
+yy181:
                YYDEBUG(181, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1576 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_INC);
-}
-#line 3406 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy281;
+               if (yych == 'e') goto yy281;
+               goto yy44;
 yy182:
                YYDEBUG(182, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'R') goto yy283;
+               if (yych == 'r') goto yy283;
+               goto yy44;
+yy183:
                YYDEBUG(183, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1612 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_PLUS_EQUAL);
-}
-#line 3416 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'I') goto yy285;
+               if (yych == 'i') goto yy285;
+               goto yy44;
 yy184:
                YYDEBUG(184, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'R') goto yy286;
+               if (yych == 'r') goto yy286;
+               goto yy44;
+yy185:
                YYDEBUG(185, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1580 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_DEC);
-}
-#line 3426 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy288;
+               if (yych == 'e') goto yy288;
+               goto yy44;
 yy186:
                YYDEBUG(186, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(187, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1616 "Zend/zend_language_scanner.l"
+#line 1681 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_MINUS_EQUAL);
+       RETURN_TOKEN(T_XOR_EQUAL);
 }
-#line 3436 "Zend/zend_language_scanner.c"
+#line 3204 "Zend/zend_language_scanner.c"
 yy188:
                YYDEBUG(188, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               switch (yych) {
+               case 'C':
+               case 'c':       goto yy289;
+               case 'D':
+               case 'd':       goto yy290;
+               case 'F':
+               case 'f':       goto yy291;
+               case 'H':
+               case 'h':       goto yy292;
+               case 'L':
+               case 'l':       goto yy293;
+               case 'M':
+               case 'm':       goto yy294;
+               case 'N':
+               case 'n':       goto yy295;
+               case 'T':
+               case 't':       goto yy296;
+               default:        goto yy44;
+               }
+yy189:
                YYDEBUG(189, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(190, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1404 "Zend/zend_language_scanner.l"
+#line 1677 "Zend/zend_language_scanner.l"
                {
-       yy_push_state(ST_LOOKING_FOR_PROPERTY);
-       RETURN_TOKEN(T_OBJECT_OPERATOR);
+       RETURN_TOKEN(T_OR_EQUAL);
 }
-#line 3447 "Zend/zend_language_scanner.c"
-yy190:
-               YYDEBUG(190, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '.') goto yy291;
-               goto yy166;
+#line 3236 "Zend/zend_language_scanner.c"
 yy191:
                YYDEBUG(191, *YYCURSOR);
-               yyaccept = 3;
-               YYMARKER = ++YYCURSOR;
-               YYFILL(3);
-               yych = *YYCURSOR;
+               ++YYCURSOR;
                YYDEBUG(192, *YYCURSOR);
-               if (yych <= 'D') {
-                       if (yych <= '/') goto yy193;
-                       if (yych <= '9') goto yy191;
-               } else {
-                       if (yych <= 'E') goto yy201;
-                       if (yych == 'e') goto yy201;
-               }
-yy193:
-               YYDEBUG(193, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1865 "Zend/zend_language_scanner.l"
-               {
-       const char *end;
-
-       ZVAL_DOUBLE(zendlval, zend_strtod(yytext, &end));
-       /* errno isn't checked since we allow HUGE_VAL/INF overflow */
-       ZEND_ASSERT(end == yytext + yyleng);
-       RETURN_TOKEN_WITH_VAL(T_DNUMBER);
+#line 1685 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_BOOLEAN_OR);
 }
-#line 3479 "Zend/zend_language_scanner.c"
-yy194:
-               YYDEBUG(194, *YYCURSOR);
+#line 3246 "Zend/zend_language_scanner.c"
+yy193:
+               YYDEBUG(193, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(195, *YYCURSOR);
+               YYDEBUG(194, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1636 "Zend/zend_language_scanner.l"
+#line 1609 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_CONCAT_EQUAL);
+       RETURN_TOKEN(T_IS_NOT_IDENTICAL);
 }
-#line 3489 "Zend/zend_language_scanner.c"
+#line 3256 "Zend/zend_language_scanner.c"
+yy195:
+               YYDEBUG(195, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'R') goto yy297;
+               if (yych == 'r') goto yy297;
+               goto yy82;
 yy196:
                YYDEBUG(196, *YYCURSOR);
-               yyaccept = 4;
-               yych = *(YYMARKER = ++YYCURSOR);
-               if (yych == '*') goto yy293;
+               yych = *++YYCURSOR;
+               if (yych == 'N') goto yy298;
+               if (yych == 'n') goto yy298;
+               goto yy82;
 yy197:
                YYDEBUG(197, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 2062 "Zend/zend_language_scanner.l"
-               {
-       int doc_com;
-
-       if (yyleng > 2) {
-               doc_com = 1;
-               RESET_DOC_COMMENT();
-       } else {
-               doc_com = 0;
-       }
-
-       while (YYCURSOR < YYLIMIT) {
-               if (*YYCURSOR++ == '*' && *YYCURSOR == '/') {
-                       break;
-               }
-       }
-
-       if (YYCURSOR < YYLIMIT) {
-               YYCURSOR++;
-       } else {
-               zend_error(E_COMPILE_WARNING, "Unterminated comment starting line %d", CG(zend_lineno));
-       }
-
-       yyleng = YYCURSOR - SCNG(yy_text);
-       HANDLE_NEWLINES(yytext, yyleng);
-
-       if (doc_com) {
-               CG(doc_comment) = zend_string_init(yytext, yyleng, 0);
-               if (PARSER_MODE()) {
-                       SKIP_TOKEN(T_DOC_COMMENT);
-               }
-               RETURN_TOKEN(T_DOC_COMMENT);
-       }
-
-       if (PARSER_MODE()) {
-               SKIP_TOKEN(T_COMMENT);
-       }
-       RETURN_TOKEN(T_COMMENT);
-}
-#line 3537 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'O') goto yy299;
+               if (yych == 'o') goto yy299;
+               goto yy82;
 yy198:
                YYDEBUG(198, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'U') goto yy300;
+               if (yych == 'u') goto yy300;
+               goto yy82;
+yy199:
                YYDEBUG(199, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1632 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_DIV_EQUAL);
-}
-#line 3547 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'O') goto yy301;
+               if (yych == 'o') goto yy301;
+               goto yy82;
 yy200:
                YYDEBUG(200, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yybm[0+yych] & 64) {
-                       goto yy294;
-               }
-               goto yy166;
+               if (yych == 'T') goto yy302;
+               if (yych == 't') goto yy302;
+               goto yy82;
 yy201:
                YYDEBUG(201, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= ',') {
-                       if (yych == '+') goto yy297;
-                       goto yy166;
-               } else {
-                       if (yych <= '-') goto yy297;
-                       if (yych <= '/') goto yy166;
-                       if (yych <= '9') goto yy298;
-                       goto yy166;
-               }
+               if (yych == 'J') goto yy303;
+               if (yych == 'j') goto yy303;
+               goto yy82;
 yy202:
                YYDEBUG(202, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yybm[0+yych] & 128) {
-                       goto yy300;
-               }
-               goto yy166;
+               if (yych == 'A') goto yy304;
+               if (yych == 'a') goto yy304;
+               goto yy82;
 yy203:
                YYDEBUG(203, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'R') goto yy305;
+               if (yych == 'r') goto yy305;
+               goto yy82;
+yy204:
                YYDEBUG(204, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1428 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_PAAMAYIM_NEKUDOTAYIM);
-}
-#line 3583 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'S') goto yy306;
+               if (yych == 's') goto yy306;
+               goto yy82;
 yy205:
                YYDEBUG(205, *YYCURSOR);
-               yyaccept = 5;
-               yych = *(YYMARKER = ++YYCURSOR);
-               if (yych <= ';') goto yy206;
-               if (yych <= '<') goto yy303;
-               if (yych <= '=') goto yy305;
-yy206:
+               ++YYCURSOR;
                YYDEBUG(206, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1684 "Zend/zend_language_scanner.l"
+#line 1649 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_SL);
+       RETURN_TOKEN(T_POW_EQUAL);
 }
-#line 3598 "Zend/zend_language_scanner.c"
+#line 3326 "Zend/zend_language_scanner.c"
 yy207:
                YYDEBUG(207, *YYCURSOR);
                ++YYCURSOR;
-               if ((yych = *YYCURSOR) == '>') goto yy307;
                YYDEBUG(208, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1604 "Zend/zend_language_scanner.l"
+#line 1457 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_IS_SMALLER_OR_EQUAL);
+       RETURN_TOKEN(T_ELLIPSIS);
 }
-#line 3609 "Zend/zend_language_scanner.c"
+#line 3336 "Zend/zend_language_scanner.c"
 yy209:
                YYDEBUG(209, *YYCURSOR);
                yych = *++YYCURSOR;
-               goto yy154;
+               if (yych <= '\f') {
+                       if (yych <= 0x08) goto yy82;
+                       if (yych <= '\n') goto yy307;
+                       goto yy82;
+               } else {
+                       if (yych <= '\r') goto yy307;
+                       if (yych == ' ') goto yy307;
+                       goto yy82;
+               }
 yy210:
                YYDEBUG(210, *YYCURSOR);
                ++YYCURSOR;
-               if ((yych = *YYCURSOR) == '=') goto yy309;
+               YYFILL(1);
+               yych = *YYCURSOR;
                YYDEBUG(211, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1592 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_IS_EQUAL);
-}
-#line 3624 "Zend/zend_language_scanner.c"
-yy212:
+               if (yybm[0+yych] & 64) {
+                       goto yy210;
+               }
                YYDEBUG(212, *YYCURSOR);
-               ++YYCURSOR;
-               YYDEBUG(213, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1560 "Zend/zend_language_scanner.l"
+#line 1754 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_DOUBLE_ARROW);
+       char *bin = yytext + 2; /* Skip "0b" */
+       int len = yyleng - 2;
+       char *end;
+
+       /* Skip any leading 0s */
+       while (*bin == '0') {
+               ++bin;
+               --len;
+       }
+
+       if (len < SIZEOF_ZEND_LONG * 8) {
+               if (len == 0) {
+                       ZVAL_LONG(zendlval, 0);
+               } else {
+                       errno = 0;
+                       ZVAL_LONG(zendlval, ZEND_STRTOL(bin, &end, 2));
+                       ZEND_ASSERT(!errno && end == yytext + yyleng);
+               }
+               RETURN_TOKEN_WITH_VAL(T_LNUMBER);
+       } else {
+               ZVAL_DOUBLE(zendlval, zend_bin_strtod(bin, (const char **)&end));
+               /* errno isn't checked since we allow HUGE_VAL/INF overflow */
+               ZEND_ASSERT(end == yytext + yyleng);
+               RETURN_TOKEN_WITH_VAL(T_DNUMBER);
+       }
 }
-#line 3634 "Zend/zend_language_scanner.c"
+#line 3388 "Zend/zend_language_scanner.c"
+yy213:
+               YYDEBUG(213, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych <= '/') goto yy82;
+               if (yych >= ':') goto yy82;
 yy214:
                YYDEBUG(214, *YYCURSOR);
                ++YYCURSOR;
+               YYFILL(1);
+               yych = *YYCURSOR;
                YYDEBUG(215, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1608 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_IS_GREATER_OR_EQUAL);
-}
-#line 3644 "Zend/zend_language_scanner.c"
+               if (yych <= '/') goto yy109;
+               if (yych <= '9') goto yy214;
+               goto yy109;
 yy216:
                YYDEBUG(216, *YYCURSOR);
                ++YYCURSOR;
-               if ((yych = *YYCURSOR) == '=') goto yy311;
+               YYFILL(1);
+               yych = *YYCURSOR;
                YYDEBUG(217, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1688 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_SR);
-}
-#line 3655 "Zend/zend_language_scanner.c"
-yy218:
+               if (yybm[0+yych] & 128) {
+                       goto yy216;
+               }
                YYDEBUG(218, *YYCURSOR);
-               ++YYCURSOR;
-               if ((yych = *YYCURSOR) == '\n') goto yy313;
-               if (yych == '\r') goto yy314;
-yy219:
-               YYDEBUG(219, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2101 "Zend/zend_language_scanner.l"
+#line 1833 "Zend/zend_language_scanner.l"
                {
-       BEGIN(INITIAL);
-       if (yytext[yyleng-1] != '>') {
-               CG(increment_lineno) = 1;
+       char *hex = yytext + 2; /* Skip "0x" */
+       int len = yyleng - 2;
+       char *end;
+
+       /* Skip any leading 0s */
+       while (*hex == '0') {
+               hex++;
+               len--;
        }
-       if (PARSER_MODE()) {
-               RETURN_TOKEN(';');  /* implicit ';' at php-end tag */
+
+       if (len < SIZEOF_ZEND_LONG * 2 || (len == SIZEOF_ZEND_LONG * 2 && *hex <= '7')) {
+               if (len == 0) {
+                       ZVAL_LONG(zendlval, 0);
+               } else {
+                       errno = 0;
+                       ZVAL_LONG(zendlval, ZEND_STRTOL(hex, &end, 16));
+                       ZEND_ASSERT(!errno && end == hex + len);
+               }
+               RETURN_TOKEN_WITH_VAL(T_LNUMBER);
+       } else {
+               ZVAL_DOUBLE(zendlval, zend_hex_strtod(hex, (const char **)&end));
+               /* errno isn't checked since we allow HUGE_VAL/INF overflow */
+               ZEND_ASSERT(end == hex + len);
+               RETURN_TOKEN_WITH_VAL(T_DNUMBER);
        }
-       RETURN_TOKEN(T_CLOSE_TAG);
 }
-#line 3675 "Zend/zend_language_scanner.c"
-yy220:
-               YYDEBUG(220, *YYCURSOR);
+#line 3442 "Zend/zend_language_scanner.c"
+yy219:
+               YYDEBUG(219, *YYCURSOR);
                ++YYCURSOR;
+               YYFILL(2);
+               yych = *YYCURSOR;
+               YYDEBUG(220, *YYCURSOR);
+               if (yych <= '\'') {
+                       if (yych <= ' ') {
+                               if (yych == '\t') goto yy219;
+                               if (yych <= 0x1F) goto yy82;
+                               goto yy219;
+                       } else {
+                               if (yych == '"') goto yy309;
+                               if (yych <= '&') goto yy82;
+                               goto yy310;
+                       }
+               } else {
+                       if (yych <= '_') {
+                               if (yych <= '@') goto yy82;
+                               if (yych <= 'Z') goto yy311;
+                               if (yych <= '^') goto yy82;
+                               goto yy311;
+                       } else {
+                               if (yych <= '`') goto yy82;
+                               if (yych <= 'z') goto yy311;
+                               if (yych <= 0x7F) goto yy82;
+                               goto yy311;
+                       }
+               }
+yy221:
                YYDEBUG(221, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(222, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1440 "Zend/zend_language_scanner.l"
+#line 1665 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_COALESCE);
+       RETURN_TOKEN(T_SL_EQUAL);
 }
-#line 3685 "Zend/zend_language_scanner.c"
-yy222:
-               YYDEBUG(222, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'S') goto yy315;
-               if (yych == 's') goto yy315;
-               goto yy128;
+#line 3481 "Zend/zend_language_scanner.c"
 yy223:
                YYDEBUG(223, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'D') goto yy316;
-               if (yych == 'd') goto yy316;
-               goto yy128;
-yy224:
+               ++YYCURSOR;
                YYDEBUG(224, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'R') goto yy318;
-               if (yych == 'r') goto yy318;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1621 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_SPACESHIP);
+}
+#line 3491 "Zend/zend_language_scanner.c"
 yy225:
                YYDEBUG(225, *YYCURSOR);
                ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
                YYDEBUG(226, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1344 "Zend/zend_language_scanner.l"
+#line 1605 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_AS);
+       RETURN_TOKEN(T_IS_IDENTICAL);
 }
-#line 3716 "Zend/zend_language_scanner.c"
+#line 3501 "Zend/zend_language_scanner.c"
 yy227:
                YYDEBUG(227, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '<') goto yy319;
-               goto yy166;
-yy228:
+               ++YYCURSOR;
                YYDEBUG(228, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy320;
-               if (yych == 'e') goto yy320;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1669 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_SR_EQUAL);
+}
+#line 3511 "Zend/zend_language_scanner.c"
 yy229:
                YYDEBUG(229, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych <= 'T') {
-                       if (yych <= 'L') {
-                               if (yych <= 'K') goto yy128;
-                               goto yy321;
-                       } else {
-                               if (yych <= 'R') goto yy128;
-                               if (yych <= 'S') goto yy322;
-                               goto yy323;
-                       }
-               } else {
-                       if (yych <= 'r') {
-                               if (yych == 'l') goto yy321;
-                               goto yy128;
-                       } else {
-                               if (yych <= 's') goto yy322;
-                               if (yych <= 't') goto yy323;
-                               goto yy128;
-                       }
-               }
+               ++YYCURSOR;
+               goto yy135;
 yy230:
                YYDEBUG(230, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= 'O') {
-                       if (yych == 'A') goto yy324;
-                       if (yych <= 'N') goto yy128;
-                       goto yy325;
-               } else {
-                       if (yych <= 'a') {
-                               if (yych <= '`') goto yy128;
-                               goto yy324;
-                       } else {
-                               if (yych == 'o') goto yy325;
-                               goto yy128;
-                       }
-               }
+               if (yych == '\n') goto yy229;
+               goto yy135;
 yy231:
                YYDEBUG(231, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy326;
-               if (yych == 'n') goto yy326;
-               goto yy128;
+               if (yych == 'T') goto yy313;
+               if (yych == 't') goto yy313;
+               goto yy44;
 yy232:
                YYDEBUG(232, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= 'F') {
-                       if (yych == 'C') goto yy327;
-                       if (yych <= 'E') goto yy128;
-                       goto yy328;
-               } else {
-                       if (yych <= 'c') {
-                               if (yych <= 'b') goto yy128;
-                               goto yy327;
-                       } else {
-                               if (yych == 'f') goto yy328;
-                               goto yy128;
-                       }
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
-yy233:
                YYDEBUG(233, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy329;
-               if (yych == 'e') goto yy329;
-               goto yy128;
-yy234:
-               YYDEBUG(234, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
-               YYDEBUG(235, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1312 "Zend/zend_language_scanner.l"
+#line 1697 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_DO);
+       RETURN_TOKEN(T_LOGICAL_AND);
 }
-#line 3806 "Zend/zend_language_scanner.c"
+#line 3539 "Zend/zend_language_scanner.c"
+yy234:
+               YYDEBUG(234, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'A') goto yy314;
+               if (yych == 'a') goto yy314;
+               goto yy44;
+yy235:
+               YYDEBUG(235, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == '<') goto yy219;
+               goto yy82;
 yy236:
                YYDEBUG(236, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'H') goto yy331;
-               if (yych == 'h') goto yy331;
-               goto yy128;
+               if (yych == 'A') goto yy315;
+               if (yych == 'a') goto yy315;
+               goto yy44;
 yy237:
                YYDEBUG(237, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy332;
-               if (yych == 's') goto yy332;
-               goto yy128;
+               if (yych == 'L') goto yy316;
+               if (yych == 'l') goto yy316;
+               goto yy44;
 yy238:
                YYDEBUG(238, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'P') goto yy333;
-               if (yych == 'p') goto yy333;
-               goto yy128;
+               if (yych == 'E') goto yy317;
+               if (yych == 'e') goto yy317;
+               goto yy44;
 yy239:
                YYDEBUG(239, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'D') goto yy334;
-               if (yych == 'd') goto yy334;
-               goto yy128;
+               if (yych == 'C') goto yy319;
+               if (yych == 'c') goto yy319;
+               goto yy44;
 yy240:
                YYDEBUG(240, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy335;
-               if (yych == 'a') goto yy335;
-               goto yy128;
+               if (yych == 'S') goto yy320;
+               if (yych == 's') goto yy320;
+               goto yy44;
 yy241:
                YYDEBUG(241, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= 'T') {
-                       if (yych == 'I') goto yy336;
-                       if (yych <= 'S') goto yy128;
-                       goto yy337;
-               } else {
-                       if (yych <= 'i') {
-                               if (yych <= 'h') goto yy128;
-                               goto yy336;
-                       } else {
-                               if (yych == 't') goto yy337;
-                               goto yy128;
-                       }
-               }
+               if (yych == 'N') goto yy321;
+               if (yych == 'n') goto yy321;
+               goto yy44;
 yy242:
                YYDEBUG(242, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy338;
-               if (yych == 'n') goto yy338;
-               goto yy128;
+               if (yych <= 'T') {
+                       if (yych <= 'R') goto yy44;
+                       if (yych <= 'S') goto yy322;
+                       goto yy323;
+               } else {
+                       if (yych <= 'r') goto yy44;
+                       if (yych <= 's') goto yy322;
+                       if (yych <= 't') goto yy323;
+                       goto yy44;
+               }
 yy243:
                YYDEBUG(243, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy339;
-               if (yych == 'r') goto yy339;
-               goto yy128;
+               if (yych == 'L') goto yy324;
+               if (yych == 'l') goto yy324;
+               goto yy44;
 yy244:
                YYDEBUG(244, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy341;
-               if (yych == 'n') goto yy341;
-               goto yy128;
+               if (yych == 'A') goto yy325;
+               if (yych == 'a') goto yy325;
+               goto yy44;
 yy245:
                YYDEBUG(245, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy342;
-               if (yych == 'o') goto yy342;
-               goto yy128;
-yy246:
-               YYDEBUG(246, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'T') goto yy343;
-               if (yych == 't') goto yy343;
-               goto yy128;
-yy247:
-               YYDEBUG(247, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
-               YYDEBUG(248, *YYCURSOR);
+               YYDEBUG(246, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1288 "Zend/zend_language_scanner.l"
+#line 1267 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_IF);
+       RETURN_TOKEN(T_EXIT);
 }
-#line 3895 "Zend/zend_language_scanner.c"
+#line 3624 "Zend/zend_language_scanner.c"
+yy247:
+               YYDEBUG(247, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'O') goto yy326;
+               if (yych == 'o') goto yy326;
+               goto yy44;
+yy248:
+               YYDEBUG(248, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy328;
+               if (yych == 'e') goto yy328;
+               goto yy44;
 yy249:
                YYDEBUG(249, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'P') goto yy344;
-               if (yych == 'p') goto yy344;
-               goto yy128;
+               if (yych == 'T') goto yy330;
+               if (yych == 't') goto yy330;
+               goto yy44;
 yy250:
                YYDEBUG(250, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= 'T') {
-                       if (yych <= 'C') {
-                               if (yych <= 'B') goto yy128;
-                               goto yy345;
-                       } else {
-                               if (yych <= 'R') goto yy128;
-                               if (yych <= 'S') goto yy346;
-                               goto yy347;
-                       }
-               } else {
-                       if (yych <= 'r') {
-                               if (yych == 'c') goto yy345;
-                               goto yy128;
-                       } else {
-                               if (yych <= 's') goto yy346;
-                               if (yych <= 't') goto yy347;
-                               goto yy128;
-                       }
+               switch (yych) {
+               case 'D':
+               case 'd':       goto yy331;
+               case 'F':
+               case 'f':       goto yy332;
+               case 'I':
+               case 'i':       goto yy333;
+               case 'S':
+               case 's':       goto yy334;
+               case 'W':
+               case 'w':       goto yy335;
+               default:        goto yy44;
                }
 yy251:
                YYDEBUG(251, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy348;
-               if (yych == 's') goto yy348;
-               goto yy128;
+               if (yych == 'L') goto yy336;
+               if (yych == 'l') goto yy336;
+               goto yy44;
 yy252:
                YYDEBUG(252, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy349;
-               if (yych == 's') goto yy349;
-               goto yy128;
+               if (yych == 'T') goto yy338;
+               if (yych == 't') goto yy338;
+               goto yy44;
 yy253:
                YYDEBUG(253, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'M') goto yy350;
-               if (yych == 'm') goto yy350;
-               goto yy128;
+               if (yych == 'E') goto yy340;
+               if (yych == 'e') goto yy340;
+               goto yy44;
 yy254:
                YYDEBUG(254, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'W') goto yy351;
-               if (yych == 'w') goto yy351;
-               goto yy128;
+               if (yych == 'A') goto yy341;
+               if (yych == 'a') goto yy341;
+               goto yy44;
 yy255:
                YYDEBUG(255, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               yych = *++YYCURSOR;
+               if (yych <= '^') {
+                       if (yych <= '@') {
+                               if (yych <= '/') goto yy256;
+                               if (yych <= '9') goto yy43;
+                       } else {
+                               if (yych == 'E') goto yy342;
+                               if (yych <= 'Z') goto yy43;
+                       }
+               } else {
+                       if (yych <= 'd') {
+                               if (yych != '`') goto yy43;
+                       } else {
+                               if (yych <= 'e') goto yy342;
+                               if (yych <= 'z') goto yy43;
+                               if (yych >= 0x80) goto yy43;
+                       }
                }
+yy256:
                YYDEBUG(256, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1672 "Zend/zend_language_scanner.l"
+#line 1337 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_LOGICAL_OR);
+       RETURN_TOKEN(T_FOR);
 }
-#line 3960 "Zend/zend_language_scanner.c"
+#line 3710 "Zend/zend_language_scanner.c"
 yy257:
                YYDEBUG(257, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= 'O') {
-                       if (yych == 'I') goto yy353;
-                       if (yych <= 'N') goto yy128;
-                       goto yy354;
-               } else {
-                       if (yych <= 'i') {
-                               if (yych <= 'h') goto yy128;
-                               goto yy353;
-                       } else {
-                               if (yych == 'o') goto yy354;
-                               goto yy128;
-                       }
-               }
+               if (yych == 'C') goto yy343;
+               if (yych == 'c') goto yy343;
+               goto yy44;
 yy258:
                YYDEBUG(258, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'B') goto yy355;
-               if (yych == 'b') goto yy355;
-               goto yy128;
+               if (yych == 'B') goto yy344;
+               if (yych == 'b') goto yy344;
+               goto yy44;
 yy259:
                YYDEBUG(259, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= 'T') {
-                       if (yych == 'Q') goto yy356;
-                       if (yych <= 'S') goto yy128;
-                       goto yy357;
-               } else {
-                       if (yych <= 'q') {
-                               if (yych <= 'p') goto yy128;
-                               goto yy356;
-                       } else {
-                               if (yych == 't') goto yy357;
-                               goto yy128;
-                       }
-               }
+               if (yych == 'O') goto yy345;
+               if (yych == 'o') goto yy345;
+               goto yy44;
 yy260:
                YYDEBUG(260, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy358;
-               if (yych == 'a') goto yy358;
-               goto yy128;
+               if (yych == 'L') goto yy347;
+               if (yych == 'l') goto yy347;
+               goto yy44;
 yy261:
                YYDEBUG(261, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy359;
-               if (yych == 'i') goto yy359;
-               goto yy128;
+               if (yych == 'L') goto yy348;
+               if (yych == 'l') goto yy348;
+               goto yy44;
 yy262:
                YYDEBUG(262, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy360;
-               if (yych == 'r') goto yy360;
-               goto yy128;
+               if (yych == 'T') goto yy349;
+               if (yych == 't') goto yy349;
+               goto yy44;
 yy263:
                YYDEBUG(263, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= 'Y') {
-                       if (yych == 'A') goto yy361;
-                       if (yych <= 'X') goto yy128;
-                       goto yy362;
-               } else {
-                       if (yych <= 'a') {
-                               if (yych <= '`') goto yy128;
-                               goto yy361;
-                       } else {
-                               if (yych == 'y') goto yy362;
-                               goto yy128;
-                       }
-               }
+               if (yych == 'E') goto yy350;
+               if (yych == 'e') goto yy350;
+               goto yy44;
 yy264:
                YYDEBUG(264, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy364;
-               if (yych == 's') goto yy364;
-               goto yy128;
+               if (yych == 'E') goto yy351;
+               if (yych == 'e') goto yy351;
+               goto yy44;
 yy265:
                YYDEBUG(265, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy365;
-               if (yych == 'e') goto yy365;
-               goto yy128;
+               if (yych == 'T') goto yy352;
+               if (yych == 't') goto yy352;
+               goto yy44;
 yy266:
                YYDEBUG(266, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy367;
-               if (yych == 'r') goto yy367;
-               goto yy128;
+               if (yych == 'E') goto yy354;
+               if (yych == 'e') goto yy354;
+               goto yy44;
 yy267:
                YYDEBUG(267, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy369;
-               if (yych == 'i') goto yy369;
-               goto yy128;
-yy268:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(268, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'R') goto yy370;
-               if (yych == 'r') goto yy370;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1465 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_NEW);
+}
+#line 3783 "Zend/zend_language_scanner.c"
 yy269:
                YYDEBUG(269, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy372;
-               if (yych == 'e') goto yy372;
-               goto yy128;
+               if (yych <= 'V') {
+                       if (yych == 'N') goto yy355;
+                       if (yych <= 'U') goto yy44;
+                       goto yy356;
+               } else {
+                       if (yych <= 'n') {
+                               if (yych <= 'm') goto yy44;
+                               goto yy355;
+                       } else {
+                               if (yych == 'v') goto yy356;
+                               goto yy44;
+                       }
+               }
 yy270:
                YYDEBUG(270, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'T') goto yy357;
+               if (yych == 't') goto yy357;
+               goto yy44;
+yy271:
                YYDEBUG(271, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1660 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_XOR_EQUAL);
-}
-#line 4078 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'L') goto yy358;
+               if (yych == 'l') goto yy358;
+               goto yy44;
 yy272:
                YYDEBUG(272, *YYCURSOR);
                yych = *++YYCURSOR;
-               switch (yych) {
-               case 'C':
-               case 'c':       goto yy373;
-               case 'D':
-               case 'd':       goto yy374;
-               case 'F':
-               case 'f':       goto yy375;
-               case 'H':
-               case 'h':       goto yy376;
-               case 'L':
-               case 'l':       goto yy377;
-               case 'M':
-               case 'm':       goto yy378;
-               case 'N':
-               case 'n':       goto yy379;
-               case 'T':
-               case 't':       goto yy380;
-               default:        goto yy128;
-               }
+               if (yych == 'U') goto yy359;
+               if (yych == 'u') goto yy359;
+               goto yy44;
 yy273:
                YYDEBUG(273, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'U') goto yy360;
+               if (yych == 'u') goto yy360;
+               goto yy44;
+yy274:
                YYDEBUG(274, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1656 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_OR_EQUAL);
-}
-#line 4110 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'T') goto yy361;
+               if (yych == 't') goto yy361;
+               goto yy44;
 yy275:
                YYDEBUG(275, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'T') goto yy362;
+               if (yych == 't') goto yy362;
+               goto yy44;
+yy276:
                YYDEBUG(276, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1664 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_BOOLEAN_OR);
-}
-#line 4120 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'O') goto yy363;
+               if (yych == 'o') goto yy363;
+               goto yy44;
 yy277:
                YYDEBUG(277, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'I') goto yy364;
+               if (yych == 'i') goto yy364;
+               goto yy44;
+yy278:
                YYDEBUG(278, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
+               YYDEBUG(279, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1588 "Zend/zend_language_scanner.l"
+#line 1293 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_IS_NOT_IDENTICAL);
+       RETURN_TOKEN(T_TRY);
 }
-#line 4130 "Zend/zend_language_scanner.c"
-yy279:
-               YYDEBUG(279, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'R') goto yy381;
-               if (yych == 'r') goto yy381;
-               goto yy166;
+#line 3860 "Zend/zend_language_scanner.c"
 yy280:
                YYDEBUG(280, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy382;
-               if (yych == 'n') goto yy382;
-               goto yy166;
+               if (yych == 'E') goto yy365;
+               if (yych == 'e') goto yy365;
+               goto yy44;
 yy281:
                YYDEBUG(281, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy383;
-               if (yych == 'o') goto yy383;
-               goto yy166;
-yy282:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(282, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'U') goto yy384;
-               if (yych == 'u') goto yy384;
-               goto yy166;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1529 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_USE);
+}
+#line 3879 "Zend/zend_language_scanner.c"
 yy283:
                YYDEBUG(283, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy385;
-               if (yych == 'o') goto yy385;
-               goto yy166;
-yy284:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(284, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'T') goto yy386;
-               if (yych == 't') goto yy386;
-               goto yy166;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1473 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_VAR);
+}
+#line 3892 "Zend/zend_language_scanner.c"
 yy285:
                YYDEBUG(285, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'J') goto yy387;
-               if (yych == 'j') goto yy387;
-               goto yy166;
+               if (yych == 'L') goto yy366;
+               if (yych == 'l') goto yy366;
+               goto yy44;
 yy286:
                YYDEBUG(286, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy388;
-               if (yych == 'a') goto yy388;
-               goto yy166;
-yy287:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(287, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'R') goto yy389;
-               if (yych == 'r') goto yy389;
-               goto yy166;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1701 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_LOGICAL_XOR);
+}
+#line 3911 "Zend/zend_language_scanner.c"
 yy288:
                YYDEBUG(288, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy390;
-               if (yych == 's') goto yy390;
-               goto yy166;
+               if (yych == 'L') goto yy367;
+               if (yych == 'l') goto yy367;
+               goto yy44;
 yy289:
                YYDEBUG(289, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'L') goto yy368;
+               if (yych == 'l') goto yy368;
+               goto yy44;
+yy290:
                YYDEBUG(290, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1628 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_POW_EQUAL);
-}
-#line 4200 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'I') goto yy369;
+               if (yych == 'i') goto yy369;
+               goto yy44;
 yy291:
                YYDEBUG(291, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych <= 'U') {
+                       if (yych == 'I') goto yy370;
+                       if (yych <= 'T') goto yy44;
+                       goto yy371;
+               } else {
+                       if (yych <= 'i') {
+                               if (yych <= 'h') goto yy44;
+                               goto yy370;
+                       } else {
+                               if (yych == 'u') goto yy371;
+                               goto yy44;
+                       }
+               }
+yy292:
                YYDEBUG(292, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1436 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_ELLIPSIS);
-}
-#line 4210 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'A') goto yy372;
+               if (yych == 'a') goto yy372;
+               goto yy44;
 yy293:
                YYDEBUG(293, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= '\f') {
-                       if (yych <= 0x08) goto yy166;
-                       if (yych <= '\n') goto yy391;
-                       goto yy166;
-               } else {
-                       if (yych <= '\r') goto yy391;
-                       if (yych == ' ') goto yy391;
-                       goto yy166;
-               }
+               if (yych == 'I') goto yy373;
+               if (yych == 'i') goto yy373;
+               goto yy44;
 yy294:
                YYDEBUG(294, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(1);
-               yych = *YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy374;
+               if (yych == 'e') goto yy374;
+               goto yy44;
+yy295:
                YYDEBUG(295, *YYCURSOR);
-               if (yybm[0+yych] & 64) {
-                       goto yy294;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'A') goto yy375;
+               if (yych == 'a') goto yy375;
+               goto yy44;
+yy296:
                YYDEBUG(296, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1733 "Zend/zend_language_scanner.l"
-               {
-       char *bin = yytext + 2; /* Skip "0b" */
-       int len = yyleng - 2;
-       char *end;
-
-       /* Skip any leading 0s */
-       while (*bin == '0') {
-               ++bin;
-               --len;
-       }
-
-       if (len < SIZEOF_ZEND_LONG * 8) {
-               if (len == 0) {
-                       ZVAL_LONG(zendlval, 0);
-               } else {
-                       errno = 0;
-                       ZVAL_LONG(zendlval, ZEND_STRTOL(bin, &end, 2));
-                       ZEND_ASSERT(!errno && end == yytext + yyleng);
-               }
-               RETURN_TOKEN_WITH_VAL(T_LNUMBER);
-       } else {
-               ZVAL_DOUBLE(zendlval, zend_bin_strtod(bin, (const char **)&end));
-               /* errno isn't checked since we allow HUGE_VAL/INF overflow */
-               ZEND_ASSERT(end == yytext + yyleng);
-               RETURN_TOKEN_WITH_VAL(T_DNUMBER);
-       }
-}
-#line 4262 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'R') goto yy376;
+               if (yych == 'r') goto yy376;
+               goto yy44;
 yy297:
                YYDEBUG(297, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= '/') goto yy166;
-               if (yych >= ':') goto yy166;
+               if (yych == 'A') goto yy377;
+               if (yych == 'a') goto yy377;
+               goto yy82;
 yy298:
                YYDEBUG(298, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(1);
-               yych = *YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'A') goto yy378;
+               if (yych == 'a') goto yy378;
+               goto yy82;
+yy299:
                YYDEBUG(299, *YYCURSOR);
-               if (yych <= '/') goto yy193;
-               if (yych <= '9') goto yy298;
-               goto yy193;
+               yych = *++YYCURSOR;
+               if (yych == 'L') goto yy379;
+               if (yych == 'l') goto yy379;
+               goto yy82;
 yy300:
                YYDEBUG(300, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(1);
-               yych = *YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'B') goto yy380;
+               if (yych == 'b') goto yy380;
+               goto yy82;
+yy301:
                YYDEBUG(301, *YYCURSOR);
-               if (yybm[0+yych] & 128) {
-                       goto yy300;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'A') goto yy381;
+               if (yych == 'a') goto yy381;
+               goto yy82;
+yy302:
                YYDEBUG(302, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1812 "Zend/zend_language_scanner.l"
-               {
-       char *hex = yytext + 2; /* Skip "0x" */
-       int len = yyleng - 2;
-       char *end;
-
-       /* Skip any leading 0s */
-       while (*hex == '0') {
-               hex++;
-               len--;
-       }
-
-       if (len < SIZEOF_ZEND_LONG * 2 || (len == SIZEOF_ZEND_LONG * 2 && *hex <= '7')) {
-               if (len == 0) {
-                       ZVAL_LONG(zendlval, 0);
-               } else {
-                       errno = 0;
-                       ZVAL_LONG(zendlval, ZEND_STRTOL(hex, &end, 16));
-                       ZEND_ASSERT(!errno && end == hex + len);
-               }
-               RETURN_TOKEN_WITH_VAL(T_LNUMBER);
-       } else {
-               ZVAL_DOUBLE(zendlval, zend_hex_strtod(hex, (const char **)&end));
-               /* errno isn't checked since we allow HUGE_VAL/INF overflow */
-               ZEND_ASSERT(end == hex + len);
-               RETURN_TOKEN_WITH_VAL(T_DNUMBER);
-       }
-}
-#line 4316 "Zend/zend_language_scanner.c"
-yy303:
-               YYDEBUG(303, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(2);
-               yych = *YYCURSOR;
-               YYDEBUG(304, *YYCURSOR);
-               if (yych <= '\'') {
-                       if (yych <= ' ') {
-                               if (yych == '\t') goto yy303;
-                               if (yych <= 0x1F) goto yy166;
-                               goto yy303;
-                       } else {
-                               if (yych == '"') goto yy393;
-                               if (yych <= '&') goto yy166;
-                               goto yy394;
-                       }
-               } else {
-                       if (yych <= '_') {
-                               if (yych <= '@') goto yy166;
-                               if (yych <= 'Z') goto yy395;
-                               if (yych <= '^') goto yy166;
-                               goto yy395;
-                       } else {
-                               if (yych <= '`') goto yy166;
-                               if (yych <= 'z') goto yy395;
-                               if (yych <= 0x7F) goto yy166;
-                               goto yy395;
-                       }
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy386;
+               if (yych == 'e') goto yy386;
+               goto yy383;
+yy303:
+               YYDEBUG(303, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy387;
+               if (yych == 'e') goto yy387;
+               goto yy82;
+yy304:
+               YYDEBUG(304, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'L') goto yy388;
+               if (yych == 'l') goto yy388;
+               goto yy82;
 yy305:
                YYDEBUG(305, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'I') goto yy390;
+               if (yych == 'i') goto yy390;
+               goto yy82;
+yy306:
                YYDEBUG(306, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1644 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_SL_EQUAL);
-}
-#line 4355 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy391;
+               if (yych == 'e') goto yy391;
+               goto yy82;
 yy307:
                YYDEBUG(307, *YYCURSOR);
                ++YYCURSOR;
+               YYFILL(1);
+               yych = *YYCURSOR;
                YYDEBUG(308, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1600 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_SPACESHIP);
-}
-#line 4365 "Zend/zend_language_scanner.c"
+               if (yych <= '\f') {
+                       if (yych <= 0x08) goto yy113;
+                       if (yych <= '\n') goto yy307;
+                       goto yy113;
+               } else {
+                       if (yych <= '\r') goto yy307;
+                       if (yych == ' ') goto yy307;
+                       goto yy113;
+               }
 yy309:
                YYDEBUG(309, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == '"') goto yy82;
+               if (yych <= '/') goto yy393;
+               if (yych <= '9') goto yy82;
+               goto yy393;
+yy310:
                YYDEBUG(310, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1584 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_IS_IDENTICAL);
-}
-#line 4375 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == '\'') goto yy82;
+               if (yych <= '/') goto yy395;
+               if (yych <= '9') goto yy82;
+               goto yy395;
 yy311:
                YYDEBUG(311, *YYCURSOR);
                ++YYCURSOR;
+               YYFILL(2);
+               yych = *YYCURSOR;
                YYDEBUG(312, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1648 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_SR_EQUAL);
-}
-#line 4385 "Zend/zend_language_scanner.c"
+               if (yych <= '@') {
+                       if (yych <= '\f') {
+                               if (yych == '\n') goto yy396;
+                               goto yy82;
+                       } else {
+                               if (yych <= '\r') goto yy398;
+                               if (yych <= '/') goto yy82;
+                               if (yych <= '9') goto yy311;
+                               goto yy82;
+                       }
+               } else {
+                       if (yych <= '_') {
+                               if (yych <= 'Z') goto yy311;
+                               if (yych <= '^') goto yy82;
+                               goto yy311;
+                       } else {
+                               if (yych <= '`') goto yy82;
+                               if (yych <= 'z') goto yy311;
+                               if (yych <= 0x7F) goto yy82;
+                               goto yy311;
+                       }
+               }
 yy313:
                YYDEBUG(313, *YYCURSOR);
                yych = *++YYCURSOR;
-               goto yy219;
+               if (yych == 'R') goto yy399;
+               if (yych == 'r') goto yy399;
+               goto yy44;
 yy314:
                YYDEBUG(314, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '\n') goto yy313;
-               goto yy219;
+               if (yych == 'Y') goto yy400;
+               if (yych == 'y') goto yy400;
+               goto yy44;
 yy315:
                YYDEBUG(315, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy397;
-               if (yych == 't') goto yy397;
-               goto yy128;
+               if (yych == 'K') goto yy402;
+               if (yych == 'k') goto yy402;
+               goto yy44;
 yy316:
                YYDEBUG(316, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'A') goto yy404;
+               if (yych == 'a') goto yy404;
+               goto yy44;
+yy317:
                YYDEBUG(317, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
+               YYDEBUG(318, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1676 "Zend/zend_language_scanner.l"
+#line 1377 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_LOGICAL_AND);
+       RETURN_TOKEN(T_CASE);
 }
-#line 4413 "Zend/zend_language_scanner.c"
-yy318:
-               YYDEBUG(318, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'A') goto yy398;
-               if (yych == 'a') goto yy398;
-               goto yy128;
+#line 4129 "Zend/zend_language_scanner.c"
 yy319:
                YYDEBUG(319, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '<') goto yy303;
-               goto yy166;
+               if (yych == 'H') goto yy405;
+               if (yych == 'h') goto yy405;
+               goto yy44;
 yy320:
                YYDEBUG(320, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy399;
-               if (yych == 'a') goto yy399;
-               goto yy128;
+               if (yych == 'S') goto yy407;
+               if (yych == 's') goto yy407;
+               goto yy44;
 yy321:
                YYDEBUG(321, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy400;
-               if (yych == 'l') goto yy400;
-               goto yy128;
+               if (yych == 'E') goto yy409;
+               if (yych == 'e') goto yy409;
+               goto yy44;
 yy322:
                YYDEBUG(322, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy401;
-               if (yych == 'e') goto yy401;
-               goto yy128;
+               if (yych == 'T') goto yy411;
+               if (yych == 't') goto yy411;
+               goto yy44;
 yy323:
                YYDEBUG(323, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy403;
-               if (yych == 'c') goto yy403;
-               goto yy128;
+               if (yych == 'I') goto yy413;
+               if (yych == 'i') goto yy413;
+               goto yy44;
 yy324:
                YYDEBUG(324, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy404;
-               if (yych == 's') goto yy404;
-               goto yy128;
+               if (yych == 'A') goto yy414;
+               if (yych == 'a') goto yy414;
+               goto yy44;
 yy325:
                YYDEBUG(325, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy405;
-               if (yych == 'n') goto yy405;
-               goto yy128;
+               if (yych == 'U') goto yy415;
+               if (yych == 'u') goto yy415;
+               goto yy44;
 yy326:
                YYDEBUG(326, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= 'T') {
-                       if (yych <= 'R') goto yy128;
-                       if (yych <= 'S') goto yy406;
-                       goto yy407;
-               } else {
-                       if (yych <= 'r') goto yy128;
-                       if (yych <= 's') goto yy406;
-                       if (yych <= 't') goto yy407;
-                       goto yy128;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
-yy327:
                YYDEBUG(327, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'L') goto yy408;
-               if (yych == 'l') goto yy408;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1397 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_ECHO);
+}
+#line 4184 "Zend/zend_language_scanner.c"
 yy328:
                YYDEBUG(328, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy409;
-               if (yych == 'a') goto yy409;
-               goto yy128;
+               if (yych <= '^') {
+                       if (yych <= '@') {
+                               if (yych <= '/') goto yy329;
+                               if (yych <= '9') goto yy43;
+                       } else {
+                               if (yych == 'I') goto yy416;
+                               if (yych <= 'Z') goto yy43;
+                       }
+               } else {
+                       if (yych <= 'h') {
+                               if (yych != '`') goto yy43;
+                       } else {
+                               if (yych <= 'i') goto yy416;
+                               if (yych <= 'z') goto yy43;
+                               if (yych >= 0x80) goto yy43;
+                       }
+               }
 yy329:
                YYDEBUG(329, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
-               YYDEBUG(330, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1246 "Zend/zend_language_scanner.l"
+#line 1321 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_EXIT);
+       RETURN_TOKEN(T_ELSE);
 }
-#line 4498 "Zend/zend_language_scanner.c"
+#line 4212 "Zend/zend_language_scanner.c"
+yy330:
+               YYDEBUG(330, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'Y') goto yy417;
+               if (yych == 'y') goto yy417;
+               goto yy44;
 yy331:
                YYDEBUG(331, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy410;
-               if (yych == 'o') goto yy410;
-               goto yy128;
+               if (yych == 'E') goto yy419;
+               if (yych == 'e') goto yy419;
+               goto yy44;
 yy332:
                YYDEBUG(332, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy412;
-               if (yych == 'e') goto yy412;
-               goto yy128;
+               if (yych == 'O') goto yy420;
+               if (yych == 'o') goto yy420;
+               goto yy44;
 yy333:
                YYDEBUG(333, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy414;
-               if (yych == 't') goto yy414;
-               goto yy128;
+               if (yych == 'F') goto yy421;
+               if (yych == 'f') goto yy421;
+               goto yy44;
 yy334:
                YYDEBUG(334, *YYCURSOR);
                yych = *++YYCURSOR;
-               switch (yych) {
-               case 'D':
-               case 'd':       goto yy415;
-               case 'F':
-               case 'f':       goto yy416;
-               case 'I':
-               case 'i':       goto yy417;
-               case 'S':
-               case 's':       goto yy418;
-               case 'W':
-               case 'w':       goto yy419;
-               default:        goto yy128;
-               }
+               if (yych == 'W') goto yy423;
+               if (yych == 'w') goto yy423;
+               goto yy44;
 yy335:
                YYDEBUG(335, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy420;
-               if (yych == 'l') goto yy420;
-               goto yy128;
+               if (yych == 'H') goto yy424;
+               if (yych == 'h') goto yy424;
+               goto yy44;
 yy336:
                YYDEBUG(336, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy422;
-               if (yych == 't') goto yy422;
-               goto yy128;
-yy337:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(337, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy424;
-               if (yych == 'e') goto yy424;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1505 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_EVAL);
+}
+#line 4261 "Zend/zend_language_scanner.c"
 yy338:
                YYDEBUG(338, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy425;
-               if (yych == 'a') goto yy425;
-               goto yy128;
-yy339:
-               YYDEBUG(339, *YYCURSOR);
-               ++YYCURSOR;
-               if ((yych = *YYCURSOR) <= '^') {
-                       if (yych <= '@') {
-                               if (yych <= '/') goto yy340;
-                               if (yych <= '9') goto yy127;
-                       } else {
-                               if (yych == 'E') goto yy426;
-                               if (yych <= 'Z') goto yy127;
-                       }
-               } else {
-                       if (yych <= 'd') {
-                               if (yych != '`') goto yy127;
-                       } else {
-                               if (yych <= 'e') goto yy426;
-                               if (yych <= 'z') goto yy127;
-                               if (yych >= 0x80) goto yy127;
-                       }
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
-yy340:
-               YYDEBUG(340, *YYCURSOR);
+               YYDEBUG(339, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1316 "Zend/zend_language_scanner.l"
+#line 1263 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_FOR);
+       RETURN_TOKEN(T_EXIT);
 }
-#line 4584 "Zend/zend_language_scanner.c"
+#line 4274 "Zend/zend_language_scanner.c"
+yy340:
+               YYDEBUG(340, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'N') goto yy425;
+               if (yych == 'n') goto yy425;
+               goto yy44;
 yy341:
                YYDEBUG(341, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy427;
-               if (yych == 'c') goto yy427;
-               goto yy128;
+               if (yych == 'L') goto yy426;
+               if (yych == 'l') goto yy426;
+               goto yy44;
 yy342:
                YYDEBUG(342, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'B') goto yy428;
-               if (yych == 'b') goto yy428;
-               goto yy128;
+               if (yych == 'A') goto yy428;
+               if (yych == 'a') goto yy428;
+               goto yy44;
 yy343:
                YYDEBUG(343, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy429;
-               if (yych == 'o') goto yy429;
-               goto yy128;
+               if (yych == 'T') goto yy429;
+               if (yych == 't') goto yy429;
+               goto yy44;
 yy344:
                YYDEBUG(344, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy431;
-               if (yych == 'l') goto yy431;
-               goto yy128;
+               if (yych == 'A') goto yy430;
+               if (yych == 'a') goto yy430;
+               goto yy44;
 yy345:
                YYDEBUG(345, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy432;
-               if (yych == 'l') goto yy432;
-               goto yy128;
-yy346:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(346, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'T') goto yy433;
-               if (yych == 't') goto yy433;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1393 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_GOTO);
+}
+#line 4317 "Zend/zend_language_scanner.c"
 yy347:
                YYDEBUG(347, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy434;
-               if (yych == 'e') goto yy434;
-               goto yy128;
+               if (yych == 'E') goto yy431;
+               if (yych == 'e') goto yy431;
+               goto yy44;
 yy348:
                YYDEBUG(348, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy435;
-               if (yych == 'e') goto yy435;
-               goto yy128;
+               if (yych == 'U') goto yy432;
+               if (yych == 'u') goto yy432;
+               goto yy44;
 yy349:
                YYDEBUG(349, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy436;
-               if (yych == 't') goto yy436;
-               goto yy128;
+               if (yych <= 'E') {
+                       if (yych == 'A') goto yy433;
+                       if (yych <= 'D') goto yy44;
+                       goto yy434;
+               } else {
+                       if (yych <= 'a') {
+                               if (yych <= '`') goto yy44;
+                               goto yy433;
+                       } else {
+                               if (yych == 'e') goto yy434;
+                               goto yy44;
+                       }
+               }
 yy350:
                YYDEBUG(350, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy438;
-               if (yych == 'e') goto yy438;
-               goto yy128;
+               if (yych == 'R') goto yy435;
+               if (yych == 'r') goto yy435;
+               goto yy44;
 yy351:
                YYDEBUG(351, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'T') goto yy436;
+               if (yych == 't') goto yy436;
+               goto yy44;
+yy352:
                YYDEBUG(352, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
+               YYDEBUG(353, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1444 "Zend/zend_language_scanner.l"
+#line 1585 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_NEW);
+       RETURN_TOKEN(T_LIST);
 }
-#line 4657 "Zend/zend_language_scanner.c"
-yy353:
-               YYDEBUG(353, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych <= 'V') {
-                       if (yych == 'N') goto yy439;
-                       if (yych <= 'U') goto yy128;
-                       goto yy440;
-               } else {
-                       if (yych <= 'n') {
-                               if (yych <= 'm') goto yy128;
-                               goto yy439;
-                       } else {
-                               if (yych == 'v') goto yy440;
-                               goto yy128;
-                       }
-               }
+#line 4370 "Zend/zend_language_scanner.c"
 yy354:
                YYDEBUG(354, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy441;
-               if (yych == 't') goto yy441;
-               goto yy128;
+               if (yych == 'S') goto yy438;
+               if (yych == 's') goto yy438;
+               goto yy44;
 yy355:
                YYDEBUG(355, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy442;
-               if (yych == 'l') goto yy442;
-               goto yy128;
+               if (yych == 'T') goto yy439;
+               if (yych == 't') goto yy439;
+               goto yy44;
 yy356:
                YYDEBUG(356, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'U') goto yy443;
-               if (yych == 'u') goto yy443;
-               goto yy128;
+               if (yych == 'A') goto yy441;
+               if (yych == 'a') goto yy441;
+               goto yy44;
 yy357:
                YYDEBUG(357, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'U') goto yy444;
-               if (yych == 'u') goto yy444;
-               goto yy128;
+               if (yych == 'E') goto yy442;
+               if (yych == 'e') goto yy442;
+               goto yy44;
 yy358:
                YYDEBUG(358, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy445;
-               if (yych == 't') goto yy445;
-               goto yy128;
+               if (yych == 'I') goto yy443;
+               if (yych == 'i') goto yy443;
+               goto yy44;
 yy359:
                YYDEBUG(359, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy446;
-               if (yych == 't') goto yy446;
-               goto yy128;
+               if (yych == 'I') goto yy444;
+               if (yych == 'i') goto yy444;
+               goto yy44;
 yy360:
                YYDEBUG(360, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy447;
-               if (yych == 'o') goto yy447;
-               goto yy128;
+               if (yych == 'R') goto yy445;
+               if (yych == 'r') goto yy445;
+               goto yy44;
 yy361:
                YYDEBUG(361, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy448;
-               if (yych == 'i') goto yy448;
-               goto yy128;
+               if (yych == 'I') goto yy446;
+               if (yych == 'i') goto yy446;
+               goto yy44;
 yy362:
                YYDEBUG(362, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'C') goto yy447;
+               if (yych == 'c') goto yy447;
+               goto yy44;
+yy363:
                YYDEBUG(363, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1272 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_TRY);
-}
-#line 4734 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'W') goto yy448;
+               if (yych == 'w') goto yy448;
+               goto yy44;
 yy364:
                YYDEBUG(364, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy449;
-               if (yych == 'e') goto yy449;
-               goto yy128;
+               if (yych == 'T') goto yy450;
+               if (yych == 't') goto yy450;
+               goto yy44;
 yy365:
                YYDEBUG(365, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'T') goto yy452;
+               if (yych == 't') goto yy452;
+               goto yy44;
+yy366:
                YYDEBUG(366, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1508 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_USE);
-}
-#line 4753 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy454;
+               if (yych == 'e') goto yy454;
+               goto yy44;
 yy367:
                YYDEBUG(367, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'D') goto yy456;
+               if (yych == 'd') goto yy456;
+               goto yy44;
+yy368:
                YYDEBUG(368, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1452 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_VAR);
-}
-#line 4766 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'A') goto yy458;
+               if (yych == 'a') goto yy458;
+               goto yy44;
 yy369:
                YYDEBUG(369, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy450;
-               if (yych == 'l') goto yy450;
-               goto yy128;
+               if (yych == 'R') goto yy459;
+               if (yych == 'r') goto yy459;
+               goto yy44;
 yy370:
                YYDEBUG(370, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'L') goto yy460;
+               if (yych == 'l') goto yy460;
+               goto yy44;
+yy371:
                YYDEBUG(371, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1680 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_LOGICAL_XOR);
-}
-#line 4785 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'N') goto yy461;
+               if (yych == 'n') goto yy461;
+               goto yy44;
 yy372:
                YYDEBUG(372, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy451;
-               if (yych == 'l') goto yy451;
-               goto yy128;
+               if (yych == 'L') goto yy462;
+               if (yych == 'l') goto yy462;
+               goto yy44;
 yy373:
                YYDEBUG(373, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy452;
-               if (yych == 'l') goto yy452;
-               goto yy128;
+               if (yych == 'N') goto yy463;
+               if (yych == 'n') goto yy463;
+               goto yy44;
 yy374:
                YYDEBUG(374, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy453;
-               if (yych == 'i') goto yy453;
-               goto yy128;
+               if (yych == 'T') goto yy464;
+               if (yych == 't') goto yy464;
+               goto yy44;
 yy375:
                YYDEBUG(375, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= 'U') {
-                       if (yych == 'I') goto yy454;
-                       if (yych <= 'T') goto yy128;
-                       goto yy455;
-               } else {
-                       if (yych <= 'i') {
-                               if (yych <= 'h') goto yy128;
-                               goto yy454;
-                       } else {
-                               if (yych == 'u') goto yy455;
-                               goto yy128;
-                       }
-               }
+               if (yych == 'M') goto yy465;
+               if (yych == 'm') goto yy465;
+               goto yy44;
 yy376:
                YYDEBUG(376, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy456;
-               if (yych == 'a') goto yy456;
-               goto yy128;
+               if (yych == 'A') goto yy466;
+               if (yych == 'a') goto yy466;
+               goto yy44;
 yy377:
                YYDEBUG(377, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy457;
-               if (yych == 'i') goto yy457;
-               goto yy128;
+               if (yych == 'Y') goto yy467;
+               if (yych == 'y') goto yy467;
+               goto yy82;
 yy378:
                YYDEBUG(378, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy458;
-               if (yych == 'e') goto yy458;
-               goto yy128;
+               if (yych == 'R') goto yy469;
+               if (yych == 'r') goto yy469;
+               goto yy82;
 yy379:
                YYDEBUG(379, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy459;
-               if (yych == 'a') goto yy459;
-               goto yy128;
+               if (yych == 'E') goto yy474;
+               if (yych == 'e') goto yy474;
+               goto yy471;
 yy380:
                YYDEBUG(380, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy460;
-               if (yych == 'r') goto yy460;
-               goto yy128;
+               if (yych == 'L') goto yy475;
+               if (yych == 'l') goto yy475;
+               goto yy82;
 yy381:
                YYDEBUG(381, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy461;
-               if (yych == 'a') goto yy461;
-               goto yy166;
+               if (yych == 'T') goto yy388;
+               if (yych == 't') goto yy388;
+               goto yy82;
 yy382:
                YYDEBUG(382, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'A') goto yy462;
-               if (yych == 'a') goto yy462;
-               goto yy166;
+               ++YYCURSOR;
+               YYFILL(1);
+               yych = *YYCURSOR;
 yy383:
                YYDEBUG(383, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'L') goto yy463;
-               if (yych == 'l') goto yy463;
-               goto yy166;
-yy384:
+               if (yych <= 0x1F) {
+                       if (yych == '\t') goto yy382;
+                       goto yy82;
+               } else {
+                       if (yych <= ' ') goto yy382;
+                       if (yych != ')') goto yy82;
+               }
                YYDEBUG(384, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'B') goto yy464;
-               if (yych == 'b') goto yy464;
-               goto yy166;
-yy385:
+               ++YYCURSOR;
                YYDEBUG(385, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'A') goto yy465;
-               if (yych == 'a') goto yy465;
-               goto yy166;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1477 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_INT_CAST);
+}
+#line 4561 "Zend/zend_language_scanner.c"
 yy386:
                YYDEBUG(386, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy470;
-               if (yych == 'e') goto yy470;
-               goto yy467;
+               if (yych == 'G') goto yy476;
+               if (yych == 'g') goto yy476;
+               goto yy82;
 yy387:
                YYDEBUG(387, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy471;
-               if (yych == 'e') goto yy471;
-               goto yy166;
+               if (yych == 'C') goto yy477;
+               if (yych == 'c') goto yy477;
+               goto yy82;
 yy388:
                YYDEBUG(388, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'L') goto yy472;
-               if (yych == 'l') goto yy472;
-               goto yy166;
-yy389:
+               ++YYCURSOR;
+               YYFILL(1);
+               yych = *YYCURSOR;
                YYDEBUG(389, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'I') goto yy474;
-               if (yych == 'i') goto yy474;
-               goto yy166;
+               if (yych <= 0x1F) {
+                       if (yych == '\t') goto yy388;
+                       goto yy82;
+               } else {
+                       if (yych <= ' ') goto yy388;
+                       if (yych == ')') goto yy478;
+                       goto yy82;
+               }
 yy390:
                YYDEBUG(390, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy475;
-               if (yych == 'e') goto yy475;
-               goto yy166;
+               if (yych == 'N') goto yy480;
+               if (yych == 'n') goto yy480;
+               goto yy82;
 yy391:
                YYDEBUG(391, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'T') goto yy481;
+               if (yych == 't') goto yy481;
+               goto yy82;
+yy392:
+               YYDEBUG(392, *YYCURSOR);
                ++YYCURSOR;
-               YYFILL(1);
+               YYFILL(3);
                yych = *YYCURSOR;
-               YYDEBUG(392, *YYCURSOR);
-               if (yych <= '\f') {
-                       if (yych <= 0x08) goto yy197;
-                       if (yych <= '\n') goto yy391;
-                       goto yy197;
+yy393:
+               YYDEBUG(393, *YYCURSOR);
+               if (yych <= 'Z') {
+                       if (yych <= '/') {
+                               if (yych == '"') goto yy483;
+                               goto yy82;
+                       } else {
+                               if (yych <= '9') goto yy392;
+                               if (yych <= '@') goto yy82;
+                               goto yy392;
+                       }
+               } else {
+                       if (yych <= '`') {
+                               if (yych == '_') goto yy392;
+                               goto yy82;
+                       } else {
+                               if (yych <= 'z') goto yy392;
+                               if (yych <= 0x7F) goto yy82;
+                               goto yy392;
+                       }
+               }
+yy394:
+               YYDEBUG(394, *YYCURSOR);
+               ++YYCURSOR;
+               YYFILL(3);
+               yych = *YYCURSOR;
+yy395:
+               YYDEBUG(395, *YYCURSOR);
+               if (yych <= 'Z') {
+                       if (yych <= '/') {
+                               if (yych == '\'') goto yy483;
+                               goto yy82;
+                       } else {
+                               if (yych <= '9') goto yy394;
+                               if (yych <= '@') goto yy82;
+                               goto yy394;
+                       }
+               } else {
+                       if (yych <= '`') {
+                               if (yych == '_') goto yy394;
+                               goto yy82;
+                       } else {
+                               if (yych <= 'z') goto yy394;
+                               if (yych <= 0x7F) goto yy82;
+                               goto yy394;
+                       }
+               }
+yy396:
+               YYDEBUG(396, *YYCURSOR);
+               ++YYCURSOR;
+yy397:
+               YYDEBUG(397, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 2270 "Zend/zend_language_scanner.l"
+               {
+       char *s;
+       unsigned char *saved_cursor;
+       int bprefix = (yytext[0] != '<') ? 1 : 0, spacing = 0, indentation = 0;
+       zend_heredoc_label *heredoc_label = emalloc(sizeof(zend_heredoc_label));
+       zend_bool is_heredoc = 1;
+
+       CG(zend_lineno)++;
+       heredoc_label->length = yyleng-bprefix-3-1-(yytext[yyleng-2]=='\r'?1:0);
+       s = yytext+bprefix+3;
+       while ((*s == ' ') || (*s == '\t')) {
+               s++;
+               heredoc_label->length--;
+       }
+
+       if (*s == '\'') {
+               s++;
+               heredoc_label->length -= 2;
+               is_heredoc = 0;
+
+               BEGIN(ST_NOWDOC);
+       } else {
+               if (*s == '"') {
+                       s++;
+                       heredoc_label->length -= 2;
+               }
+
+               BEGIN(ST_HEREDOC);
+       }
+
+       heredoc_label->label = estrndup(s, heredoc_label->length);
+       heredoc_label->indentation = 0;
+       saved_cursor = YYCURSOR;
+
+       zend_ptr_stack_push(&SCNG(heredoc_label_stack), (void *) heredoc_label);
+
+       while (YYCURSOR < YYLIMIT && (*YYCURSOR == ' ' || *YYCURSOR == '\t')) {
+               if (*YYCURSOR == '\t') {
+                       spacing |= HEREDOC_USING_TABS;
                } else {
-                       if (yych <= '\r') goto yy391;
-                       if (yych == ' ') goto yy391;
-                       goto yy197;
+                       spacing |= HEREDOC_USING_SPACES;
                }
-yy393:
-               YYDEBUG(393, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '"') goto yy166;
-               if (yych <= '/') goto yy477;
-               if (yych <= '9') goto yy166;
-               goto yy477;
-yy394:
-               YYDEBUG(394, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '\'') goto yy166;
-               if (yych <= '/') goto yy479;
-               if (yych <= '9') goto yy166;
-               goto yy479;
-yy395:
-               YYDEBUG(395, *YYCURSOR);
                ++YYCURSOR;
-               YYFILL(2);
-               yych = *YYCURSOR;
-               YYDEBUG(396, *YYCURSOR);
-               if (yych <= '@') {
-                       if (yych <= '\f') {
-                               if (yych == '\n') goto yy480;
-                               goto yy166;
-                       } else {
-                               if (yych <= '\r') goto yy482;
-                               if (yych <= '/') goto yy166;
-                               if (yych <= '9') goto yy395;
-                               goto yy166;
+               ++indentation;
+       }
+
+       if (YYCURSOR == YYLIMIT) {
+               YYCURSOR = saved_cursor;
+               RETURN_TOKEN(T_START_HEREDOC);
+       }
+
+       /* Check for ending label on the next line */
+       if (heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, s, heredoc_label->length)) {
+               if (!IS_LABEL_START(YYCURSOR[heredoc_label->length])) {
+                       if (spacing == (HEREDOC_USING_SPACES | HEREDOC_USING_TABS)) {
+                               zend_throw_exception(zend_ce_parse_error, "Invalid indentation - tabs and spaces cannot be mixed", 0);
                        }
-               } else {
-                       if (yych <= '_') {
-                               if (yych <= 'Z') goto yy395;
-                               if (yych <= '^') goto yy166;
-                               goto yy395;
-                       } else {
-                               if (yych <= '`') goto yy166;
-                               if (yych <= 'z') goto yy395;
-                               if (yych <= 0x7F) goto yy166;
-                               goto yy395;
+
+                       YYCURSOR = saved_cursor;
+                       heredoc_label->indentation = indentation;
+
+                       BEGIN(ST_END_HEREDOC);
+                       RETURN_TOKEN(T_START_HEREDOC);
+               }
+       }
+
+       YYCURSOR = saved_cursor;
+
+       if (is_heredoc && !SCNG(heredoc_scan_ahead)) {
+               zend_lex_state current_state;
+               int heredoc_nesting_level = 1;
+               int first_token = 0;
+
+               zend_save_lexical_state(&current_state);
+
+               SCNG(heredoc_scan_ahead) = 1;
+               SCNG(heredoc_indentation) = 0;
+               SCNG(heredoc_indentation_uses_spaces) = 0;
+               LANG_SCNG(on_event) = NULL;
+
+               zend_ptr_stack_reverse_apply(&current_state.heredoc_label_stack, copy_heredoc_label_stack);
+
+               while (heredoc_nesting_level) {
+                       zval zv;
+                       int retval;
+
+                       ZVAL_UNDEF(&zv);
+                       retval = lex_scan(&zv, NULL);
+                       zval_dtor(&zv);
+
+                       if (EG(exception)) {
+                               zend_clear_exception();
+                               break;
+                       }
+
+                       if (!first_token) {
+                               first_token = retval;
+                       }
+
+                       switch (retval) {
+                               case T_START_HEREDOC:
+                                       ++heredoc_nesting_level;
+                                       break;
+                               case T_END_HEREDOC:
+                                       --heredoc_nesting_level;
+                                       break;
+                               case END:
+                                       heredoc_nesting_level = 0;
                        }
                }
-yy397:
-               YYDEBUG(397, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'R') goto yy483;
-               if (yych == 'r') goto yy483;
-               goto yy128;
+
+               if (
+                   (first_token == T_VARIABLE
+                    || first_token == T_DOLLAR_OPEN_CURLY_BRACES
+                    || first_token == T_CURLY_OPEN
+                   ) && SCNG(heredoc_indentation)) {
+                       zend_throw_exception_ex(zend_ce_parse_error, 0, "Invalid body indentation level (expecting an indentation level of at least %d)", SCNG(heredoc_indentation));
+               }
+
+               heredoc_label->indentation = SCNG(heredoc_indentation);
+               heredoc_label->indentation_uses_spaces = SCNG(heredoc_indentation_uses_spaces);
+
+               zend_restore_lexical_state(&current_state);
+               SCNG(heredoc_scan_ahead) = 0;
+               CG(increment_lineno) = 0;
+       }
+
+       RETURN_TOKEN(T_START_HEREDOC);
+}
+#line 4788 "Zend/zend_language_scanner.c"
 yy398:
                YYDEBUG(398, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'Y') goto yy484;
-               if (yych == 'y') goto yy484;
-               goto yy128;
+               if (yych == '\n') goto yy396;
+               goto yy397;
 yy399:
                YYDEBUG(399, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'K') goto yy486;
-               if (yych == 'k') goto yy486;
-               goto yy128;
+               if (yych == 'A') goto yy484;
+               if (yych == 'a') goto yy484;
+               goto yy44;
 yy400:
                YYDEBUG(400, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy488;
-               if (yych == 'a') goto yy488;
-               goto yy128;
-yy401:
-               YYDEBUG(401, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
-               YYDEBUG(402, *YYCURSOR);
+               YYDEBUG(401, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1356 "Zend/zend_language_scanner.l"
+#line 1589 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_CASE);
+       RETURN_TOKEN(T_ARRAY);
 }
-#line 5003 "Zend/zend_language_scanner.c"
-yy403:
-               YYDEBUG(403, *YYCURSOR);
+#line 4812 "Zend/zend_language_scanner.c"
+yy402:
+               YYDEBUG(402, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'H') goto yy489;
-               if (yych == 'h') goto yy489;
-               goto yy128;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
+               YYDEBUG(403, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1385 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_BREAK);
+}
+#line 4825 "Zend/zend_language_scanner.c"
 yy404:
                YYDEBUG(404, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy491;
-               if (yych == 's') goto yy491;
-               goto yy128;
+               if (yych == 'B') goto yy485;
+               if (yych == 'b') goto yy485;
+               goto yy44;
 yy405:
                YYDEBUG(405, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy493;
-               if (yych == 'e') goto yy493;
-               goto yy128;
-yy406:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(406, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'T') goto yy495;
-               if (yych == 't') goto yy495;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1297 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_CATCH);
+}
+#line 4844 "Zend/zend_language_scanner.c"
 yy407:
                YYDEBUG(407, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy497;
-               if (yych == 'i') goto yy497;
-               goto yy128;
-yy408:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(408, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'A') goto yy498;
-               if (yych == 'a') goto yy498;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1405 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_CLASS);
+}
+#line 4857 "Zend/zend_language_scanner.c"
 yy409:
                YYDEBUG(409, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'U') goto yy499;
-               if (yych == 'u') goto yy499;
-               goto yy128;
-yy410:
-               YYDEBUG(410, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
-               YYDEBUG(411, *YYCURSOR);
+               YYDEBUG(410, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1376 "Zend/zend_language_scanner.l"
+#line 1469 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_ECHO);
+       RETURN_TOKEN(T_CLONE);
 }
-#line 5058 "Zend/zend_language_scanner.c"
-yy412:
-               YYDEBUG(412, *YYCURSOR);
-               ++YYCURSOR;
-               if ((yych = *YYCURSOR) <= '^') {
-                       if (yych <= '@') {
-                               if (yych <= '/') goto yy413;
-                               if (yych <= '9') goto yy127;
-                       } else {
-                               if (yych == 'I') goto yy500;
-                               if (yych <= 'Z') goto yy127;
-                       }
-               } else {
-                       if (yych <= 'h') {
-                               if (yych != '`') goto yy127;
-                       } else {
-                               if (yych <= 'i') goto yy500;
-                               if (yych <= 'z') goto yy127;
-                               if (yych >= 0x80) goto yy127;
-                       }
+#line 4870 "Zend/zend_language_scanner.c"
+yy411:
+               YYDEBUG(411, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
-yy413:
-               YYDEBUG(413, *YYCURSOR);
+               YYDEBUG(412, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1300 "Zend/zend_language_scanner.l"
+#line 1275 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_ELSE);
+       RETURN_TOKEN(T_CONST);
 }
-#line 5086 "Zend/zend_language_scanner.c"
+#line 4883 "Zend/zend_language_scanner.c"
+yy413:
+               YYDEBUG(413, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'N') goto yy486;
+               if (yych == 'n') goto yy486;
+               goto yy44;
 yy414:
                YYDEBUG(414, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'Y') goto yy501;
-               if (yych == 'y') goto yy501;
-               goto yy128;
+               if (yych == 'R') goto yy487;
+               if (yych == 'r') goto yy487;
+               goto yy44;
 yy415:
                YYDEBUG(415, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy503;
-               if (yych == 'e') goto yy503;
-               goto yy128;
+               if (yych == 'L') goto yy488;
+               if (yych == 'l') goto yy488;
+               goto yy44;
 yy416:
                YYDEBUG(416, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy504;
-               if (yych == 'o') goto yy504;
-               goto yy128;
+               if (yych == 'F') goto yy489;
+               if (yych == 'f') goto yy489;
+               goto yy44;
 yy417:
                YYDEBUG(417, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'F') goto yy505;
-               if (yych == 'f') goto yy505;
-               goto yy128;
-yy418:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(418, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'W') goto yy507;
-               if (yych == 'w') goto yy507;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1545 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_EMPTY);
+}
+#line 4920 "Zend/zend_language_scanner.c"
 yy419:
                YYDEBUG(419, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'H') goto yy508;
-               if (yych == 'h') goto yy508;
-               goto yy128;
+               if (yych == 'C') goto yy491;
+               if (yych == 'c') goto yy491;
+               goto yy44;
 yy420:
                YYDEBUG(420, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'R') goto yy492;
+               if (yych == 'r') goto yy492;
+               goto yy44;
+yy421:
                YYDEBUG(421, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1484 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_EVAL);
-}
-#line 5135 "Zend/zend_language_scanner.c"
-yy422:
-               YYDEBUG(422, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
-               YYDEBUG(423, *YYCURSOR);
+               YYDEBUG(422, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1242 "Zend/zend_language_scanner.l"
+#line 1317 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_EXIT);
+       RETURN_TOKEN(T_ENDIF);
 }
-#line 5148 "Zend/zend_language_scanner.c"
+#line 4945 "Zend/zend_language_scanner.c"
+yy423:
+               YYDEBUG(423, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'I') goto yy494;
+               if (yych == 'i') goto yy494;
+               goto yy44;
 yy424:
                YYDEBUG(424, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy509;
-               if (yych == 'n') goto yy509;
-               goto yy128;
+               if (yych == 'I') goto yy495;
+               if (yych == 'i') goto yy495;
+               goto yy44;
 yy425:
                YYDEBUG(425, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy510;
-               if (yych == 'l') goto yy510;
-               goto yy128;
+               if (yych == 'D') goto yy496;
+               if (yych == 'd') goto yy496;
+               goto yy44;
 yy426:
                YYDEBUG(426, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy512;
-               if (yych == 'a') goto yy512;
-               goto yy128;
+               if (yych <= '^') {
+                       if (yych <= '@') {
+                               if (yych <= '/') goto yy427;
+                               if (yych <= '9') goto yy43;
+                       } else {
+                               if (yych == 'L') goto yy497;
+                               if (yych <= 'Z') goto yy43;
+                       }
+               } else {
+                       if (yych <= 'k') {
+                               if (yych != '`') goto yy43;
+                       } else {
+                               if (yych <= 'l') goto yy497;
+                               if (yych <= 'z') goto yy43;
+                               if (yych >= 0x80) goto yy43;
+                       }
+               }
 yy427:
                YYDEBUG(427, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'T') goto yy513;
-               if (yych == 't') goto yy513;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1561 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_FINAL);
+}
+#line 4991 "Zend/zend_language_scanner.c"
 yy428:
                YYDEBUG(428, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy514;
-               if (yych == 'a') goto yy514;
-               goto yy128;
+               if (yych == 'C') goto yy498;
+               if (yych == 'c') goto yy498;
+               goto yy44;
 yy429:
                YYDEBUG(429, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'I') goto yy499;
+               if (yych == 'i') goto yy499;
+               goto yy44;
+yy430:
                YYDEBUG(430, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1372 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_GOTO);
-}
-#line 5191 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'L') goto yy500;
+               if (yych == 'l') goto yy500;
+               goto yy44;
 yy431:
                YYDEBUG(431, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy515;
-               if (yych == 'e') goto yy515;
-               goto yy128;
+               if (yych == 'M') goto yy502;
+               if (yych == 'm') goto yy502;
+               goto yy44;
 yy432:
                YYDEBUG(432, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'U') goto yy516;
-               if (yych == 'u') goto yy516;
-               goto yy128;
+               if (yych == 'D') goto yy503;
+               if (yych == 'd') goto yy503;
+               goto yy44;
 yy433:
                YYDEBUG(433, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych <= 'E') {
-                       if (yych == 'A') goto yy517;
-                       if (yych <= 'D') goto yy128;
-                       goto yy518;
-               } else {
-                       if (yych <= 'a') {
-                               if (yych <= '`') goto yy128;
-                               goto yy517;
-                       } else {
-                               if (yych == 'e') goto yy518;
-                               goto yy128;
-                       }
-               }
+               if (yych == 'N') goto yy504;
+               if (yych == 'n') goto yy504;
+               goto yy44;
 yy434:
                YYDEBUG(434, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy519;
-               if (yych == 'r') goto yy519;
-               goto yy128;
+               if (yych == 'A') goto yy505;
+               if (yych == 'a') goto yy505;
+               goto yy44;
 yy435:
                YYDEBUG(435, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy520;
-               if (yych == 't') goto yy520;
-               goto yy128;
+               if (yych == 'F') goto yy506;
+               if (yych == 'f') goto yy506;
+               goto yy44;
 yy436:
                YYDEBUG(436, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
                YYDEBUG(437, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1564 "Zend/zend_language_scanner.l"
+#line 1541 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_LIST);
+       RETURN_TOKEN(T_ISSET);
 }
-#line 5244 "Zend/zend_language_scanner.c"
+#line 5052 "Zend/zend_language_scanner.c"
 yy438:
                YYDEBUG(438, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy522;
-               if (yych == 's') goto yy522;
-               goto yy128;
+               if (yych == 'P') goto yy507;
+               if (yych == 'p') goto yy507;
+               goto yy44;
 yy439:
                YYDEBUG(439, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy523;
-               if (yych == 't') goto yy523;
-               goto yy128;
-yy440:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(440, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'A') goto yy525;
-               if (yych == 'a') goto yy525;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1401 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_PRINT);
+}
+#line 5071 "Zend/zend_language_scanner.c"
 yy441:
                YYDEBUG(441, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy526;
-               if (yych == 'e') goto yy526;
-               goto yy128;
+               if (yych == 'T') goto yy508;
+               if (yych == 't') goto yy508;
+               goto yy44;
 yy442:
                YYDEBUG(442, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy527;
-               if (yych == 'i') goto yy527;
-               goto yy128;
+               if (yych == 'C') goto yy509;
+               if (yych == 'c') goto yy509;
+               goto yy44;
 yy443:
                YYDEBUG(443, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy528;
-               if (yych == 'i') goto yy528;
-               goto yy128;
+               if (yych == 'C') goto yy510;
+               if (yych == 'c') goto yy510;
+               goto yy44;
 yy444:
                YYDEBUG(444, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy529;
-               if (yych == 'r') goto yy529;
-               goto yy128;
+               if (yych == 'R') goto yy512;
+               if (yych == 'r') goto yy512;
+               goto yy44;
 yy445:
                YYDEBUG(445, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy530;
-               if (yych == 'i') goto yy530;
-               goto yy128;
+               if (yych == 'N') goto yy513;
+               if (yych == 'n') goto yy513;
+               goto yy44;
 yy446:
                YYDEBUG(446, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy531;
-               if (yych == 'c') goto yy531;
-               goto yy128;
+               if (yych == 'C') goto yy515;
+               if (yych == 'c') goto yy515;
+               goto yy44;
 yy447:
                YYDEBUG(447, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'W') goto yy532;
-               if (yych == 'w') goto yy532;
-               goto yy128;
+               if (yych == 'H') goto yy517;
+               if (yych == 'h') goto yy517;
+               goto yy44;
 yy448:
                YYDEBUG(448, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy534;
-               if (yych == 't') goto yy534;
-               goto yy128;
-yy449:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(449, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'T') goto yy536;
-               if (yych == 't') goto yy536;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1305 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_THROW);
+}
+#line 5126 "Zend/zend_language_scanner.c"
 yy450:
                YYDEBUG(450, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy538;
-               if (yych == 'e') goto yy538;
-               goto yy128;
-yy451:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(451, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'D') goto yy540;
-               if (yych == 'd') goto yy540;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1413 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_TRAIT);
+}
+#line 5139 "Zend/zend_language_scanner.c"
 yy452:
                YYDEBUG(452, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy542;
-               if (yych == 'a') goto yy542;
-               goto yy128;
-yy453:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(453, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'R') goto yy543;
-               if (yych == 'r') goto yy543;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1577 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_UNSET);
+}
+#line 5152 "Zend/zend_language_scanner.c"
 yy454:
                YYDEBUG(454, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy544;
-               if (yych == 'l') goto yy544;
-               goto yy128;
-yy455:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(455, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'N') goto yy545;
-               if (yych == 'n') goto yy545;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1325 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_WHILE);
+}
+#line 5165 "Zend/zend_language_scanner.c"
 yy456:
                YYDEBUG(456, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'L') goto yy546;
-               if (yych == 'l') goto yy546;
-               goto yy128;
+               yyaccept = 6;
+               yych = *(YYMARKER = ++YYCURSOR);
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
+               if (yych <= '\f') {
+                       if (yych <= 0x08) goto yy457;
+                       if (yych <= '\n') goto yy519;
+               } else {
+                       if (yych <= '\r') goto yy519;
+                       if (yych == ' ') goto yy519;
+               }
 yy457:
                YYDEBUG(457, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'N') goto yy547;
-               if (yych == 'n') goto yy547;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1289 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_YIELD);
+}
+#line 5187 "Zend/zend_language_scanner.c"
 yy458:
                YYDEBUG(458, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy548;
-               if (yych == 't') goto yy548;
-               goto yy128;
+               if (yych == 'S') goto yy521;
+               if (yych == 's') goto yy521;
+               goto yy44;
 yy459:
                YYDEBUG(459, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'M') goto yy549;
-               if (yych == 'm') goto yy549;
-               goto yy128;
+               if (yych == '_') goto yy522;
+               goto yy44;
 yy460:
                YYDEBUG(460, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy550;
-               if (yych == 'a') goto yy550;
-               goto yy128;
+               if (yych == 'E') goto yy523;
+               if (yych == 'e') goto yy523;
+               goto yy44;
 yy461:
                YYDEBUG(461, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'Y') goto yy551;
-               if (yych == 'y') goto yy551;
-               goto yy166;
+               if (yych == 'C') goto yy524;
+               if (yych == 'c') goto yy524;
+               goto yy44;
 yy462:
                YYDEBUG(462, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy553;
-               if (yych == 'r') goto yy553;
-               goto yy166;
+               if (yych == 'T') goto yy525;
+               if (yych == 't') goto yy525;
+               goto yy44;
 yy463:
                YYDEBUG(463, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy558;
-               if (yych == 'e') goto yy558;
-               goto yy555;
+               if (yych == 'E') goto yy526;
+               if (yych == 'e') goto yy526;
+               goto yy44;
 yy464:
                YYDEBUG(464, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy559;
-               if (yych == 'l') goto yy559;
-               goto yy166;
+               if (yych == 'H') goto yy527;
+               if (yych == 'h') goto yy527;
+               goto yy44;
 yy465:
                YYDEBUG(465, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy472;
-               if (yych == 't') goto yy472;
-               goto yy166;
+               if (yych == 'E') goto yy528;
+               if (yych == 'e') goto yy528;
+               goto yy44;
 yy466:
                YYDEBUG(466, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'I') goto yy529;
+               if (yych == 'i') goto yy529;
+               goto yy44;
+yy467:
+               YYDEBUG(467, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-yy467:
-               YYDEBUG(467, *YYCURSOR);
+               YYDEBUG(468, *YYCURSOR);
                if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy466;
-                       goto yy166;
+                       if (yych == '\t') goto yy467;
+                       goto yy82;
                } else {
-                       if (yych <= ' ') goto yy466;
-                       if (yych != ')') goto yy166;
+                       if (yych <= ' ') goto yy467;
+                       if (yych == ')') goto yy530;
+                       goto yy82;
                }
-               YYDEBUG(468, *YYCURSOR);
-               ++YYCURSOR;
+yy469:
                YYDEBUG(469, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1456 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_INT_CAST);
-}
-#line 5435 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'Y') goto yy532;
+               if (yych == 'y') goto yy532;
+               goto yy82;
 yy470:
                YYDEBUG(470, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'G') goto yy560;
-               if (yych == 'g') goto yy560;
-               goto yy166;
-yy471:
-               YYDEBUG(471, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'C') goto yy561;
-               if (yych == 'c') goto yy561;
-               goto yy166;
-yy472:
-               YYDEBUG(472, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(473, *YYCURSOR);
+yy471:
+               YYDEBUG(471, *YYCURSOR);
                if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy472;
-                       goto yy166;
+                       if (yych == '\t') goto yy470;
+                       goto yy82;
                } else {
-                       if (yych <= ' ') goto yy472;
-                       if (yych == ')') goto yy562;
-                       goto yy166;
+                       if (yych <= ' ') goto yy470;
+                       if (yych != ')') goto yy82;
                }
+               YYDEBUG(472, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(473, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1497 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_BOOL_CAST);
+}
+#line 5283 "Zend/zend_language_scanner.c"
 yy474:
                YYDEBUG(474, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy564;
-               if (yych == 'n') goto yy564;
-               goto yy166;
+               if (yych == 'A') goto yy534;
+               if (yych == 'a') goto yy534;
+               goto yy82;
 yy475:
                YYDEBUG(475, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy565;
-               if (yych == 't') goto yy565;
-               goto yy166;
+               if (yych == 'E') goto yy388;
+               if (yych == 'e') goto yy388;
+               goto yy82;
 yy476:
                YYDEBUG(476, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(3);
-               yych = *YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy535;
+               if (yych == 'e') goto yy535;
+               goto yy82;
 yy477:
                YYDEBUG(477, *YYCURSOR);
-               if (yych <= 'Z') {
-                       if (yych <= '/') {
-                               if (yych == '"') goto yy567;
-                               goto yy166;
-                       } else {
-                               if (yych <= '9') goto yy476;
-                               if (yych <= '@') goto yy166;
-                               goto yy476;
-                       }
-               } else {
-                       if (yych <= '`') {
-                               if (yych == '_') goto yy476;
-                               goto yy166;
-                       } else {
-                               if (yych <= 'z') goto yy476;
-                               if (yych <= 0x7F) goto yy166;
-                               goto yy476;
-                       }
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'T') goto yy536;
+               if (yych == 't') goto yy536;
+               goto yy82;
 yy478:
                YYDEBUG(478, *YYCURSOR);
                ++YYCURSOR;
-               YYFILL(3);
-               yych = *YYCURSOR;
-yy479:
                YYDEBUG(479, *YYCURSOR);
-               if (yych <= 'Z') {
-                       if (yych <= '/') {
-                               if (yych == '\'') goto yy567;
-                               goto yy166;
-                       } else {
-                               if (yych <= '9') goto yy478;
-                               if (yych <= '@') goto yy166;
-                               goto yy478;
-                       }
-               } else {
-                       if (yych <= '`') {
-                               if (yych == '_') goto yy478;
-                               goto yy166;
-                       } else {
-                               if (yych <= 'z') goto yy478;
-                               if (yych <= 0x7F) goto yy166;
-                               goto yy478;
-                       }
-               }
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1481 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_DOUBLE_CAST);
+}
+#line 5317 "Zend/zend_language_scanner.c"
 yy480:
                YYDEBUG(480, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'G') goto yy532;
+               if (yych == 'g') goto yy532;
+               goto yy82;
 yy481:
                YYDEBUG(481, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 2249 "Zend/zend_language_scanner.l"
-               {
-       char *s;
-       unsigned char *saved_cursor;
-       int bprefix = (yytext[0] != '<') ? 1 : 0, spacing = 0, indentation = 0;
-       zend_heredoc_label *heredoc_label = emalloc(sizeof(zend_heredoc_label));
-       zend_bool is_heredoc = 1;
-
-       CG(zend_lineno)++;
-       heredoc_label->length = yyleng-bprefix-3-1-(yytext[yyleng-2]=='\r'?1:0);
-       s = yytext+bprefix+3;
-       while ((*s == ' ') || (*s == '\t')) {
-               s++;
-               heredoc_label->length--;
-       }
-
-       if (*s == '\'') {
-               s++;
-               heredoc_label->length -= 2;
-               is_heredoc = 0;
-
-               BEGIN(ST_NOWDOC);
-       } else {
-               if (*s == '"') {
-                       s++;
-                       heredoc_label->length -= 2;
-               }
-
-               BEGIN(ST_HEREDOC);
-       }
-
-       heredoc_label->label = estrndup(s, heredoc_label->length);
-       heredoc_label->indentation = 0;
-       saved_cursor = YYCURSOR;
-
-       zend_ptr_stack_push(&SCNG(heredoc_label_stack), (void *) heredoc_label);
-
-       while (YYCURSOR < YYLIMIT && (*YYCURSOR == ' ' || *YYCURSOR == '\t')) {
-               if (*YYCURSOR == '\t') {
-                       spacing |= HEREDOC_USING_TABS;
-               } else {
-                       spacing |= HEREDOC_USING_SPACES;
-               }
                ++YYCURSOR;
-               ++indentation;
-       }
-
-       if (YYCURSOR == YYLIMIT) {
-               YYCURSOR = saved_cursor;
-               RETURN_TOKEN(T_START_HEREDOC);
-       }
-
-       /* Check for ending label on the next line */
-       if (heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, s, heredoc_label->length)) {
-               if (!IS_LABEL_START(YYCURSOR[heredoc_label->length])) {
-                       if (spacing == (HEREDOC_USING_SPACES | HEREDOC_USING_TABS)) {
-                               zend_throw_exception(zend_ce_parse_error, "Invalid indentation - tabs and spaces cannot be mixed", 0);
-                       }
-
-                       YYCURSOR = saved_cursor;
-                       heredoc_label->indentation = indentation;
-
-                       BEGIN(ST_END_HEREDOC);
-                       RETURN_TOKEN(T_START_HEREDOC);
-               }
-       }
-
-       YYCURSOR = saved_cursor;
-
-       if (is_heredoc && !SCNG(heredoc_scan_ahead)) {
-               zend_lex_state current_state;
-               int heredoc_nesting_level = 1;
-               int first_token = 0;
-
-               zend_save_lexical_state(&current_state);
-
-               SCNG(heredoc_scan_ahead) = 1;
-               SCNG(heredoc_indentation) = 0;
-               SCNG(heredoc_indentation_uses_spaces) = 0;
-               LANG_SCNG(on_event) = NULL;
-
-               zend_ptr_stack_reverse_apply(&current_state.heredoc_label_stack, copy_heredoc_label_stack);
-
-               while (heredoc_nesting_level) {
-                       zval zv;
-                       int retval;
-
-                       ZVAL_UNDEF(&zv);
-                       retval = lex_scan(&zv, NULL);
-                       zval_dtor(&zv);
-
-                       if (EG(exception)) {
-                               zend_clear_exception();
-                               break;
-                       }
-
-                       if (!first_token) {
-                               first_token = retval;
-                       }
-
-                       switch (retval) {
-                               case T_START_HEREDOC:
-                                       ++heredoc_nesting_level;
-                                       break;
-                               case T_END_HEREDOC:
-                                       --heredoc_nesting_level;
-                                       break;
-                               case END:
-                                       heredoc_nesting_level = 0;
-                       }
-               }
-
-               if (
-                   (first_token == T_VARIABLE
-                    || first_token == T_DOLLAR_OPEN_CURLY_BRACES
-                    || first_token == T_CURLY_OPEN
-                   ) && SCNG(heredoc_indentation)) {
-                       zend_throw_exception_ex(zend_ce_parse_error, 0, "Invalid body indentation level (expecting an indentation level of at least %d)", SCNG(heredoc_indentation));
-               }
-
-               heredoc_label->indentation = SCNG(heredoc_indentation);
-               heredoc_label->indentation_uses_spaces = SCNG(heredoc_indentation_uses_spaces);
-
-               zend_restore_lexical_state(&current_state);
-               SCNG(heredoc_scan_ahead) = 0;
-               CG(increment_lineno) = 0;
-       }
-
-       RETURN_TOKEN(T_START_HEREDOC);
-}
-#line 5662 "Zend/zend_language_scanner.c"
-yy482:
+               YYFILL(1);
+               yych = *YYCURSOR;
                YYDEBUG(482, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '\n') goto yy480;
-               goto yy481;
+               if (yych <= 0x1F) {
+                       if (yych == '\t') goto yy481;
+                       goto yy82;
+               } else {
+                       if (yych <= ' ') goto yy481;
+                       if (yych == ')') goto yy538;
+                       goto yy82;
+               }
 yy483:
                YYDEBUG(483, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy568;
-               if (yych == 'a') goto yy568;
-               goto yy128;
+               if (yych == '\n') goto yy396;
+               if (yych == '\r') goto yy398;
+               goto yy82;
 yy484:
                YYDEBUG(484, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'C') goto yy540;
+               if (yych == 'c') goto yy540;
+               goto yy44;
+yy485:
                YYDEBUG(485, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1568 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_ARRAY);
-}
-#line 5686 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'L') goto yy541;
+               if (yych == 'l') goto yy541;
+               goto yy44;
 yy486:
                YYDEBUG(486, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'U') goto yy542;
+               if (yych == 'u') goto yy542;
+               goto yy44;
+yy487:
                YYDEBUG(487, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1364 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_BREAK);
-}
-#line 5699 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy543;
+               if (yych == 'e') goto yy543;
+               goto yy44;
 yy488:
                YYDEBUG(488, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'B') goto yy569;
-               if (yych == 'b') goto yy569;
-               goto yy128;
+               if (yych == 'T') goto yy545;
+               if (yych == 't') goto yy545;
+               goto yy44;
 yy489:
                YYDEBUG(489, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
                YYDEBUG(490, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1276 "Zend/zend_language_scanner.l"
+#line 1313 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_CATCH);
+       RETURN_TOKEN(T_ELSEIF);
 }
-#line 5718 "Zend/zend_language_scanner.c"
+#line 5386 "Zend/zend_language_scanner.c"
 yy491:
                YYDEBUG(491, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'L') goto yy547;
+               if (yych == 'l') goto yy547;
+               goto yy44;
+yy492:
                YYDEBUG(492, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1384 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_CLASS);
-}
-#line 5731 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych <= '^') {
+                       if (yych <= '@') {
+                               if (yych <= '/') goto yy493;
+                               if (yych <= '9') goto yy43;
+                       } else {
+                               if (yych == 'E') goto yy548;
+                               if (yych <= 'Z') goto yy43;
+                       }
+               } else {
+                       if (yych <= 'd') {
+                               if (yych != '`') goto yy43;
+                       } else {
+                               if (yych <= 'e') goto yy548;
+                               if (yych <= 'z') goto yy43;
+                               if (yych >= 0x80) goto yy43;
+                       }
+               }
 yy493:
                YYDEBUG(493, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
-               YYDEBUG(494, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1448 "Zend/zend_language_scanner.l"
+#line 1341 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_CLONE);
+       RETURN_TOKEN(T_ENDFOR);
 }
-#line 5744 "Zend/zend_language_scanner.c"
+#line 5420 "Zend/zend_language_scanner.c"
+yy494:
+               YYDEBUG(494, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'T') goto yy549;
+               if (yych == 't') goto yy549;
+               goto yy44;
 yy495:
                YYDEBUG(495, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'L') goto yy550;
+               if (yych == 'l') goto yy550;
+               goto yy44;
+yy496:
                YYDEBUG(496, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1254 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_CONST);
-}
-#line 5757 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'S') goto yy551;
+               if (yych == 's') goto yy551;
+               goto yy44;
 yy497:
                YYDEBUG(497, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy570;
-               if (yych == 'n') goto yy570;
-               goto yy128;
+               if (yych == 'Y') goto yy553;
+               if (yych == 'y') goto yy553;
+               goto yy44;
 yy498:
                YYDEBUG(498, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy571;
-               if (yych == 'r') goto yy571;
-               goto yy128;
+               if (yych == 'H') goto yy555;
+               if (yych == 'h') goto yy555;
+               goto yy44;
 yy499:
                YYDEBUG(499, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy572;
-               if (yych == 'l') goto yy572;
-               goto yy128;
+               if (yych == 'O') goto yy557;
+               if (yych == 'o') goto yy557;
+               goto yy44;
 yy500:
                YYDEBUG(500, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'F') goto yy573;
-               if (yych == 'f') goto yy573;
-               goto yy128;
-yy501:
-               YYDEBUG(501, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
-               YYDEBUG(502, *YYCURSOR);
+               YYDEBUG(501, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1524 "Zend/zend_language_scanner.l"
+#line 1537 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_EMPTY);
+       RETURN_TOKEN(T_GLOBAL);
 }
-#line 5794 "Zend/zend_language_scanner.c"
+#line 5469 "Zend/zend_language_scanner.c"
+yy502:
+               YYDEBUG(502, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy558;
+               if (yych == 'e') goto yy558;
+               goto yy44;
 yy503:
                YYDEBUG(503, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy575;
-               if (yych == 'c') goto yy575;
-               goto yy128;
+               if (yych == 'E') goto yy559;
+               if (yych == 'e') goto yy559;
+               goto yy44;
 yy504:
                YYDEBUG(504, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy576;
-               if (yych == 'r') goto yy576;
-               goto yy128;
+               if (yych == 'C') goto yy561;
+               if (yych == 'c') goto yy561;
+               goto yy44;
 yy505:
                YYDEBUG(505, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'D') goto yy562;
+               if (yych == 'd') goto yy562;
+               goto yy44;
+yy506:
                YYDEBUG(506, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1296 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_ENDIF);
-}
-#line 5819 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'A') goto yy563;
+               if (yych == 'a') goto yy563;
+               goto yy44;
 yy507:
                YYDEBUG(507, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy578;
-               if (yych == 'i') goto yy578;
-               goto yy128;
+               if (yych == 'A') goto yy564;
+               if (yych == 'a') goto yy564;
+               goto yy44;
 yy508:
                YYDEBUG(508, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy579;
-               if (yych == 'i') goto yy579;
-               goto yy128;
+               if (yych == 'E') goto yy565;
+               if (yych == 'e') goto yy565;
+               goto yy44;
 yy509:
                YYDEBUG(509, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'D') goto yy580;
-               if (yych == 'd') goto yy580;
-               goto yy128;
+               if (yych == 'T') goto yy567;
+               if (yych == 't') goto yy567;
+               goto yy44;
 yy510:
                YYDEBUG(510, *YYCURSOR);
-               ++YYCURSOR;
-               if ((yych = *YYCURSOR) <= '^') {
-                       if (yych <= '@') {
-                               if (yych <= '/') goto yy511;
-                               if (yych <= '9') goto yy127;
-                       } else {
-                               if (yych == 'L') goto yy581;
-                               if (yych <= 'Z') goto yy127;
-                       }
-               } else {
-                       if (yych <= 'k') {
-                               if (yych != '`') goto yy127;
-                       } else {
-                               if (yych <= 'l') goto yy581;
-                               if (yych <= 'z') goto yy127;
-                               if (yych >= 0x80) goto yy127;
-                       }
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
-yy511:
                YYDEBUG(511, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1540 "Zend/zend_language_scanner.l"
+#line 1573 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_FINAL);
+       RETURN_TOKEN(T_PUBLIC);
 }
-#line 5865 "Zend/zend_language_scanner.c"
+#line 5530 "Zend/zend_language_scanner.c"
 yy512:
                YYDEBUG(512, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy582;
-               if (yych == 'c') goto yy582;
-               goto yy128;
+               if (yych == 'E') goto yy568;
+               if (yych == 'e') goto yy568;
+               goto yy44;
 yy513:
                YYDEBUG(513, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy583;
-               if (yych == 'i') goto yy583;
-               goto yy128;
-yy514:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(514, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'L') goto yy584;
-               if (yych == 'l') goto yy584;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1279 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_RETURN);
+}
+#line 5549 "Zend/zend_language_scanner.c"
 yy515:
                YYDEBUG(515, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'M') goto yy586;
-               if (yych == 'm') goto yy586;
-               goto yy128;
-yy516:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(516, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'D') goto yy587;
-               if (yych == 'd') goto yy587;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1553 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_STATIC);
+}
+#line 5562 "Zend/zend_language_scanner.c"
 yy517:
                YYDEBUG(517, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy588;
-               if (yych == 'n') goto yy588;
-               goto yy128;
-yy518:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(518, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'A') goto yy589;
-               if (yych == 'a') goto yy589;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1369 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_SWITCH);
+}
+#line 5575 "Zend/zend_language_scanner.c"
 yy519:
                YYDEBUG(519, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'F') goto yy590;
-               if (yych == 'f') goto yy590;
-               goto yy128;
-yy520:
-               YYDEBUG(520, *YYCURSOR);
                ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               YYFILL(5);
+               yych = *YYCURSOR;
+               YYDEBUG(520, *YYCURSOR);
+               if (yych <= 0x1F) {
+                       if (yych <= '\n') {
+                               if (yych <= 0x08) goto yy82;
+                               goto yy519;
+                       } else {
+                               if (yych == '\r') goto yy519;
+                               goto yy82;
+                       }
+               } else {
+                       if (yych <= 'F') {
+                               if (yych <= ' ') goto yy519;
+                               if (yych <= 'E') goto yy82;
+                               goto yy570;
+                       } else {
+                               if (yych == 'f') goto yy570;
+                               goto yy82;
+                       }
                }
+yy521:
                YYDEBUG(521, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1520 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_ISSET);
-}
-#line 5926 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'S') goto yy571;
+               if (yych == 's') goto yy571;
+               goto yy44;
 yy522:
                YYDEBUG(522, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'P') goto yy591;
-               if (yych == 'p') goto yy591;
-               goto yy128;
+               if (yych == '_') goto yy572;
+               goto yy44;
 yy523:
                YYDEBUG(523, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == '_') goto yy574;
+               goto yy44;
+yy524:
                YYDEBUG(524, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1380 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_PRINT);
-}
-#line 5945 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'T') goto yy575;
+               if (yych == 't') goto yy575;
+               goto yy44;
 yy525:
                YYDEBUG(525, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy592;
-               if (yych == 't') goto yy592;
-               goto yy128;
+               if (yych == '_') goto yy576;
+               goto yy44;
 yy526:
                YYDEBUG(526, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy593;
-               if (yych == 'c') goto yy593;
-               goto yy128;
+               if (yych == '_') goto yy577;
+               goto yy44;
 yy527:
                YYDEBUG(527, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy594;
-               if (yych == 'c') goto yy594;
-               goto yy128;
+               if (yych == 'O') goto yy578;
+               if (yych == 'o') goto yy578;
+               goto yy44;
 yy528:
                YYDEBUG(528, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy596;
-               if (yych == 'r') goto yy596;
-               goto yy128;
+               if (yych == 'S') goto yy579;
+               if (yych == 's') goto yy579;
+               goto yy44;
 yy529:
                YYDEBUG(529, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy597;
-               if (yych == 'n') goto yy597;
-               goto yy128;
+               if (yych == 'T') goto yy580;
+               if (yych == 't') goto yy580;
+               goto yy44;
 yy530:
                YYDEBUG(530, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'C') goto yy599;
-               if (yych == 'c') goto yy599;
-               goto yy128;
-yy531:
+               ++YYCURSOR;
                YYDEBUG(531, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'H') goto yy601;
-               if (yych == 'h') goto yy601;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1489 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_ARRAY_CAST);
+}
+#line 5659 "Zend/zend_language_scanner.c"
 yy532:
                YYDEBUG(532, *YYCURSOR);
                ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               YYFILL(1);
+               yych = *YYCURSOR;
                YYDEBUG(533, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1284 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_THROW);
-}
-#line 6000 "Zend/zend_language_scanner.c"
+               if (yych <= 0x1F) {
+                       if (yych == '\t') goto yy532;
+                       goto yy82;
+               } else {
+                       if (yych <= ' ') goto yy532;
+                       if (yych == ')') goto yy581;
+                       goto yy82;
+               }
 yy534:
                YYDEBUG(534, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'N') goto yy470;
+               if (yych == 'n') goto yy470;
+               goto yy82;
+yy535:
                YYDEBUG(535, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1392 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_TRAIT);
-}
-#line 6013 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'R') goto yy382;
+               if (yych == 'r') goto yy382;
+               goto yy82;
 yy536:
                YYDEBUG(536, *YYCURSOR);
                ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               YYFILL(1);
+               yych = *YYCURSOR;
                YYDEBUG(537, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1556 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_UNSET);
-}
-#line 6026 "Zend/zend_language_scanner.c"
+               if (yych <= 0x1F) {
+                       if (yych == '\t') goto yy536;
+                       goto yy82;
+               } else {
+                       if (yych <= ' ') goto yy536;
+                       if (yych == ')') goto yy583;
+                       goto yy82;
+               }
 yy538:
                YYDEBUG(538, *YYCURSOR);
                ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
                YYDEBUG(539, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1304 "Zend/zend_language_scanner.l"
+#line 1501 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_WHILE);
+       RETURN_TOKEN(T_UNSET_CAST);
 }
-#line 6039 "Zend/zend_language_scanner.c"
+#line 5709 "Zend/zend_language_scanner.c"
 yy540:
                YYDEBUG(540, *YYCURSOR);
-               yyaccept = 6;
-               yych = *(YYMARKER = ++YYCURSOR);
-               if (yybm[0+yych] & 16) {
-                       goto yy127;
-               }
-               if (yych <= '\f') {
-                       if (yych <= 0x08) goto yy541;
-                       if (yych <= '\n') goto yy603;
-               } else {
-                       if (yych <= '\r') goto yy603;
-                       if (yych == ' ') goto yy603;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'T') goto yy585;
+               if (yych == 't') goto yy585;
+               goto yy44;
 yy541:
                YYDEBUG(541, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1268 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_YIELD);
-}
-#line 6061 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy587;
+               if (yych == 'e') goto yy587;
+               goto yy44;
 yy542:
                YYDEBUG(542, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy605;
-               if (yych == 's') goto yy605;
-               goto yy128;
+               if (yych == 'E') goto yy589;
+               if (yych == 'e') goto yy589;
+               goto yy44;
 yy543:
                YYDEBUG(543, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '_') goto yy606;
-               goto yy128;
-yy544:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(544, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy607;
-               if (yych == 'e') goto yy607;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1353 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_DECLARE);
+}
+#line 5740 "Zend/zend_language_scanner.c"
 yy545:
                YYDEBUG(545, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy608;
-               if (yych == 'c') goto yy608;
-               goto yy128;
-yy546:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(546, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'T') goto yy609;
-               if (yych == 't') goto yy609;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1381 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_DEFAULT);
+}
+#line 5753 "Zend/zend_language_scanner.c"
 yy547:
                YYDEBUG(547, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy610;
-               if (yych == 'e') goto yy610;
-               goto yy128;
+               if (yych == 'A') goto yy591;
+               if (yych == 'a') goto yy591;
+               goto yy44;
 yy548:
                YYDEBUG(548, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'H') goto yy611;
-               if (yych == 'h') goto yy611;
-               goto yy128;
+               if (yych == 'A') goto yy592;
+               if (yych == 'a') goto yy592;
+               goto yy44;
 yy549:
                YYDEBUG(549, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy612;
-               if (yych == 'e') goto yy612;
-               goto yy128;
+               if (yych == 'C') goto yy593;
+               if (yych == 'c') goto yy593;
+               goto yy44;
 yy550:
                YYDEBUG(550, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy613;
-               if (yych == 'i') goto yy613;
-               goto yy128;
+               if (yych == 'E') goto yy594;
+               if (yych == 'e') goto yy594;
+               goto yy44;
 yy551:
                YYDEBUG(551, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(1);
-               yych = *YYCURSOR;
-               YYDEBUG(552, *YYCURSOR);
-               if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy551;
-                       goto yy166;
-               } else {
-                       if (yych <= ' ') goto yy551;
-                       if (yych == ')') goto yy614;
-                       goto yy166;
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
+               YYDEBUG(552, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1417 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_EXTENDS);
+}
+#line 5790 "Zend/zend_language_scanner.c"
 yy553:
                YYDEBUG(553, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'Y') goto yy616;
-               if (yych == 'y') goto yy616;
-               goto yy166;
-yy554:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(554, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(1);
-               yych = *YYCURSOR;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1301 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_FINALLY);
+}
+#line 5803 "Zend/zend_language_scanner.c"
 yy555:
                YYDEBUG(555, *YYCURSOR);
-               if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy554;
-                       goto yy166;
-               } else {
-                       if (yych <= ' ') goto yy554;
-                       if (yych != ')') goto yy166;
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
                YYDEBUG(556, *YYCURSOR);
-               ++YYCURSOR;
-               YYDEBUG(557, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1476 "Zend/zend_language_scanner.l"
+#line 1345 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_BOOL_CAST);
+       RETURN_TOKEN(T_FOREACH);
 }
-#line 6157 "Zend/zend_language_scanner.c"
+#line 5816 "Zend/zend_language_scanner.c"
+yy557:
+               YYDEBUG(557, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'N') goto yy596;
+               if (yych == 'n') goto yy596;
+               goto yy44;
 yy558:
                YYDEBUG(558, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy618;
-               if (yych == 'a') goto yy618;
-               goto yy166;
+               if (yych == 'N') goto yy598;
+               if (yych == 'n') goto yy598;
+               goto yy44;
 yy559:
                YYDEBUG(559, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy472;
-               if (yych == 'e') goto yy472;
-               goto yy166;
+               if (yych <= '^') {
+                       if (yych <= '9') {
+                               if (yych >= '0') goto yy43;
+                       } else {
+                               if (yych <= '@') goto yy560;
+                               if (yych <= 'Z') goto yy43;
+                       }
+               } else {
+                       if (yych <= '`') {
+                               if (yych <= '_') goto yy599;
+                       } else {
+                               if (yych <= 'z') goto yy43;
+                               if (yych >= 0x80) goto yy43;
+                       }
+               }
 yy560:
                YYDEBUG(560, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy619;
-               if (yych == 'e') goto yy619;
-               goto yy166;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1509 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_INCLUDE);
+}
+#line 5854 "Zend/zend_language_scanner.c"
 yy561:
                YYDEBUG(561, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy620;
-               if (yych == 't') goto yy620;
-               goto yy166;
+               if (yych == 'E') goto yy600;
+               if (yych == 'e') goto yy600;
+               goto yy44;
 yy562:
                YYDEBUG(562, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'O') goto yy601;
+               if (yych == 'o') goto yy601;
+               goto yy44;
+yy563:
                YYDEBUG(563, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1460 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_DOUBLE_CAST);
-}
-#line 6191 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'C') goto yy602;
+               if (yych == 'c') goto yy602;
+               goto yy44;
 yy564:
                YYDEBUG(564, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'G') goto yy616;
-               if (yych == 'g') goto yy616;
-               goto yy166;
-yy565:
-               YYDEBUG(565, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(1);
-               yych = *YYCURSOR;
-               YYDEBUG(566, *YYCURSOR);
-               if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy565;
-                       goto yy166;
-               } else {
-                       if (yych <= ' ') goto yy565;
-                       if (yych == ')') goto yy622;
-                       goto yy166;
+               if (yych == 'C') goto yy603;
+               if (yych == 'c') goto yy603;
+               goto yy44;
+yy565:
+               YYDEBUG(565, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
+               YYDEBUG(566, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1565 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_PRIVATE);
+}
+#line 5891 "Zend/zend_language_scanner.c"
 yy567:
                YYDEBUG(567, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '\n') goto yy480;
-               if (yych == '\r') goto yy482;
-               goto yy166;
+               if (yych == 'E') goto yy604;
+               if (yych == 'e') goto yy604;
+               goto yy44;
 yy568:
                YYDEBUG(568, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy624;
-               if (yych == 'c') goto yy624;
-               goto yy128;
+               if (yych <= '^') {
+                       if (yych <= '9') {
+                               if (yych >= '0') goto yy43;
+                       } else {
+                               if (yych <= '@') goto yy569;
+                               if (yych <= 'Z') goto yy43;
+                       }
+               } else {
+                       if (yych <= '`') {
+                               if (yych <= '_') goto yy605;
+                       } else {
+                               if (yych <= 'z') goto yy43;
+                               if (yych >= 0x80) goto yy43;
+                       }
+               }
 yy569:
                YYDEBUG(569, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'L') goto yy625;
-               if (yych == 'l') goto yy625;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1517 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_REQUIRE);
+}
+#line 5923 "Zend/zend_language_scanner.c"
 yy570:
                YYDEBUG(570, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'U') goto yy626;
-               if (yych == 'u') goto yy626;
-               goto yy128;
+               if (yych == 'R') goto yy606;
+               if (yych == 'r') goto yy606;
+               goto yy82;
 yy571:
                YYDEBUG(571, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy627;
-               if (yych == 'e') goto yy627;
-               goto yy128;
+               if (yych == '_') goto yy607;
+               goto yy44;
 yy572:
                YYDEBUG(572, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy629;
-               if (yych == 't') goto yy629;
-               goto yy128;
-yy573:
-               YYDEBUG(573, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
-               YYDEBUG(574, *YYCURSOR);
+               YYDEBUG(573, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1292 "Zend/zend_language_scanner.l"
+#line 1919 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_ELSEIF);
+       RETURN_TOKEN(T_DIR);
 }
-#line 6260 "Zend/zend_language_scanner.c"
+#line 5947 "Zend/zend_language_scanner.c"
+yy574:
+               YYDEBUG(574, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == '_') goto yy608;
+               goto yy44;
 yy575:
                YYDEBUG(575, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy631;
-               if (yych == 'l') goto yy631;
-               goto yy128;
+               if (yych == 'I') goto yy610;
+               if (yych == 'i') goto yy610;
+               goto yy44;
 yy576:
                YYDEBUG(576, *YYCURSOR);
-               ++YYCURSOR;
-               if ((yych = *YYCURSOR) <= '^') {
-                       if (yych <= '@') {
-                               if (yych <= '/') goto yy577;
-                               if (yych <= '9') goto yy127;
-                       } else {
-                               if (yych == 'E') goto yy632;
-                               if (yych <= 'Z') goto yy127;
-                       }
-               } else {
-                       if (yych <= 'd') {
-                               if (yych != '`') goto yy127;
-                       } else {
-                               if (yych <= 'e') goto yy632;
-                               if (yych <= 'z') goto yy127;
-                               if (yych >= 0x80) goto yy127;
-                       }
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'C') goto yy611;
+               if (yych == 'c') goto yy611;
+               goto yy44;
 yy577:
                YYDEBUG(577, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1320 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_ENDFOR);
-}
-#line 6294 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == '_') goto yy612;
+               goto yy44;
 yy578:
                YYDEBUG(578, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy633;
-               if (yych == 't') goto yy633;
-               goto yy128;
+               if (yych == 'D') goto yy614;
+               if (yych == 'd') goto yy614;
+               goto yy44;
 yy579:
                YYDEBUG(579, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'L') goto yy634;
-               if (yych == 'l') goto yy634;
-               goto yy128;
+               if (yych == 'P') goto yy615;
+               if (yych == 'p') goto yy615;
+               goto yy44;
 yy580:
                YYDEBUG(580, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy635;
-               if (yych == 's') goto yy635;
-               goto yy128;
+               if (yych == '_') goto yy616;
+               goto yy44;
 yy581:
                YYDEBUG(581, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'Y') goto yy637;
-               if (yych == 'y') goto yy637;
-               goto yy128;
-yy582:
+               ++YYCURSOR;
                YYDEBUG(582, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'H') goto yy639;
-               if (yych == 'h') goto yy639;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1485 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_STRING_CAST);
+}
+#line 5996 "Zend/zend_language_scanner.c"
 yy583:
                YYDEBUG(583, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'O') goto yy641;
-               if (yych == 'o') goto yy641;
-               goto yy128;
-yy584:
-               YYDEBUG(584, *YYCURSOR);
                ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
-               YYDEBUG(585, *YYCURSOR);
+               YYDEBUG(584, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1516 "Zend/zend_language_scanner.l"
+#line 1493 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_GLOBAL);
+       RETURN_TOKEN(T_OBJECT_CAST);
 }
-#line 6343 "Zend/zend_language_scanner.c"
-yy586:
-               YYDEBUG(586, *YYCURSOR);
+#line 6006 "Zend/zend_language_scanner.c"
+yy585:
+               YYDEBUG(585, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy642;
-               if (yych == 'e') goto yy642;
-               goto yy128;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
+               YYDEBUG(586, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1557 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_ABSTRACT);
+}
+#line 6019 "Zend/zend_language_scanner.c"
 yy587:
                YYDEBUG(587, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy643;
-               if (yych == 'e') goto yy643;
-               goto yy128;
-yy588:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(588, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'C') goto yy645;
-               if (yych == 'c') goto yy645;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1593 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_CALLABLE);
+}
+#line 6032 "Zend/zend_language_scanner.c"
 yy589:
                YYDEBUG(589, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'D') goto yy646;
-               if (yych == 'd') goto yy646;
-               goto yy128;
-yy590:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(590, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'A') goto yy647;
-               if (yych == 'a') goto yy647;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1389 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_CONTINUE);
+}
+#line 6045 "Zend/zend_language_scanner.c"
 yy591:
                YYDEBUG(591, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy648;
-               if (yych == 'a') goto yy648;
-               goto yy128;
+               if (yych == 'R') goto yy617;
+               if (yych == 'r') goto yy617;
+               goto yy44;
 yy592:
                YYDEBUG(592, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy649;
-               if (yych == 'e') goto yy649;
-               goto yy128;
+               if (yych == 'C') goto yy618;
+               if (yych == 'c') goto yy618;
+               goto yy44;
 yy593:
                YYDEBUG(593, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy651;
-               if (yych == 't') goto yy651;
-               goto yy128;
+               if (yych == 'H') goto yy619;
+               if (yych == 'h') goto yy619;
+               goto yy44;
 yy594:
                YYDEBUG(594, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
                YYDEBUG(595, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1552 "Zend/zend_language_scanner.l"
+#line 1329 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_PUBLIC);
+       RETURN_TOKEN(T_ENDWHILE);
 }
-#line 6404 "Zend/zend_language_scanner.c"
+#line 6076 "Zend/zend_language_scanner.c"
 yy596:
                YYDEBUG(596, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy652;
-               if (yych == 'e') goto yy652;
-               goto yy128;
-yy597:
-               YYDEBUG(597, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
-               YYDEBUG(598, *YYCURSOR);
+               YYDEBUG(597, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1258 "Zend/zend_language_scanner.l"
+#line 1271 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_RETURN);
+       RETURN_TOKEN(T_FUNCTION);
 }
-#line 6423 "Zend/zend_language_scanner.c"
+#line 6089 "Zend/zend_language_scanner.c"
+yy598:
+               YYDEBUG(598, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'T') goto yy621;
+               if (yych == 't') goto yy621;
+               goto yy44;
 yy599:
                YYDEBUG(599, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'O') goto yy622;
+               if (yych == 'o') goto yy622;
+               goto yy44;
+yy600:
                YYDEBUG(600, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1532 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_STATIC);
-}
-#line 6436 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'O') goto yy623;
+               if (yych == 'o') goto yy623;
+               goto yy44;
 yy601:
                YYDEBUG(601, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'F') goto yy624;
+               if (yych == 'f') goto yy624;
+               goto yy44;
+yy602:
                YYDEBUG(602, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1348 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_SWITCH);
-}
-#line 6449 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy626;
+               if (yych == 'e') goto yy626;
+               goto yy44;
 yy603:
                YYDEBUG(603, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(5);
-               yych = *YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy628;
+               if (yych == 'e') goto yy628;
+               goto yy44;
+yy604:
                YYDEBUG(604, *YYCURSOR);
-               if (yych <= 0x1F) {
-                       if (yych <= '\n') {
-                               if (yych <= 0x08) goto yy166;
-                               goto yy603;
-                       } else {
-                               if (yych == '\r') goto yy603;
-                               goto yy166;
-                       }
-               } else {
-                       if (yych <= 'F') {
-                               if (yych <= ' ') goto yy603;
-                               if (yych <= 'E') goto yy166;
-                               goto yy654;
-                       } else {
-                               if (yych == 'f') goto yy654;
-                               goto yy166;
-                       }
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'D') goto yy630;
+               if (yych == 'd') goto yy630;
+               goto yy44;
 yy605:
                YYDEBUG(605, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy655;
-               if (yych == 's') goto yy655;
-               goto yy128;
+               if (yych == 'O') goto yy632;
+               if (yych == 'o') goto yy632;
+               goto yy44;
 yy606:
                YYDEBUG(606, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '_') goto yy656;
-               goto yy128;
+               if (yych == 'O') goto yy633;
+               if (yych == 'o') goto yy633;
+               goto yy82;
 yy607:
                YYDEBUG(607, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '_') goto yy658;
-               goto yy128;
+               if (yych == '_') goto yy634;
+               goto yy44;
 yy608:
                YYDEBUG(608, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy659;
-               if (yych == 't') goto yy659;
-               goto yy128;
-yy609:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(609, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '_') goto yy660;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1915 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_FILE);
+}
+#line 6161 "Zend/zend_language_scanner.c"
 yy610:
                YYDEBUG(610, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '_') goto yy661;
-               goto yy128;
+               if (yych == 'O') goto yy636;
+               if (yych == 'o') goto yy636;
+               goto yy44;
 yy611:
                YYDEBUG(611, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy662;
-               if (yych == 'o') goto yy662;
-               goto yy128;
+               if (yych == 'O') goto yy637;
+               if (yych == 'o') goto yy637;
+               goto yy44;
 yy612:
                YYDEBUG(612, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'S') goto yy663;
-               if (yych == 's') goto yy663;
-               goto yy128;
-yy613:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(613, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'T') goto yy664;
-               if (yych == 't') goto yy664;
-               goto yy128;
-yy614:
-               YYDEBUG(614, *YYCURSOR);
-               ++YYCURSOR;
-               YYDEBUG(615, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1468 "Zend/zend_language_scanner.l"
+#line 1911 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_ARRAY_CAST);
+       RETURN_TOKEN(T_LINE);
 }
-#line 6533 "Zend/zend_language_scanner.c"
+#line 6186 "Zend/zend_language_scanner.c"
+yy614:
+               YYDEBUG(614, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == '_') goto yy638;
+               goto yy44;
+yy615:
+               YYDEBUG(615, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'A') goto yy639;
+               if (yych == 'a') goto yy639;
+               goto yy44;
 yy616:
                YYDEBUG(616, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(1);
-               yych = *YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == '_') goto yy640;
+               goto yy44;
+yy617:
                YYDEBUG(617, *YYCURSOR);
-               if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy616;
-                       goto yy166;
-               } else {
-                       if (yych <= ' ') goto yy616;
-                       if (yych == ')') goto yy665;
-                       goto yy166;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy642;
+               if (yych == 'e') goto yy642;
+               goto yy44;
 yy618:
                YYDEBUG(618, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy554;
-               if (yych == 'n') goto yy554;
-               goto yy166;
+               if (yych == 'H') goto yy644;
+               if (yych == 'h') goto yy644;
+               goto yy44;
 yy619:
                YYDEBUG(619, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy466;
-               if (yych == 'r') goto yy466;
-               goto yy166;
-yy620:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(620, *YYCURSOR);
-               ++YYCURSOR;
-               YYFILL(1);
-               yych = *YYCURSOR;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1373 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_ENDSWITCH);
+}
+#line 6227 "Zend/zend_language_scanner.c"
+yy621:
                YYDEBUG(621, *YYCURSOR);
-               if (yych <= 0x1F) {
-                       if (yych == '\t') goto yy620;
-                       goto yy166;
-               } else {
-                       if (yych <= ' ') goto yy620;
-                       if (yych == ')') goto yy667;
-                       goto yy166;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'S') goto yy646;
+               if (yych == 's') goto yy646;
+               goto yy44;
 yy622:
                YYDEBUG(622, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yych == 'N') goto yy648;
+               if (yych == 'n') goto yy648;
+               goto yy44;
+yy623:
                YYDEBUG(623, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1480 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_UNSET_CAST);
-}
-#line 6583 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == 'F') goto yy649;
+               if (yych == 'f') goto yy649;
+               goto yy44;
 yy624:
                YYDEBUG(624, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'T') goto yy669;
-               if (yych == 't') goto yy669;
-               goto yy128;
-yy625:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(625, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy671;
-               if (yych == 'e') goto yy671;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1533 "Zend/zend_language_scanner.l"
+               {
+    RETURN_TOKEN(T_INSTEADOF);
+}
+#line 6258 "Zend/zend_language_scanner.c"
 yy626:
                YYDEBUG(626, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy673;
-               if (yych == 'e') goto yy673;
-               goto yy128;
-yy627:
-               YYDEBUG(627, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
-               YYDEBUG(628, *YYCURSOR);
+               YYDEBUG(627, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1332 "Zend/zend_language_scanner.l"
+#line 1409 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_DECLARE);
+       RETURN_TOKEN(T_INTERFACE);
 }
-#line 6614 "Zend/zend_language_scanner.c"
-yy629:
-               YYDEBUG(629, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+#line 6271 "Zend/zend_language_scanner.c"
+yy628:
+               YYDEBUG(628, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
-               YYDEBUG(630, *YYCURSOR);
+               YYDEBUG(629, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1360 "Zend/zend_language_scanner.l"
+#line 1525 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_DEFAULT);
+       RETURN_TOKEN(T_NAMESPACE);
 }
-#line 6627 "Zend/zend_language_scanner.c"
-yy631:
-               YYDEBUG(631, *YYCURSOR);
+#line 6284 "Zend/zend_language_scanner.c"
+yy630:
+               YYDEBUG(630, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy675;
-               if (yych == 'a') goto yy675;
-               goto yy128;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
+               YYDEBUG(631, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1569 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_PROTECTED);
+}
+#line 6297 "Zend/zend_language_scanner.c"
 yy632:
                YYDEBUG(632, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy676;
-               if (yych == 'a') goto yy676;
-               goto yy128;
+               if (yych == 'N') goto yy651;
+               if (yych == 'n') goto yy651;
+               goto yy44;
 yy633:
                YYDEBUG(633, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy677;
-               if (yych == 'c') goto yy677;
-               goto yy128;
+               if (yych == 'M') goto yy652;
+               if (yych == 'm') goto yy652;
+               goto yy82;
 yy634:
                YYDEBUG(634, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy678;
-               if (yych == 'e') goto yy678;
-               goto yy128;
-yy635:
-               YYDEBUG(635, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
-               YYDEBUG(636, *YYCURSOR);
+               YYDEBUG(635, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1396 "Zend/zend_language_scanner.l"
+#line 1895 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_EXTENDS);
+       RETURN_TOKEN(T_CLASS_C);
 }
-#line 6664 "Zend/zend_language_scanner.c"
+#line 6322 "Zend/zend_language_scanner.c"
+yy636:
+               YYDEBUG(636, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'N') goto yy653;
+               if (yych == 'n') goto yy653;
+               goto yy44;
 yy637:
                YYDEBUG(637, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'M') goto yy654;
+               if (yych == 'm') goto yy654;
+               goto yy44;
+yy638:
                YYDEBUG(638, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1280 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_FINALLY);
-}
-#line 6677 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == '_') goto yy655;
+               goto yy44;
 yy639:
                YYDEBUG(639, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'C') goto yy657;
+               if (yych == 'c') goto yy657;
+               goto yy44;
+yy640:
                YYDEBUG(640, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
+               YYDEBUG(641, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1324 "Zend/zend_language_scanner.l"
+#line 1899 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_FOREACH);
+       RETURN_TOKEN(T_TRAIT_C);
 }
-#line 6690 "Zend/zend_language_scanner.c"
-yy641:
-               YYDEBUG(641, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'N') goto yy680;
-               if (yych == 'n') goto yy680;
-               goto yy128;
+#line 6358 "Zend/zend_language_scanner.c"
 yy642:
                YYDEBUG(642, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy682;
-               if (yych == 'n') goto yy682;
-               goto yy128;
-yy643:
-               YYDEBUG(643, *YYCURSOR);
-               ++YYCURSOR;
-               if ((yych = *YYCURSOR) <= '^') {
-                       if (yych <= '9') {
-                               if (yych >= '0') goto yy127;
-                       } else {
-                               if (yych <= '@') goto yy644;
-                               if (yych <= 'Z') goto yy127;
-                       }
-               } else {
-                       if (yych <= '`') {
-                               if (yych <= '_') goto yy683;
-                       } else {
-                               if (yych <= 'z') goto yy127;
-                               if (yych >= 0x80) goto yy127;
-                       }
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
+               YYDEBUG(643, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1357 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_ENDDECLARE);
+}
+#line 6371 "Zend/zend_language_scanner.c"
 yy644:
                YYDEBUG(644, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
+               YYDEBUG(645, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1488 "Zend/zend_language_scanner.l"
+#line 1349 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_INCLUDE);
+       RETURN_TOKEN(T_ENDFOREACH);
 }
-#line 6728 "Zend/zend_language_scanner.c"
-yy645:
-               YYDEBUG(645, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy684;
-               if (yych == 'e') goto yy684;
-               goto yy128;
+#line 6384 "Zend/zend_language_scanner.c"
 yy646:
                YYDEBUG(646, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'O') goto yy685;
-               if (yych == 'o') goto yy685;
-               goto yy128;
-yy647:
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(647, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'C') goto yy686;
-               if (yych == 'c') goto yy686;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1421 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_IMPLEMENTS);
+}
+#line 6397 "Zend/zend_language_scanner.c"
 yy648:
                YYDEBUG(648, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy687;
-               if (yych == 'c') goto yy687;
-               goto yy128;
+               if (yych == 'C') goto yy658;
+               if (yych == 'c') goto yy658;
+               goto yy44;
 yy649:
                YYDEBUG(649, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
                YYDEBUG(650, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1544 "Zend/zend_language_scanner.l"
+#line 1361 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_PRIVATE);
+       RETURN_TOKEN(T_INSTANCEOF);
 }
-#line 6765 "Zend/zend_language_scanner.c"
+#line 6416 "Zend/zend_language_scanner.c"
 yy651:
                YYDEBUG(651, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy688;
-               if (yych == 'e') goto yy688;
-               goto yy128;
+               if (yych == 'C') goto yy659;
+               if (yych == 'c') goto yy659;
+               goto yy44;
 yy652:
                YYDEBUG(652, *YYCURSOR);
-               ++YYCURSOR;
-               if ((yych = *YYCURSOR) <= '^') {
+               yych = *++YYCURSOR;
+               if (yych <= '^') {
                        if (yych <= '9') {
-                               if (yych >= '0') goto yy127;
+                               if (yych <= '/') goto yy660;
+                               goto yy82;
                        } else {
-                               if (yych <= '@') goto yy653;
-                               if (yych <= 'Z') goto yy127;
+                               if (yych <= '@') goto yy660;
+                               if (yych <= 'Z') goto yy82;
+                               goto yy660;
                        }
                } else {
                        if (yych <= '`') {
-                               if (yych <= '_') goto yy689;
+                               if (yych <= '_') goto yy82;
+                               goto yy660;
                        } else {
-                               if (yych <= 'z') goto yy127;
-                               if (yych >= 0x80) goto yy127;
+                               if (yych <= 'z') goto yy82;
+                               if (yych <= 0x7F) goto yy660;
+                               goto yy82;
                        }
                }
 yy653:
                YYDEBUG(653, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1496 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_REQUIRE);
-}
-#line 6797 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == '_') goto yy662;
+               goto yy44;
 yy654:
                YYDEBUG(654, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'R') goto yy690;
-               if (yych == 'r') goto yy690;
-               goto yy166;
+               if (yych == 'P') goto yy663;
+               if (yych == 'p') goto yy663;
+               goto yy44;
 yy655:
                YYDEBUG(655, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '_') goto yy691;
-               goto yy128;
-yy656:
-               YYDEBUG(656, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
-               YYDEBUG(657, *YYCURSOR);
+               YYDEBUG(656, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1898 "Zend/zend_language_scanner.l"
+#line 1907 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_DIR);
+       RETURN_TOKEN(T_METHOD_C);
 }
-#line 6821 "Zend/zend_language_scanner.c"
+#line 6468 "Zend/zend_language_scanner.c"
+yy657:
+               YYDEBUG(657, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy664;
+               if (yych == 'e') goto yy664;
+               goto yy44;
 yy658:
                YYDEBUG(658, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '_') goto yy692;
-               goto yy128;
+               if (yych == 'E') goto yy665;
+               if (yych == 'e') goto yy665;
+               goto yy44;
 yy659:
                YYDEBUG(659, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'I') goto yy694;
-               if (yych == 'i') goto yy694;
-               goto yy128;
+               if (yych == 'E') goto yy667;
+               if (yych == 'e') goto yy667;
+               goto yy44;
 yy660:
                YYDEBUG(660, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'C') goto yy695;
-               if (yych == 'c') goto yy695;
-               goto yy128;
-yy661:
+               ++YYCURSOR;
                YYDEBUG(661, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '_') goto yy696;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1283 "Zend/zend_language_scanner.l"
+               {
+       yyless(yyleng - 1);
+       HANDLE_NEWLINES(yytext, yyleng);
+       RETURN_TOKEN(T_YIELD_FROM);
+}
+#line 6498 "Zend/zend_language_scanner.c"
 yy662:
                YYDEBUG(662, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'D') goto yy698;
-               if (yych == 'd') goto yy698;
-               goto yy128;
+               if (yych == '_') goto yy669;
+               goto yy44;
 yy663:
                YYDEBUG(663, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'P') goto yy699;
-               if (yych == 'p') goto yy699;
-               goto yy128;
+               if (yych == 'I') goto yy671;
+               if (yych == 'i') goto yy671;
+               goto yy44;
 yy664:
                YYDEBUG(664, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '_') goto yy700;
-               goto yy128;
+               if (yych == '_') goto yy672;
+               goto yy44;
 yy665:
                YYDEBUG(665, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(666, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1464 "Zend/zend_language_scanner.l"
+#line 1513 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_STRING_CAST);
+       RETURN_TOKEN(T_INCLUDE_ONCE);
 }
-#line 6870 "Zend/zend_language_scanner.c"
+#line 6527 "Zend/zend_language_scanner.c"
 yy667:
                YYDEBUG(667, *YYCURSOR);
-               ++YYCURSOR;
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
                YYDEBUG(668, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1472 "Zend/zend_language_scanner.l"
+#line 1521 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_OBJECT_CAST);
+       RETURN_TOKEN(T_REQUIRE_ONCE);
 }
-#line 6880 "Zend/zend_language_scanner.c"
+#line 6540 "Zend/zend_language_scanner.c"
 yy669:
                YYDEBUG(669, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
                YYDEBUG(670, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1536 "Zend/zend_language_scanner.l"
+#line 1903 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_ABSTRACT);
+       RETURN_TOKEN(T_FUNC_C);
 }
-#line 6893 "Zend/zend_language_scanner.c"
+#line 6553 "Zend/zend_language_scanner.c"
 yy671:
                YYDEBUG(671, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'L') goto yy673;
+               if (yych == 'l') goto yy673;
+               goto yy44;
+yy672:
                YYDEBUG(672, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1572 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_CALLABLE);
-}
-#line 6906 "Zend/zend_language_scanner.c"
+               yych = *++YYCURSOR;
+               if (yych == '_') goto yy674;
+               goto yy44;
 yy673:
                YYDEBUG(673, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               yych = *++YYCURSOR;
+               if (yych == 'E') goto yy676;
+               if (yych == 'e') goto yy676;
+               goto yy44;
+yy674:
                YYDEBUG(674, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
+               }
+               YYDEBUG(675, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1368 "Zend/zend_language_scanner.l"
+#line 1923 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_CONTINUE);
+       RETURN_TOKEN(T_NS_C);
 }
-#line 6919 "Zend/zend_language_scanner.c"
-yy675:
-               YYDEBUG(675, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'R') goto yy701;
-               if (yych == 'r') goto yy701;
-               goto yy128;
+#line 6583 "Zend/zend_language_scanner.c"
 yy676:
                YYDEBUG(676, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'C') goto yy702;
-               if (yych == 'c') goto yy702;
-               goto yy128;
+               if (yych == 'R') goto yy677;
+               if (yych != 'r') goto yy44;
 yy677:
                YYDEBUG(677, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'H') goto yy703;
-               if (yych == 'h') goto yy703;
-               goto yy128;
-yy678:
-               YYDEBUG(678, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               if (yybm[0+yych] & 16) {
+                       goto yy43;
                }
-               YYDEBUG(679, *YYCURSOR);
+               YYDEBUG(678, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1308 "Zend/zend_language_scanner.l"
+#line 1549 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_ENDWHILE);
+       RETURN_TOKEN(T_HALT_COMPILER);
 }
-#line 6950 "Zend/zend_language_scanner.c"
-yy680:
-               YYDEBUG(680, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+#line 6601 "Zend/zend_language_scanner.c"
+       }
+/* *********************************** */
+yyc_ST_LOOKING_FOR_PROPERTY:
+       {
+               static const unsigned char yybm[] = {
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                         0,  64,  64,   0,   0,  64,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                        64,   0,   0,   0,   0,   0,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128,   0,   0,   0,   0,   0,   0, 
+                         0, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128,   0,   0,   0,   0, 128, 
+                         0, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128,   0,   0,   0,   0,   0, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+               };
+               YYDEBUG(679, *YYCURSOR);
+               YYFILL(2);
+               yych = *YYCURSOR;
+               if (yybm[0+yych] & 64) {
+                       goto yy683;
+               }
+               if (yych <= '^') {
+                       if (yych <= '-') {
+                               if (yych >= '-') goto yy686;
+                       } else {
+                               if (yych <= '@') goto yy681;
+                               if (yych <= 'Z') goto yy687;
+                       }
+               } else {
+                       if (yych <= '`') {
+                               if (yych <= '_') goto yy687;
+                       } else {
+                               if (yych <= 'z') goto yy687;
+                               if (yych >= 0x80) goto yy687;
+                       }
                }
+yy681:
                YYDEBUG(681, *YYCURSOR);
+               ++YYCURSOR;
+yy682:
+               YYDEBUG(682, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1250 "Zend/zend_language_scanner.l"
+#line 1443 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_FUNCTION);
+       yyless(0);
+       yy_pop_state();
+       goto restart;
 }
-#line 6963 "Zend/zend_language_scanner.c"
-yy682:
-               YYDEBUG(682, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'T') goto yy705;
-               if (yych == 't') goto yy705;
-               goto yy128;
+#line 6673 "Zend/zend_language_scanner.c"
 yy683:
                YYDEBUG(683, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'O') goto yy706;
-               if (yych == 'o') goto yy706;
-               goto yy128;
-yy684:
+               ++YYCURSOR;
+               YYFILL(1);
+               yych = *YYCURSOR;
                YYDEBUG(684, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'O') goto yy707;
-               if (yych == 'o') goto yy707;
-               goto yy128;
-yy685:
+               if (yybm[0+yych] & 64) {
+                       goto yy683;
+               }
                YYDEBUG(685, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'F') goto yy708;
-               if (yych == 'f') goto yy708;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1430 "Zend/zend_language_scanner.l"
+               {
+       goto return_whitespace;
+}
+#line 6689 "Zend/zend_language_scanner.c"
 yy686:
                YYDEBUG(686, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'E') goto yy710;
-               if (yych == 'e') goto yy710;
-               goto yy128;
+               if (yych == '>') goto yy690;
+               goto yy682;
 yy687:
                YYDEBUG(687, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy712;
-               if (yych == 'e') goto yy712;
-               goto yy128;
-yy688:
+               ++YYCURSOR;
+               YYFILL(1);
+               yych = *YYCURSOR;
                YYDEBUG(688, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'D') goto yy714;
-               if (yych == 'd') goto yy714;
-               goto yy128;
-yy689:
+               if (yybm[0+yych] & 128) {
+                       goto yy687;
+               }
                YYDEBUG(689, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'O') goto yy716;
-               if (yych == 'o') goto yy716;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1438 "Zend/zend_language_scanner.l"
+               {
+       yy_pop_state();
+       RETURN_TOKEN_WITH_STR(T_STRING, 0);
+}
+#line 6711 "Zend/zend_language_scanner.c"
 yy690:
                YYDEBUG(690, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'O') goto yy717;
-               if (yych == 'o') goto yy717;
-               goto yy166;
-yy691:
+               ++YYCURSOR;
                YYDEBUG(691, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '_') goto yy718;
-               goto yy128;
-yy692:
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 1434 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN(T_OBJECT_OPERATOR);
+}
+#line 6721 "Zend/zend_language_scanner.c"
+       }
+/* *********************************** */
+yyc_ST_BACKQUOTE:
+       {
+               static const unsigned char yybm[] = {
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128,   0,   0,   0,   0,   0,   0, 
+                         0, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128,   0,   0,   0,   0, 128, 
+                         0, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128,   0,   0,   0,   0,   0, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+               };
                YYDEBUG(692, *YYCURSOR);
+               YYFILL(2);
+               yych = *YYCURSOR;
+               if (yych <= '_') {
+                       if (yych == '$') goto yy696;
+               } else {
+                       if (yych <= '`') goto yy697;
+                       if (yych == '{') goto yy699;
+               }
+               YYDEBUG(694, *YYCURSOR);
                ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+yy695:
+               YYDEBUG(695, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 2493 "Zend/zend_language_scanner.l"
+               {
+       if (YYCURSOR > YYLIMIT) {
+               RETURN_TOKEN(END);
+       }
+       if (yytext[0] == '\\' && YYCURSOR < YYLIMIT) {
+               YYCURSOR++;
+       }
+
+       while (YYCURSOR < YYLIMIT) {
+               switch (*YYCURSOR++) {
+                       case '`':
+                               break;
+                       case '$':
+                               if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
+                                       break;
+                               }
+                               continue;
+                       case '{':
+                               if (*YYCURSOR == '$') {
+                                       break;
+                               }
+                               continue;
+                       case '\\':
+                               if (YYCURSOR < YYLIMIT) {
+                                       YYCURSOR++;
+                               }
+                               /* fall through */
+                       default:
+                               continue;
                }
-               YYDEBUG(693, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1894 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_FILE);
+
+               YYCURSOR--;
+               break;
+       }
+
+       yyleng = YYCURSOR - SCNG(yy_text);
+
+       if (EXPECTED(zend_scan_escape_string(zendlval, yytext, yyleng, '`') == SUCCESS)
+        || !PARSER_MODE()) {
+               RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE);
+       } else {
+               RETURN_TOKEN(T_ERROR);
+       }
 }
-#line 7035 "Zend/zend_language_scanner.c"
-yy694:
-               YYDEBUG(694, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'O') goto yy720;
-               if (yych == 'o') goto yy720;
-               goto yy128;
-yy695:
-               YYDEBUG(695, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'O') goto yy721;
-               if (yych == 'o') goto yy721;
-               goto yy128;
+#line 6819 "Zend/zend_language_scanner.c"
 yy696:
                YYDEBUG(696, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               yych = *++YYCURSOR;
+               if (yych <= '_') {
+                       if (yych <= '@') goto yy695;
+                       if (yych <= 'Z') goto yy700;
+                       if (yych <= '^') goto yy695;
+                       goto yy700;
+               } else {
+                       if (yych <= 'z') {
+                               if (yych <= '`') goto yy695;
+                               goto yy700;
+                       } else {
+                               if (yych <= '{') goto yy703;
+                               if (yych <= 0x7F) goto yy695;
+                               goto yy700;
+                       }
                }
+yy697:
                YYDEBUG(697, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(698, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1890 "Zend/zend_language_scanner.l"
+#line 2433 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_LINE);
+       BEGIN(ST_IN_SCRIPTING);
+       RETURN_TOKEN('`');
 }
-#line 7060 "Zend/zend_language_scanner.c"
-yy698:
-               YYDEBUG(698, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '_') goto yy722;
-               goto yy128;
+#line 6848 "Zend/zend_language_scanner.c"
 yy699:
                YYDEBUG(699, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'A') goto yy723;
-               if (yych == 'a') goto yy723;
-               goto yy128;
+               if (yych == '$') goto yy705;
+               goto yy695;
 yy700:
                YYDEBUG(700, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '_') goto yy724;
-               goto yy128;
-yy701:
+               YYMARKER = ++YYCURSOR;
+               YYFILL(3);
+               yych = *YYCURSOR;
                YYDEBUG(701, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy726;
-               if (yych == 'e') goto yy726;
-               goto yy128;
+               if (yybm[0+yych] & 128) {
+                       goto yy700;
+               }
+               if (yych == '-') goto yy707;
+               if (yych <= '@') goto yy702;
+               if (yych <= '[') goto yy709;
 yy702:
                YYDEBUG(702, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'H') goto yy728;
-               if (yych == 'h') goto yy728;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 2024 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
+}
+#line 6873 "Zend/zend_language_scanner.c"
 yy703:
                YYDEBUG(703, *YYCURSOR);
                ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
                YYDEBUG(704, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1352 "Zend/zend_language_scanner.l"
+#line 1724 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_ENDSWITCH);
+       yy_push_state(ST_LOOKING_FOR_VARNAME);
+       RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES);
 }
-#line 7101 "Zend/zend_language_scanner.c"
+#line 6884 "Zend/zend_language_scanner.c"
 yy705:
                YYDEBUG(705, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'S') goto yy730;
-               if (yych == 's') goto yy730;
-               goto yy128;
-yy706:
+               ++YYCURSOR;
                YYDEBUG(706, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'N') goto yy732;
-               if (yych == 'n') goto yy732;
-               goto yy128;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 2421 "Zend/zend_language_scanner.l"
+               {
+       yy_push_state(ST_IN_SCRIPTING);
+       yyless(1);
+       RETURN_TOKEN(T_CURLY_OPEN);
+}
+#line 6896 "Zend/zend_language_scanner.c"
 yy707:
                YYDEBUG(707, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'F') goto yy733;
-               if (yych == 'f') goto yy733;
-               goto yy128;
+               if (yych == '>') goto yy711;
 yy708:
                YYDEBUG(708, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
+               YYCURSOR = YYMARKER;
+               goto yy702;
+yy709:
                YYDEBUG(709, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1512 "Zend/zend_language_scanner.l"
-               {
-    RETURN_TOKEN(T_INSTEADOF);
-}
-#line 7132 "Zend/zend_language_scanner.c"
-yy710:
-               YYDEBUG(710, *YYCURSOR);
                ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
-               YYDEBUG(711, *YYCURSOR);
+               YYDEBUG(710, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1388 "Zend/zend_language_scanner.l"
+#line 2018 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_INTERFACE);
+       yyless(yyleng - 1);
+       yy_push_state(ST_VAR_OFFSET);
+       RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
 }
-#line 7145 "Zend/zend_language_scanner.c"
+#line 6916 "Zend/zend_language_scanner.c"
+yy711:
+               YYDEBUG(711, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych <= '_') {
+                       if (yych <= '@') goto yy708;
+                       if (yych <= 'Z') goto yy712;
+                       if (yych <= '^') goto yy708;
+               } else {
+                       if (yych <= '`') goto yy708;
+                       if (yych <= 'z') goto yy712;
+                       if (yych <= 0x7F) goto yy708;
+               }
 yy712:
                YYDEBUG(712, *YYCURSOR);
                ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
                YYDEBUG(713, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1504 "Zend/zend_language_scanner.l"
+#line 2010 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_NAMESPACE);
+       yyless(yyleng - 3);
+       yy_push_state(ST_LOOKING_FOR_PROPERTY);
+       RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
 }
-#line 7158 "Zend/zend_language_scanner.c"
-yy714:
+#line 6940 "Zend/zend_language_scanner.c"
+       }
+/* *********************************** */
+yyc_ST_DOUBLE_QUOTES:
+       {
+               static const unsigned char yybm[] = {
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128,   0,   0,   0,   0,   0,   0, 
+                         0, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128,   0,   0,   0,   0, 128, 
+                         0, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128,   0,   0,   0,   0,   0, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+               };
                YYDEBUG(714, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               YYFILL(2);
+               yych = *YYCURSOR;
+               if (yych <= '#') {
+                       if (yych == '"') goto yy718;
+               } else {
+                       if (yych <= '$') goto yy720;
+                       if (yych == '{') goto yy721;
                }
-               YYDEBUG(715, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1548 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_PROTECTED);
-}
-#line 7171 "Zend/zend_language_scanner.c"
-yy716:
                YYDEBUG(716, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'N') goto yy735;
-               if (yych == 'n') goto yy735;
-               goto yy128;
+               ++YYCURSOR;
 yy717:
                YYDEBUG(717, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'M') goto yy736;
-               if (yych == 'm') goto yy736;
-               goto yy166;
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 2439 "Zend/zend_language_scanner.l"
+               {
+       if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) {
+               YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1;
+               SET_DOUBLE_QUOTES_SCANNED_LENGTH(0);
+
+               goto double_quotes_scan_done;
+       }
+
+       if (YYCURSOR > YYLIMIT) {
+               RETURN_TOKEN(END);
+       }
+       if (yytext[0] == '\\' && YYCURSOR < YYLIMIT) {
+               YYCURSOR++;
+       }
+
+       while (YYCURSOR < YYLIMIT) {
+               switch (*YYCURSOR++) {
+                       case '"':
+                               break;
+                       case '$':
+                               if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
+                                       break;
+                               }
+                               continue;
+                       case '{':
+                               if (*YYCURSOR == '$') {
+                                       break;
+                               }
+                               continue;
+                       case '\\':
+                               if (YYCURSOR < YYLIMIT) {
+                                       YYCURSOR++;
+                               }
+                               /* fall through */
+                       default:
+                               continue;
+               }
+
+               YYCURSOR--;
+               break;
+       }
+
+double_quotes_scan_done:
+       yyleng = YYCURSOR - SCNG(yy_text);
+
+       if (EXPECTED(zend_scan_escape_string(zendlval, yytext, yyleng, '"') == SUCCESS)
+        || !PARSER_MODE()) {
+               RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE);
+       } else {
+               RETURN_TOKEN(T_ERROR);
+       }
+}
+#line 7046 "Zend/zend_language_scanner.c"
 yy718:
                YYDEBUG(718, *YYCURSOR);
                ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
                YYDEBUG(719, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1874 "Zend/zend_language_scanner.l"
+#line 2428 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_CLASS_C);
+       BEGIN(ST_IN_SCRIPTING);
+       RETURN_TOKEN('"');
 }
-#line 7196 "Zend/zend_language_scanner.c"
+#line 7057 "Zend/zend_language_scanner.c"
 yy720:
                YYDEBUG(720, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'N') goto yy737;
-               if (yych == 'n') goto yy737;
-               goto yy128;
-yy721:
-               YYDEBUG(721, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'M') goto yy738;
-               if (yych == 'm') goto yy738;
-               goto yy128;
-yy722:
-               YYDEBUG(722, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '_') goto yy739;
-               goto yy128;
-yy723:
-               YYDEBUG(723, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'C') goto yy741;
-               if (yych == 'c') goto yy741;
-               goto yy128;
-yy724:
-               YYDEBUG(724, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
-               YYDEBUG(725, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1878 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_TRAIT_C);
-}
-#line 7232 "Zend/zend_language_scanner.c"
-yy726:
-               YYDEBUG(726, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
-               YYDEBUG(727, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1336 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_ENDDECLARE);
-}
-#line 7245 "Zend/zend_language_scanner.c"
-yy728:
-               YYDEBUG(728, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
-               YYDEBUG(729, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1328 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_ENDFOREACH);
-}
-#line 7258 "Zend/zend_language_scanner.c"
-yy730:
-               YYDEBUG(730, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
-               YYDEBUG(731, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1400 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_IMPLEMENTS);
-}
-#line 7271 "Zend/zend_language_scanner.c"
-yy732:
-               YYDEBUG(732, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'C') goto yy742;
-               if (yych == 'c') goto yy742;
-               goto yy128;
-yy733:
-               YYDEBUG(733, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
-               YYDEBUG(734, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1340 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_INSTANCEOF);
-}
-#line 7290 "Zend/zend_language_scanner.c"
-yy735:
-               YYDEBUG(735, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'C') goto yy743;
-               if (yych == 'c') goto yy743;
-               goto yy128;
-yy736:
-               YYDEBUG(736, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych <= '^') {
-                       if (yych <= '9') {
-                               if (yych <= '/') goto yy744;
-                               goto yy166;
-                       } else {
-                               if (yych <= '@') goto yy744;
-                               if (yych <= 'Z') goto yy166;
-                               goto yy744;
-                       }
+               if (yych <= '_') {
+                       if (yych <= '@') goto yy717;
+                       if (yych <= 'Z') goto yy722;
+                       if (yych <= '^') goto yy717;
+                       goto yy722;
                } else {
-                       if (yych <= '`') {
-                               if (yych <= '_') goto yy166;
-                               goto yy744;
+                       if (yych <= 'z') {
+                               if (yych <= '`') goto yy717;
+                               goto yy722;
                        } else {
-                               if (yych <= 'z') goto yy166;
-                               if (yych <= 0x7F) goto yy744;
-                               goto yy166;
+                               if (yych <= '{') goto yy725;
+                               if (yych <= 0x7F) goto yy717;
+                               goto yy722;
                        }
                }
-yy737:
-               YYDEBUG(737, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '_') goto yy746;
-               goto yy128;
-yy738:
-               YYDEBUG(738, *YYCURSOR);
+yy721:
+               YYDEBUG(721, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == 'P') goto yy747;
-               if (yych == 'p') goto yy747;
-               goto yy128;
-yy739:
-               YYDEBUG(739, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+               if (yych == '$') goto yy727;
+               goto yy717;
+yy722:
+               YYDEBUG(722, *YYCURSOR);
+               YYMARKER = ++YYCURSOR;
+               YYFILL(3);
+               yych = *YYCURSOR;
+               YYDEBUG(723, *YYCURSOR);
+               if (yybm[0+yych] & 128) {
+                       goto yy722;
                }
-               YYDEBUG(740, *YYCURSOR);
+               if (yych == '-') goto yy729;
+               if (yych <= '@') goto yy724;
+               if (yych <= '[') goto yy731;
+yy724:
+               YYDEBUG(724, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1886 "Zend/zend_language_scanner.l"
+#line 2024 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_METHOD_C);
+       RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
 }
-#line 7342 "Zend/zend_language_scanner.c"
-yy741:
-               YYDEBUG(741, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy748;
-               if (yych == 'e') goto yy748;
-               goto yy128;
-yy742:
-               YYDEBUG(742, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy749;
-               if (yych == 'e') goto yy749;
-               goto yy128;
-yy743:
-               YYDEBUG(743, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy751;
-               if (yych == 'e') goto yy751;
-               goto yy128;
-yy744:
-               YYDEBUG(744, *YYCURSOR);
+#line 7100 "Zend/zend_language_scanner.c"
+yy725:
+               YYDEBUG(725, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(745, *YYCURSOR);
+               YYDEBUG(726, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1262 "Zend/zend_language_scanner.l"
+#line 1724 "Zend/zend_language_scanner.l"
                {
-       yyless(yyleng - 1);
-       HANDLE_NEWLINES(yytext, yyleng);
-       RETURN_TOKEN(T_YIELD_FROM);
+       yy_push_state(ST_LOOKING_FOR_VARNAME);
+       RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES);
 }
-#line 7372 "Zend/zend_language_scanner.c"
-yy746:
-               YYDEBUG(746, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '_') goto yy753;
-               goto yy128;
-yy747:
-               YYDEBUG(747, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'I') goto yy755;
-               if (yych == 'i') goto yy755;
-               goto yy128;
-yy748:
-               YYDEBUG(748, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '_') goto yy756;
-               goto yy128;
-yy749:
-               YYDEBUG(749, *YYCURSOR);
+#line 7111 "Zend/zend_language_scanner.c"
+yy727:
+               YYDEBUG(727, *YYCURSOR);
                ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
-               YYDEBUG(750, *YYCURSOR);
+               YYDEBUG(728, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1492 "Zend/zend_language_scanner.l"
+#line 2421 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_INCLUDE_ONCE);
+       yy_push_state(ST_IN_SCRIPTING);
+       yyless(1);
+       RETURN_TOKEN(T_CURLY_OPEN);
 }
-#line 7401 "Zend/zend_language_scanner.c"
-yy751:
-               YYDEBUG(751, *YYCURSOR);
+#line 7123 "Zend/zend_language_scanner.c"
+yy729:
+               YYDEBUG(729, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == '>') goto yy733;
+yy730:
+               YYDEBUG(730, *YYCURSOR);
+               YYCURSOR = YYMARKER;
+               goto yy724;
+yy731:
+               YYDEBUG(731, *YYCURSOR);
                ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
-               YYDEBUG(752, *YYCURSOR);
+               YYDEBUG(732, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1500 "Zend/zend_language_scanner.l"
+#line 2018 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_REQUIRE_ONCE);
+       yyless(yyleng - 1);
+       yy_push_state(ST_VAR_OFFSET);
+       RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
 }
-#line 7414 "Zend/zend_language_scanner.c"
-yy753:
-               YYDEBUG(753, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+#line 7143 "Zend/zend_language_scanner.c"
+yy733:
+               YYDEBUG(733, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych <= '_') {
+                       if (yych <= '@') goto yy730;
+                       if (yych <= 'Z') goto yy734;
+                       if (yych <= '^') goto yy730;
+               } else {
+                       if (yych <= '`') goto yy730;
+                       if (yych <= 'z') goto yy734;
+                       if (yych <= 0x7F) goto yy730;
                }
-               YYDEBUG(754, *YYCURSOR);
+yy734:
+               YYDEBUG(734, *YYCURSOR);
+               ++YYCURSOR;
+               YYDEBUG(735, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1882 "Zend/zend_language_scanner.l"
+#line 2010 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_FUNC_C);
+       yyless(yyleng - 3);
+       yy_push_state(ST_LOOKING_FOR_PROPERTY);
+       RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
 }
-#line 7427 "Zend/zend_language_scanner.c"
-yy755:
-               YYDEBUG(755, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'L') goto yy757;
-               if (yych == 'l') goto yy757;
-               goto yy128;
-yy756:
-               YYDEBUG(756, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == '_') goto yy758;
-               goto yy128;
-yy757:
-               YYDEBUG(757, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'E') goto yy760;
-               if (yych == 'e') goto yy760;
-               goto yy128;
-yy758:
-               YYDEBUG(758, *YYCURSOR);
+#line 7167 "Zend/zend_language_scanner.c"
+       }
+/* *********************************** */
+yyc_ST_HEREDOC:
+       {
+               static const unsigned char yybm[] = {
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                         0,   0,   0,   0,   0,   0,   0,   0, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128,   0,   0,   0,   0,   0,   0, 
+                         0, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128,   0,   0,   0,   0, 128, 
+                         0, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128,   0,   0,   0,   0,   0, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+                       128, 128, 128, 128, 128, 128, 128, 128, 
+               };
+               YYDEBUG(736, *YYCURSOR);
+               YYFILL(2);
+               yych = *YYCURSOR;
+               if (yych == '$') goto yy740;
+               if (yych == '{') goto yy741;
+               YYDEBUG(738, *YYCURSOR);
                ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
-               }
-               YYDEBUG(759, *YYCURSOR);
+yy739:
+               YYDEBUG(739, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1902 "Zend/zend_language_scanner.l"
+#line 2539 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_NS_C);
-}
-#line 7457 "Zend/zend_language_scanner.c"
-yy760:
-               YYDEBUG(760, *YYCURSOR);
-               yych = *++YYCURSOR;
-               if (yych == 'R') goto yy761;
-               if (yych != 'r') goto yy128;
-yy761:
-               YYDEBUG(761, *YYCURSOR);
-               ++YYCURSOR;
-               if (yybm[0+(yych = *YYCURSOR)] & 16) {
-                       goto yy127;
+       zend_heredoc_label *heredoc_label = zend_ptr_stack_top(&SCNG(heredoc_label_stack));
+       int newline = 0, indentation = 0, spacing = 0;
+
+       if (YYCURSOR > YYLIMIT) {
+               RETURN_TOKEN(END);
+       }
+
+       YYCURSOR--;
+
+       while (YYCURSOR < YYLIMIT) {
+               switch (*YYCURSOR++) {
+                       case '\r':
+                               if (*YYCURSOR == '\n') {
+                                       YYCURSOR++;
+                               }
+                               /* fall through */
+                       case '\n':
+                               indentation = spacing = 0;
+
+                               while (YYCURSOR < YYLIMIT && (*YYCURSOR == ' ' || *YYCURSOR == '\t')) {
+                                       if (*YYCURSOR == '\t') {
+                                               spacing |= HEREDOC_USING_TABS;
+                                       } else {
+                                               spacing |= HEREDOC_USING_SPACES;
+                                       }
+                                       ++YYCURSOR;
+                                       ++indentation;
+                               }
+
+                               if (YYCURSOR == YYLIMIT) {
+                                       yyleng = YYCURSOR - SCNG(yy_text);
+                                       HANDLE_NEWLINES(yytext, yyleng);
+                                       ZVAL_NULL(zendlval);
+                                       RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE);
+                               }
+
+                               /* Check for ending label on the next line */
+                               if (IS_LABEL_START(*YYCURSOR) && heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, heredoc_label->label, heredoc_label->length)) {
+                                       if (IS_LABEL_START(YYCURSOR[heredoc_label->length])) {
+                                               continue;
+                                       }
+
+                                       if (spacing == (HEREDOC_USING_SPACES | HEREDOC_USING_TABS)) {
+                                               zend_throw_exception(zend_ce_parse_error, "Invalid indentation - tabs and spaces cannot be mixed", 0);
+                                       }
+
+                                       /* newline before label will be subtracted from returned text, but
+                                        * yyleng/yytext will include it, for zend_highlight/strip, tokenizer, etc. */
+                                       if (YYCURSOR[-indentation - 2] == '\r' && YYCURSOR[-indentation - 1] == '\n') {
+                                               newline = 2; /* Windows newline */
+                                       } else {
+                                               newline = 1;
+                                       }
+
+                                       CG(increment_lineno) = 1; /* For newline before label */
+
+                                       if (SCNG(heredoc_scan_ahead)) {
+                                               SCNG(heredoc_indentation) = indentation;
+                                               SCNG(heredoc_indentation_uses_spaces) = (spacing == HEREDOC_USING_SPACES);
+                                       } else {
+                                               YYCURSOR -= indentation;
+                                       }
+
+                                       BEGIN(ST_END_HEREDOC);
+
+                                       goto heredoc_scan_done;
+                               }
+                               continue;
+                       case '$':
+                               if (IS_LABEL_START(*YYCURSOR) || *YYCURSOR == '{') {
+                                       break;
+                               }
+                               continue;
+                       case '{':
+                               if (*YYCURSOR == '$') {
+                                       break;
+                               }
+                               continue;
+                       case '\\':
+                               if (YYCURSOR < YYLIMIT && *YYCURSOR != '\n' && *YYCURSOR != '\r') {
+                                       YYCURSOR++;
+                               }
+                               /* fall through */
+                       default:
+                               continue;
+               }
+
+               YYCURSOR--;
+               break;
+       }
+
+heredoc_scan_done:
+
+       yyleng = YYCURSOR - SCNG(yy_text);
+       ZVAL_STRINGL(zendlval, yytext, yyleng - newline);
+
+       if (!SCNG(heredoc_scan_ahead) && !EG(exception) && PARSER_MODE()) {
+               zend_bool newline_at_start = *(yytext - 1) == '\n' || *(yytext - 1) == '\r';
+               zend_string *copy = Z_STR_P(zendlval);
+
+               if (!strip_multiline_string_indentation(
+                               zendlval, heredoc_label->indentation, heredoc_label->indentation_uses_spaces,
+                               newline_at_start, newline != 0)) {
+                       RETURN_TOKEN(T_ERROR);
+               }
+
+               if (UNEXPECTED(zend_scan_escape_string(zendlval, ZSTR_VAL(copy), ZSTR_LEN(copy), 0) != SUCCESS)) {
+                       zend_string_efree(copy);
+                       RETURN_TOKEN(T_ERROR);
                }
-               YYDEBUG(762, *YYCURSOR);
-               yyleng = YYCURSOR - SCNG(yy_text);
-#line 1528 "Zend/zend_language_scanner.l"
-               {
-       RETURN_TOKEN(T_HALT_COMPILER);
-}
-#line 7475 "Zend/zend_language_scanner.c"
+
+               zend_string_efree(copy);
+       } else {
+               HANDLE_NEWLINES(yytext, yyleng - newline);
        }
-/* *********************************** */
-yyc_ST_LOOKING_FOR_PROPERTY:
-       {
-               static const unsigned char yybm[] = {
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,  64,  64,   0,   0,  64,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                        64,   0,   0,   0,   0,   0,   0,   0, 
-                         0,   0,   0,   0,   0,   0,   0,   0, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128,   0,   0,   0,   0,   0,   0, 
-                         0, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128,   0,   0,   0,   0, 128, 
-                         0, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128,   0,   0,   0,   0,   0, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-                       128, 128, 128, 128, 128, 128, 128, 128, 
-               };
-               YYDEBUG(763, *YYCURSOR);
-               YYFILL(2);
-               yych = *YYCURSOR;
-               if (yybm[0+yych] & 64) {
-                       goto yy767;
-               }
-               if (yych <= '^') {
-                       if (yych <= '-') {
-                               if (yych >= '-') goto yy770;
-                       } else {
-                               if (yych <= '@') goto yy765;
-                               if (yych <= 'Z') goto yy771;
-                       }
+
+       RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE);
+}
+#line 7336 "Zend/zend_language_scanner.c"
+yy740:
+               YYDEBUG(740, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych <= '_') {
+                       if (yych <= '@') goto yy739;
+                       if (yych <= 'Z') goto yy742;
+                       if (yych <= '^') goto yy739;
+                       goto yy742;
                } else {
-                       if (yych <= '`') {
-                               if (yych <= '_') goto yy771;
+                       if (yych <= 'z') {
+                               if (yych <= '`') goto yy739;
+                               goto yy742;
                        } else {
-                               if (yych <= 'z') goto yy771;
-                               if (yych >= 0x80) goto yy771;
+                               if (yych <= '{') goto yy745;
+                               if (yych <= 0x7F) goto yy739;
+                               goto yy742;
                        }
                }
-yy765:
-               YYDEBUG(765, *YYCURSOR);
+yy741:
+               YYDEBUG(741, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych == '$') goto yy747;
+               goto yy739;
+yy742:
+               YYDEBUG(742, *YYCURSOR);
+               YYMARKER = ++YYCURSOR;
+               YYFILL(3);
+               yych = *YYCURSOR;
+               YYDEBUG(743, *YYCURSOR);
+               if (yybm[0+yych] & 128) {
+                       goto yy742;
+               }
+               if (yych == '-') goto yy749;
+               if (yych <= '@') goto yy744;
+               if (yych <= '[') goto yy751;
+yy744:
+               YYDEBUG(744, *YYCURSOR);
+               yyleng = YYCURSOR - SCNG(yy_text);
+#line 2024 "Zend/zend_language_scanner.l"
+               {
+       RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
+}
+#line 7379 "Zend/zend_language_scanner.c"
+yy745:
+               YYDEBUG(745, *YYCURSOR);
                ++YYCURSOR;
-yy766:
-               YYDEBUG(766, *YYCURSOR);
+               YYDEBUG(746, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1422 "Zend/zend_language_scanner.l"
+#line 1724 "Zend/zend_language_scanner.l"
                {
-       yyless(0);
-       yy_pop_state();
-       goto restart;
+       yy_push_state(ST_LOOKING_FOR_VARNAME);
+       RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES);
 }
-#line 7547 "Zend/zend_language_scanner.c"
-yy767:
-               YYDEBUG(767, *YYCURSOR);
+#line 7390 "Zend/zend_language_scanner.c"
+yy747:
+               YYDEBUG(747, *YYCURSOR);
                ++YYCURSOR;
-               YYFILL(1);
-               yych = *YYCURSOR;
-               YYDEBUG(768, *YYCURSOR);
-               if (yybm[0+yych] & 64) {
-                       goto yy767;
-               }
-               YYDEBUG(769, *YYCURSOR);
+               YYDEBUG(748, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1409 "Zend/zend_language_scanner.l"
+#line 2421 "Zend/zend_language_scanner.l"
                {
-       goto return_whitespace;
+       yy_push_state(ST_IN_SCRIPTING);
+       yyless(1);
+       RETURN_TOKEN(T_CURLY_OPEN);
 }
-#line 7563 "Zend/zend_language_scanner.c"
-yy770:
-               YYDEBUG(770, *YYCURSOR);
+#line 7402 "Zend/zend_language_scanner.c"
+yy749:
+               YYDEBUG(749, *YYCURSOR);
                yych = *++YYCURSOR;
-               if (yych == '>') goto yy774;
-               goto yy766;
-yy771:
-               YYDEBUG(771, *YYCURSOR);
+               if (yych == '>') goto yy753;
+yy750:
+               YYDEBUG(750, *YYCURSOR);
+               YYCURSOR = YYMARKER;
+               goto yy744;
+yy751:
+               YYDEBUG(751, *YYCURSOR);
                ++YYCURSOR;
-               YYFILL(1);
-               yych = *YYCURSOR;
-               YYDEBUG(772, *YYCURSOR);
-               if (yybm[0+yych] & 128) {
-                       goto yy771;
-               }
-               YYDEBUG(773, *YYCURSOR);
+               YYDEBUG(752, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1417 "Zend/zend_language_scanner.l"
+#line 2018 "Zend/zend_language_scanner.l"
                {
-       yy_pop_state();
-       RETURN_TOKEN_WITH_STR(T_STRING, 0);
+       yyless(yyleng - 1);
+       yy_push_state(ST_VAR_OFFSET);
+       RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
 }
-#line 7585 "Zend/zend_language_scanner.c"
-yy774:
-               YYDEBUG(774, *YYCURSOR);
+#line 7422 "Zend/zend_language_scanner.c"
+yy753:
+               YYDEBUG(753, *YYCURSOR);
+               yych = *++YYCURSOR;
+               if (yych <= '_') {
+                       if (yych <= '@') goto yy750;
+                       if (yych <= 'Z') goto yy754;
+                       if (yych <= '^') goto yy750;
+               } else {
+                       if (yych <= '`') goto yy750;
+                       if (yych <= 'z') goto yy754;
+                       if (yych <= 0x7F) goto yy750;
+               }
+yy754:
+               YYDEBUG(754, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(775, *YYCURSOR);
+               YYDEBUG(755, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1413 "Zend/zend_language_scanner.l"
+#line 2010 "Zend/zend_language_scanner.l"
                {
-       RETURN_TOKEN(T_OBJECT_OPERATOR);
+       yyless(yyleng - 3);
+       yy_push_state(ST_LOOKING_FOR_PROPERTY);
+       RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
 }
-#line 7595 "Zend/zend_language_scanner.c"
+#line 7446 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_LOOKING_FOR_VARNAME:
@@ -7630,180 +7481,87 @@ yyc_ST_LOOKING_FOR_VARNAME:
                        128, 128, 128, 128, 128, 128, 128, 128, 
                        128, 128, 128, 128, 128, 128, 128, 128, 
                };
-               YYDEBUG(776, *YYCURSOR);
+               YYDEBUG(756, *YYCURSOR);
                YYFILL(2);
                yych = *YYCURSOR;
                if (yych <= '_') {
-                       if (yych <= '@') goto yy778;
-                       if (yych <= 'Z') goto yy780;
-                       if (yych >= '_') goto yy780;
+                       if (yych <= '@') goto yy758;
+                       if (yych <= 'Z') goto yy760;
+                       if (yych >= '_') goto yy760;
                } else {
-                       if (yych <= '`') goto yy778;
-                       if (yych <= 'z') goto yy780;
-                       if (yych >= 0x80) goto yy780;
+                       if (yych <= '`') goto yy758;
+                       if (yych <= 'z') goto yy760;
+                       if (yych >= 0x80) goto yy760;
                }
-yy778:
-               YYDEBUG(778, *YYCURSOR);
+yy758:
+               YYDEBUG(758, *YYCURSOR);
                ++YYCURSOR;
-yy779:
-               YYDEBUG(779, *YYCURSOR);
+yy759:
+               YYDEBUG(759, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1726 "Zend/zend_language_scanner.l"
+#line 1747 "Zend/zend_language_scanner.l"
                {
        yyless(0);
        yy_pop_state();
        yy_push_state(ST_IN_SCRIPTING);
        goto restart;
 }
-#line 7659 "Zend/zend_language_scanner.c"
-yy780:
-               YYDEBUG(780, *YYCURSOR);
+#line 7510 "Zend/zend_language_scanner.c"
+yy760:
+               YYDEBUG(760, *YYCURSOR);
                yych = *(YYMARKER = ++YYCURSOR);
                if (yych <= '_') {
                        if (yych <= '@') {
-                               if (yych <= '/') goto yy779;
-                               if (yych <= '9') goto yy782;
-                               goto yy779;
+                               if (yych <= '/') goto yy759;
+                               if (yych <= '9') goto yy762;
+                               goto yy759;
                        } else {
-                               if (yych <= '[') goto yy782;
-                               if (yych <= '^') goto yy779;
-                               goto yy782;
+                               if (yych <= '[') goto yy762;
+                               if (yych <= '^') goto yy759;
+                               goto yy762;
                        }
                } else {
                        if (yych <= '|') {
-                               if (yych <= '`') goto yy779;
-                               if (yych <= 'z') goto yy782;
-                               goto yy779;
+                               if (yych <= '`') goto yy759;
+                               if (yych <= 'z') goto yy762;
+                               goto yy759;
                        } else {
-                               if (yych <= '}') goto yy782;
-                               if (yych <= 0x7F) goto yy779;
-                               goto yy782;
+                               if (yych <= '}') goto yy762;
+                               if (yych <= 0x7F) goto yy759;
+                               goto yy762;
                        }
                }
-yy781:
-               YYDEBUG(781, *YYCURSOR);
+yy761:
+               YYDEBUG(761, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-yy782:
-               YYDEBUG(782, *YYCURSOR);
+yy762:
+               YYDEBUG(762, *YYCURSOR);
                if (yybm[0+yych] & 128) {
-                       goto yy781;
+                       goto yy761;
                }
-               if (yych <= '@') goto yy783;
-               if (yych <= '[') goto yy784;
-               if (yych == '}') goto yy784;
-yy783:
-               YYDEBUG(783, *YYCURSOR);
+               if (yych <= '@') goto yy763;
+               if (yych <= '[') goto yy764;
+               if (yych == '}') goto yy764;
+yy763:
+               YYDEBUG(763, *YYCURSOR);
                YYCURSOR = YYMARKER;
-               goto yy779;
-yy784:
-               YYDEBUG(784, *YYCURSOR);
+               goto yy759;
+yy764:
+               YYDEBUG(764, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(785, *YYCURSOR);
+               YYDEBUG(765, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1718 "Zend/zend_language_scanner.l"
+#line 1739 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
-       yy_pop_state();
-       yy_push_state(ST_IN_SCRIPTING);
-       RETURN_TOKEN_WITH_STR(T_STRING_VARNAME, 0);
-}
-#line 7713 "Zend/zend_language_scanner.c"
-       }
-/* *********************************** */
-yyc_ST_NOWDOC:
-       YYDEBUG(786, *YYCURSOR);
-       YYFILL(1);
-       yych = *YYCURSOR;
-       YYDEBUG(788, *YYCURSOR);
-       ++YYCURSOR;
-       YYDEBUG(789, *YYCURSOR);
-       yyleng = YYCURSOR - SCNG(yy_text);
-#line 2636 "Zend/zend_language_scanner.l"
-       {
-       zend_heredoc_label *heredoc_label = zend_ptr_stack_top(&SCNG(heredoc_label_stack));
-       int newline = 0, indentation = 0, spacing = -1;
-
-       if (YYCURSOR > YYLIMIT) {
-               RETURN_TOKEN(END);
-       }
-
-       YYCURSOR--;
-
-       while (YYCURSOR < YYLIMIT) {
-               switch (*YYCURSOR++) {
-                       case '\r':
-                               if (*YYCURSOR == '\n') {
-                                       YYCURSOR++;
-                               }
-                               /* fall through */
-                       case '\n':
-                               indentation = spacing = 0;
-
-                               while (YYCURSOR < YYLIMIT && (*YYCURSOR == ' ' || *YYCURSOR == '\t')) {
-                                       if (*YYCURSOR == '\t') {
-                                               spacing |= HEREDOC_USING_TABS;
-                                       } else {
-                                               spacing |= HEREDOC_USING_SPACES;
-                                       }
-                                       ++YYCURSOR;
-                                       ++indentation;
-                               }
-
-                               if (YYCURSOR == YYLIMIT) {
-                                       yyleng = YYCURSOR - SCNG(yy_text);
-                                       HANDLE_NEWLINES(yytext, yyleng);
-                                       ZVAL_NULL(zendlval);
-                                       RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE);
-                               }
-
-                               /* Check for ending label on the next line */
-                               if (IS_LABEL_START(*YYCURSOR) && heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, heredoc_label->label, heredoc_label->length)) {
-                                       if (IS_LABEL_START(YYCURSOR[heredoc_label->length])) {
-                                               continue;
-                                       }
-
-                                       if (spacing == (HEREDOC_USING_SPACES | HEREDOC_USING_TABS)) {
-                                               zend_throw_exception(zend_ce_parse_error, "Invalid indentation - tabs and spaces cannot be mixed", 0);
-                                       }
-
-                                       /* newline before label will be subtracted from returned text, but
-                                        * yyleng/yytext will include it, for zend_highlight/strip, tokenizer, etc. */
-                                       if (YYCURSOR[-indentation - 2] == '\r' && YYCURSOR[-indentation - 1] == '\n') {
-                                               newline = 2; /* Windows newline */
-                                       } else {
-                                               newline = 1;
-                                       }
-
-                                       CG(increment_lineno) = 1; /* For newline before label */
-
-                                       YYCURSOR -= indentation;
-                                       heredoc_label->indentation = indentation;
-
-                                       BEGIN(ST_END_HEREDOC);
-
-                                       goto nowdoc_scan_done;
-                               }
-                               /* fall through */
-                       default:
-                               continue;
-               }
-       }
-
-nowdoc_scan_done:
-       yyleng = YYCURSOR - SCNG(yy_text);
-       ZVAL_STRINGL(zendlval, yytext, yyleng);
-
-       if (!EG(exception) && spacing != -1 && PARSER_MODE()
-           && !strip_multiline_string_indentation(zendlval, newline, indentation, spacing == HEREDOC_USING_SPACES)) {
-               RETURN_TOKEN(T_ERROR);
-       }
-
-       HANDLE_NEWLINES(yytext, yyleng - newline);
-       RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE);
+       yy_pop_state();
+       yy_push_state(ST_IN_SCRIPTING);
+       RETURN_TOKEN_WITH_STR(T_STRING_VARNAME, 0);
 }
-#line 7807 "Zend/zend_language_scanner.c"
+#line 7564 "Zend/zend_language_scanner.c"
+       }
 /* *********************************** */
 yyc_ST_VAR_OFFSET:
        {
@@ -7841,57 +7599,57 @@ yyc_ST_VAR_OFFSET:
                         32,  32,  32,  32,  32,  32,  32,  32, 
                         32,  32,  32,  32,  32,  32,  32,  32, 
                };
-               YYDEBUG(790, *YYCURSOR);
+               YYDEBUG(766, *YYCURSOR);
                YYFILL(3);
                yych = *YYCURSOR;
                if (yych <= '0') {
                        if (yych <= ' ') {
                                if (yych <= '\f') {
-                                       if (yych <= 0x08) goto yy792;
-                                       if (yych <= '\n') goto yy794;
+                                       if (yych <= 0x08) goto yy768;
+                                       if (yych <= '\n') goto yy770;
                                } else {
-                                       if (yych <= '\r') goto yy794;
-                                       if (yych >= ' ') goto yy794;
+                                       if (yych <= '\r') goto yy770;
+                                       if (yych >= ' ') goto yy770;
                                }
                        } else {
                                if (yych <= '$') {
-                                       if (yych <= '"') goto yy796;
-                                       if (yych <= '#') goto yy794;
-                                       goto yy798;
+                                       if (yych <= '"') goto yy772;
+                                       if (yych <= '#') goto yy770;
+                                       goto yy774;
                                } else {
-                                       if (yych == '\'') goto yy794;
-                                       if (yych <= '/') goto yy796;
-                                       goto yy799;
+                                       if (yych == '\'') goto yy770;
+                                       if (yych <= '/') goto yy772;
+                                       goto yy775;
                                }
                        }
                } else {
                        if (yych <= ']') {
                                if (yych <= 'Z') {
-                                       if (yych <= '9') goto yy801;
-                                       if (yych <= '@') goto yy796;
-                                       goto yy803;
+                                       if (yych <= '9') goto yy777;
+                                       if (yych <= '@') goto yy772;
+                                       goto yy779;
                                } else {
-                                       if (yych <= '[') goto yy796;
-                                       if (yych <= '\\') goto yy794;
-                                       goto yy806;
+                                       if (yych <= '[') goto yy772;
+                                       if (yych <= '\\') goto yy770;
+                                       goto yy782;
                                }
                        } else {
                                if (yych <= '`') {
-                                       if (yych == '_') goto yy803;
-                                       goto yy796;
+                                       if (yych == '_') goto yy779;
+                                       goto yy772;
                                } else {
-                                       if (yych <= 'z') goto yy803;
-                                       if (yych <= '~') goto yy796;
-                                       if (yych >= 0x80) goto yy803;
+                                       if (yych <= 'z') goto yy779;
+                                       if (yych <= '~') goto yy772;
+                                       if (yych >= 0x80) goto yy779;
                                }
                        }
                }
-yy792:
-               YYDEBUG(792, *YYCURSOR);
+yy768:
+               YYDEBUG(768, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(793, *YYCURSOR);
+               YYDEBUG(769, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2720 "Zend/zend_language_scanner.l"
+#line 2748 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                RETURN_TOKEN(END);
@@ -7900,13 +7658,13 @@ yy792:
        zend_error(E_COMPILE_WARNING,"Unexpected character in input:  '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
        goto restart;
 }
-#line 7904 "Zend/zend_language_scanner.c"
-yy794:
-               YYDEBUG(794, *YYCURSOR);
+#line 7662 "Zend/zend_language_scanner.c"
+yy770:
+               YYDEBUG(770, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(795, *YYCURSOR);
+               YYDEBUG(771, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2017 "Zend/zend_language_scanner.l"
+#line 2038 "Zend/zend_language_scanner.l"
                {
        /* Invalid rule to return a more explicit parse error with proper line number */
        yyless(0);
@@ -7914,54 +7672,54 @@ yy794:
        ZVAL_NULL(zendlval);
        RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE);
 }
-#line 7918 "Zend/zend_language_scanner.c"
-yy796:
-               YYDEBUG(796, *YYCURSOR);
+#line 7676 "Zend/zend_language_scanner.c"
+yy772:
+               YYDEBUG(772, *YYCURSOR);
                ++YYCURSOR;
-yy797:
-               YYDEBUG(797, *YYCURSOR);
+yy773:
+               YYDEBUG(773, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2012 "Zend/zend_language_scanner.l"
+#line 2033 "Zend/zend_language_scanner.l"
                {
        /* Only '[' or '-' can be valid, but returning other tokens will allow a more explicit parse error */
        RETURN_TOKEN(yytext[0]);
 }
-#line 7930 "Zend/zend_language_scanner.c"
-yy798:
-               YYDEBUG(798, *YYCURSOR);
+#line 7688 "Zend/zend_language_scanner.c"
+yy774:
+               YYDEBUG(774, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yych <= '_') {
-                       if (yych <= '@') goto yy797;
-                       if (yych <= 'Z') goto yy808;
-                       if (yych <= '^') goto yy797;
-                       goto yy808;
+                       if (yych <= '@') goto yy773;
+                       if (yych <= 'Z') goto yy784;
+                       if (yych <= '^') goto yy773;
+                       goto yy784;
                } else {
-                       if (yych <= '`') goto yy797;
-                       if (yych <= 'z') goto yy808;
-                       if (yych <= 0x7F) goto yy797;
-                       goto yy808;
+                       if (yych <= '`') goto yy773;
+                       if (yych <= 'z') goto yy784;
+                       if (yych <= 0x7F) goto yy773;
+                       goto yy784;
                }
-yy799:
-               YYDEBUG(799, *YYCURSOR);
+yy775:
+               YYDEBUG(775, *YYCURSOR);
                yych = *(YYMARKER = ++YYCURSOR);
                if (yych <= 'W') {
                        if (yych <= '9') {
-                               if (yych >= '0') goto yy811;
+                               if (yych >= '0') goto yy787;
                        } else {
-                               if (yych == 'B') goto yy814;
+                               if (yych == 'B') goto yy790;
                        }
                } else {
                        if (yych <= 'b') {
-                               if (yych <= 'X') goto yy816;
-                               if (yych >= 'b') goto yy814;
+                               if (yych <= 'X') goto yy792;
+                               if (yych >= 'b') goto yy790;
                        } else {
-                               if (yych == 'x') goto yy816;
+                               if (yych == 'x') goto yy792;
                        }
                }
-yy800:
-               YYDEBUG(800, *YYCURSOR);
+yy776:
+               YYDEBUG(776, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1840 "Zend/zend_language_scanner.l"
+#line 1861 "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;
@@ -7977,85 +7735,85 @@ string:
        }
        RETURN_TOKEN_WITH_VAL(T_NUM_STRING);
 }
-#line 7981 "Zend/zend_language_scanner.c"
-yy801:
-               YYDEBUG(801, *YYCURSOR);
+#line 7739 "Zend/zend_language_scanner.c"
+yy777:
+               YYDEBUG(777, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(802, *YYCURSOR);
+               YYDEBUG(778, *YYCURSOR);
                if (yybm[0+yych] & 16) {
-                       goto yy801;
+                       goto yy777;
                }
-               goto yy800;
-yy803:
-               YYDEBUG(803, *YYCURSOR);
+               goto yy776;
+yy779:
+               YYDEBUG(779, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(804, *YYCURSOR);
+               YYDEBUG(780, *YYCURSOR);
                if (yybm[0+yych] & 32) {
-                       goto yy803;
+                       goto yy779;
                }
-               YYDEBUG(805, *YYCURSOR);
+               YYDEBUG(781, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2025 "Zend/zend_language_scanner.l"
+#line 2046 "Zend/zend_language_scanner.l"
                {
        RETURN_TOKEN_WITH_STR(T_STRING, 0);
 }
-#line 8007 "Zend/zend_language_scanner.c"
-yy806:
-               YYDEBUG(806, *YYCURSOR);
+#line 7765 "Zend/zend_language_scanner.c"
+yy782:
+               YYDEBUG(782, *YYCURSOR);
                ++YYCURSOR;
-               YYDEBUG(807, *YYCURSOR);
+               YYDEBUG(783, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2007 "Zend/zend_language_scanner.l"
+#line 2028 "Zend/zend_language_scanner.l"
                {
        yy_pop_state();
        RETURN_TOKEN(']');
 }
-#line 8018 "Zend/zend_language_scanner.c"
-yy808:
-               YYDEBUG(808, *YYCURSOR);
+#line 7776 "Zend/zend_language_scanner.c"
+yy784:
+               YYDEBUG(784, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(809, *YYCURSOR);
+               YYDEBUG(785, *YYCURSOR);
                if (yych <= '^') {
                        if (yych <= '9') {
-                               if (yych >= '0') goto yy808;
+                               if (yych >= '0') goto yy784;
                        } else {
-                               if (yych <= '@') goto yy810;
-                               if (yych <= 'Z') goto yy808;
+                               if (yych <= '@') goto yy786;
+                               if (yych <= 'Z') goto yy784;
                        }
                } else {
                        if (yych <= '`') {
-                               if (yych <= '_') goto yy808;
+                               if (yych <= '_') goto yy784;
                        } else {
-                               if (yych <= 'z') goto yy808;
-                               if (yych >= 0x80) goto yy808;
+                               if (yych <= 'z') goto yy784;
+                               if (yych >= 0x80) goto yy784;
                        }
                }
-yy810:
-               YYDEBUG(810, *YYCURSOR);
+yy786:
+               YYDEBUG(786, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2003 "Zend/zend_language_scanner.l"
+#line 2024 "Zend/zend_language_scanner.l"
                {
        RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
 }
-#line 8047 "Zend/zend_language_scanner.c"
-yy811:
-               YYDEBUG(811, *YYCURSOR);
+#line 7805 "Zend/zend_language_scanner.c"
+yy787:
+               YYDEBUG(787, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(812, *YYCURSOR);
-               if (yych <= '/') goto yy813;
-               if (yych <= '9') goto yy811;
-yy813:
-               YYDEBUG(813, *YYCURSOR);
+               YYDEBUG(788, *YYCURSOR);
+               if (yych <= '/') goto yy789;
+               if (yych <= '9') goto yy787;
+yy789:
+               YYDEBUG(789, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1856 "Zend/zend_language_scanner.l"
+#line 1877 "Zend/zend_language_scanner.l"
                { /* Offset must be treated as a string */
        if (yyleng == 1) {
                ZVAL_INTERNED_STR(zendlval, ZSTR_CHAR((zend_uchar)*(yytext)));
@@ -8064,47 +7822,313 @@ yy813:
        }
        RETURN_TOKEN_WITH_VAL(T_NUM_STRING);
 }
-#line 8068 "Zend/zend_language_scanner.c"
-yy814:
-               YYDEBUG(814, *YYCURSOR);
+#line 7826 "Zend/zend_language_scanner.c"
+yy790:
+               YYDEBUG(790, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yybm[0+yych] & 64) {
-                       goto yy817;
+                       goto yy793;
                }
-yy815:
-               YYDEBUG(815, *YYCURSOR);
+yy791:
+               YYDEBUG(791, *YYCURSOR);
                YYCURSOR = YYMARKER;
-               goto yy800;
-yy816:
-               YYDEBUG(816, *YYCURSOR);
+               goto yy776;
+yy792:
+               YYDEBUG(792, *YYCURSOR);
                yych = *++YYCURSOR;
                if (yybm[0+yych] & 128) {
-                       goto yy819;
+                       goto yy795;
                }
-               goto yy815;
-yy817:
-               YYDEBUG(817, *YYCURSOR);
+               goto yy791;
+yy793:
+               YYDEBUG(793, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(818, *YYCURSOR);
+               YYDEBUG(794, *YYCURSOR);
                if (yybm[0+yych] & 64) {
-                       goto yy817;
+                       goto yy793;
                }
-               goto yy813;
-yy819:
-               YYDEBUG(819, *YYCURSOR);
+               goto yy789;
+yy795:
+               YYDEBUG(795, *YYCURSOR);
                ++YYCURSOR;
                YYFILL(1);
                yych = *YYCURSOR;
-               YYDEBUG(820, *YYCURSOR);
+               YYDEBUG(796, *YYCURSOR);
                if (yybm[0+yych] & 128) {
-                       goto yy819;
+                       goto yy795;
+               }
+               goto yy789;
+       }
+/* *********************************** */
+yyc_INITIAL:
+       YYDEBUG(797, *YYCURSOR);
+       YYFILL(7);
+       yych = *YYCURSOR;
+       if (yych == '<') goto yy801;
+       YYDEBUG(799, *YYCURSOR);
+       ++YYCURSOR;
+yy800:
+       YYDEBUG(800, *YYCURSOR);
+       yyleng = YYCURSOR - SCNG(yy_text);
+#line 1959 "Zend/zend_language_scanner.l"
+       {
+       if (YYCURSOR > YYLIMIT) {
+               RETURN_TOKEN(END);
+       }
+
+inline_char_handler:
+
+       while (1) {
+               YYCTYPE *ptr = memchr(YYCURSOR, '<', YYLIMIT - YYCURSOR);
+
+               YYCURSOR = ptr ? ptr + 1 : YYLIMIT;
+
+               if (YYCURSOR >= YYLIMIT) {
+                       break;
+               }
+
+               if (*YYCURSOR == '?') {
+                       if (CG(short_tags) || !strncasecmp((char*)YYCURSOR + 1, "php", 3) || (*(YYCURSOR + 1) == '=')) { /* Assume [ \t\n\r] follows "php" */
+
+                               YYCURSOR--;
+                               break;
+                       }
+               }
+       }
+
+       yyleng = YYCURSOR - SCNG(yy_text);
+
+       if (SCNG(output_filter)) {
+               size_t readsize;
+               char *s = NULL;
+               size_t sz = 0;
+               // TODO: avoid reallocation ???
+               readsize = SCNG(output_filter)((unsigned char **)&s, &sz, (unsigned char *)yytext, (size_t)yyleng);
+               ZVAL_STRINGL(zendlval, s, sz);
+               efree(s);
+               if (readsize < yyleng) {
+                       yyless(readsize);
+               }
+       } else if (yyleng == 1) {
+               ZVAL_INTERNED_STR(zendlval, ZSTR_CHAR((zend_uchar)*yytext));
+       } else {
+               ZVAL_STRINGL(zendlval, yytext, yyleng);
+       }
+       HANDLE_NEWLINES(yytext, yyleng);
+       RETURN_TOKEN_WITH_VAL(T_INLINE_HTML);
+}
+#line 7923 "Zend/zend_language_scanner.c"
+yy801:
+       YYDEBUG(801, *YYCURSOR);
+       yych = *++YYCURSOR;
+       if (yych != '?') goto yy800;
+       YYDEBUG(802, *YYCURSOR);
+       yych = *(YYMARKER = ++YYCURSOR);
+       if (yych <= 'O') {
+               if (yych == '=') goto yy804;
+       } else {
+               if (yych <= 'P') goto yy806;
+               if (yych == 'p') goto yy806;
+       }
+yy803:
+       YYDEBUG(803, *YYCURSOR);
+       yyleng = YYCURSOR - SCNG(yy_text);
+#line 1947 "Zend/zend_language_scanner.l"
+       {
+       if (CG(short_tags)) {
+               BEGIN(ST_IN_SCRIPTING);
+               if (PARSER_MODE()) {
+                       SKIP_TOKEN(T_OPEN_TAG);
+               }
+               RETURN_TOKEN(T_OPEN_TAG);
+       } else {
+               goto inline_char_handler;
+       }
+}
+#line 7951 "Zend/zend_language_scanner.c"
+yy804:
+       YYDEBUG(804, *YYCURSOR);
+       ++YYCURSOR;
+       YYDEBUG(805, *YYCURSOR);
+       yyleng = YYCURSOR - SCNG(yy_text);
+#line 1928 "Zend/zend_language_scanner.l"
+       {
+       BEGIN(ST_IN_SCRIPTING);
+       if (PARSER_MODE()) {
+               RETURN_TOKEN(T_ECHO);
+       }
+       RETURN_TOKEN(T_OPEN_TAG_WITH_ECHO);
+}
+#line 7965 "Zend/zend_language_scanner.c"
+yy806:
+       YYDEBUG(806, *YYCURSOR);
+       yych = *++YYCURSOR;
+       if (yych == 'H') goto yy808;
+       if (yych == 'h') goto yy808;
+yy807:
+       YYDEBUG(807, *YYCURSOR);
+       YYCURSOR = YYMARKER;
+       goto yy803;
+yy808:
+       YYDEBUG(808, *YYCURSOR);
+       yych = *++YYCURSOR;
+       if (yych == 'P') goto yy809;
+       if (yych != 'p') goto yy807;
+yy809:
+       YYDEBUG(809, *YYCURSOR);
+       yych = *++YYCURSOR;
+       if (yych <= '\f') {
+               if (yych <= 0x08) goto yy807;
+               if (yych >= '\v') goto yy807;
+       } else {
+               if (yych <= '\r') goto yy812;
+               if (yych != ' ') goto yy807;
+       }
+yy810:
+       YYDEBUG(810, *YYCURSOR);
+       ++YYCURSOR;
+yy811:
+       YYDEBUG(811, *YYCURSOR);
+       yyleng = YYCURSOR - SCNG(yy_text);
+#line 1937 "Zend/zend_language_scanner.l"
+       {
+       HANDLE_NEWLINE(yytext[yyleng-1]);
+       BEGIN(ST_IN_SCRIPTING);
+       if (PARSER_MODE()) {
+               SKIP_TOKEN(T_OPEN_TAG);
+       }
+       RETURN_TOKEN(T_OPEN_TAG);
+}
+#line 8005 "Zend/zend_language_scanner.c"
+yy812:
+       YYDEBUG(812, *YYCURSOR);
+       yych = *++YYCURSOR;
+       if (yych == '\n') goto yy810;
+       goto yy811;
+/* *********************************** */
+yyc_ST_END_HEREDOC:
+       YYDEBUG(813, *YYCURSOR);
+       YYFILL(1);
+       yych = *YYCURSOR;
+       YYDEBUG(815, *YYCURSOR);
+       ++YYCURSOR;
+       YYDEBUG(816, *YYCURSOR);
+       yyleng = YYCURSOR - SCNG(yy_text);
+#line 2407 "Zend/zend_language_scanner.l"
+       {
+       zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack));
+
+       yyleng = heredoc_label->indentation + heredoc_label->length;
+       YYCURSOR += yyleng - 1;
+
+       heredoc_label_dtor(heredoc_label);
+       efree(heredoc_label);
+
+       BEGIN(ST_IN_SCRIPTING);
+       RETURN_TOKEN(T_END_HEREDOC);
+}
+#line 8033 "Zend/zend_language_scanner.c"
+/* *********************************** */
+yyc_ST_NOWDOC:
+       YYDEBUG(817, *YYCURSOR);
+       YYFILL(1);
+       yych = *YYCURSOR;
+       YYDEBUG(819, *YYCURSOR);
+       ++YYCURSOR;
+       YYDEBUG(820, *YYCURSOR);
+       yyleng = YYCURSOR - SCNG(yy_text);
+#line 2660 "Zend/zend_language_scanner.l"
+       {
+       zend_heredoc_label *heredoc_label = zend_ptr_stack_top(&SCNG(heredoc_label_stack));
+       int newline = 0, indentation = 0, spacing = -1;
+
+       if (YYCURSOR > YYLIMIT) {
+               RETURN_TOKEN(END);
+       }
+
+       YYCURSOR--;
+
+       while (YYCURSOR < YYLIMIT) {
+               switch (*YYCURSOR++) {
+                       case '\r':
+                               if (*YYCURSOR == '\n') {
+                                       YYCURSOR++;
+                               }
+                               /* fall through */
+                       case '\n':
+                               indentation = spacing = 0;
+
+                               while (YYCURSOR < YYLIMIT && (*YYCURSOR == ' ' || *YYCURSOR == '\t')) {
+                                       if (*YYCURSOR == '\t') {
+                                               spacing |= HEREDOC_USING_TABS;
+                                       } else {
+                                               spacing |= HEREDOC_USING_SPACES;
+                                       }
+                                       ++YYCURSOR;
+                                       ++indentation;
+                               }
+
+                               if (YYCURSOR == YYLIMIT) {
+                                       yyleng = YYCURSOR - SCNG(yy_text);
+                                       HANDLE_NEWLINES(yytext, yyleng);
+                                       ZVAL_NULL(zendlval);
+                                       RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE);
+                               }
+
+                               /* Check for ending label on the next line */
+                               if (IS_LABEL_START(*YYCURSOR) && heredoc_label->length < YYLIMIT - YYCURSOR && !memcmp(YYCURSOR, heredoc_label->label, heredoc_label->length)) {
+                                       if (IS_LABEL_START(YYCURSOR[heredoc_label->length])) {
+                                               continue;
+                                       }
+
+                                       if (spacing == (HEREDOC_USING_SPACES | HEREDOC_USING_TABS)) {
+                                               zend_throw_exception(zend_ce_parse_error, "Invalid indentation - tabs and spaces cannot be mixed", 0);
+                                       }
+
+                                       /* newline before label will be subtracted from returned text, but
+                                        * yyleng/yytext will include it, for zend_highlight/strip, tokenizer, etc. */
+                                       if (YYCURSOR[-indentation - 2] == '\r' && YYCURSOR[-indentation - 1] == '\n') {
+                                               newline = 2; /* Windows newline */
+                                       } else {
+                                               newline = 1;
+                                       }
+
+                                       CG(increment_lineno) = 1; /* For newline before label */
+
+                                       YYCURSOR -= indentation;
+                                       heredoc_label->indentation = indentation;
+
+                                       BEGIN(ST_END_HEREDOC);
+
+                                       goto nowdoc_scan_done;
+                               }
+                               /* fall through */
+                       default:
+                               continue;
+               }
+       }
+
+nowdoc_scan_done:
+       yyleng = YYCURSOR - SCNG(yy_text);
+       ZVAL_STRINGL(zendlval, yytext, yyleng - newline);
+
+       if (!EG(exception) && spacing != -1 && PARSER_MODE()) {
+               zend_bool newline_at_start = *(yytext - 1) == '\n' || *(yytext - 1) == '\r';
+               if (!strip_multiline_string_indentation(
+                               zendlval, indentation, spacing == HEREDOC_USING_SPACES,
+                               newline_at_start, newline != 0)) {
+                       RETURN_TOKEN(T_ERROR);
                }
-               goto yy813;
        }
+
+       HANDLE_NEWLINES(yytext, yyleng - newline);
+       RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE);
+}
+#line 8130 "Zend/zend_language_scanner.c"
 }
-#line 2729 "Zend/zend_language_scanner.l"
+#line 2757 "Zend/zend_language_scanner.l"
 
 
 emit_token_with_str:
index 78ae5f1d56eb771089246589195c0507d95085a6..5005634dce1c2abb444ee75ba358cf8d181c2ca7 100644 (file)
@@ -1109,65 +1109,86 @@ skip_escape_conversion:
 #define HEREDOC_USING_SPACES 1
 #define HEREDOC_USING_TABS 2
 
-static zend_bool strip_multiline_string_indentation(zval *zendlval, int newline, int indentation, zend_bool using_spaces)
+static const char *next_newline(const char *str, const char *end, size_t *newline_len) {
+       for (; str < end; str++) {
+               if (*str == '\r') {
+                       *newline_len = str + 1 < end && *(str + 1) == '\n' ? 2 : 1;
+               } else if (*str == '\n') {
+                       *newline_len = 1;
+                       return str;
+               }
+       }
+       *newline_len = 0;
+       return NULL;
+}
+
+static zend_bool strip_multiline_string_indentation(
+       zval *zendlval, int indentation, zend_bool using_spaces,
+       zend_bool newline_at_start, zend_bool newline_at_end)
 {
-       int len = Z_STRLEN_P(zendlval), new_len = len, i = 0, j = 0, skip, newline_count = 0;
+       const char *str = Z_STRVAL_P(zendlval), *end = str + Z_STRLEN_P(zendlval);
        char *copy = Z_STRVAL_P(zendlval);
-       zend_bool trailing_newline = 0;
 
-       while (j < len) {
-               trailing_newline = 0;
+       int newline_count = 0;
+       size_t newline_len;
+       const char *nl;
+
+       if (!newline_at_start) {
+               nl = next_newline(str, end, &newline_len);
+               if (!nl) {
+                       return 1;
+               }
+
+               str = nl + newline_len;
+               copy = (char *) nl + newline_len;
+               newline_count++;
+       } else {
+               nl = str;
+       }
 
-               for (skip = 0; skip < indentation; ++skip, ++j, --new_len) {
-                       if (copy[j] == '\r' || copy[j] == '\n') {
-                               goto skip;
+       /* <= intentional */
+       while (str <= end && nl) {
+               size_t skip;
+               nl = next_newline(str, end, &newline_len);
+               if (!nl && newline_at_end) {
+                       nl = end;
+               }
+
+               /* Try to skip indentation */
+               for (skip = 0; skip < indentation; skip++, str++) {
+                       if (str == nl) {
+                               /* Don't require full indentation on whitespace-only lines */
+                               break;
                        }
 
-                       if (copy[j] != ' ' && copy[j] != '\t') {
+                       if (str == end || (*str != ' ' && *str != '\t')) {
                                CG(zend_lineno) += newline_count;
-                               zend_throw_exception_ex(zend_ce_parse_error, 0, "Invalid body indentation level (expecting an indentation level of at least %d)", indentation);
+                               zend_throw_exception_ex(zend_ce_parse_error, 0,
+                                       "Invalid body indentation level (expecting an indentation level of at least %d)", indentation);
                                goto error;
                        }
 
-                       if ((!using_spaces && copy[j] == ' ') || (using_spaces && copy[j] == '\t')) {
+                       if ((!using_spaces && *str == ' ') || (using_spaces && *str == '\t')) {
                                CG(zend_lineno) += newline_count;
-                               zend_throw_exception(zend_ce_parse_error, "Invalid indentation - tabs and spaces cannot be mixed", 0);
+                               zend_throw_exception(zend_ce_parse_error,
+                                       "Invalid indentation - tabs and spaces cannot be mixed", 0);
                                goto error;
                        }
                }
 
-               while (j < len && copy[j] != '\r' && copy[j] != '\n') {
-                       copy[i++] = copy[j++];
-               }
-
-               if (j == len) {
+               if (str == end) {
                        break;
                }
-skip:
-               if (copy[j] == '\r') {
-                       copy[i++] = copy[j++];
-                       trailing_newline = 1;
-               }
 
-               if (copy[j] == '\n') {
-                       copy[i++] = copy[j++];
-                       trailing_newline = 1;
-               }
-
-               if (trailing_newline) {
-                       ++newline_count;
-               }
+               size_t len = nl ? (nl - str + newline_len) : (end - str);
+               memmove(copy, str, len);
+               str += len;
+               copy += len;
+               newline_count++;
        }
 
-       if (YYSTATE != STATE(ST_END_HEREDOC) && trailing_newline && indentation) {
-               CG(zend_lineno) += newline_count;
-               zend_throw_exception_ex(zend_ce_parse_error, 0, "Invalid body indentation level (expecting an indentation level of at least %d)", indentation);
-               goto error;
-       }
-
-       Z_STRVAL_P(zendlval)[new_len - newline] = '\0';
-       Z_STRLEN_P(zendlval) = new_len - newline;
-
+       *copy = '\0';
+       Z_STRLEN_P(zendlval) = copy - Z_STRVAL_P(zendlval);
        return 1;
 
 error:
@@ -2610,12 +2631,15 @@ double_quotes_scan_done:
 heredoc_scan_done:
 
        yyleng = YYCURSOR - SCNG(yy_text);
-       ZVAL_STRINGL(zendlval, yytext, yyleng);
+       ZVAL_STRINGL(zendlval, yytext, yyleng - newline);
 
        if (!SCNG(heredoc_scan_ahead) && !EG(exception) && PARSER_MODE()) {
+               zend_bool newline_at_start = *(yytext - 1) == '\n' || *(yytext - 1) == '\r';
                zend_string *copy = Z_STR_P(zendlval);
 
-           if (!strip_multiline_string_indentation(zendlval, newline, heredoc_label->indentation, heredoc_label->indentation_uses_spaces)) {
+               if (!strip_multiline_string_indentation(
+                               zendlval, heredoc_label->indentation, heredoc_label->indentation_uses_spaces,
+                               newline_at_start, newline != 0)) {
                        RETURN_TOKEN(T_ERROR);
                }
 
@@ -2705,11 +2729,15 @@ heredoc_scan_done:
 
 nowdoc_scan_done:
        yyleng = YYCURSOR - SCNG(yy_text);
-       ZVAL_STRINGL(zendlval, yytext, yyleng);
+       ZVAL_STRINGL(zendlval, yytext, yyleng - newline);
 
-       if (!EG(exception) && spacing != -1 && PARSER_MODE()
-           && !strip_multiline_string_indentation(zendlval, newline, indentation, spacing == HEREDOC_USING_SPACES)) {
-               RETURN_TOKEN(T_ERROR);
+       if (!EG(exception) && spacing != -1 && PARSER_MODE()) {
+               zend_bool newline_at_start = *(yytext - 1) == '\n' || *(yytext - 1) == '\r';
+               if (!strip_multiline_string_indentation(
+                               zendlval, indentation, spacing == HEREDOC_USING_SPACES,
+                               newline_at_start, newline != 0)) {
+                       RETURN_TOKEN(T_ERROR);
+               }
        }
 
        HANDLE_NEWLINES(yytext, yyleng - newline);
index c89b1bba457d087ac6016b2e69fc22715217b0a0..3c01b5bc761619689c68b9cd96cc010945cfdcfd 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.16 */
+/* Generated by re2c 1.0.1 */
 #line 3 "Zend/zend_language_scanner_defs.h"
 
 enum YYCONDTYPE {