]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.2' into PHP-7.3
authorNikita Popov <nikita.ppv@gmail.com>
Mon, 13 May 2019 09:06:14 +0000 (11:06 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Mon, 13 May 2019 09:06:14 +0000 (11:06 +0200)
1  2 
Zend/zend_language_scanner.c
Zend/zend_language_scanner.l

index 5d6d9cae91ec09867658f108b0fbcf30e7a376cd,d6543fadd27c737f520ad08883c7e7dbbe9bee3b..511dea577f0daa4a7db4442204e4b54fbc9ff3f2
@@@ -1453,7 -1317,7 +1453,7 @@@ yy3
                ++YYCURSOR;
                YYDEBUG(4, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2748 "Zend/zend_language_scanner.l"
 -#line 2390 "Zend/zend_language_scanner.l"
++#line 2749 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                RETURN_TOKEN(END);
@@@ -1496,7 -1361,7 +1496,7 @@@ yy10
                ++YYCURSOR;
                YYDEBUG(11, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2222 "Zend/zend_language_scanner.l"
 -#line 2038 "Zend/zend_language_scanner.l"
++#line 2223 "Zend/zend_language_scanner.l"
                {
        int bprefix = (yytext[0] != '"') ? 1 : 0;
  
@@@ -1547,7 -1408,7 +1547,7 @@@ yy12
                ++YYCURSOR;
                YYDEBUG(13, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2049 "Zend/zend_language_scanner.l"
 -#line 1898 "Zend/zend_language_scanner.l"
++#line 2050 "Zend/zend_language_scanner.l"
                {
        while (YYCURSOR < YYLIMIT) {
                switch (*YYCURSOR++) {
@@@ -1610,7 -1468,7 +1610,7 @@@ yy17
                ++YYCURSOR;
                YYDEBUG(18, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2132 "Zend/zend_language_scanner.l"
 -#line 1969 "Zend/zend_language_scanner.l"
++#line 2133 "Zend/zend_language_scanner.l"
                {
        register char *s, *t;
        char *end;
@@@ -1872,9 -1702,9 +1873,9 @@@ yy27
                }
        }
        ZEND_ASSERT(!errno);
 -      RETURN_TOKEN(T_LNUMBER);
 +      RETURN_TOKEN_WITH_VAL(T_LNUMBER);
  }
- #line 1878 "Zend/zend_language_scanner.c"
 -#line 1708 "Zend/zend_language_scanner.c"
++#line 1879 "Zend/zend_language_scanner.c"
  yy28:
                YYDEBUG(28, *YYCURSOR);
                yyaccept = 1;
@@@ -1956,11 -1786,12 +1957,11 @@@ yy35
  yy36:
                YYDEBUG(36, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2044 "Zend/zend_language_scanner.l"
 -#line 1892 "Zend/zend_language_scanner.l"
++#line 2045 "Zend/zend_language_scanner.l"
                {
 -      zend_copy_value(zendlval, yytext, yyleng);
 -      RETURN_TOKEN(T_STRING);
 +      RETURN_TOKEN_WITH_STR(T_STRING, 0);
  }
- #line 1964 "Zend/zend_language_scanner.c"
 -#line 1795 "Zend/zend_language_scanner.c"
++#line 1965 "Zend/zend_language_scanner.c"
  yy37:
                YYDEBUG(37, *YYCURSOR);
                yyaccept = 2;
@@@ -2249,7 -2080,7 +2250,7 @@@ yy58
                {
        RETURN_TOKEN(T_NS_SEPARATOR);
  }
- #line 2253 "Zend/zend_language_scanner.c"
 -#line 2084 "Zend/zend_language_scanner.c"
++#line 2254 "Zend/zend_language_scanner.c"
  yy60:
                YYDEBUG(60, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -2265,12 -2096,12 +2266,12 @@@ yy62
                ++YYCURSOR;
                YYDEBUG(63, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2401 "Zend/zend_language_scanner.l"
 -#line 2128 "Zend/zend_language_scanner.l"
++#line 2402 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_BACKQUOTE);
        RETURN_TOKEN('`');
  }
- #line 2274 "Zend/zend_language_scanner.c"
 -#line 2105 "Zend/zend_language_scanner.c"
++#line 2275 "Zend/zend_language_scanner.c"
  yy64:
                YYDEBUG(64, *YYCURSOR);
                ++YYCURSOR;
        yy_push_state(ST_IN_SCRIPTING);
        RETURN_TOKEN('{');
  }
- #line 2285 "Zend/zend_language_scanner.c"
 -#line 2116 "Zend/zend_language_scanner.c"
++#line 2286 "Zend/zend_language_scanner.c"
  yy66:
                YYDEBUG(66, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -2301,7 -2132,7 +2302,7 @@@ yy67
        }
        RETURN_TOKEN('}');
  }
- #line 2305 "Zend/zend_language_scanner.c"
 -#line 2136 "Zend/zend_language_scanner.c"
++#line 2306 "Zend/zend_language_scanner.c"
  yy69:
                YYDEBUG(69, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -2313,7 -2144,7 +2314,7 @@@ yy70
                {
        RETURN_TOKEN(T_IS_NOT_EQUAL);
  }
- #line 2317 "Zend/zend_language_scanner.c"
 -#line 2148 "Zend/zend_language_scanner.c"
++#line 2318 "Zend/zend_language_scanner.c"
  yy71:
                YYDEBUG(71, *YYCURSOR);
                ++YYCURSOR;
  yy73:
                YYDEBUG(73, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2022 "Zend/zend_language_scanner.l"
 -#line 1869 "Zend/zend_language_scanner.l"
++#line 2023 "Zend/zend_language_scanner.l"
                {
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 -      RETURN_TOKEN(T_VARIABLE);
 +      RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
  }
- #line 2346 "Zend/zend_language_scanner.c"
 -#line 2178 "Zend/zend_language_scanner.c"
++#line 2347 "Zend/zend_language_scanner.c"
  yy74:
                YYDEBUG(74, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_MOD_EQUAL);
  }
- #line 2356 "Zend/zend_language_scanner.c"
 -#line 2188 "Zend/zend_language_scanner.c"
++#line 2357 "Zend/zend_language_scanner.c"
  yy76:
                YYDEBUG(76, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_BOOLEAN_AND);
  }
- #line 2366 "Zend/zend_language_scanner.c"
 -#line 2198 "Zend/zend_language_scanner.c"
++#line 2367 "Zend/zend_language_scanner.c"
  yy78:
                YYDEBUG(78, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_AND_EQUAL);
  }
- #line 2376 "Zend/zend_language_scanner.c"
 -#line 2208 "Zend/zend_language_scanner.c"
++#line 2377 "Zend/zend_language_scanner.c"
  yy80:
                YYDEBUG(80, *YYCURSOR);
                ++YYCURSOR;
@@@ -2506,7 -2338,7 +2507,7 @@@ yy92
                {
        RETURN_TOKEN(T_POW);
  }
- #line 2510 "Zend/zend_language_scanner.c"
 -#line 2342 "Zend/zend_language_scanner.c"
++#line 2511 "Zend/zend_language_scanner.c"
  yy94:
                YYDEBUG(94, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_MUL_EQUAL);
  }
- #line 2520 "Zend/zend_language_scanner.c"
 -#line 2352 "Zend/zend_language_scanner.c"
++#line 2521 "Zend/zend_language_scanner.c"
  yy96:
                YYDEBUG(96, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_INC);
  }
- #line 2530 "Zend/zend_language_scanner.c"
 -#line 2362 "Zend/zend_language_scanner.c"
++#line 2531 "Zend/zend_language_scanner.c"
  yy98:
                YYDEBUG(98, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_PLUS_EQUAL);
  }
- #line 2540 "Zend/zend_language_scanner.c"
 -#line 2372 "Zend/zend_language_scanner.c"
++#line 2541 "Zend/zend_language_scanner.c"
  yy100:
                YYDEBUG(100, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_DEC);
  }
- #line 2550 "Zend/zend_language_scanner.c"
 -#line 2382 "Zend/zend_language_scanner.c"
++#line 2551 "Zend/zend_language_scanner.c"
  yy102:
                YYDEBUG(102, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_MINUS_EQUAL);
  }
- #line 2560 "Zend/zend_language_scanner.c"
 -#line 2392 "Zend/zend_language_scanner.c"
++#line 2561 "Zend/zend_language_scanner.c"
  yy104:
                YYDEBUG(104, *YYCURSOR);
                ++YYCURSOR;
        yy_push_state(ST_LOOKING_FOR_PROPERTY);
        RETURN_TOKEN(T_OBJECT_OPERATOR);
  }
- #line 2571 "Zend/zend_language_scanner.c"
 -#line 2403 "Zend/zend_language_scanner.c"
++#line 2572 "Zend/zend_language_scanner.c"
  yy106:
                YYDEBUG(106, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -2590,16 -2422,16 +2591,16 @@@ yy107
  yy109:
                YYDEBUG(109, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1884 "Zend/zend_language_scanner.l"
 -#line 1740 "Zend/zend_language_scanner.l"
++#line 1885 "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(T_DNUMBER);
 +      RETURN_TOKEN_WITH_VAL(T_DNUMBER);
  }
- #line 2603 "Zend/zend_language_scanner.c"
 -#line 2435 "Zend/zend_language_scanner.c"
++#line 2604 "Zend/zend_language_scanner.c"
  yy110:
                YYDEBUG(110, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_CONCAT_EQUAL);
  }
- #line 2613 "Zend/zend_language_scanner.c"
 -#line 2445 "Zend/zend_language_scanner.c"
++#line 2614 "Zend/zend_language_scanner.c"
  yy112:
                YYDEBUG(112, *YYCURSOR);
                yyaccept = 4;
  yy113:
                YYDEBUG(113, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2081 "Zend/zend_language_scanner.l"
 -#line 1927 "Zend/zend_language_scanner.l"
++#line 2082 "Zend/zend_language_scanner.l"
                {
        int doc_com;
  
                RETURN_TOKEN(T_DOC_COMMENT);
        }
  
 +      if (PARSER_MODE()) {
 +              SKIP_TOKEN(T_COMMENT);
 +      }
        RETURN_TOKEN(T_COMMENT);
  }
- #line 2661 "Zend/zend_language_scanner.c"
 -#line 2487 "Zend/zend_language_scanner.c"
++#line 2662 "Zend/zend_language_scanner.c"
  yy114:
                YYDEBUG(114, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_DIV_EQUAL);
  }
- #line 2671 "Zend/zend_language_scanner.c"
 -#line 2497 "Zend/zend_language_scanner.c"
++#line 2672 "Zend/zend_language_scanner.c"
  yy116:
                YYDEBUG(116, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -2703,7 -2529,7 +2704,7 @@@ yy119
                {
        RETURN_TOKEN(T_PAAMAYIM_NEKUDOTAYIM);
  }
- #line 2707 "Zend/zend_language_scanner.c"
 -#line 2533 "Zend/zend_language_scanner.c"
++#line 2708 "Zend/zend_language_scanner.c"
  yy121:
                YYDEBUG(121, *YYCURSOR);
                yyaccept = 5;
@@@ -2718,7 -2544,7 +2719,7 @@@ yy122
                {
        RETURN_TOKEN(T_SL);
  }
- #line 2722 "Zend/zend_language_scanner.c"
 -#line 2548 "Zend/zend_language_scanner.c"
++#line 2723 "Zend/zend_language_scanner.c"
  yy123:
                YYDEBUG(123, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_IS_SMALLER_OR_EQUAL);
  }
- #line 2733 "Zend/zend_language_scanner.c"
 -#line 2559 "Zend/zend_language_scanner.c"
++#line 2734 "Zend/zend_language_scanner.c"
  yy125:
                YYDEBUG(125, *YYCURSOR);
                ++YYCURSOR;
@@@ -2744,7 -2570,7 +2745,7 @@@ yy126
                {
        RETURN_TOKEN(T_IS_EQUAL);
  }
- #line 2748 "Zend/zend_language_scanner.c"
 -#line 2574 "Zend/zend_language_scanner.c"
++#line 2749 "Zend/zend_language_scanner.c"
  yy128:
                YYDEBUG(128, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_DOUBLE_ARROW);
  }
- #line 2758 "Zend/zend_language_scanner.c"
 -#line 2584 "Zend/zend_language_scanner.c"
++#line 2759 "Zend/zend_language_scanner.c"
  yy130:
                YYDEBUG(130, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_IS_GREATER_OR_EQUAL);
  }
- #line 2768 "Zend/zend_language_scanner.c"
 -#line 2594 "Zend/zend_language_scanner.c"
++#line 2769 "Zend/zend_language_scanner.c"
  yy132:
                YYDEBUG(132, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_SR);
  }
- #line 2779 "Zend/zend_language_scanner.c"
 -#line 2605 "Zend/zend_language_scanner.c"
++#line 2780 "Zend/zend_language_scanner.c"
  yy134:
                YYDEBUG(134, *YYCURSOR);
                yych = *++YYCURSOR;
  yy135:
                YYDEBUG(135, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2120 "Zend/zend_language_scanner.l"
 -#line 1960 "Zend/zend_language_scanner.l"
++#line 2121 "Zend/zend_language_scanner.l"
                {
        BEGIN(INITIAL);
        if (yytext[yyleng-1] != '>') {
                CG(increment_lineno) = 1;
        }
 -      RETURN_TOKEN(T_CLOSE_TAG);  /* implicit ';' at php-end tag */
 +      if (PARSER_MODE()) {
 +              RETURN_TOKEN(';');  /* implicit ';' at php-end tag */
 +      }
 +      RETURN_TOKEN(T_CLOSE_TAG);
  }
- #line 2799 "Zend/zend_language_scanner.c"
 -#line 2622 "Zend/zend_language_scanner.c"
++#line 2800 "Zend/zend_language_scanner.c"
  yy136:
                YYDEBUG(136, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_COALESCE);
  }
- #line 2809 "Zend/zend_language_scanner.c"
 -#line 2632 "Zend/zend_language_scanner.c"
++#line 2810 "Zend/zend_language_scanner.c"
  yy138:
                YYDEBUG(138, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -2836,7 -2659,7 +2837,7 @@@ yy141
                {
        RETURN_TOKEN(T_AS);
  }
- #line 2840 "Zend/zend_language_scanner.c"
 -#line 2663 "Zend/zend_language_scanner.c"
++#line 2841 "Zend/zend_language_scanner.c"
  yy143:
                YYDEBUG(143, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -2926,7 -2749,7 +2927,7 @@@ yy150
                {
        RETURN_TOKEN(T_DO);
  }
- #line 2930 "Zend/zend_language_scanner.c"
 -#line 2753 "Zend/zend_language_scanner.c"
++#line 2931 "Zend/zend_language_scanner.c"
  yy152:
                YYDEBUG(152, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -3015,7 -2838,7 +3016,7 @@@ yy163
                {
        RETURN_TOKEN(T_IF);
  }
- #line 3019 "Zend/zend_language_scanner.c"
 -#line 2842 "Zend/zend_language_scanner.c"
++#line 3020 "Zend/zend_language_scanner.c"
  yy165:
                YYDEBUG(165, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -3080,7 -2903,7 +3081,7 @@@ yy171
                {
        RETURN_TOKEN(T_LOGICAL_OR);
  }
- #line 3084 "Zend/zend_language_scanner.c"
 -#line 2907 "Zend/zend_language_scanner.c"
++#line 3085 "Zend/zend_language_scanner.c"
  yy173:
                YYDEBUG(173, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -3198,7 -3021,7 +3199,7 @@@ yy186
                {
        RETURN_TOKEN(T_XOR_EQUAL);
  }
- #line 3202 "Zend/zend_language_scanner.c"
 -#line 3025 "Zend/zend_language_scanner.c"
++#line 3203 "Zend/zend_language_scanner.c"
  yy188:
                YYDEBUG(188, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -3230,7 -3053,7 +3231,7 @@@ yy189
                {
        RETURN_TOKEN(T_OR_EQUAL);
  }
- #line 3234 "Zend/zend_language_scanner.c"
 -#line 3057 "Zend/zend_language_scanner.c"
++#line 3235 "Zend/zend_language_scanner.c"
  yy191:
                YYDEBUG(191, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_BOOLEAN_OR);
  }
- #line 3244 "Zend/zend_language_scanner.c"
 -#line 3067 "Zend/zend_language_scanner.c"
++#line 3245 "Zend/zend_language_scanner.c"
  yy193:
                YYDEBUG(193, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_IS_NOT_IDENTICAL);
  }
- #line 3254 "Zend/zend_language_scanner.c"
 -#line 3077 "Zend/zend_language_scanner.c"
++#line 3255 "Zend/zend_language_scanner.c"
  yy195:
                YYDEBUG(195, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -3320,7 -3143,7 +3321,7 @@@ yy205
                {
        RETURN_TOKEN(T_POW_EQUAL);
  }
- #line 3324 "Zend/zend_language_scanner.c"
 -#line 3147 "Zend/zend_language_scanner.c"
++#line 3325 "Zend/zend_language_scanner.c"
  yy207:
                YYDEBUG(207, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_ELLIPSIS);
  }
- #line 3334 "Zend/zend_language_scanner.c"
 -#line 3157 "Zend/zend_language_scanner.c"
++#line 3335 "Zend/zend_language_scanner.c"
  yy209:
                YYDEBUG(209, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -3379,10 -3202,10 +3380,10 @@@ yy210
                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(T_DNUMBER);
 +              RETURN_TOKEN_WITH_VAL(T_DNUMBER);
        }
  }
- #line 3386 "Zend/zend_language_scanner.c"
 -#line 3209 "Zend/zend_language_scanner.c"
++#line 3387 "Zend/zend_language_scanner.c"
  yy213:
                YYDEBUG(213, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -3408,7 -3231,7 +3409,7 @@@ yy216
                }
                YYDEBUG(218, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1831 "Zend/zend_language_scanner.l"
 -#line 1691 "Zend/zend_language_scanner.l"
++#line 1832 "Zend/zend_language_scanner.l"
                {
        char *hex = yytext + 2; /* Skip "0x" */
        int len = yyleng - 2;
                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(T_DNUMBER);
 +              RETURN_TOKEN_WITH_VAL(T_DNUMBER);
        }
  }
- #line 3440 "Zend/zend_language_scanner.c"
 -#line 3263 "Zend/zend_language_scanner.c"
++#line 3441 "Zend/zend_language_scanner.c"
  yy219:
                YYDEBUG(219, *YYCURSOR);
                ++YYCURSOR;
@@@ -3475,7 -3298,7 +3476,7 @@@ yy221
                {
        RETURN_TOKEN(T_SL_EQUAL);
  }
- #line 3479 "Zend/zend_language_scanner.c"
 -#line 3302 "Zend/zend_language_scanner.c"
++#line 3480 "Zend/zend_language_scanner.c"
  yy223:
                YYDEBUG(223, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_SPACESHIP);
  }
- #line 3489 "Zend/zend_language_scanner.c"
 -#line 3312 "Zend/zend_language_scanner.c"
++#line 3490 "Zend/zend_language_scanner.c"
  yy225:
                YYDEBUG(225, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_IS_IDENTICAL);
  }
- #line 3499 "Zend/zend_language_scanner.c"
 -#line 3322 "Zend/zend_language_scanner.c"
++#line 3500 "Zend/zend_language_scanner.c"
  yy227:
                YYDEBUG(227, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_SR_EQUAL);
  }
- #line 3509 "Zend/zend_language_scanner.c"
 -#line 3332 "Zend/zend_language_scanner.c"
++#line 3510 "Zend/zend_language_scanner.c"
  yy229:
                YYDEBUG(229, *YYCURSOR);
                ++YYCURSOR;
@@@ -3533,7 -3356,7 +3534,7 @@@ yy232
                {
        RETURN_TOKEN(T_LOGICAL_AND);
  }
- #line 3537 "Zend/zend_language_scanner.c"
 -#line 3360 "Zend/zend_language_scanner.c"
++#line 3538 "Zend/zend_language_scanner.c"
  yy234:
                YYDEBUG(234, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -3618,7 -3441,7 +3619,7 @@@ yy245
                {
        RETURN_TOKEN(T_EXIT);
  }
- #line 3622 "Zend/zend_language_scanner.c"
 -#line 3445 "Zend/zend_language_scanner.c"
++#line 3623 "Zend/zend_language_scanner.c"
  yy247:
                YYDEBUG(247, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -3704,7 -3527,7 +3705,7 @@@ yy256
                {
        RETURN_TOKEN(T_FOR);
  }
- #line 3708 "Zend/zend_language_scanner.c"
 -#line 3531 "Zend/zend_language_scanner.c"
++#line 3709 "Zend/zend_language_scanner.c"
  yy257:
                YYDEBUG(257, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -3777,7 -3600,7 +3778,7 @@@ yy267
                {
        RETURN_TOKEN(T_NEW);
  }
- #line 3781 "Zend/zend_language_scanner.c"
 -#line 3604 "Zend/zend_language_scanner.c"
++#line 3782 "Zend/zend_language_scanner.c"
  yy269:
                YYDEBUG(269, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -3854,7 -3677,7 +3855,7 @@@ yy278
                {
        RETURN_TOKEN(T_TRY);
  }
- #line 3858 "Zend/zend_language_scanner.c"
 -#line 3681 "Zend/zend_language_scanner.c"
++#line 3859 "Zend/zend_language_scanner.c"
  yy280:
                YYDEBUG(280, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -3873,7 -3696,7 +3874,7 @@@ yy281
                {
        RETURN_TOKEN(T_USE);
  }
- #line 3877 "Zend/zend_language_scanner.c"
 -#line 3700 "Zend/zend_language_scanner.c"
++#line 3878 "Zend/zend_language_scanner.c"
  yy283:
                YYDEBUG(283, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_VAR);
  }
- #line 3890 "Zend/zend_language_scanner.c"
 -#line 3713 "Zend/zend_language_scanner.c"
++#line 3891 "Zend/zend_language_scanner.c"
  yy285:
                YYDEBUG(285, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -3905,7 -3728,7 +3906,7 @@@ yy286
                {
        RETURN_TOKEN(T_LOGICAL_XOR);
  }
- #line 3909 "Zend/zend_language_scanner.c"
 -#line 3732 "Zend/zend_language_scanner.c"
++#line 3910 "Zend/zend_language_scanner.c"
  yy288:
                YYDEBUG(288, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -4123,7 -3946,7 +4124,7 @@@ yy317
                {
        RETURN_TOKEN(T_CASE);
  }
- #line 4127 "Zend/zend_language_scanner.c"
 -#line 3950 "Zend/zend_language_scanner.c"
++#line 4128 "Zend/zend_language_scanner.c"
  yy319:
                YYDEBUG(319, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -4178,7 -4001,7 +4179,7 @@@ yy326
                {
        RETURN_TOKEN(T_ECHO);
  }
- #line 4182 "Zend/zend_language_scanner.c"
 -#line 4005 "Zend/zend_language_scanner.c"
++#line 4183 "Zend/zend_language_scanner.c"
  yy328:
                YYDEBUG(328, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -4206,7 -4029,7 +4207,7 @@@ yy329
                {
        RETURN_TOKEN(T_ELSE);
  }
- #line 4210 "Zend/zend_language_scanner.c"
 -#line 4033 "Zend/zend_language_scanner.c"
++#line 4211 "Zend/zend_language_scanner.c"
  yy330:
                YYDEBUG(330, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -4255,7 -4078,7 +4256,7 @@@ yy336
                {
        RETURN_TOKEN(T_EVAL);
  }
- #line 4259 "Zend/zend_language_scanner.c"
 -#line 4082 "Zend/zend_language_scanner.c"
++#line 4260 "Zend/zend_language_scanner.c"
  yy338:
                YYDEBUG(338, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_EXIT);
  }
- #line 4272 "Zend/zend_language_scanner.c"
 -#line 4095 "Zend/zend_language_scanner.c"
++#line 4273 "Zend/zend_language_scanner.c"
  yy340:
                YYDEBUG(340, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -4311,7 -4134,7 +4312,7 @@@ yy345
                {
        RETURN_TOKEN(T_GOTO);
  }
- #line 4315 "Zend/zend_language_scanner.c"
 -#line 4138 "Zend/zend_language_scanner.c"
++#line 4316 "Zend/zend_language_scanner.c"
  yy347:
                YYDEBUG(347, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -4364,7 -4187,7 +4365,7 @@@ yy352
                {
        RETURN_TOKEN(T_LIST);
  }
- #line 4368 "Zend/zend_language_scanner.c"
 -#line 4191 "Zend/zend_language_scanner.c"
++#line 4369 "Zend/zend_language_scanner.c"
  yy354:
                YYDEBUG(354, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -4555,7 -4378,7 +4556,7 @@@ yy383
                {
        RETURN_TOKEN(T_INT_CAST);
  }
- #line 4559 "Zend/zend_language_scanner.c"
 -#line 4382 "Zend/zend_language_scanner.c"
++#line 4560 "Zend/zend_language_scanner.c"
  yy386:
                YYDEBUG(386, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -4652,13 -4475,11 +4653,13 @@@ yy396
  yy397:
                YYDEBUG(397, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2268 "Zend/zend_language_scanner.l"
 -#line 2080 "Zend/zend_language_scanner.l"
++#line 2269 "Zend/zend_language_scanner.l"
                {
        char *s;
 -      int bprefix = (yytext[0] != '<') ? 1 : 0;
 +      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);
  
        RETURN_TOKEN(T_START_HEREDOC);
  }
- #line 4788 "Zend/zend_language_scanner.c"
 -#line 4526 "Zend/zend_language_scanner.c"
++#line 4789 "Zend/zend_language_scanner.c"
  yy398:
                YYDEBUG(398, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -4808,7 -4546,7 +4809,7 @@@ yy400
                {
        RETURN_TOKEN(T_ARRAY);
  }
- #line 4812 "Zend/zend_language_scanner.c"
 -#line 4550 "Zend/zend_language_scanner.c"
++#line 4813 "Zend/zend_language_scanner.c"
  yy402:
                YYDEBUG(402, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_BREAK);
  }
- #line 4825 "Zend/zend_language_scanner.c"
 -#line 4563 "Zend/zend_language_scanner.c"
++#line 4826 "Zend/zend_language_scanner.c"
  yy404:
                YYDEBUG(404, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -4840,7 -4578,7 +4841,7 @@@ yy405
                {
        RETURN_TOKEN(T_CATCH);
  }
- #line 4844 "Zend/zend_language_scanner.c"
 -#line 4582 "Zend/zend_language_scanner.c"
++#line 4845 "Zend/zend_language_scanner.c"
  yy407:
                YYDEBUG(407, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_CLASS);
  }
- #line 4857 "Zend/zend_language_scanner.c"
 -#line 4595 "Zend/zend_language_scanner.c"
++#line 4858 "Zend/zend_language_scanner.c"
  yy409:
                YYDEBUG(409, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_CLONE);
  }
- #line 4870 "Zend/zend_language_scanner.c"
 -#line 4608 "Zend/zend_language_scanner.c"
++#line 4871 "Zend/zend_language_scanner.c"
  yy411:
                YYDEBUG(411, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_CONST);
  }
- #line 4883 "Zend/zend_language_scanner.c"
 -#line 4621 "Zend/zend_language_scanner.c"
++#line 4884 "Zend/zend_language_scanner.c"
  yy413:
                YYDEBUG(413, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -4916,7 -4654,7 +4917,7 @@@ yy417
                {
        RETURN_TOKEN(T_EMPTY);
  }
- #line 4920 "Zend/zend_language_scanner.c"
 -#line 4658 "Zend/zend_language_scanner.c"
++#line 4921 "Zend/zend_language_scanner.c"
  yy419:
                YYDEBUG(419, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -4941,7 -4679,7 +4942,7 @@@ yy421
                {
        RETURN_TOKEN(T_ENDIF);
  }
- #line 4945 "Zend/zend_language_scanner.c"
 -#line 4683 "Zend/zend_language_scanner.c"
++#line 4946 "Zend/zend_language_scanner.c"
  yy423:
                YYDEBUG(423, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -4987,7 -4725,7 +4988,7 @@@ yy427
                {
        RETURN_TOKEN(T_FINAL);
  }
- #line 4991 "Zend/zend_language_scanner.c"
 -#line 4729 "Zend/zend_language_scanner.c"
++#line 4992 "Zend/zend_language_scanner.c"
  yy428:
                YYDEBUG(428, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5048,7 -4786,7 +5049,7 @@@ yy436
                {
        RETURN_TOKEN(T_ISSET);
  }
- #line 5052 "Zend/zend_language_scanner.c"
 -#line 4790 "Zend/zend_language_scanner.c"
++#line 5053 "Zend/zend_language_scanner.c"
  yy438:
                YYDEBUG(438, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5067,7 -4805,7 +5068,7 @@@ yy439
                {
        RETURN_TOKEN(T_PRINT);
  }
- #line 5071 "Zend/zend_language_scanner.c"
 -#line 4809 "Zend/zend_language_scanner.c"
++#line 5072 "Zend/zend_language_scanner.c"
  yy441:
                YYDEBUG(441, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5122,7 -4860,7 +5123,7 @@@ yy448
                {
        RETURN_TOKEN(T_THROW);
  }
- #line 5126 "Zend/zend_language_scanner.c"
 -#line 4864 "Zend/zend_language_scanner.c"
++#line 5127 "Zend/zend_language_scanner.c"
  yy450:
                YYDEBUG(450, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_TRAIT);
  }
- #line 5139 "Zend/zend_language_scanner.c"
 -#line 4877 "Zend/zend_language_scanner.c"
++#line 5140 "Zend/zend_language_scanner.c"
  yy452:
                YYDEBUG(452, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_UNSET);
  }
- #line 5152 "Zend/zend_language_scanner.c"
 -#line 4890 "Zend/zend_language_scanner.c"
++#line 5153 "Zend/zend_language_scanner.c"
  yy454:
                YYDEBUG(454, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_WHILE);
  }
- #line 5165 "Zend/zend_language_scanner.c"
 -#line 4903 "Zend/zend_language_scanner.c"
++#line 5166 "Zend/zend_language_scanner.c"
  yy456:
                YYDEBUG(456, *YYCURSOR);
                yyaccept = 6;
@@@ -5183,7 -4921,7 +5184,7 @@@ yy457
                {
        RETURN_TOKEN(T_YIELD);
  }
- #line 5187 "Zend/zend_language_scanner.c"
 -#line 4925 "Zend/zend_language_scanner.c"
++#line 5188 "Zend/zend_language_scanner.c"
  yy458:
                YYDEBUG(458, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5279,7 -5017,7 +5280,7 @@@ yy471
                {
        RETURN_TOKEN(T_BOOL_CAST);
  }
- #line 5283 "Zend/zend_language_scanner.c"
 -#line 5021 "Zend/zend_language_scanner.c"
++#line 5284 "Zend/zend_language_scanner.c"
  yy474:
                YYDEBUG(474, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5313,7 -5051,7 +5314,7 @@@ yy478
                {
        RETURN_TOKEN(T_DOUBLE_CAST);
  }
- #line 5317 "Zend/zend_language_scanner.c"
 -#line 5055 "Zend/zend_language_scanner.c"
++#line 5318 "Zend/zend_language_scanner.c"
  yy480:
                YYDEBUG(480, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5382,7 -5120,7 +5383,7 @@@ yy489
                {
        RETURN_TOKEN(T_ELSEIF);
  }
- #line 5386 "Zend/zend_language_scanner.c"
 -#line 5124 "Zend/zend_language_scanner.c"
++#line 5387 "Zend/zend_language_scanner.c"
  yy491:
                YYDEBUG(491, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5416,7 -5154,7 +5417,7 @@@ yy493
                {
        RETURN_TOKEN(T_ENDFOR);
  }
- #line 5420 "Zend/zend_language_scanner.c"
 -#line 5158 "Zend/zend_language_scanner.c"
++#line 5421 "Zend/zend_language_scanner.c"
  yy494:
                YYDEBUG(494, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5465,7 -5203,7 +5466,7 @@@ yy500
                {
        RETURN_TOKEN(T_GLOBAL);
  }
- #line 5469 "Zend/zend_language_scanner.c"
 -#line 5207 "Zend/zend_language_scanner.c"
++#line 5470 "Zend/zend_language_scanner.c"
  yy502:
                YYDEBUG(502, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5526,7 -5264,7 +5527,7 @@@ yy510
                {
        RETURN_TOKEN(T_PUBLIC);
  }
- #line 5530 "Zend/zend_language_scanner.c"
 -#line 5268 "Zend/zend_language_scanner.c"
++#line 5531 "Zend/zend_language_scanner.c"
  yy512:
                YYDEBUG(512, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5545,7 -5283,7 +5546,7 @@@ yy513
                {
        RETURN_TOKEN(T_RETURN);
  }
- #line 5549 "Zend/zend_language_scanner.c"
 -#line 5287 "Zend/zend_language_scanner.c"
++#line 5550 "Zend/zend_language_scanner.c"
  yy515:
                YYDEBUG(515, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_STATIC);
  }
- #line 5562 "Zend/zend_language_scanner.c"
 -#line 5300 "Zend/zend_language_scanner.c"
++#line 5563 "Zend/zend_language_scanner.c"
  yy517:
                YYDEBUG(517, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_SWITCH);
  }
- #line 5575 "Zend/zend_language_scanner.c"
 -#line 5313 "Zend/zend_language_scanner.c"
++#line 5576 "Zend/zend_language_scanner.c"
  yy519:
                YYDEBUG(519, *YYCURSOR);
                ++YYCURSOR;
@@@ -5655,7 -5393,7 +5656,7 @@@ yy530
                {
        RETURN_TOKEN(T_ARRAY_CAST);
  }
- #line 5659 "Zend/zend_language_scanner.c"
 -#line 5397 "Zend/zend_language_scanner.c"
++#line 5660 "Zend/zend_language_scanner.c"
  yy532:
                YYDEBUG(532, *YYCURSOR);
                ++YYCURSOR;
@@@ -5705,7 -5443,7 +5706,7 @@@ yy538
                {
        RETURN_TOKEN(T_UNSET_CAST);
  }
- #line 5709 "Zend/zend_language_scanner.c"
 -#line 5447 "Zend/zend_language_scanner.c"
++#line 5710 "Zend/zend_language_scanner.c"
  yy540:
                YYDEBUG(540, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5736,7 -5474,7 +5737,7 @@@ yy543
                {
        RETURN_TOKEN(T_DECLARE);
  }
- #line 5740 "Zend/zend_language_scanner.c"
 -#line 5478 "Zend/zend_language_scanner.c"
++#line 5741 "Zend/zend_language_scanner.c"
  yy545:
                YYDEBUG(545, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_DEFAULT);
  }
- #line 5753 "Zend/zend_language_scanner.c"
 -#line 5491 "Zend/zend_language_scanner.c"
++#line 5754 "Zend/zend_language_scanner.c"
  yy547:
                YYDEBUG(547, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5786,7 -5524,7 +5787,7 @@@ yy551
                {
        RETURN_TOKEN(T_EXTENDS);
  }
- #line 5790 "Zend/zend_language_scanner.c"
 -#line 5528 "Zend/zend_language_scanner.c"
++#line 5791 "Zend/zend_language_scanner.c"
  yy553:
                YYDEBUG(553, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_FINALLY);
  }
- #line 5803 "Zend/zend_language_scanner.c"
 -#line 5541 "Zend/zend_language_scanner.c"
++#line 5804 "Zend/zend_language_scanner.c"
  yy555:
                YYDEBUG(555, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_FOREACH);
  }
- #line 5816 "Zend/zend_language_scanner.c"
 -#line 5554 "Zend/zend_language_scanner.c"
++#line 5817 "Zend/zend_language_scanner.c"
  yy557:
                YYDEBUG(557, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5850,7 -5588,7 +5851,7 @@@ yy560
                {
        RETURN_TOKEN(T_INCLUDE);
  }
- #line 5854 "Zend/zend_language_scanner.c"
 -#line 5592 "Zend/zend_language_scanner.c"
++#line 5855 "Zend/zend_language_scanner.c"
  yy561:
                YYDEBUG(561, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5887,7 -5625,7 +5888,7 @@@ yy565
                {
        RETURN_TOKEN(T_PRIVATE);
  }
- #line 5891 "Zend/zend_language_scanner.c"
 -#line 5629 "Zend/zend_language_scanner.c"
++#line 5892 "Zend/zend_language_scanner.c"
  yy567:
                YYDEBUG(567, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5919,7 -5657,7 +5920,7 @@@ yy569
                {
        RETURN_TOKEN(T_REQUIRE);
  }
- #line 5923 "Zend/zend_language_scanner.c"
 -#line 5661 "Zend/zend_language_scanner.c"
++#line 5924 "Zend/zend_language_scanner.c"
  yy570:
                YYDEBUG(570, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5939,11 -5677,11 +5940,11 @@@ yy572
                }
                YYDEBUG(573, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1917 "Zend/zend_language_scanner.l"
 -#line 1773 "Zend/zend_language_scanner.l"
++#line 1918 "Zend/zend_language_scanner.l"
                {
        RETURN_TOKEN(T_DIR);
  }
- #line 5947 "Zend/zend_language_scanner.c"
 -#line 5685 "Zend/zend_language_scanner.c"
++#line 5948 "Zend/zend_language_scanner.c"
  yy574:
                YYDEBUG(574, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -5992,7 -5730,7 +5993,7 @@@ yy581
                {
        RETURN_TOKEN(T_STRING_CAST);
  }
- #line 5996 "Zend/zend_language_scanner.c"
 -#line 5734 "Zend/zend_language_scanner.c"
++#line 5997 "Zend/zend_language_scanner.c"
  yy583:
                YYDEBUG(583, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_OBJECT_CAST);
  }
- #line 6006 "Zend/zend_language_scanner.c"
 -#line 5744 "Zend/zend_language_scanner.c"
++#line 6007 "Zend/zend_language_scanner.c"
  yy585:
                YYDEBUG(585, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_ABSTRACT);
  }
- #line 6019 "Zend/zend_language_scanner.c"
 -#line 5757 "Zend/zend_language_scanner.c"
++#line 6020 "Zend/zend_language_scanner.c"
  yy587:
                YYDEBUG(587, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_CALLABLE);
  }
- #line 6032 "Zend/zend_language_scanner.c"
 -#line 5770 "Zend/zend_language_scanner.c"
++#line 6033 "Zend/zend_language_scanner.c"
  yy589:
                YYDEBUG(589, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_CONTINUE);
  }
- #line 6045 "Zend/zend_language_scanner.c"
 -#line 5783 "Zend/zend_language_scanner.c"
++#line 6046 "Zend/zend_language_scanner.c"
  yy591:
                YYDEBUG(591, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -6072,7 -5810,7 +6073,7 @@@ yy594
                {
        RETURN_TOKEN(T_ENDWHILE);
  }
- #line 6076 "Zend/zend_language_scanner.c"
 -#line 5814 "Zend/zend_language_scanner.c"
++#line 6077 "Zend/zend_language_scanner.c"
  yy596:
                YYDEBUG(596, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_FUNCTION);
  }
- #line 6089 "Zend/zend_language_scanner.c"
 -#line 5827 "Zend/zend_language_scanner.c"
++#line 6090 "Zend/zend_language_scanner.c"
  yy598:
                YYDEBUG(598, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -6153,11 -5891,11 +6154,11 @@@ yy608
                }
                YYDEBUG(609, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1913 "Zend/zend_language_scanner.l"
 -#line 1769 "Zend/zend_language_scanner.l"
++#line 1914 "Zend/zend_language_scanner.l"
                {
        RETURN_TOKEN(T_FILE);
  }
- #line 6161 "Zend/zend_language_scanner.c"
 -#line 5899 "Zend/zend_language_scanner.c"
++#line 6162 "Zend/zend_language_scanner.c"
  yy610:
                YYDEBUG(610, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -6178,11 -5916,11 +6179,11 @@@ yy612
                }
                YYDEBUG(613, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1909 "Zend/zend_language_scanner.l"
 -#line 1765 "Zend/zend_language_scanner.l"
++#line 1910 "Zend/zend_language_scanner.l"
                {
        RETURN_TOKEN(T_LINE);
  }
- #line 6186 "Zend/zend_language_scanner.c"
 -#line 5924 "Zend/zend_language_scanner.c"
++#line 6187 "Zend/zend_language_scanner.c"
  yy614:
                YYDEBUG(614, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -6223,7 -5961,7 +6224,7 @@@ yy619
                {
        RETURN_TOKEN(T_ENDSWITCH);
  }
- #line 6227 "Zend/zend_language_scanner.c"
 -#line 5965 "Zend/zend_language_scanner.c"
++#line 6228 "Zend/zend_language_scanner.c"
  yy621:
                YYDEBUG(621, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -6254,7 -5992,7 +6255,7 @@@ yy624
                {
      RETURN_TOKEN(T_INSTEADOF);
  }
- #line 6258 "Zend/zend_language_scanner.c"
 -#line 5996 "Zend/zend_language_scanner.c"
++#line 6259 "Zend/zend_language_scanner.c"
  yy626:
                YYDEBUG(626, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_INTERFACE);
  }
- #line 6271 "Zend/zend_language_scanner.c"
 -#line 6009 "Zend/zend_language_scanner.c"
++#line 6272 "Zend/zend_language_scanner.c"
  yy628:
                YYDEBUG(628, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_NAMESPACE);
  }
- #line 6284 "Zend/zend_language_scanner.c"
 -#line 6022 "Zend/zend_language_scanner.c"
++#line 6285 "Zend/zend_language_scanner.c"
  yy630:
                YYDEBUG(630, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_PROTECTED);
  }
- #line 6297 "Zend/zend_language_scanner.c"
 -#line 6035 "Zend/zend_language_scanner.c"
++#line 6298 "Zend/zend_language_scanner.c"
  yy632:
                YYDEBUG(632, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -6314,11 -6052,11 +6315,11 @@@ yy634
                }
                YYDEBUG(635, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1893 "Zend/zend_language_scanner.l"
 -#line 1749 "Zend/zend_language_scanner.l"
++#line 1894 "Zend/zend_language_scanner.l"
                {
        RETURN_TOKEN(T_CLASS_C);
  }
- #line 6322 "Zend/zend_language_scanner.c"
 -#line 6060 "Zend/zend_language_scanner.c"
++#line 6323 "Zend/zend_language_scanner.c"
  yy636:
                YYDEBUG(636, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -6350,11 -6088,11 +6351,11 @@@ yy640
                }
                YYDEBUG(641, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1897 "Zend/zend_language_scanner.l"
 -#line 1753 "Zend/zend_language_scanner.l"
++#line 1898 "Zend/zend_language_scanner.l"
                {
        RETURN_TOKEN(T_TRAIT_C);
  }
- #line 6358 "Zend/zend_language_scanner.c"
 -#line 6096 "Zend/zend_language_scanner.c"
++#line 6359 "Zend/zend_language_scanner.c"
  yy642:
                YYDEBUG(642, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_ENDDECLARE);
  }
- #line 6371 "Zend/zend_language_scanner.c"
 -#line 6109 "Zend/zend_language_scanner.c"
++#line 6372 "Zend/zend_language_scanner.c"
  yy644:
                YYDEBUG(644, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_ENDFOREACH);
  }
- #line 6384 "Zend/zend_language_scanner.c"
 -#line 6122 "Zend/zend_language_scanner.c"
++#line 6385 "Zend/zend_language_scanner.c"
  yy646:
                YYDEBUG(646, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_IMPLEMENTS);
  }
- #line 6397 "Zend/zend_language_scanner.c"
 -#line 6135 "Zend/zend_language_scanner.c"
++#line 6398 "Zend/zend_language_scanner.c"
  yy648:
                YYDEBUG(648, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -6412,7 -6150,7 +6413,7 @@@ yy649
                {
        RETURN_TOKEN(T_INSTANCEOF);
  }
- #line 6416 "Zend/zend_language_scanner.c"
 -#line 6154 "Zend/zend_language_scanner.c"
++#line 6417 "Zend/zend_language_scanner.c"
  yy651:
                YYDEBUG(651, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -6460,11 -6198,11 +6461,11 @@@ yy655
                }
                YYDEBUG(656, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1905 "Zend/zend_language_scanner.l"
 -#line 1761 "Zend/zend_language_scanner.l"
++#line 1906 "Zend/zend_language_scanner.l"
                {
        RETURN_TOKEN(T_METHOD_C);
  }
- #line 6468 "Zend/zend_language_scanner.c"
 -#line 6206 "Zend/zend_language_scanner.c"
++#line 6469 "Zend/zend_language_scanner.c"
  yy657:
                YYDEBUG(657, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -6494,7 -6232,7 +6495,7 @@@ yy660
        HANDLE_NEWLINES(yytext, yyleng);
        RETURN_TOKEN(T_YIELD_FROM);
  }
- #line 6498 "Zend/zend_language_scanner.c"
 -#line 6236 "Zend/zend_language_scanner.c"
++#line 6499 "Zend/zend_language_scanner.c"
  yy662:
                YYDEBUG(662, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -6523,7 -6261,7 +6524,7 @@@ yy665
                {
        RETURN_TOKEN(T_INCLUDE_ONCE);
  }
- #line 6527 "Zend/zend_language_scanner.c"
 -#line 6265 "Zend/zend_language_scanner.c"
++#line 6528 "Zend/zend_language_scanner.c"
  yy667:
                YYDEBUG(667, *YYCURSOR);
                yych = *++YYCURSOR;
                {
        RETURN_TOKEN(T_REQUIRE_ONCE);
  }
- #line 6540 "Zend/zend_language_scanner.c"
 -#line 6278 "Zend/zend_language_scanner.c"
++#line 6541 "Zend/zend_language_scanner.c"
  yy669:
                YYDEBUG(669, *YYCURSOR);
                yych = *++YYCURSOR;
                }
                YYDEBUG(670, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1901 "Zend/zend_language_scanner.l"
 -#line 1757 "Zend/zend_language_scanner.l"
++#line 1902 "Zend/zend_language_scanner.l"
                {
        RETURN_TOKEN(T_FUNC_C);
  }
- #line 6553 "Zend/zend_language_scanner.c"
 -#line 6291 "Zend/zend_language_scanner.c"
++#line 6554 "Zend/zend_language_scanner.c"
  yy671:
                YYDEBUG(671, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -6575,11 -6313,11 +6576,11 @@@ yy674
                }
                YYDEBUG(675, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1921 "Zend/zend_language_scanner.l"
 -#line 1777 "Zend/zend_language_scanner.l"
++#line 1922 "Zend/zend_language_scanner.l"
                {
        RETURN_TOKEN(T_NS_C);
  }
- #line 6583 "Zend/zend_language_scanner.c"
 -#line 6321 "Zend/zend_language_scanner.c"
++#line 6584 "Zend/zend_language_scanner.c"
  yy676:
                YYDEBUG(676, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -6597,7 -6335,7 +6598,7 @@@ yy677
                {
        RETURN_TOKEN(T_HALT_COMPILER);
  }
- #line 6601 "Zend/zend_language_scanner.c"
 -#line 6339 "Zend/zend_language_scanner.c"
++#line 6602 "Zend/zend_language_scanner.c"
        }
  /* *********************************** */
  yyc_ST_LOOKING_FOR_PROPERTY:
@@@ -6669,7 -6407,7 +6670,7 @@@ yy682
        yy_pop_state();
        goto restart;
  }
- #line 6673 "Zend/zend_language_scanner.c"
 -#line 6411 "Zend/zend_language_scanner.c"
++#line 6674 "Zend/zend_language_scanner.c"
  yy683:
                YYDEBUG(683, *YYCURSOR);
                ++YYCURSOR;
                }
                YYDEBUG(685, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
 -#line 1292 "Zend/zend_language_scanner.l"
 +#line 1428 "Zend/zend_language_scanner.l"
                {
 -      HANDLE_NEWLINES(yytext, yyleng);
 -      RETURN_TOKEN(T_WHITESPACE);
 +      goto return_whitespace;
  }
- #line 6689 "Zend/zend_language_scanner.c"
 -#line 6428 "Zend/zend_language_scanner.c"
++#line 6690 "Zend/zend_language_scanner.c"
  yy686:
                YYDEBUG(686, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -6702,12 -6441,13 +6703,12 @@@ yy687
                }
                YYDEBUG(689, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
 -#line 1301 "Zend/zend_language_scanner.l"
 +#line 1436 "Zend/zend_language_scanner.l"
                {
        yy_pop_state();
 -      zend_copy_value(zendlval, yytext, yyleng);
 -      RETURN_TOKEN(T_STRING);
 +      RETURN_TOKEN_WITH_STR(T_STRING, 0);
  }
- #line 6711 "Zend/zend_language_scanner.c"
 -#line 6451 "Zend/zend_language_scanner.c"
++#line 6712 "Zend/zend_language_scanner.c"
  yy690:
                YYDEBUG(690, *YYCURSOR);
                ++YYCURSOR;
                {
        RETURN_TOKEN(T_OBJECT_OPERATOR);
  }
- #line 6721 "Zend/zend_language_scanner.c"
 -#line 6461 "Zend/zend_language_scanner.c"
++#line 6722 "Zend/zend_language_scanner.c"
        }
  /* *********************************** */
  yyc_ST_BACKQUOTE:
  yy695:
                YYDEBUG(695, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2493 "Zend/zend_language_scanner.l"
 -#line 2217 "Zend/zend_language_scanner.l"
++#line 2494 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                RETURN_TOKEN(END);
  
        yyleng = YYCURSOR - SCNG(yy_text);
  
 -      zend_scan_escape_string(zendlval, yytext, yyleng, '`');
 -      RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE);
 +      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 6819 "Zend/zend_language_scanner.c"
 -#line 6555 "Zend/zend_language_scanner.c"
++#line 6820 "Zend/zend_language_scanner.c"
  yy696:
                YYDEBUG(696, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -6839,12 -6575,12 +6840,12 @@@ yy697
                ++YYCURSOR;
                YYDEBUG(698, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2433 "Zend/zend_language_scanner.l"
 -#line 2161 "Zend/zend_language_scanner.l"
++#line 2434 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_IN_SCRIPTING);
        RETURN_TOKEN('`');
  }
- #line 6848 "Zend/zend_language_scanner.c"
 -#line 6584 "Zend/zend_language_scanner.c"
++#line 6849 "Zend/zend_language_scanner.c"
  yy699:
                YYDEBUG(699, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -6865,11 -6601,12 +6866,11 @@@ yy700
  yy702:
                YYDEBUG(702, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2022 "Zend/zend_language_scanner.l"
 -#line 1869 "Zend/zend_language_scanner.l"
++#line 2023 "Zend/zend_language_scanner.l"
                {
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 -      RETURN_TOKEN(T_VARIABLE);
 +      RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
  }
- #line 6873 "Zend/zend_language_scanner.c"
 -#line 6610 "Zend/zend_language_scanner.c"
++#line 6874 "Zend/zend_language_scanner.c"
  yy703:
                YYDEBUG(703, *YYCURSOR);
                ++YYCURSOR;
        yy_push_state(ST_LOOKING_FOR_VARNAME);
        RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES);
  }
- #line 6884 "Zend/zend_language_scanner.c"
 -#line 6621 "Zend/zend_language_scanner.c"
++#line 6885 "Zend/zend_language_scanner.c"
  yy705:
                YYDEBUG(705, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(706, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2421 "Zend/zend_language_scanner.l"
 -#line 2148 "Zend/zend_language_scanner.l"
++#line 2422 "Zend/zend_language_scanner.l"
                {
 -      Z_LVAL_P(zendlval) = (zend_long) '{';
        yy_push_state(ST_IN_SCRIPTING);
        yyless(1);
        RETURN_TOKEN(T_CURLY_OPEN);
  }
- #line 6896 "Zend/zend_language_scanner.c"
 -#line 6634 "Zend/zend_language_scanner.c"
++#line 6897 "Zend/zend_language_scanner.c"
  yy707:
                YYDEBUG(707, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -6906,13 -6644,14 +6907,13 @@@ yy709
                ++YYCURSOR;
                YYDEBUG(710, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2016 "Zend/zend_language_scanner.l"
 -#line 1862 "Zend/zend_language_scanner.l"
++#line 2017 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET);
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 -      RETURN_TOKEN(T_VARIABLE);
 +      RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
  }
- #line 6916 "Zend/zend_language_scanner.c"
 -#line 6655 "Zend/zend_language_scanner.c"
++#line 6917 "Zend/zend_language_scanner.c"
  yy711:
                YYDEBUG(711, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -6930,13 -6669,14 +6931,13 @@@ yy712
                ++YYCURSOR;
                YYDEBUG(713, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2008 "Zend/zend_language_scanner.l"
 -#line 1853 "Zend/zend_language_scanner.l"
++#line 2009 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY);
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 -      RETURN_TOKEN(T_VARIABLE);
 +      RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
  }
- #line 6940 "Zend/zend_language_scanner.c"
 -#line 6680 "Zend/zend_language_scanner.c"
++#line 6941 "Zend/zend_language_scanner.c"
        }
  /* *********************************** */
  yyc_ST_DOUBLE_QUOTES:
  yy717:
                YYDEBUG(717, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2439 "Zend/zend_language_scanner.l"
 -#line 2167 "Zend/zend_language_scanner.l"
++#line 2440 "Zend/zend_language_scanner.l"
                {
        if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) {
                YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1;
  double_quotes_scan_done:
        yyleng = YYCURSOR - SCNG(yy_text);
  
 -      zend_scan_escape_string(zendlval, yytext, yyleng, '"');
 -      RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE);
 +      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"
 -#line 6782 "Zend/zend_language_scanner.c"
++#line 7047 "Zend/zend_language_scanner.c"
  yy718:
                YYDEBUG(718, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(719, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2428 "Zend/zend_language_scanner.l"
 -#line 2156 "Zend/zend_language_scanner.l"
++#line 2429 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_IN_SCRIPTING);
        RETURN_TOKEN('"');
  }
- #line 7057 "Zend/zend_language_scanner.c"
 -#line 6793 "Zend/zend_language_scanner.c"
++#line 7058 "Zend/zend_language_scanner.c"
  yy720:
                YYDEBUG(720, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -7092,11 -6828,12 +7093,11 @@@ yy722
  yy724:
                YYDEBUG(724, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2022 "Zend/zend_language_scanner.l"
 -#line 1869 "Zend/zend_language_scanner.l"
++#line 2023 "Zend/zend_language_scanner.l"
                {
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 -      RETURN_TOKEN(T_VARIABLE);
 +      RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
  }
- #line 7100 "Zend/zend_language_scanner.c"
 -#line 6837 "Zend/zend_language_scanner.c"
++#line 7101 "Zend/zend_language_scanner.c"
  yy725:
                YYDEBUG(725, *YYCURSOR);
                ++YYCURSOR;
        yy_push_state(ST_LOOKING_FOR_VARNAME);
        RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES);
  }
- #line 7111 "Zend/zend_language_scanner.c"
 -#line 6848 "Zend/zend_language_scanner.c"
++#line 7112 "Zend/zend_language_scanner.c"
  yy727:
                YYDEBUG(727, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(728, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2421 "Zend/zend_language_scanner.l"
 -#line 2148 "Zend/zend_language_scanner.l"
++#line 2422 "Zend/zend_language_scanner.l"
                {
 -      Z_LVAL_P(zendlval) = (zend_long) '{';
        yy_push_state(ST_IN_SCRIPTING);
        yyless(1);
        RETURN_TOKEN(T_CURLY_OPEN);
  }
- #line 7123 "Zend/zend_language_scanner.c"
 -#line 6861 "Zend/zend_language_scanner.c"
++#line 7124 "Zend/zend_language_scanner.c"
  yy729:
                YYDEBUG(729, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -7133,13 -6871,14 +7134,13 @@@ yy731
                ++YYCURSOR;
                YYDEBUG(732, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2016 "Zend/zend_language_scanner.l"
 -#line 1862 "Zend/zend_language_scanner.l"
++#line 2017 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET);
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 -      RETURN_TOKEN(T_VARIABLE);
 +      RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
  }
- #line 7143 "Zend/zend_language_scanner.c"
 -#line 6882 "Zend/zend_language_scanner.c"
++#line 7144 "Zend/zend_language_scanner.c"
  yy733:
                YYDEBUG(733, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -7157,13 -6896,14 +7158,13 @@@ yy734
                ++YYCURSOR;
                YYDEBUG(735, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2008 "Zend/zend_language_scanner.l"
 -#line 1853 "Zend/zend_language_scanner.l"
++#line 2009 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY);
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 -      RETURN_TOKEN(T_VARIABLE);
 +      RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
  }
- #line 7167 "Zend/zend_language_scanner.c"
 -#line 6907 "Zend/zend_language_scanner.c"
++#line 7168 "Zend/zend_language_scanner.c"
        }
  /* *********************************** */
  yyc_ST_HEREDOC:
  yy739:
                YYDEBUG(739, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2539 "Zend/zend_language_scanner.l"
 -#line 2259 "Zend/zend_language_scanner.l"
++#line 2540 "Zend/zend_language_scanner.l"
                {
 -      int newline = 0;
 -
        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);
        }
  
  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);
 +              }
  
 -      zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0);
 -      RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE);
 +              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);
  }
- #line 7336 "Zend/zend_language_scanner.c"
 -#line 7029 "Zend/zend_language_scanner.c"
++#line 7337 "Zend/zend_language_scanner.c"
  yy740:
                YYDEBUG(740, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -7371,11 -7064,12 +7372,11 @@@ yy742
  yy744:
                YYDEBUG(744, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2022 "Zend/zend_language_scanner.l"
 -#line 1869 "Zend/zend_language_scanner.l"
++#line 2023 "Zend/zend_language_scanner.l"
                {
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 -      RETURN_TOKEN(T_VARIABLE);
 +      RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
  }
- #line 7379 "Zend/zend_language_scanner.c"
 -#line 7073 "Zend/zend_language_scanner.c"
++#line 7380 "Zend/zend_language_scanner.c"
  yy745:
                YYDEBUG(745, *YYCURSOR);
                ++YYCURSOR;
        yy_push_state(ST_LOOKING_FOR_VARNAME);
        RETURN_TOKEN(T_DOLLAR_OPEN_CURLY_BRACES);
  }
- #line 7390 "Zend/zend_language_scanner.c"
 -#line 7084 "Zend/zend_language_scanner.c"
++#line 7391 "Zend/zend_language_scanner.c"
  yy747:
                YYDEBUG(747, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(748, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2421 "Zend/zend_language_scanner.l"
 -#line 2148 "Zend/zend_language_scanner.l"
++#line 2422 "Zend/zend_language_scanner.l"
                {
 -      Z_LVAL_P(zendlval) = (zend_long) '{';
        yy_push_state(ST_IN_SCRIPTING);
        yyless(1);
        RETURN_TOKEN(T_CURLY_OPEN);
  }
- #line 7402 "Zend/zend_language_scanner.c"
 -#line 7097 "Zend/zend_language_scanner.c"
++#line 7403 "Zend/zend_language_scanner.c"
  yy749:
                YYDEBUG(749, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -7412,13 -7107,14 +7413,13 @@@ yy751
                ++YYCURSOR;
                YYDEBUG(752, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2016 "Zend/zend_language_scanner.l"
 -#line 1862 "Zend/zend_language_scanner.l"
++#line 2017 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET);
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 -      RETURN_TOKEN(T_VARIABLE);
 +      RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
  }
- #line 7422 "Zend/zend_language_scanner.c"
 -#line 7118 "Zend/zend_language_scanner.c"
++#line 7423 "Zend/zend_language_scanner.c"
  yy753:
                YYDEBUG(753, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -7436,13 -7132,14 +7437,13 @@@ yy754
                ++YYCURSOR;
                YYDEBUG(755, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2008 "Zend/zend_language_scanner.l"
 -#line 1853 "Zend/zend_language_scanner.l"
++#line 2009 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY);
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 -      RETURN_TOKEN(T_VARIABLE);
 +      RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
  }
- #line 7446 "Zend/zend_language_scanner.c"
 -#line 7143 "Zend/zend_language_scanner.c"
++#line 7447 "Zend/zend_language_scanner.c"
        }
  /* *********************************** */
  yyc_ST_LOOKING_FOR_VARNAME:
@@@ -7506,7 -7203,7 +7507,7 @@@ yy759
        yy_push_state(ST_IN_SCRIPTING);
        goto restart;
  }
- #line 7510 "Zend/zend_language_scanner.c"
 -#line 7207 "Zend/zend_language_scanner.c"
++#line 7511 "Zend/zend_language_scanner.c"
  yy760:
                YYDEBUG(760, *YYCURSOR);
                yych = *(YYMARKER = ++YYCURSOR);
@@@ -7553,14 -7250,15 +7554,14 @@@ yy764
                ++YYCURSOR;
                YYDEBUG(765, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
 -#line 1603 "Zend/zend_language_scanner.l"
 +#line 1737 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
 -      zend_copy_value(zendlval, yytext, yyleng);
        yy_pop_state();
        yy_push_state(ST_IN_SCRIPTING);
 -      RETURN_TOKEN(T_STRING_VARNAME);
 +      RETURN_TOKEN_WITH_STR(T_STRING_VARNAME, 0);
  }
- #line 7564 "Zend/zend_language_scanner.c"
 -#line 7262 "Zend/zend_language_scanner.c"
++#line 7565 "Zend/zend_language_scanner.c"
        }
  /* *********************************** */
  yyc_ST_VAR_OFFSET:
@@@ -7649,7 -7347,7 +7650,7 @@@ yy768
                ++YYCURSOR;
                YYDEBUG(769, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2748 "Zend/zend_language_scanner.l"
 -#line 2390 "Zend/zend_language_scanner.l"
++#line 2749 "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 7662 "Zend/zend_language_scanner.c"
 -#line 7360 "Zend/zend_language_scanner.c"
++#line 7663 "Zend/zend_language_scanner.c"
  yy770:
                YYDEBUG(770, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(771, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2036 "Zend/zend_language_scanner.l"
 -#line 1884 "Zend/zend_language_scanner.l"
++#line 2037 "Zend/zend_language_scanner.l"
                {
        /* Invalid rule to return a more explicit parse error with proper line number */
        yyless(0);
        yy_pop_state();
        ZVAL_NULL(zendlval);
 -      RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE);
 +      RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE);
  }
- #line 7676 "Zend/zend_language_scanner.c"
 -#line 7374 "Zend/zend_language_scanner.c"
++#line 7677 "Zend/zend_language_scanner.c"
  yy772:
                YYDEBUG(772, *YYCURSOR);
                ++YYCURSOR;
  yy773:
                YYDEBUG(773, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2031 "Zend/zend_language_scanner.l"
 -#line 1879 "Zend/zend_language_scanner.l"
++#line 2032 "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 7688 "Zend/zend_language_scanner.c"
 -#line 7386 "Zend/zend_language_scanner.c"
++#line 7689 "Zend/zend_language_scanner.c"
  yy774:
                YYDEBUG(774, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -7719,7 -7417,7 +7720,7 @@@ yy775
  yy776:
                YYDEBUG(776, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1859 "Zend/zend_language_scanner.l"
 -#line 1719 "Zend/zend_language_scanner.l"
++#line 1860 "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;
  string:
                ZVAL_STRINGL(zendlval, yytext, yyleng);
        }
 -      RETURN_TOKEN(T_NUM_STRING);
 +      RETURN_TOKEN_WITH_VAL(T_NUM_STRING);
  }
- #line 7739 "Zend/zend_language_scanner.c"
 -#line 7437 "Zend/zend_language_scanner.c"
++#line 7740 "Zend/zend_language_scanner.c"
  yy777:
                YYDEBUG(777, *YYCURSOR);
                ++YYCURSOR;
@@@ -7757,22 -7455,23 +7758,22 @@@ yy779
                }
                YYDEBUG(781, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2044 "Zend/zend_language_scanner.l"
 -#line 1892 "Zend/zend_language_scanner.l"
++#line 2045 "Zend/zend_language_scanner.l"
                {
 -      zend_copy_value(zendlval, yytext, yyleng);
 -      RETURN_TOKEN(T_STRING);
 +      RETURN_TOKEN_WITH_STR(T_STRING, 0);
  }
- #line 7765 "Zend/zend_language_scanner.c"
 -#line 7464 "Zend/zend_language_scanner.c"
++#line 7766 "Zend/zend_language_scanner.c"
  yy782:
                YYDEBUG(782, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(783, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2026 "Zend/zend_language_scanner.l"
 -#line 1874 "Zend/zend_language_scanner.l"
++#line 2027 "Zend/zend_language_scanner.l"
                {
        yy_pop_state();
        RETURN_TOKEN(']');
  }
- #line 7776 "Zend/zend_language_scanner.c"
 -#line 7475 "Zend/zend_language_scanner.c"
++#line 7777 "Zend/zend_language_scanner.c"
  yy784:
                YYDEBUG(784, *YYCURSOR);
                ++YYCURSOR;
  yy786:
                YYDEBUG(786, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 2022 "Zend/zend_language_scanner.l"
 -#line 1869 "Zend/zend_language_scanner.l"
++#line 2023 "Zend/zend_language_scanner.l"
                {
 -      zend_copy_value(zendlval, (yytext+1), (yyleng-1));
 -      RETURN_TOKEN(T_VARIABLE);
 +      RETURN_TOKEN_WITH_STR(T_VARIABLE, 1);
  }
- #line 7805 "Zend/zend_language_scanner.c"
 -#line 7505 "Zend/zend_language_scanner.c"
++#line 7806 "Zend/zend_language_scanner.c"
  yy787:
                YYDEBUG(787, *YYCURSOR);
                ++YYCURSOR;
  yy789:
                YYDEBUG(789, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
- #line 1875 "Zend/zend_language_scanner.l"
 -#line 1735 "Zend/zend_language_scanner.l"
++#line 1876 "Zend/zend_language_scanner.l"
                { /* Offset must be treated as a string */
 -      ZVAL_STRINGL(zendlval, yytext, yyleng);
 -      RETURN_TOKEN(T_NUM_STRING);
 +      if (yyleng == 1) {
 +              ZVAL_INTERNED_STR(zendlval, ZSTR_CHAR((zend_uchar)*(yytext)));
 +      } else {
 +              ZVAL_STRINGL(zendlval, yytext, yyleng);
 +      }
 +      RETURN_TOKEN_WITH_VAL(T_NUM_STRING);
  }
- #line 7826 "Zend/zend_language_scanner.c"
 -#line 7522 "Zend/zend_language_scanner.c"
++#line 7827 "Zend/zend_language_scanner.c"
  yy790:
                YYDEBUG(790, *YYCURSOR);
                yych = *++YYCURSOR;
@@@ -7872,7 -7568,7 +7873,7 @@@ yyc_INITIAL
  yy800:
        YYDEBUG(800, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
- #line 1957 "Zend/zend_language_scanner.l"
 -#line 1804 "Zend/zend_language_scanner.l"
++#line 1958 "Zend/zend_language_scanner.l"
        {
        if (YYCURSOR > YYLIMIT) {
                RETURN_TOKEN(END);
@@@ -7911,15 -7607,13 +7912,15 @@@ inline_char_handler
                if (readsize < yyleng) {
                        yyless(readsize);
                }
 +      } else if (yyleng == 1) {
 +              ZVAL_INTERNED_STR(zendlval, ZSTR_CHAR((zend_uchar)*yytext));
        } else {
 -        ZVAL_STRINGL(zendlval, yytext, yyleng);
 +              ZVAL_STRINGL(zendlval, yytext, yyleng);
        }
        HANDLE_NEWLINES(yytext, yyleng);
 -      RETURN_TOKEN(T_INLINE_HTML);
 +      RETURN_TOKEN_WITH_VAL(T_INLINE_HTML);
  }
- #line 7923 "Zend/zend_language_scanner.c"
 -#line 7617 "Zend/zend_language_scanner.c"
++#line 7924 "Zend/zend_language_scanner.c"
  yy801:
        YYDEBUG(801, *YYCURSOR);
        yych = *++YYCURSOR;
  yy803:
        YYDEBUG(803, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
- #line 1945 "Zend/zend_language_scanner.l"
 -#line 1795 "Zend/zend_language_scanner.l"
++#line 1946 "Zend/zend_language_scanner.l"
        {
        if (CG(short_tags)) {
                BEGIN(ST_IN_SCRIPTING);
                goto inline_char_handler;
        }
  }
- #line 7951 "Zend/zend_language_scanner.c"
 -#line 7642 "Zend/zend_language_scanner.c"
++#line 7952 "Zend/zend_language_scanner.c"
  yy804:
        YYDEBUG(804, *YYCURSOR);
        ++YYCURSOR;
        YYDEBUG(805, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
- #line 1926 "Zend/zend_language_scanner.l"
 -#line 1782 "Zend/zend_language_scanner.l"
++#line 1927 "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"
 -#line 7653 "Zend/zend_language_scanner.c"
++#line 7966 "Zend/zend_language_scanner.c"
  yy806:
        YYDEBUG(806, *YYCURSOR);
        yych = *++YYCURSOR;
@@@ -7992,16 -7680,13 +7993,16 @@@ yy810
  yy811:
        YYDEBUG(811, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
- #line 1935 "Zend/zend_language_scanner.l"
 -#line 1788 "Zend/zend_language_scanner.l"
++#line 1936 "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"
 -#line 7690 "Zend/zend_language_scanner.c"
++#line 8006 "Zend/zend_language_scanner.c"
  yy812:
        YYDEBUG(812, *YYCURSOR);
        yych = *++YYCURSOR;
@@@ -8016,7 -7701,7 +8017,7 @@@ yyc_ST_END_HEREDOC
        ++YYCURSOR;
        YYDEBUG(816, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
- #line 2407 "Zend/zend_language_scanner.l"
 -#line 2134 "Zend/zend_language_scanner.l"
++#line 2408 "Zend/zend_language_scanner.l"
        {
        zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack));
  
        BEGIN(ST_IN_SCRIPTING);
        RETURN_TOKEN(T_END_HEREDOC);
  }
- #line 8033 "Zend/zend_language_scanner.c"
 -#line 7718 "Zend/zend_language_scanner.c"
++#line 8034 "Zend/zend_language_scanner.c"
  /* *********************************** */
  yyc_ST_NOWDOC:
        YYDEBUG(817, *YYCURSOR);
        ++YYCURSOR;
        YYDEBUG(820, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
- #line 2660 "Zend/zend_language_scanner.l"
 -#line 2333 "Zend/zend_language_scanner.l"
++#line 2661 "Zend/zend_language_scanner.l"
        {
 -      int newline = 0;
 -
        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);
  
  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);
 +              }
 +      }
  
 -      zend_copy_value(zendlval, yytext, yyleng - newline);
        HANDLE_NEWLINES(yytext, yyleng - newline);
 -      RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE);
 +      RETURN_TOKEN_WITH_VAL(T_ENCAPSED_AND_WHITESPACE);
  }
- #line 8130 "Zend/zend_language_scanner.c"
 -#line 7784 "Zend/zend_language_scanner.c"
++#line 8131 "Zend/zend_language_scanner.c"
  }
- #line 2757 "Zend/zend_language_scanner.l"
 -#line 2399 "Zend/zend_language_scanner.l"
++#line 2758 "Zend/zend_language_scanner.l"
  
 +
 +emit_token_with_str:
 +      zend_copy_value(zendlval, (yytext + offset), (yyleng - offset));
 +
 +emit_token_with_val:
 +      if (PARSER_MODE()) {
 +              ZEND_ASSERT(Z_TYPE_P(zendlval) != IS_UNDEF);
 +              elem->ast = zend_ast_create_zval_with_lineno(zendlval, start_line);
 +      }
 +
 +emit_token:
 +      if (SCNG(on_event)) {
 +              SCNG(on_event)(ON_TOKEN, token, start_line, SCNG(on_event_context));
 +      }
 +      return token;
 +
 +return_whitespace:
 +      HANDLE_NEWLINES(yytext, yyleng);
 +      if (SCNG(on_event)) {
 +              SCNG(on_event)(ON_TOKEN, T_WHITESPACE, start_line, SCNG(on_event_context));
 +      }
 +      if (PARSER_MODE()) {
 +              start_line = CG(zend_lineno);
 +              goto restart;
 +      } else {
 +              return T_WHITESPACE;
 +      }
 +
 +skip_token:
 +      if (SCNG(on_event)) {
 +              SCNG(on_event)(ON_TOKEN, token, start_line, SCNG(on_event_context));
 +      }
 +      start_line = CG(zend_lineno);
 +      goto restart;
  }
Simple merge