]> granicus.if.org Git - php/commitdiff
Make use of Z_*VAL and ZVAL_* in language scanner
authorNikita Popov <nikic@php.net>
Fri, 13 Sep 2013 13:08:01 +0000 (15:08 +0200)
committerNikita Popov <nikic@php.net>
Fri, 13 Sep 2013 13:08:01 +0000 (15:08 +0200)
Zend/zend_language_scanner.c
Zend/zend_language_scanner.l

index deb799ab763b2f28be85f6cb32e52fa2c2f3e083..0f0f51194fd52296a7cd08c2982bcbbab574b794 100644 (file)
@@ -564,10 +564,8 @@ ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSR
        zend_bool original_in_compilation = CG(in_compilation);
 
        retval_znode.op_type = IS_CONST;
-       retval_znode.u.constant.type = IS_LONG;
-       retval_znode.u.constant.value.lval = 1;
-       Z_UNSET_ISREF(retval_znode.u.constant);
-       Z_SET_REFCOUNT(retval_znode.u.constant, 1);
+       INIT_PZVAL(&retval_znode.u.constant);
+       ZVAL_LONG(&retval_znode.u.constant, 1);
 
        zend_save_lexical_state(&original_lex_state TSRMLS_CC);
 
@@ -624,7 +622,7 @@ zend_op_array *compile_filename(int type, zval *filename TSRMLS_DC)
                convert_to_string(&tmp);
                filename = &tmp;
        }
-       file_handle.filename = filename->value.str.val;
+       file_handle.filename = Z_STRVAL_P(filename);
        file_handle.free_filename = 0;
        file_handle.type = ZEND_HANDLE_FILENAME;
        file_handle.opened_path = NULL;
@@ -635,7 +633,7 @@ zend_op_array *compile_filename(int type, zval *filename TSRMLS_DC)
                int dummy = 1;
 
                if (!file_handle.opened_path) {
-                       file_handle.opened_path = opened_path = estrndup(filename->value.str.val, filename->value.str.len);
+                       file_handle.opened_path = opened_path = estrndup(Z_STRVAL_P(filename), Z_STRLEN_P(filename));
                }
 
                zend_hash_add(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1, (void *)&dummy, sizeof(int), NULL);
@@ -658,21 +656,21 @@ ZEND_API int zend_prepare_string_for_scanning(zval *str, char *filename TSRMLS_D
        size_t size;
 
        /* enforce two trailing NULLs for flex... */
-       if (IS_INTERNED(str->value.str.val)) {
-               char *tmp = safe_emalloc(1, str->value.str.len, ZEND_MMAP_AHEAD);
-               memcpy(tmp, str->value.str.val, str->value.str.len + ZEND_MMAP_AHEAD);
-               str->value.str.val = tmp;
+       if (IS_INTERNED(Z_STRVAL_P(str))) {
+               char *tmp = safe_emalloc(1, Z_STRLEN_P(str), ZEND_MMAP_AHEAD);
+               memcpy(tmp, Z_STRVAL_P(str), Z_STRLEN_P(str) + ZEND_MMAP_AHEAD);
+               Z_STRVAL_P(str) = tmp;
        } else {
-               str->value.str.val = safe_erealloc(str->value.str.val, 1, str->value.str.len, ZEND_MMAP_AHEAD);
+               Z_STRVAL_P(str) = safe_erealloc(Z_STRVAL_P(str), 1, Z_STRLEN_P(str), ZEND_MMAP_AHEAD);
        }
 
-       memset(str->value.str.val + str->value.str.len, 0, ZEND_MMAP_AHEAD);
+       memset(Z_STRVAL_P(str) + Z_STRLEN_P(str), 0, ZEND_MMAP_AHEAD);
 
        SCNG(yy_in) = NULL;
        SCNG(yy_start) = NULL;
 
-       buf = str->value.str.val;
-       size = str->value.str.len;
+       buf = Z_STRVAL_P(str);
+       size = Z_STRLEN_P(str);
 
        if (CG(multibyte)) {
                SCNG(script_org) = (unsigned char*)buf;
@@ -733,7 +731,7 @@ zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC)
        int compiler_result;
        zend_bool original_in_compilation = CG(in_compilation);
 
-       if (source_string->value.str.len==0) {
+       if (Z_STRLEN_P(source_string)==0) {
                efree(op_array);
                return NULL;
        }
@@ -871,11 +869,11 @@ ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter
 # define zend_copy_value(zendlval, yytext, yyleng) \
        if (SCNG(output_filter)) { \
                size_t sz = 0; \
-               SCNG(output_filter)((unsigned char **)&(zendlval->value.str.val), &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC); \
-               zendlval->value.str.len = sz; \
+               SCNG(output_filter)((unsigned char **)&Z_STRVAL_P(zendlval), &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC); \
+               Z_STRLEN_P(zendlval) = sz; \
        } else { \
-               zendlval->value.str.val = (char *) estrndup(yytext, yyleng); \
-               zendlval->value.str.len = yyleng; \
+               Z_STRVAL_P(zendlval) = (char *) estrndup(yytext, yyleng); \
+               Z_STRLEN_P(zendlval) = yyleng; \
        }
 
 static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quote_type TSRMLS_DC)
@@ -886,8 +884,8 @@ static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quo
        ZVAL_STRINGL(zendlval, str, len, 1);
 
        /* convert escape sequences */
-       s = t = zendlval->value.str.val;
-       end = s+zendlval->value.str.len;
+       s = t = Z_STRVAL_P(zendlval);
+       end = s+Z_STRLEN_P(zendlval);
        while (s<end) {
                if (*s=='\\') {
                        s++;
@@ -899,23 +897,23 @@ static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quo
                        switch(*s) {
                                case 'n':
                                        *t++ = '\n';
-                                       zendlval->value.str.len--;
+                                       Z_STRLEN_P(zendlval)--;
                                        break;
                                case 'r':
                                        *t++ = '\r';
-                                       zendlval->value.str.len--;
+                                       Z_STRLEN_P(zendlval)--;
                                        break;
                                case 't':
                                        *t++ = '\t';
-                                       zendlval->value.str.len--;
+                                       Z_STRLEN_P(zendlval)--;
                                        break;
                                case 'f':
                                        *t++ = '\f';
-                                       zendlval->value.str.len--;
+                                       Z_STRLEN_P(zendlval)--;
                                        break;
                                case 'v':
                                        *t++ = '\v';
-                                       zendlval->value.str.len--;
+                                       Z_STRLEN_P(zendlval)--;
                                        break;
                                case 'e':
 #ifdef PHP_WIN32
@@ -923,7 +921,7 @@ static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quo
 #else
                                        *t++ = '\e';
 #endif
-                                       zendlval->value.str.len--;
+                                       Z_STRLEN_P(zendlval)--;
                                        break;
                                case '"':
                                case '`':
@@ -935,20 +933,20 @@ static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quo
                                case '\\':
                                case '$':
                                        *t++ = *s;
-                                       zendlval->value.str.len--;
+                                       Z_STRLEN_P(zendlval)--;
                                        break;
                                case 'x':
                                case 'X':
                                        if (ZEND_IS_HEX(*(s+1))) {
                                                char hex_buf[3] = { 0, 0, 0 };
 
-                                               zendlval->value.str.len--; /* for the 'x' */
+                                               Z_STRLEN_P(zendlval)--; /* for the 'x' */
 
                                                hex_buf[0] = *(++s);
-                                               zendlval->value.str.len--;
+                                               Z_STRLEN_P(zendlval)--;
                                                if (ZEND_IS_HEX(*(s+1))) {
                                                        hex_buf[1] = *(++s);
-                                                       zendlval->value.str.len--;
+                                                       Z_STRLEN_P(zendlval)--;
                                                }
                                                *t++ = (char) strtol(hex_buf, NULL, 16);
                                        } else {
@@ -962,13 +960,13 @@ static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quo
                                                char octal_buf[4] = { 0, 0, 0, 0 };
 
                                                octal_buf[0] = *s;
-                                               zendlval->value.str.len--;
+                                               Z_STRLEN_P(zendlval)--;
                                                if (ZEND_IS_OCT(*(s+1))) {
                                                        octal_buf[1] = *(++s);
-                                                       zendlval->value.str.len--;
+                                                       Z_STRLEN_P(zendlval)--;
                                                        if (ZEND_IS_OCT(*(s+1))) {
                                                                octal_buf[2] = *(++s);
-                                                               zendlval->value.str.len--;
+                                                               Z_STRLEN_P(zendlval)--;
                                                        }
                                                }
                                                *t++ = (char) strtol(octal_buf, NULL, 8);
@@ -990,9 +988,9 @@ static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quo
        *t = 0;
        if (SCNG(output_filter)) {
                size_t sz = 0;
-               s = zendlval->value.str.val;
-               SCNG(output_filter)((unsigned char **)&(zendlval->value.str.val), &sz, (unsigned char *)s, (size_t)zendlval->value.str.len TSRMLS_CC);
-               zendlval->value.str.len = sz;
+               s = Z_STRVAL_P(zendlval);
+               SCNG(output_filter)((unsigned char **)&Z_STRVAL_P(zendlval), &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval) TSRMLS_CC);
+               Z_STRLEN_P(zendlval) = sz;
                efree(s);
        }
 }
@@ -1006,7 +1004,7 @@ restart:
 yymore_restart:
 
 
-#line 1010 "Zend/zend_language_scanner.c"
+#line 1008 "Zend/zend_language_scanner.c"
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
@@ -1105,7 +1103,7 @@ yyc_INITIAL:
 yy3:
                YYDEBUG(3, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1807 "Zend/zend_language_scanner.l"
+#line 1745 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@ -1152,20 +1150,20 @@ inline_html:
        if (SCNG(output_filter)) {
                int readsize;
                size_t sz = 0;
-               readsize = SCNG(output_filter)((unsigned char **)&(zendlval->value.str.val), &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC);
-               zendlval->value.str.len = sz;
+               readsize = SCNG(output_filter)((unsigned char **)&Z_STRVAL_P(zendlval), &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC);
+               Z_STRLEN_P(zendlval) = sz;
                if (readsize < yyleng) {
                        yyless(readsize);
                }
        } else {
-         zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
-         zendlval->value.str.len = yyleng;
+         Z_STRVAL_P(zendlval) = (char *) estrndup(yytext, yyleng);
+         Z_STRLEN_P(zendlval) = yyleng;
        }
        zendlval->type = IS_STRING;
        HANDLE_NEWLINES(yytext, yyleng);
        return T_INLINE_HTML;
 }
-#line 1169 "Zend/zend_language_scanner.c"
+#line 1167 "Zend/zend_language_scanner.c"
 yy4:
                YYDEBUG(4, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1183,38 +1181,34 @@ yy5:
 yy6:
                YYDEBUG(6, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1795 "Zend/zend_language_scanner.l"
+#line 1735 "Zend/zend_language_scanner.l"
                {
        if (CG(short_tags)) {
-               zendlval->value.str.val = yytext; /* no copying - intentional */
-               zendlval->value.str.len = yyleng;
-               zendlval->type = IS_STRING;
+               ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
                BEGIN(ST_IN_SCRIPTING);
                return T_OPEN_TAG;
        } else {
                goto inline_char_handler;
        }
 }
-#line 1199 "Zend/zend_language_scanner.c"
+#line 1195 "Zend/zend_language_scanner.c"
 yy7:
                YYDEBUG(7, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) == '=') goto yy43;
                YYDEBUG(8, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1772 "Zend/zend_language_scanner.l"
+#line 1716 "Zend/zend_language_scanner.l"
                {
        if (CG(asp_tags)) {
-               zendlval->value.str.val = yytext; /* no copying - intentional */
-               zendlval->value.str.len = yyleng;
-               zendlval->type = IS_STRING;
+               ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
                BEGIN(ST_IN_SCRIPTING);
                return T_OPEN_TAG;
        } else {
                goto inline_char_handler;
        }
 }
-#line 1218 "Zend/zend_language_scanner.c"
+#line 1212 "Zend/zend_language_scanner.c"
 yy9:
                YYDEBUG(9, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1400,7 +1394,7 @@ yy35:
                ++YYCURSOR;
                YYDEBUG(38, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1732 "Zend/zend_language_scanner.l"
+#line 1682 "Zend/zend_language_scanner.l"
                {
        YYCTYPE *bracket = (YYCTYPE*)zend_memrchr(yytext, '<', yyleng - (sizeof("script language=php>") - 1));
 
@@ -1411,13 +1405,11 @@ yy35:
        }
 
        HANDLE_NEWLINES(yytext, yyleng);
-       zendlval->value.str.val = yytext; /* no copying - intentional */
-       zendlval->value.str.len = yyleng;
-       zendlval->type = IS_STRING;
+       ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
        BEGIN(ST_IN_SCRIPTING);
        return T_OPEN_TAG;
 }
-#line 1421 "Zend/zend_language_scanner.c"
+#line 1413 "Zend/zend_language_scanner.c"
 yy39:
                YYDEBUG(39, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1444,33 +1436,29 @@ yy43:
                ++YYCURSOR;
                YYDEBUG(44, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1750 "Zend/zend_language_scanner.l"
+#line 1698 "Zend/zend_language_scanner.l"
                {
        if (CG(asp_tags)) {
-               zendlval->value.str.val = yytext; /* no copying - intentional */
-               zendlval->value.str.len = yyleng;
-               zendlval->type = IS_STRING;
+               ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
                BEGIN(ST_IN_SCRIPTING);
                return T_OPEN_TAG_WITH_ECHO;
        } else {
                goto inline_char_handler;
        }
 }
-#line 1460 "Zend/zend_language_scanner.c"
+#line 1450 "Zend/zend_language_scanner.c"
 yy45:
                YYDEBUG(45, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(46, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1763 "Zend/zend_language_scanner.l"
+#line 1709 "Zend/zend_language_scanner.l"
                {
-       zendlval->value.str.val = yytext; /* no copying - intentional */
-       zendlval->value.str.len = yyleng;
-       zendlval->type = IS_STRING;
+       ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
        BEGIN(ST_IN_SCRIPTING);
        return T_OPEN_TAG_WITH_ECHO;
 }
-#line 1474 "Zend/zend_language_scanner.c"
+#line 1462 "Zend/zend_language_scanner.c"
 yy47:
                YYDEBUG(47, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1497,16 +1485,14 @@ yy50:
 yy51:
                YYDEBUG(51, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1785 "Zend/zend_language_scanner.l"
+#line 1727 "Zend/zend_language_scanner.l"
                {
-       zendlval->value.str.val = yytext; /* no copying - intentional */
-       zendlval->value.str.len = yyleng;
-       zendlval->type = IS_STRING;
+       ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
        HANDLE_NEWLINE(yytext[yyleng-1]);
        BEGIN(ST_IN_SCRIPTING);
        return T_OPEN_TAG;
 }
-#line 1510 "Zend/zend_language_scanner.c"
+#line 1496 "Zend/zend_language_scanner.c"
 yy52:
                YYDEBUG(52, *YYCURSOR);
                ++YYCURSOR;
@@ -1577,7 +1563,7 @@ yyc_ST_BACKQUOTE:
 yy56:
                YYDEBUG(56, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2258 "Zend/zend_language_scanner.l"
+#line 2190 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@ -1618,7 +1604,7 @@ yy56:
        zend_scan_escape_string(zendlval, yytext, yyleng, '`' TSRMLS_CC);
        return T_ENCAPSED_AND_WHITESPACE;
 }
-#line 1622 "Zend/zend_language_scanner.c"
+#line 1608 "Zend/zend_language_scanner.c"
 yy57:
                YYDEBUG(57, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1629,12 +1615,12 @@ yy58:
                ++YYCURSOR;
                YYDEBUG(59, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2202 "Zend/zend_language_scanner.l"
+#line 2134 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_IN_SCRIPTING);
        return '`';
 }
-#line 1638 "Zend/zend_language_scanner.c"
+#line 1624 "Zend/zend_language_scanner.c"
 yy60:
                YYDEBUG(60, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1644,14 +1630,14 @@ yy61:
                ++YYCURSOR;
                YYDEBUG(62, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2189 "Zend/zend_language_scanner.l"
+#line 2121 "Zend/zend_language_scanner.l"
                {
-       zendlval->value.lval = (long) '{';
+       Z_LVAL_P(zendlval) = (long) '{';
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        yyless(1);
        return T_CURLY_OPEN;
 }
-#line 1655 "Zend/zend_language_scanner.c"
+#line 1641 "Zend/zend_language_scanner.c"
 yy63:
                YYDEBUG(63, *YYCURSOR);
                yyaccept = 0;
@@ -1667,24 +1653,24 @@ yy63:
 yy65:
                YYDEBUG(65, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1889 "Zend/zend_language_scanner.l"
+#line 1827 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 1677 "Zend/zend_language_scanner.c"
+#line 1663 "Zend/zend_language_scanner.c"
 yy66:
                YYDEBUG(66, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(67, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1465 "Zend/zend_language_scanner.l"
+#line 1461 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
        return T_DOLLAR_OPEN_CURLY_BRACES;
 }
-#line 1688 "Zend/zend_language_scanner.c"
+#line 1674 "Zend/zend_language_scanner.c"
 yy68:
                YYDEBUG(68, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1698,7 +1684,7 @@ yy70:
                ++YYCURSOR;
                YYDEBUG(71, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1881 "Zend/zend_language_scanner.l"
+#line 1819 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
@@ -1706,7 +1692,7 @@ yy70:
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 1710 "Zend/zend_language_scanner.c"
+#line 1696 "Zend/zend_language_scanner.c"
 yy72:
                YYDEBUG(72, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1724,7 +1710,7 @@ yy73:
                ++YYCURSOR;
                YYDEBUG(74, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1871 "Zend/zend_language_scanner.l"
+#line 1809 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
@@ -1732,7 +1718,7 @@ yy73:
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 1736 "Zend/zend_language_scanner.c"
+#line 1722 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_DOUBLE_QUOTES:
@@ -1800,7 +1786,7 @@ yy77:
 yy78:
                YYDEBUG(78, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2208 "Zend/zend_language_scanner.l"
+#line 2140 "Zend/zend_language_scanner.l"
                {
        if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) {
                YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1;
@@ -1849,7 +1835,7 @@ double_quotes_scan_done:
        zend_scan_escape_string(zendlval, yytext, yyleng, '"' TSRMLS_CC);
        return T_ENCAPSED_AND_WHITESPACE;
 }
-#line 1853 "Zend/zend_language_scanner.c"
+#line 1839 "Zend/zend_language_scanner.c"
 yy79:
                YYDEBUG(79, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1860,12 +1846,12 @@ yy80:
                ++YYCURSOR;
                YYDEBUG(81, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2197 "Zend/zend_language_scanner.l"
+#line 2129 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_IN_SCRIPTING);
        return '"';
 }
-#line 1869 "Zend/zend_language_scanner.c"
+#line 1855 "Zend/zend_language_scanner.c"
 yy82:
                YYDEBUG(82, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1875,14 +1861,14 @@ yy83:
                ++YYCURSOR;
                YYDEBUG(84, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2189 "Zend/zend_language_scanner.l"
+#line 2121 "Zend/zend_language_scanner.l"
                {
-       zendlval->value.lval = (long) '{';
+       Z_LVAL_P(zendlval) = (long) '{';
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        yyless(1);
        return T_CURLY_OPEN;
 }
-#line 1886 "Zend/zend_language_scanner.c"
+#line 1872 "Zend/zend_language_scanner.c"
 yy85:
                YYDEBUG(85, *YYCURSOR);
                yyaccept = 0;
@@ -1898,24 +1884,24 @@ yy85:
 yy87:
                YYDEBUG(87, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1889 "Zend/zend_language_scanner.l"
+#line 1827 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 1908 "Zend/zend_language_scanner.c"
+#line 1894 "Zend/zend_language_scanner.c"
 yy88:
                YYDEBUG(88, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(89, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1465 "Zend/zend_language_scanner.l"
+#line 1461 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
        return T_DOLLAR_OPEN_CURLY_BRACES;
 }
-#line 1919 "Zend/zend_language_scanner.c"
+#line 1905 "Zend/zend_language_scanner.c"
 yy90:
                YYDEBUG(90, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1929,7 +1915,7 @@ yy92:
                ++YYCURSOR;
                YYDEBUG(93, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1881 "Zend/zend_language_scanner.l"
+#line 1819 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
@@ -1937,7 +1923,7 @@ yy92:
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 1941 "Zend/zend_language_scanner.c"
+#line 1927 "Zend/zend_language_scanner.c"
 yy94:
                YYDEBUG(94, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1955,7 +1941,7 @@ yy95:
                ++YYCURSOR;
                YYDEBUG(96, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1871 "Zend/zend_language_scanner.l"
+#line 1809 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
@@ -1963,7 +1949,7 @@ yy95:
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 1967 "Zend/zend_language_scanner.c"
+#line 1953 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_END_HEREDOC:
@@ -1974,7 +1960,7 @@ yyc_ST_END_HEREDOC:
        ++YYCURSOR;
        YYDEBUG(100, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
-#line 2175 "Zend/zend_language_scanner.l"
+#line 2107 "Zend/zend_language_scanner.l"
        {
        zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack));
 
@@ -1987,7 +1973,7 @@ yyc_ST_END_HEREDOC:
        BEGIN(ST_IN_SCRIPTING);
        return T_END_HEREDOC;
 }
-#line 1991 "Zend/zend_language_scanner.c"
+#line 1977 "Zend/zend_language_scanner.c"
 /* *********************************** */
 yyc_ST_HEREDOC:
        {
@@ -2049,7 +2035,7 @@ yy103:
 yy104:
                YYDEBUG(104, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2300 "Zend/zend_language_scanner.l"
+#line 2232 "Zend/zend_language_scanner.l"
                {
        int newline = 0;
 
@@ -2122,7 +2108,7 @@ heredoc_scan_done:
        zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0 TSRMLS_CC);
        return T_ENCAPSED_AND_WHITESPACE;
 }
-#line 2126 "Zend/zend_language_scanner.c"
+#line 2112 "Zend/zend_language_scanner.c"
 yy105:
                YYDEBUG(105, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -2137,14 +2123,14 @@ yy107:
                ++YYCURSOR;
                YYDEBUG(108, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2189 "Zend/zend_language_scanner.l"
+#line 2121 "Zend/zend_language_scanner.l"
                {
-       zendlval->value.lval = (long) '{';
+       Z_LVAL_P(zendlval) = (long) '{';
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        yyless(1);
        return T_CURLY_OPEN;
 }
-#line 2148 "Zend/zend_language_scanner.c"
+#line 2134 "Zend/zend_language_scanner.c"
 yy109:
                YYDEBUG(109, *YYCURSOR);
                yyaccept = 0;
@@ -2160,24 +2146,24 @@ yy109:
 yy111:
                YYDEBUG(111, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1889 "Zend/zend_language_scanner.l"
+#line 1827 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 2170 "Zend/zend_language_scanner.c"
+#line 2156 "Zend/zend_language_scanner.c"
 yy112:
                YYDEBUG(112, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(113, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1465 "Zend/zend_language_scanner.l"
+#line 1461 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
        return T_DOLLAR_OPEN_CURLY_BRACES;
 }
-#line 2181 "Zend/zend_language_scanner.c"
+#line 2167 "Zend/zend_language_scanner.c"
 yy114:
                YYDEBUG(114, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -2191,7 +2177,7 @@ yy116:
                ++YYCURSOR;
                YYDEBUG(117, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1881 "Zend/zend_language_scanner.l"
+#line 1819 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
@@ -2199,7 +2185,7 @@ yy116:
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 2203 "Zend/zend_language_scanner.c"
+#line 2189 "Zend/zend_language_scanner.c"
 yy118:
                YYDEBUG(118, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -2217,7 +2203,7 @@ yy119:
                ++YYCURSOR;
                YYDEBUG(120, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1871 "Zend/zend_language_scanner.l"
+#line 1809 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
@@ -2225,7 +2211,7 @@ yy119:
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 2229 "Zend/zend_language_scanner.c"
+#line 2215 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_IN_SCRIPTING:
@@ -2408,13 +2394,13 @@ yy123:
 yy124:
                YYDEBUG(124, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1912 "Zend/zend_language_scanner.l"
+#line 1850 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, yytext, yyleng);
        zendlval->type = IS_STRING;
        return T_STRING;
 }
-#line 2418 "Zend/zend_language_scanner.c"
+#line 2404 "Zend/zend_language_scanner.c"
 yy125:
                YYDEBUG(125, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -2646,11 +2632,11 @@ yy138:
 yy139:
                YYDEBUG(139, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1454 "Zend/zend_language_scanner.l"
+#line 1450 "Zend/zend_language_scanner.l"
                {
        return yytext[0];
 }
-#line 2654 "Zend/zend_language_scanner.c"
+#line 2640 "Zend/zend_language_scanner.c"
 yy140:
                YYDEBUG(140, *YYCURSOR);
                ++YYCURSOR;
@@ -2659,15 +2645,13 @@ yy140:
 yy141:
                YYDEBUG(141, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1185 "Zend/zend_language_scanner.l"
+#line 1183 "Zend/zend_language_scanner.l"
                {
-       zendlval->value.str.val = yytext; /* no copying - intentional */
-       zendlval->value.str.len = yyleng;
-       zendlval->type = IS_STRING;
+       ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
        HANDLE_NEWLINES(yytext, yyleng);
        return T_WHITESPACE;
 }
-#line 2671 "Zend/zend_language_scanner.c"
+#line 2655 "Zend/zend_language_scanner.c"
 yy142:
                YYDEBUG(142, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -2678,11 +2662,11 @@ yy143:
                ++YYCURSOR;
                YYDEBUG(144, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1214 "Zend/zend_language_scanner.l"
+#line 1210 "Zend/zend_language_scanner.l"
                {
        return T_NS_SEPARATOR;
 }
-#line 2686 "Zend/zend_language_scanner.c"
+#line 2670 "Zend/zend_language_scanner.c"
 yy145:
                YYDEBUG(145, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -2910,18 +2894,18 @@ yy168:
                ++YYCURSOR;
                YYDEBUG(169, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1459 "Zend/zend_language_scanner.l"
+#line 1455 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        return '{';
 }
-#line 2919 "Zend/zend_language_scanner.c"
+#line 2903 "Zend/zend_language_scanner.c"
 yy170:
                YYDEBUG(170, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(171, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1471 "Zend/zend_language_scanner.l"
+#line 1467 "Zend/zend_language_scanner.l"
                {
        RESET_DOC_COMMENT();
        if (!zend_stack_is_empty(&SCNG(state_stack))) {
@@ -2929,7 +2913,7 @@ yy170:
        }
        return '}';
 }
-#line 2933 "Zend/zend_language_scanner.c"
+#line 2917 "Zend/zend_language_scanner.c"
 yy172:
                YYDEBUG(172, *YYCURSOR);
                yyaccept = 2;
@@ -2957,18 +2941,18 @@ yy172:
 yy173:
                YYDEBUG(173, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1522 "Zend/zend_language_scanner.l"
+#line 1517 "Zend/zend_language_scanner.l"
                {
        if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */
-               zendlval->value.lval = strtol(yytext, NULL, 0);
+               Z_LVAL_P(zendlval) = strtol(yytext, NULL, 0);
        } else {
                errno = 0;
-               zendlval->value.lval = strtol(yytext, NULL, 0);
+               Z_LVAL_P(zendlval) = strtol(yytext, NULL, 0);
                if (errno == ERANGE) { /* Overflow */
                        if (yytext[0] == '0') { /* octal overflow */
-                               zendlval->value.dval = zend_oct_strtod(yytext, NULL);
+                               Z_DVAL_P(zendlval) = zend_oct_strtod(yytext, NULL);
                        } else {
-                               zendlval->value.dval = zend_strtod(yytext, NULL);
+                               Z_DVAL_P(zendlval) = zend_strtod(yytext, NULL);
                        }
                        zendlval->type = IS_DOUBLE;
                        return T_DNUMBER;
@@ -2978,7 +2962,7 @@ yy173:
        zendlval->type = IS_LONG;
        return T_LNUMBER;
 }
-#line 2982 "Zend/zend_language_scanner.c"
+#line 2966 "Zend/zend_language_scanner.c"
 yy174:
                YYDEBUG(174, *YYCURSOR);
                yyaccept = 2;
@@ -3006,7 +2990,7 @@ yy176:
 yy177:
                YYDEBUG(177, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1919 "Zend/zend_language_scanner.l"
+#line 1857 "Zend/zend_language_scanner.l"
                {
        while (YYCURSOR < YYLIMIT) {
                switch (*YYCURSOR++) {
@@ -3040,14 +3024,14 @@ yy177:
 
        return T_COMMENT;
 }
-#line 3044 "Zend/zend_language_scanner.c"
+#line 3028 "Zend/zend_language_scanner.c"
 yy178:
                YYDEBUG(178, *YYCURSOR);
                ++YYCURSOR;
 yy179:
                YYDEBUG(179, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2010 "Zend/zend_language_scanner.l"
+#line 1944 "Zend/zend_language_scanner.l"
                {
        register char *s, *t;
        char *end;
@@ -3073,13 +3057,11 @@ yy179:
                }
        }
 
-       zendlval->value.str.val = estrndup(yytext+bprefix+1, yyleng-bprefix-2);
-       zendlval->value.str.len = yyleng-bprefix-2;
-       zendlval->type = IS_STRING;
+       ZVAL_STRINGL(zendlval, yytext+bprefix+1, yyleng-bprefix-2, 1);
 
        /* convert escape sequences */
-       s = t = zendlval->value.str.val;
-       end = s+zendlval->value.str.len;
+       s = t = Z_STRVAL_P(zendlval);
+       end = s+Z_STRLEN_P(zendlval);
        while (s<end) {
                if (*s=='\\') {
                        s++;
@@ -3088,7 +3070,7 @@ yy179:
                                case '\\':
                                case '\'':
                                        *t++ = *s;
-                                       zendlval->value.str.len--;
+                                       Z_STRLEN_P(zendlval)--;
                                        break;
                                default:
                                        *t++ = '\\';
@@ -3108,21 +3090,21 @@ yy179:
 
        if (SCNG(output_filter)) {
                size_t sz = 0;
-               s = zendlval->value.str.val;
-               SCNG(output_filter)((unsigned char **)&(zendlval->value.str.val), &sz, (unsigned char *)s, (size_t)zendlval->value.str.len TSRMLS_CC);
-               zendlval->value.str.len = sz;
+               s = Z_STRVAL_P(zendlval);
+               SCNG(output_filter)((unsigned char **)&Z_STRVAL_P(zendlval), &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval) TSRMLS_CC);
+               Z_STRLEN_P(zendlval) = sz;
                efree(s);
        }
        return T_CONSTANT_ENCAPSED_STRING;
 }
-#line 3119 "Zend/zend_language_scanner.c"
+#line 3101 "Zend/zend_language_scanner.c"
 yy180:
                YYDEBUG(180, *YYCURSOR);
                ++YYCURSOR;
 yy181:
                YYDEBUG(181, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2079 "Zend/zend_language_scanner.l"
+#line 2011 "Zend/zend_language_scanner.l"
                {
        int bprefix = (yytext[0] != '"') ? 1 : 0;
 
@@ -3163,24 +3145,24 @@ yy181:
        BEGIN(ST_DOUBLE_QUOTES);
        return '"';
 }
-#line 3167 "Zend/zend_language_scanner.c"
+#line 3149 "Zend/zend_language_scanner.c"
 yy182:
                YYDEBUG(182, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(183, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2169 "Zend/zend_language_scanner.l"
+#line 2101 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_BACKQUOTE);
        return '`';
 }
-#line 3178 "Zend/zend_language_scanner.c"
+#line 3160 "Zend/zend_language_scanner.c"
 yy184:
                YYDEBUG(184, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(185, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2432 "Zend/zend_language_scanner.l"
+#line 2364 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@ -3189,7 +3171,7 @@ yy184:
        zend_error(E_COMPILE_WARNING,"Unexpected character in input:  '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
        goto restart;
 }
-#line 3193 "Zend/zend_language_scanner.c"
+#line 3175 "Zend/zend_language_scanner.c"
 yy186:
                YYDEBUG(186, *YYCURSOR);
                ++YYCURSOR;
@@ -3216,13 +3198,12 @@ yy188:
 yy190:
                YYDEBUG(190, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1587 "Zend/zend_language_scanner.l"
+#line 1576 "Zend/zend_language_scanner.l"
                {
-       zendlval->value.dval = zend_strtod(yytext, NULL);
-       zendlval->type = IS_DOUBLE;
+       ZVAL_DOUBLE(zendlval, zend_strtod(yytext, NULL));
        return T_DNUMBER;
 }
-#line 3226 "Zend/zend_language_scanner.c"
+#line 3207 "Zend/zend_language_scanner.c"
 yy191:
                YYDEBUG(191, *YYCURSOR);
                yyaccept = 2;
@@ -3314,7 +3295,7 @@ yy200:
                }
                YYDEBUG(202, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1497 "Zend/zend_language_scanner.l"
+#line 1493 "Zend/zend_language_scanner.l"
                {
        char *bin = yytext + 2; /* Skip "0b" */
        int len = yyleng - 2;
@@ -3327,19 +3308,18 @@ yy200:
 
        if (len < SIZEOF_LONG * 8) {
                if (len == 0) {
-                       zendlval->value.lval = 0;
+                       Z_LVAL_P(zendlval) = 0;
                } else {
-                       zendlval->value.lval = strtol(bin, NULL, 2);
+                       Z_LVAL_P(zendlval) = strtol(bin, NULL, 2);
                }
                zendlval->type = IS_LONG;
                return T_LNUMBER;
        } else {
-               zendlval->value.dval = zend_bin_strtod(bin, NULL);
-               zendlval->type = IS_DOUBLE;
+               ZVAL_DOUBLE(zendlval, zend_bin_strtod(bin, NULL));
                return T_DNUMBER;
        }
 }
-#line 3343 "Zend/zend_language_scanner.c"
+#line 3323 "Zend/zend_language_scanner.c"
 yy203:
                YYDEBUG(203, *YYCURSOR);
                ++YYCURSOR;
@@ -3351,7 +3331,7 @@ yy203:
                }
                YYDEBUG(205, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1543 "Zend/zend_language_scanner.l"
+#line 1538 "Zend/zend_language_scanner.l"
                {
        char *hex = yytext + 2; /* Skip "0x" */
        int len = yyleng - 2;
@@ -3364,19 +3344,18 @@ yy203:
 
        if (len < SIZEOF_LONG * 2 || (len == SIZEOF_LONG * 2 && *hex <= '7')) {
                if (len == 0) {
-                       zendlval->value.lval = 0;
+                       Z_LVAL_P(zendlval) = 0;
                } else {
-                       zendlval->value.lval = strtol(hex, NULL, 16);
+                       Z_LVAL_P(zendlval) = strtol(hex, NULL, 16);
                }
                zendlval->type = IS_LONG;
                return T_LNUMBER;
        } else {
-               zendlval->value.dval = zend_hex_strtod(hex, NULL);
-               zendlval->type = IS_DOUBLE;
+               ZVAL_DOUBLE(zendlval, zend_hex_strtod(hex, NULL));
                return T_DNUMBER;
        }
 }
-#line 3380 "Zend/zend_language_scanner.c"
+#line 3359 "Zend/zend_language_scanner.c"
 yy206:
                YYDEBUG(206, *YYCURSOR);
                ++YYCURSOR;
@@ -3385,15 +3364,13 @@ yy206:
 yy207:
                YYDEBUG(207, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1987 "Zend/zend_language_scanner.l"
+#line 1925 "Zend/zend_language_scanner.l"
                {
-       zendlval->value.str.val = yytext; /* no copying - intentional */
-       zendlval->value.str.len = yyleng;
-       zendlval->type = IS_STRING;
+       ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
        BEGIN(INITIAL);
        return T_CLOSE_TAG;  /* implicit ';' at php-end tag */
 }
-#line 3397 "Zend/zend_language_scanner.c"
+#line 3374 "Zend/zend_language_scanner.c"
 yy208:
                YYDEBUG(208, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3427,13 +3404,13 @@ yy210:
 yy212:
                YYDEBUG(212, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1889 "Zend/zend_language_scanner.l"
+#line 1827 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 3437 "Zend/zend_language_scanner.c"
+#line 3414 "Zend/zend_language_scanner.c"
 yy213:
                YYDEBUG(213, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3447,11 +3424,11 @@ yy214:
                }
                YYDEBUG(215, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1442 "Zend/zend_language_scanner.l"
+#line 1438 "Zend/zend_language_scanner.l"
                {
        return T_LOGICAL_XOR;
 }
-#line 3455 "Zend/zend_language_scanner.c"
+#line 3432 "Zend/zend_language_scanner.c"
 yy216:
                YYDEBUG(216, *YYCURSOR);
                ++YYCURSOR;
@@ -3460,61 +3437,61 @@ yy216:
                }
                YYDEBUG(217, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1434 "Zend/zend_language_scanner.l"
+#line 1430 "Zend/zend_language_scanner.l"
                {
        return T_LOGICAL_OR;
 }
-#line 3468 "Zend/zend_language_scanner.c"
+#line 3445 "Zend/zend_language_scanner.c"
 yy218:
                YYDEBUG(218, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(219, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1422 "Zend/zend_language_scanner.l"
+#line 1418 "Zend/zend_language_scanner.l"
                {
        return T_XOR_EQUAL;
 }
-#line 3478 "Zend/zend_language_scanner.c"
+#line 3455 "Zend/zend_language_scanner.c"
 yy220:
                YYDEBUG(220, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(221, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1426 "Zend/zend_language_scanner.l"
+#line 1422 "Zend/zend_language_scanner.l"
                {
        return T_BOOLEAN_OR;
 }
-#line 3488 "Zend/zend_language_scanner.c"
+#line 3465 "Zend/zend_language_scanner.c"
 yy222:
                YYDEBUG(222, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(223, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1418 "Zend/zend_language_scanner.l"
+#line 1414 "Zend/zend_language_scanner.l"
                {
        return T_OR_EQUAL;
 }
-#line 3498 "Zend/zend_language_scanner.c"
+#line 3475 "Zend/zend_language_scanner.c"
 yy224:
                YYDEBUG(224, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(225, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1430 "Zend/zend_language_scanner.l"
+#line 1426 "Zend/zend_language_scanner.l"
                {
        return T_BOOLEAN_AND;
 }
-#line 3508 "Zend/zend_language_scanner.c"
+#line 3485 "Zend/zend_language_scanner.c"
 yy226:
                YYDEBUG(226, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(227, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1414 "Zend/zend_language_scanner.l"
+#line 1410 "Zend/zend_language_scanner.l"
                {
        return T_AND_EQUAL;
 }
-#line 3518 "Zend/zend_language_scanner.c"
+#line 3495 "Zend/zend_language_scanner.c"
 yy228:
                YYDEBUG(228, *YYCURSOR);
                ++YYCURSOR;
@@ -3523,30 +3500,28 @@ yy228:
 yy229:
                YYDEBUG(229, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1996 "Zend/zend_language_scanner.l"
+#line 1932 "Zend/zend_language_scanner.l"
                {
        if (CG(asp_tags)) {
                BEGIN(INITIAL);
-               zendlval->value.str.len = yyleng;
-               zendlval->type = IS_STRING;
-               zendlval->value.str.val = yytext; /* no copying - intentional */
+               ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
                return T_CLOSE_TAG;  /* implicit ';' at php-end tag */
        } else {
                yyless(1);
                return yytext[0];
        }
 }
-#line 3540 "Zend/zend_language_scanner.c"
+#line 3515 "Zend/zend_language_scanner.c"
 yy230:
                YYDEBUG(230, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(231, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1402 "Zend/zend_language_scanner.l"
+#line 1398 "Zend/zend_language_scanner.l"
                {
        return T_MOD_EQUAL;
 }
-#line 3550 "Zend/zend_language_scanner.c"
+#line 3525 "Zend/zend_language_scanner.c"
 yy232:
                YYDEBUG(232, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3577,11 +3552,11 @@ yy236:
                ++YYCURSOR;
                YYDEBUG(237, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1398 "Zend/zend_language_scanner.l"
+#line 1394 "Zend/zend_language_scanner.l"
                {
        return T_CONCAT_EQUAL;
 }
-#line 3585 "Zend/zend_language_scanner.c"
+#line 3560 "Zend/zend_language_scanner.c"
 yy238:
                YYDEBUG(238, *YYCURSOR);
                yyaccept = 4;
@@ -3590,7 +3565,7 @@ yy238:
 yy239:
                YYDEBUG(239, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1953 "Zend/zend_language_scanner.l"
+#line 1891 "Zend/zend_language_scanner.l"
                {
        int doc_com;
 
@@ -3624,7 +3599,7 @@ yy239:
 
        return T_COMMENT;
 }
-#line 3628 "Zend/zend_language_scanner.c"
+#line 3603 "Zend/zend_language_scanner.c"
 yy240:
                YYDEBUG(240, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3634,11 +3609,11 @@ yy241:
                ++YYCURSOR;
                YYDEBUG(242, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1394 "Zend/zend_language_scanner.l"
+#line 1390 "Zend/zend_language_scanner.l"
                {
        return T_DIV_EQUAL;
 }
-#line 3642 "Zend/zend_language_scanner.c"
+#line 3617 "Zend/zend_language_scanner.c"
 yy243:
                YYDEBUG(243, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3661,42 +3636,42 @@ yy246:
                ++YYCURSOR;
                YYDEBUG(247, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1390 "Zend/zend_language_scanner.l"
+#line 1386 "Zend/zend_language_scanner.l"
                {
        return T_MUL_EQUAL;
 }
-#line 3669 "Zend/zend_language_scanner.c"
+#line 3644 "Zend/zend_language_scanner.c"
 yy248:
                YYDEBUG(248, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) == '=') goto yy252;
                YYDEBUG(249, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1450 "Zend/zend_language_scanner.l"
+#line 1446 "Zend/zend_language_scanner.l"
                {
        return T_SR;
 }
-#line 3680 "Zend/zend_language_scanner.c"
+#line 3655 "Zend/zend_language_scanner.c"
 yy250:
                YYDEBUG(250, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(251, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1378 "Zend/zend_language_scanner.l"
+#line 1374 "Zend/zend_language_scanner.l"
                {
        return T_IS_GREATER_OR_EQUAL;
 }
-#line 3690 "Zend/zend_language_scanner.c"
+#line 3665 "Zend/zend_language_scanner.c"
 yy252:
                YYDEBUG(252, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(253, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1410 "Zend/zend_language_scanner.l"
+#line 1406 "Zend/zend_language_scanner.l"
                {
        return T_SR_EQUAL;
 }
-#line 3700 "Zend/zend_language_scanner.c"
+#line 3675 "Zend/zend_language_scanner.c"
 yy254:
                YYDEBUG(254, *YYCURSOR);
                yyaccept = 5;
@@ -3707,11 +3682,11 @@ yy254:
 yy255:
                YYDEBUG(255, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1446 "Zend/zend_language_scanner.l"
+#line 1442 "Zend/zend_language_scanner.l"
                {
        return T_SL;
 }
-#line 3715 "Zend/zend_language_scanner.c"
+#line 3690 "Zend/zend_language_scanner.c"
 yy256:
                YYDEBUG(256, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3723,22 +3698,22 @@ yy257:
                ++YYCURSOR;
                YYDEBUG(258, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1374 "Zend/zend_language_scanner.l"
+#line 1370 "Zend/zend_language_scanner.l"
                {
        return T_IS_SMALLER_OR_EQUAL;
 }
-#line 3731 "Zend/zend_language_scanner.c"
+#line 3706 "Zend/zend_language_scanner.c"
 yy259:
                YYDEBUG(259, *YYCURSOR);
                ++YYCURSOR;
 yy260:
                YYDEBUG(260, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1370 "Zend/zend_language_scanner.l"
+#line 1366 "Zend/zend_language_scanner.l"
                {
        return T_IS_NOT_EQUAL;
 }
-#line 3742 "Zend/zend_language_scanner.c"
+#line 3717 "Zend/zend_language_scanner.c"
 yy261:
                YYDEBUG(261, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3789,11 +3764,11 @@ yy268:
                ++YYCURSOR;
                YYDEBUG(269, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1406 "Zend/zend_language_scanner.l"
+#line 1402 "Zend/zend_language_scanner.l"
                {
        return T_SL_EQUAL;
 }
-#line 3797 "Zend/zend_language_scanner.c"
+#line 3772 "Zend/zend_language_scanner.c"
 yy270:
                YYDEBUG(270, *YYCURSOR);
                ++YYCURSOR;
@@ -3898,7 +3873,7 @@ yy279:
 yy280:
                YYDEBUG(280, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2121 "Zend/zend_language_scanner.l"
+#line 2053 "Zend/zend_language_scanner.l"
                {
        char *s;
        int bprefix = (yytext[0] != '<') ? 1 : 0;
@@ -3945,7 +3920,7 @@ yy280:
 
        return T_START_HEREDOC;
 }
-#line 3949 "Zend/zend_language_scanner.c"
+#line 3924 "Zend/zend_language_scanner.c"
 yy281:
                YYDEBUG(281, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3985,31 +3960,31 @@ yy284:
                ++YYCURSOR;
                YYDEBUG(286, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1362 "Zend/zend_language_scanner.l"
+#line 1358 "Zend/zend_language_scanner.l"
                {
        return T_IS_NOT_IDENTICAL;
 }
-#line 3993 "Zend/zend_language_scanner.c"
+#line 3968 "Zend/zend_language_scanner.c"
 yy287:
                YYDEBUG(287, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(288, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1382 "Zend/zend_language_scanner.l"
+#line 1378 "Zend/zend_language_scanner.l"
                {
        return T_PLUS_EQUAL;
 }
-#line 4003 "Zend/zend_language_scanner.c"
+#line 3978 "Zend/zend_language_scanner.c"
 yy289:
                YYDEBUG(289, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(290, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1350 "Zend/zend_language_scanner.l"
+#line 1346 "Zend/zend_language_scanner.l"
                {
        return T_INC;
 }
-#line 4013 "Zend/zend_language_scanner.c"
+#line 3988 "Zend/zend_language_scanner.c"
 yy291:
                YYDEBUG(291, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4028,42 +4003,42 @@ yy293:
                }
                YYDEBUG(294, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1338 "Zend/zend_language_scanner.l"
+#line 1334 "Zend/zend_language_scanner.l"
                {
        return T_LIST;
 }
-#line 4036 "Zend/zend_language_scanner.c"
+#line 4011 "Zend/zend_language_scanner.c"
 yy295:
                YYDEBUG(295, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) == '=') goto yy299;
                YYDEBUG(296, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1366 "Zend/zend_language_scanner.l"
+#line 1362 "Zend/zend_language_scanner.l"
                {
        return T_IS_EQUAL;
 }
-#line 4047 "Zend/zend_language_scanner.c"
+#line 4022 "Zend/zend_language_scanner.c"
 yy297:
                YYDEBUG(297, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(298, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1334 "Zend/zend_language_scanner.l"
+#line 1330 "Zend/zend_language_scanner.l"
                {
        return T_DOUBLE_ARROW;
 }
-#line 4057 "Zend/zend_language_scanner.c"
+#line 4032 "Zend/zend_language_scanner.c"
 yy299:
                YYDEBUG(299, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(300, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1358 "Zend/zend_language_scanner.l"
+#line 1354 "Zend/zend_language_scanner.l"
                {
        return T_IS_IDENTICAL;
 }
-#line 4067 "Zend/zend_language_scanner.c"
+#line 4042 "Zend/zend_language_scanner.c"
 yy301:
                YYDEBUG(301, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4193,7 +4168,7 @@ yy317:
                }
                YYDEBUG(320, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1722 "Zend/zend_language_scanner.l"
+#line 1672 "Zend/zend_language_scanner.l"
                {
        if (CG(current_namespace)) {
                *zendlval = *CG(current_namespace);
@@ -4203,7 +4178,7 @@ yy317:
        }
        return T_NS_C;
 }
-#line 4207 "Zend/zend_language_scanner.c"
+#line 4182 "Zend/zend_language_scanner.c"
 yy321:
                YYDEBUG(321, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4223,7 +4198,7 @@ yy322:
                }
                YYDEBUG(325, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1695 "Zend/zend_language_scanner.l"
+#line 1647 "Zend/zend_language_scanner.l"
                {
        char *filename = zend_get_compiled_filename(TSRMLS_C);
        const size_t filename_len = strlen(filename);
@@ -4245,12 +4220,10 @@ yy322:
 #endif
        }
 
-       zendlval->value.str.len = strlen(dirname);
-       zendlval->value.str.val = dirname;
-       zendlval->type = IS_STRING;
+       ZVAL_STRING(zendlval, dirname, 0);
        return T_DIR;
 }
-#line 4254 "Zend/zend_language_scanner.c"
+#line 4227 "Zend/zend_language_scanner.c"
 yy326:
                YYDEBUG(326, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4275,13 +4248,12 @@ yy328:
                }
                YYDEBUG(331, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1677 "Zend/zend_language_scanner.l"
+#line 1632 "Zend/zend_language_scanner.l"
                {
-       zendlval->value.lval = CG(zend_lineno);
-       zendlval->type = IS_LONG;
+       ZVAL_LONG(zendlval, CG(zend_lineno));
        return T_LINE;
 }
-#line 4285 "Zend/zend_language_scanner.c"
+#line 4257 "Zend/zend_language_scanner.c"
 yy332:
                YYDEBUG(332, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4316,20 +4288,12 @@ yy336:
                }
                YYDEBUG(339, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1656 "Zend/zend_language_scanner.l"
+#line 1619 "Zend/zend_language_scanner.l"
                {
        const char *class_name = CG(active_class_entry) ? CG(active_class_entry)->name : NULL;
        const char *func_name = CG(active_op_array)? CG(active_op_array)->function_name : NULL;
-       size_t len = 0;
-
-       if (class_name) {
-               len += strlen(class_name) + 2;
-       }
-       if (func_name) {
-               len += strlen(func_name);
-       }
 
-       zendlval->value.str.len = zend_spprintf(&zendlval->value.str.val, 0, "%s%s%s",
+       Z_STRLEN_P(zendlval) = zend_spprintf(&Z_STRVAL_P(zendlval), 0, "%s%s%s",
                class_name ? class_name : "",
                class_name && func_name ? "::" : "",
                func_name ? func_name : ""
@@ -4337,7 +4301,7 @@ yy336:
        zendlval->type = IS_STRING;
        return T_METHOD_C;
 }
-#line 4341 "Zend/zend_language_scanner.c"
+#line 4305 "Zend/zend_language_scanner.c"
 yy340:
                YYDEBUG(340, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4388,23 +4352,17 @@ yy347:
                }
                YYDEBUG(350, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1640 "Zend/zend_language_scanner.l"
+#line 1609 "Zend/zend_language_scanner.l"
                {
-       const char *func_name = NULL;
-
-       if (CG(active_op_array)) {
-               func_name = CG(active_op_array)->function_name;
-       }
-
-       if (!func_name) {
-               func_name = "";
+       zend_op_array *op_array = CG(active_op_array);
+       if (op_array && op_array->function_name) {
+               ZVAL_STRING(zendlval, op_array->function_name, 1);
+       } else {
+               ZVAL_EMPTY_STRING(zendlval);
        }
-       zendlval->value.str.len = strlen(func_name);
-       zendlval->value.str.val = estrndup(func_name, zendlval->value.str.len);
-       zendlval->type = IS_STRING;
        return T_FUNC_C;
 }
-#line 4408 "Zend/zend_language_scanner.c"
+#line 4366 "Zend/zend_language_scanner.c"
 yy351:
                YYDEBUG(351, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4424,19 +4382,17 @@ yy352:
                }
                YYDEBUG(355, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1683 "Zend/zend_language_scanner.l"
+#line 1637 "Zend/zend_language_scanner.l"
                {
        char *filename = zend_get_compiled_filename(TSRMLS_C);
 
        if (!filename) {
                filename = "";
        }
-       zendlval->value.str.len = strlen(filename);
-       zendlval->value.str.val = estrndup(filename, zendlval->value.str.len);
-       zendlval->type = IS_STRING;
+       ZVAL_STRING(zendlval, filename, 1);
        return T_FILE;
 }
-#line 4440 "Zend/zend_language_scanner.c"
+#line 4396 "Zend/zend_language_scanner.c"
 yy356:
                YYDEBUG(356, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4466,27 +4422,17 @@ yy359:
                }
                YYDEBUG(362, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1620 "Zend/zend_language_scanner.l"
+#line 1599 "Zend/zend_language_scanner.l"
                {
-       const char *trait_name = NULL;
-       
-       if (CG(active_class_entry)
-               && (ZEND_ACC_TRAIT == 
-                       (CG(active_class_entry)->ce_flags & ZEND_ACC_TRAIT))) {
-               trait_name = CG(active_class_entry)->name;
-       }
-       
-       if (!trait_name) {
-               trait_name = "";
+       zend_class_entry *ce = CG(active_class_entry);
+       if (ce && ce->name && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) {
+               ZVAL_STRINGL(zendlval, ce->name, ce->name_length, 1);
+       } else {
+               ZVAL_EMPTY_STRING(zendlval);
        }
-       
-       zendlval->value.str.len = strlen(trait_name);
-       zendlval->value.str.val = estrndup(trait_name, zendlval->value.str.len);
-       zendlval->type = IS_STRING;
-       
        return T_TRAIT_C;
 }
-#line 4490 "Zend/zend_language_scanner.c"
+#line 4436 "Zend/zend_language_scanner.c"
 yy363:
                YYDEBUG(363, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4516,34 +4462,25 @@ yy366:
                }
                YYDEBUG(369, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1593 "Zend/zend_language_scanner.l"
+#line 1581 "Zend/zend_language_scanner.l"
                {
-       const char *class_name = NULL;
-       
-       if (CG(active_class_entry)
-               && (ZEND_ACC_TRAIT ==
-                       (CG(active_class_entry)->ce_flags & ZEND_ACC_TRAIT))) {
+       zend_class_entry *ce = CG(active_class_entry);
+       if (ce && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) {
                /* We create a special __CLASS__ constant that is going to be resolved
                   at run-time */
-               zendlval->value.str.len = sizeof("__CLASS__")-1;
-               zendlval->value.str.val = estrndup("__CLASS__", zendlval->value.str.len);
+               Z_STRLEN_P(zendlval) = sizeof("__CLASS__")-1;
+               Z_STRVAL_P(zendlval) = estrndup("__CLASS__", Z_STRLEN_P(zendlval));
                zendlval->type = IS_CONSTANT;
        } else {
-               if (CG(active_class_entry)) {
-                       class_name = CG(active_class_entry)->name;
-               }
-               
-               if (!class_name) {
-                       class_name = "";
+               if (ce && ce->name) {
+                       ZVAL_STRINGL(zendlval, ce->name, ce->name_length, 1);
+               } else {
+                       ZVAL_EMPTY_STRING(zendlval);
                }
-               
-               zendlval->value.str.len = strlen(class_name);
-               zendlval->value.str.val = estrndup(class_name, zendlval->value.str.len);
-               zendlval->type = IS_STRING;
        }
        return T_CLASS_C;
 }
-#line 4547 "Zend/zend_language_scanner.c"
+#line 4484 "Zend/zend_language_scanner.c"
 yy370:
                YYDEBUG(370, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4605,11 +4542,11 @@ yy381:
                }
                YYDEBUG(382, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1302 "Zend/zend_language_scanner.l"
+#line 1298 "Zend/zend_language_scanner.l"
                {
        return T_HALT_COMPILER;
 }
-#line 4613 "Zend/zend_language_scanner.c"
+#line 4550 "Zend/zend_language_scanner.c"
 yy383:
                YYDEBUG(383, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4629,11 +4566,11 @@ yy385:
                }
                YYDEBUG(386, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1282 "Zend/zend_language_scanner.l"
+#line 1278 "Zend/zend_language_scanner.l"
                {
        return T_USE;
 }
-#line 4637 "Zend/zend_language_scanner.c"
+#line 4574 "Zend/zend_language_scanner.c"
 yy387:
                YYDEBUG(387, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4652,11 +4589,11 @@ yy389:
                }
                YYDEBUG(390, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1330 "Zend/zend_language_scanner.l"
+#line 1326 "Zend/zend_language_scanner.l"
                {
        return T_UNSET;
 }
-#line 4660 "Zend/zend_language_scanner.c"
+#line 4597 "Zend/zend_language_scanner.c"
 yy391:
                YYDEBUG(391, *YYCURSOR);
                ++YYCURSOR;
@@ -4828,11 +4765,11 @@ yy406:
                ++YYCURSOR;
                YYDEBUG(408, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1230 "Zend/zend_language_scanner.l"
+#line 1226 "Zend/zend_language_scanner.l"
                {
        return T_INT_CAST;
 }
-#line 4836 "Zend/zend_language_scanner.c"
+#line 4773 "Zend/zend_language_scanner.c"
 yy409:
                YYDEBUG(409, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4876,11 +4813,11 @@ yy414:
                ++YYCURSOR;
                YYDEBUG(417, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1234 "Zend/zend_language_scanner.l"
+#line 1230 "Zend/zend_language_scanner.l"
                {
        return T_DOUBLE_CAST;
 }
-#line 4884 "Zend/zend_language_scanner.c"
+#line 4821 "Zend/zend_language_scanner.c"
 yy418:
                YYDEBUG(418, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4950,11 +4887,11 @@ yy428:
                ++YYCURSOR;
                YYDEBUG(431, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1238 "Zend/zend_language_scanner.l"
+#line 1234 "Zend/zend_language_scanner.l"
                {
        return T_STRING_CAST;
 }
-#line 4958 "Zend/zend_language_scanner.c"
+#line 4895 "Zend/zend_language_scanner.c"
 yy432:
                YYDEBUG(432, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4987,11 +4924,11 @@ yy435:
                ++YYCURSOR;
                YYDEBUG(438, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1242 "Zend/zend_language_scanner.l"
+#line 1238 "Zend/zend_language_scanner.l"
                {
        return T_ARRAY_CAST;
 }
-#line 4995 "Zend/zend_language_scanner.c"
+#line 4932 "Zend/zend_language_scanner.c"
 yy439:
                YYDEBUG(439, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5029,11 +4966,11 @@ yy443:
                ++YYCURSOR;
                YYDEBUG(446, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1246 "Zend/zend_language_scanner.l"
+#line 1242 "Zend/zend_language_scanner.l"
                {
        return T_OBJECT_CAST;
 }
-#line 5037 "Zend/zend_language_scanner.c"
+#line 4974 "Zend/zend_language_scanner.c"
 yy447:
                YYDEBUG(447, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5074,11 +5011,11 @@ yy452:
                ++YYCURSOR;
                YYDEBUG(454, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1250 "Zend/zend_language_scanner.l"
+#line 1246 "Zend/zend_language_scanner.l"
                {
        return T_BOOL_CAST;
 }
-#line 5082 "Zend/zend_language_scanner.c"
+#line 5019 "Zend/zend_language_scanner.c"
 yy455:
                YYDEBUG(455, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5138,11 +5075,11 @@ yy463:
                ++YYCURSOR;
                YYDEBUG(466, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1254 "Zend/zend_language_scanner.l"
+#line 1250 "Zend/zend_language_scanner.l"
                {
        return T_UNSET_CAST;
 }
-#line 5146 "Zend/zend_language_scanner.c"
+#line 5083 "Zend/zend_language_scanner.c"
 yy467:
                YYDEBUG(467, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5156,11 +5093,11 @@ yy468:
                }
                YYDEBUG(469, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1226 "Zend/zend_language_scanner.l"
+#line 1222 "Zend/zend_language_scanner.l"
                {
        return T_VAR;
 }
-#line 5164 "Zend/zend_language_scanner.c"
+#line 5101 "Zend/zend_language_scanner.c"
 yy470:
                YYDEBUG(470, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5180,11 +5117,11 @@ yy472:
                }
                YYDEBUG(473, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1218 "Zend/zend_language_scanner.l"
+#line 1214 "Zend/zend_language_scanner.l"
                {
        return T_NEW;
 }
-#line 5188 "Zend/zend_language_scanner.c"
+#line 5125 "Zend/zend_language_scanner.c"
 yy474:
                YYDEBUG(474, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5223,21 +5160,21 @@ yy480:
                }
                YYDEBUG(481, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1278 "Zend/zend_language_scanner.l"
+#line 1274 "Zend/zend_language_scanner.l"
                {
        return T_NAMESPACE;
 }
-#line 5231 "Zend/zend_language_scanner.c"
+#line 5168 "Zend/zend_language_scanner.c"
 yy482:
                YYDEBUG(482, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(483, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1210 "Zend/zend_language_scanner.l"
+#line 1206 "Zend/zend_language_scanner.l"
                {
        return T_PAAMAYIM_NEKUDOTAYIM;
 }
-#line 5241 "Zend/zend_language_scanner.c"
+#line 5178 "Zend/zend_language_scanner.c"
 yy484:
                YYDEBUG(484, *YYCURSOR);
                ++YYCURSOR;
@@ -5259,32 +5196,32 @@ yy486:
                ++YYCURSOR;
                YYDEBUG(487, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1386 "Zend/zend_language_scanner.l"
+#line 1382 "Zend/zend_language_scanner.l"
                {
        return T_MINUS_EQUAL;
 }
-#line 5267 "Zend/zend_language_scanner.c"
+#line 5204 "Zend/zend_language_scanner.c"
 yy488:
                YYDEBUG(488, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(489, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1354 "Zend/zend_language_scanner.l"
+#line 1350 "Zend/zend_language_scanner.l"
                {
        return T_DEC;
 }
-#line 5277 "Zend/zend_language_scanner.c"
+#line 5214 "Zend/zend_language_scanner.c"
 yy490:
                YYDEBUG(490, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(491, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1180 "Zend/zend_language_scanner.l"
+#line 1178 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
        return T_OBJECT_OPERATOR;
 }
-#line 5288 "Zend/zend_language_scanner.c"
+#line 5225 "Zend/zend_language_scanner.c"
 yy492:
                YYDEBUG(492, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5329,11 +5266,11 @@ yy497:
                }
                YYDEBUG(498, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1326 "Zend/zend_language_scanner.l"
+#line 1322 "Zend/zend_language_scanner.l"
                {
        return T_PUBLIC;
 }
-#line 5337 "Zend/zend_language_scanner.c"
+#line 5274 "Zend/zend_language_scanner.c"
 yy499:
                YYDEBUG(499, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5388,11 +5325,11 @@ yy506:
                }
                YYDEBUG(507, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1322 "Zend/zend_language_scanner.l"
+#line 1318 "Zend/zend_language_scanner.l"
                {
        return T_PROTECTED;
 }
-#line 5396 "Zend/zend_language_scanner.c"
+#line 5333 "Zend/zend_language_scanner.c"
 yy508:
                YYDEBUG(508, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5422,11 +5359,11 @@ yy512:
                }
                YYDEBUG(513, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1318 "Zend/zend_language_scanner.l"
+#line 1314 "Zend/zend_language_scanner.l"
                {
        return T_PRIVATE;
 }
-#line 5430 "Zend/zend_language_scanner.c"
+#line 5367 "Zend/zend_language_scanner.c"
 yy514:
                YYDEBUG(514, *YYCURSOR);
                ++YYCURSOR;
@@ -5435,11 +5372,11 @@ yy514:
                }
                YYDEBUG(515, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1156 "Zend/zend_language_scanner.l"
+#line 1154 "Zend/zend_language_scanner.l"
                {
        return T_PRINT;
 }
-#line 5443 "Zend/zend_language_scanner.c"
+#line 5380 "Zend/zend_language_scanner.c"
 yy516:
                YYDEBUG(516, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5464,11 +5401,11 @@ yy519:
                }
                YYDEBUG(520, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1148 "Zend/zend_language_scanner.l"
+#line 1146 "Zend/zend_language_scanner.l"
                {
        return T_GOTO;
 }
-#line 5472 "Zend/zend_language_scanner.c"
+#line 5409 "Zend/zend_language_scanner.c"
 yy521:
                YYDEBUG(521, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5492,11 +5429,11 @@ yy524:
                }
                YYDEBUG(525, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1290 "Zend/zend_language_scanner.l"
+#line 1286 "Zend/zend_language_scanner.l"
                {
        return T_GLOBAL;
 }
-#line 5500 "Zend/zend_language_scanner.c"
+#line 5437 "Zend/zend_language_scanner.c"
 yy526:
                YYDEBUG(526, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5533,11 +5470,11 @@ yy532:
                }
                YYDEBUG(533, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1140 "Zend/zend_language_scanner.l"
+#line 1138 "Zend/zend_language_scanner.l"
                {
        return T_BREAK;
 }
-#line 5541 "Zend/zend_language_scanner.c"
+#line 5478 "Zend/zend_language_scanner.c"
 yy534:
                YYDEBUG(534, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5577,11 +5514,11 @@ yy540:
                }
                YYDEBUG(541, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1124 "Zend/zend_language_scanner.l"
+#line 1122 "Zend/zend_language_scanner.l"
                {
        return T_SWITCH;
 }
-#line 5585 "Zend/zend_language_scanner.c"
+#line 5522 "Zend/zend_language_scanner.c"
 yy542:
                YYDEBUG(542, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5605,11 +5542,11 @@ yy545:
                }
                YYDEBUG(546, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1306 "Zend/zend_language_scanner.l"
+#line 1302 "Zend/zend_language_scanner.l"
                {
        return T_STATIC;
 }
-#line 5613 "Zend/zend_language_scanner.c"
+#line 5550 "Zend/zend_language_scanner.c"
 yy547:
                YYDEBUG(547, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5636,11 +5573,11 @@ yy550:
                }
                YYDEBUG(551, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1120 "Zend/zend_language_scanner.l"
+#line 1118 "Zend/zend_language_scanner.l"
                {
        return T_AS;
 }
-#line 5644 "Zend/zend_language_scanner.c"
+#line 5581 "Zend/zend_language_scanner.c"
 yy552:
                YYDEBUG(552, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5659,11 +5596,11 @@ yy554:
                }
                YYDEBUG(555, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1342 "Zend/zend_language_scanner.l"
+#line 1338 "Zend/zend_language_scanner.l"
                {
        return T_ARRAY;
 }
-#line 5667 "Zend/zend_language_scanner.c"
+#line 5604 "Zend/zend_language_scanner.c"
 yy556:
                YYDEBUG(556, *YYCURSOR);
                ++YYCURSOR;
@@ -5672,11 +5609,11 @@ yy556:
                }
                YYDEBUG(557, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1438 "Zend/zend_language_scanner.l"
+#line 1434 "Zend/zend_language_scanner.l"
                {
        return T_LOGICAL_AND;
 }
-#line 5680 "Zend/zend_language_scanner.c"
+#line 5617 "Zend/zend_language_scanner.c"
 yy558:
                YYDEBUG(558, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5710,11 +5647,11 @@ yy563:
                }
                YYDEBUG(564, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1310 "Zend/zend_language_scanner.l"
+#line 1306 "Zend/zend_language_scanner.l"
                {
        return T_ABSTRACT;
 }
-#line 5718 "Zend/zend_language_scanner.c"
+#line 5655 "Zend/zend_language_scanner.c"
 yy565:
                YYDEBUG(565, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5738,11 +5675,11 @@ yy568:
                }
                YYDEBUG(569, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1080 "Zend/zend_language_scanner.l"
+#line 1078 "Zend/zend_language_scanner.l"
                {
        return T_WHILE;
 }
-#line 5746 "Zend/zend_language_scanner.c"
+#line 5683 "Zend/zend_language_scanner.c"
 yy570:
                YYDEBUG(570, *YYCURSOR);
                ++YYCURSOR;
@@ -5751,11 +5688,11 @@ yy570:
                }
                YYDEBUG(571, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1064 "Zend/zend_language_scanner.l"
+#line 1062 "Zend/zend_language_scanner.l"
                {
        return T_IF;
 }
-#line 5759 "Zend/zend_language_scanner.c"
+#line 5696 "Zend/zend_language_scanner.c"
 yy572:
                YYDEBUG(572, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5807,11 +5744,11 @@ yy577:
                }
                YYDEBUG(578, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1294 "Zend/zend_language_scanner.l"
+#line 1290 "Zend/zend_language_scanner.l"
                {
        return T_ISSET;
 }
-#line 5815 "Zend/zend_language_scanner.c"
+#line 5752 "Zend/zend_language_scanner.c"
 yy579:
                YYDEBUG(579, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5865,11 +5802,11 @@ yy585:
 yy586:
                YYDEBUG(586, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1262 "Zend/zend_language_scanner.l"
+#line 1258 "Zend/zend_language_scanner.l"
                {
        return T_INCLUDE;
 }
-#line 5873 "Zend/zend_language_scanner.c"
+#line 5810 "Zend/zend_language_scanner.c"
 yy587:
                YYDEBUG(587, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5898,11 +5835,11 @@ yy591:
                }
                YYDEBUG(592, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1266 "Zend/zend_language_scanner.l"
+#line 1262 "Zend/zend_language_scanner.l"
                {
        return T_INCLUDE_ONCE;
 }
-#line 5906 "Zend/zend_language_scanner.c"
+#line 5843 "Zend/zend_language_scanner.c"
 yy593:
                YYDEBUG(593, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5936,11 +5873,11 @@ yy598:
                }
                YYDEBUG(599, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1164 "Zend/zend_language_scanner.l"
+#line 1162 "Zend/zend_language_scanner.l"
                {
        return T_INTERFACE;
 }
-#line 5944 "Zend/zend_language_scanner.c"
+#line 5881 "Zend/zend_language_scanner.c"
 yy600:
                YYDEBUG(600, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5990,11 +5927,11 @@ yy606:
                }
                YYDEBUG(607, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1286 "Zend/zend_language_scanner.l"
+#line 1282 "Zend/zend_language_scanner.l"
                {
         return T_INSTEADOF;
 }
-#line 5998 "Zend/zend_language_scanner.c"
+#line 5935 "Zend/zend_language_scanner.c"
 yy608:
                YYDEBUG(608, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6023,11 +5960,11 @@ yy612:
                }
                YYDEBUG(613, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1116 "Zend/zend_language_scanner.l"
+#line 1114 "Zend/zend_language_scanner.l"
                {
        return T_INSTANCEOF;
 }
-#line 6031 "Zend/zend_language_scanner.c"
+#line 5968 "Zend/zend_language_scanner.c"
 yy614:
                YYDEBUG(614, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6071,11 +6008,11 @@ yy621:
                }
                YYDEBUG(622, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1176 "Zend/zend_language_scanner.l"
+#line 1174 "Zend/zend_language_scanner.l"
                {
        return T_IMPLEMENTS;
 }
-#line 6079 "Zend/zend_language_scanner.c"
+#line 6016 "Zend/zend_language_scanner.c"
 yy623:
                YYDEBUG(623, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6103,11 +6040,11 @@ yy624:
                }
                YYDEBUG(626, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1048 "Zend/zend_language_scanner.l"
+#line 1046 "Zend/zend_language_scanner.l"
                {
        return T_TRY;
 }
-#line 6111 "Zend/zend_language_scanner.c"
+#line 6048 "Zend/zend_language_scanner.c"
 yy627:
                YYDEBUG(627, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6126,11 +6063,11 @@ yy629:
                }
                YYDEBUG(630, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1168 "Zend/zend_language_scanner.l"
+#line 1166 "Zend/zend_language_scanner.l"
                {
        return T_TRAIT;
 }
-#line 6134 "Zend/zend_language_scanner.c"
+#line 6071 "Zend/zend_language_scanner.c"
 yy631:
                YYDEBUG(631, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6149,11 +6086,11 @@ yy633:
                }
                YYDEBUG(634, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1060 "Zend/zend_language_scanner.l"
+#line 1058 "Zend/zend_language_scanner.l"
                {
        return T_THROW;
 }
-#line 6157 "Zend/zend_language_scanner.c"
+#line 6094 "Zend/zend_language_scanner.c"
 yy635:
                YYDEBUG(635, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6177,11 +6114,11 @@ yy638:
                }
                YYDEBUG(639, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1044 "Zend/zend_language_scanner.l"
+#line 1042 "Zend/zend_language_scanner.l"
                {
        return T_YIELD;
 }
-#line 6185 "Zend/zend_language_scanner.c"
+#line 6122 "Zend/zend_language_scanner.c"
 yy640:
                YYDEBUG(640, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6242,11 +6179,11 @@ yy646:
 yy647:
                YYDEBUG(647, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1270 "Zend/zend_language_scanner.l"
+#line 1266 "Zend/zend_language_scanner.l"
                {
        return T_REQUIRE;
 }
-#line 6250 "Zend/zend_language_scanner.c"
+#line 6187 "Zend/zend_language_scanner.c"
 yy648:
                YYDEBUG(648, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6275,11 +6212,11 @@ yy652:
                }
                YYDEBUG(653, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1274 "Zend/zend_language_scanner.l"
+#line 1270 "Zend/zend_language_scanner.l"
                {
        return T_REQUIRE_ONCE;
 }
-#line 6283 "Zend/zend_language_scanner.c"
+#line 6220 "Zend/zend_language_scanner.c"
 yy654:
                YYDEBUG(654, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6298,11 +6235,11 @@ yy656:
                }
                YYDEBUG(657, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1040 "Zend/zend_language_scanner.l"
+#line 1038 "Zend/zend_language_scanner.l"
                {
        return T_RETURN;
 }
-#line 6306 "Zend/zend_language_scanner.c"
+#line 6243 "Zend/zend_language_scanner.c"
 yy658:
                YYDEBUG(658, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6392,11 +6329,11 @@ yy667:
                }
                YYDEBUG(668, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1144 "Zend/zend_language_scanner.l"
+#line 1142 "Zend/zend_language_scanner.l"
                {
        return T_CONTINUE;
 }
-#line 6400 "Zend/zend_language_scanner.c"
+#line 6337 "Zend/zend_language_scanner.c"
 yy669:
                YYDEBUG(669, *YYCURSOR);
                ++YYCURSOR;
@@ -6405,11 +6342,11 @@ yy669:
                }
                YYDEBUG(670, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1036 "Zend/zend_language_scanner.l"
+#line 1034 "Zend/zend_language_scanner.l"
                {
        return T_CONST;
 }
-#line 6413 "Zend/zend_language_scanner.c"
+#line 6350 "Zend/zend_language_scanner.c"
 yy671:
                YYDEBUG(671, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6434,11 +6371,11 @@ yy674:
                }
                YYDEBUG(675, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1222 "Zend/zend_language_scanner.l"
+#line 1218 "Zend/zend_language_scanner.l"
                {
        return T_CLONE;
 }
-#line 6442 "Zend/zend_language_scanner.c"
+#line 6379 "Zend/zend_language_scanner.c"
 yy676:
                YYDEBUG(676, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6452,11 +6389,11 @@ yy677:
                }
                YYDEBUG(678, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1160 "Zend/zend_language_scanner.l"
+#line 1158 "Zend/zend_language_scanner.l"
                {
        return T_CLASS;
 }
-#line 6460 "Zend/zend_language_scanner.c"
+#line 6397 "Zend/zend_language_scanner.c"
 yy679:
                YYDEBUG(679, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6502,11 +6439,11 @@ yy686:
                }
                YYDEBUG(687, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1346 "Zend/zend_language_scanner.l"
+#line 1342 "Zend/zend_language_scanner.l"
                {
  return T_CALLABLE;
 }
-#line 6510 "Zend/zend_language_scanner.c"
+#line 6447 "Zend/zend_language_scanner.c"
 yy688:
                YYDEBUG(688, *YYCURSOR);
                ++YYCURSOR;
@@ -6515,11 +6452,11 @@ yy688:
                }
                YYDEBUG(689, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1132 "Zend/zend_language_scanner.l"
+#line 1130 "Zend/zend_language_scanner.l"
                {
        return T_CASE;
 }
-#line 6523 "Zend/zend_language_scanner.c"
+#line 6460 "Zend/zend_language_scanner.c"
 yy690:
                YYDEBUG(690, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6533,11 +6470,11 @@ yy691:
                }
                YYDEBUG(692, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1052 "Zend/zend_language_scanner.l"
+#line 1050 "Zend/zend_language_scanner.l"
                {
        return T_CATCH;
 }
-#line 6541 "Zend/zend_language_scanner.c"
+#line 6478 "Zend/zend_language_scanner.c"
 yy693:
                YYDEBUG(693, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6588,11 +6525,11 @@ yy701:
                }
                YYDEBUG(702, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1032 "Zend/zend_language_scanner.l"
+#line 1030 "Zend/zend_language_scanner.l"
                {
        return T_FUNCTION;
 }
-#line 6596 "Zend/zend_language_scanner.c"
+#line 6533 "Zend/zend_language_scanner.c"
 yy703:
                YYDEBUG(703, *YYCURSOR);
                ++YYCURSOR;
@@ -6616,11 +6553,11 @@ yy703:
 yy704:
                YYDEBUG(704, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1092 "Zend/zend_language_scanner.l"
+#line 1090 "Zend/zend_language_scanner.l"
                {
        return T_FOR;
 }
-#line 6624 "Zend/zend_language_scanner.c"
+#line 6561 "Zend/zend_language_scanner.c"
 yy705:
                YYDEBUG(705, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6644,11 +6581,11 @@ yy708:
                }
                YYDEBUG(709, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1100 "Zend/zend_language_scanner.l"
+#line 1098 "Zend/zend_language_scanner.l"
                {
        return T_FOREACH;
 }
-#line 6652 "Zend/zend_language_scanner.c"
+#line 6589 "Zend/zend_language_scanner.c"
 yy710:
                YYDEBUG(710, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6682,11 +6619,11 @@ yy712:
 yy713:
                YYDEBUG(713, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1314 "Zend/zend_language_scanner.l"
+#line 1310 "Zend/zend_language_scanner.l"
                {
        return T_FINAL;
 }
-#line 6690 "Zend/zend_language_scanner.c"
+#line 6627 "Zend/zend_language_scanner.c"
 yy714:
                YYDEBUG(714, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6700,11 +6637,11 @@ yy715:
                }
                YYDEBUG(716, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1056 "Zend/zend_language_scanner.l"
+#line 1054 "Zend/zend_language_scanner.l"
                {
        return T_FINALLY;
 }
-#line 6708 "Zend/zend_language_scanner.c"
+#line 6645 "Zend/zend_language_scanner.c"
 yy717:
                YYDEBUG(717, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6735,11 +6672,11 @@ yy719:
                }
                YYDEBUG(720, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1088 "Zend/zend_language_scanner.l"
+#line 1086 "Zend/zend_language_scanner.l"
                {
        return T_DO;
 }
-#line 6743 "Zend/zend_language_scanner.c"
+#line 6680 "Zend/zend_language_scanner.c"
 yy721:
                YYDEBUG(721, *YYCURSOR);
                ++YYCURSOR;
@@ -6748,11 +6685,11 @@ yy721:
                }
                YYDEBUG(722, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1028 "Zend/zend_language_scanner.l"
+#line 1026 "Zend/zend_language_scanner.l"
                {
        return T_EXIT;
 }
-#line 6756 "Zend/zend_language_scanner.c"
+#line 6693 "Zend/zend_language_scanner.c"
 yy723:
                YYDEBUG(723, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6787,11 +6724,11 @@ yy728:
                }
                YYDEBUG(729, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1136 "Zend/zend_language_scanner.l"
+#line 1134 "Zend/zend_language_scanner.l"
                {
        return T_DEFAULT;
 }
-#line 6795 "Zend/zend_language_scanner.c"
+#line 6732 "Zend/zend_language_scanner.c"
 yy730:
                YYDEBUG(730, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6815,11 +6752,11 @@ yy733:
                }
                YYDEBUG(734, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1108 "Zend/zend_language_scanner.l"
+#line 1106 "Zend/zend_language_scanner.l"
                {
        return T_DECLARE;
 }
-#line 6823 "Zend/zend_language_scanner.c"
+#line 6760 "Zend/zend_language_scanner.c"
 yy735:
                YYDEBUG(735, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6899,11 +6836,11 @@ yy746:
                }
                YYDEBUG(747, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1172 "Zend/zend_language_scanner.l"
+#line 1170 "Zend/zend_language_scanner.l"
                {
        return T_EXTENDS;
 }
-#line 6907 "Zend/zend_language_scanner.c"
+#line 6844 "Zend/zend_language_scanner.c"
 yy748:
                YYDEBUG(748, *YYCURSOR);
                ++YYCURSOR;
@@ -6912,11 +6849,11 @@ yy748:
                }
                YYDEBUG(749, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1024 "Zend/zend_language_scanner.l"
+#line 1022 "Zend/zend_language_scanner.l"
                {
        return T_EXIT;
 }
-#line 6920 "Zend/zend_language_scanner.c"
+#line 6857 "Zend/zend_language_scanner.c"
 yy750:
                YYDEBUG(750, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6930,11 +6867,11 @@ yy751:
                }
                YYDEBUG(752, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1258 "Zend/zend_language_scanner.l"
+#line 1254 "Zend/zend_language_scanner.l"
                {
        return T_EVAL;
 }
-#line 6938 "Zend/zend_language_scanner.c"
+#line 6875 "Zend/zend_language_scanner.c"
 yy753:
                YYDEBUG(753, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7004,11 +6941,11 @@ yy762:
                }
                YYDEBUG(763, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1084 "Zend/zend_language_scanner.l"
+#line 1082 "Zend/zend_language_scanner.l"
                {
        return T_ENDWHILE;
 }
-#line 7012 "Zend/zend_language_scanner.c"
+#line 6949 "Zend/zend_language_scanner.c"
 yy764:
                YYDEBUG(764, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7037,11 +6974,11 @@ yy768:
                }
                YYDEBUG(769, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1128 "Zend/zend_language_scanner.l"
+#line 1126 "Zend/zend_language_scanner.l"
                {
        return T_ENDSWITCH;
 }
-#line 7045 "Zend/zend_language_scanner.c"
+#line 6982 "Zend/zend_language_scanner.c"
 yy770:
                YYDEBUG(770, *YYCURSOR);
                ++YYCURSOR;
@@ -7050,11 +6987,11 @@ yy770:
                }
                YYDEBUG(771, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1072 "Zend/zend_language_scanner.l"
+#line 1070 "Zend/zend_language_scanner.l"
                {
        return T_ENDIF;
 }
-#line 7058 "Zend/zend_language_scanner.c"
+#line 6995 "Zend/zend_language_scanner.c"
 yy772:
                YYDEBUG(772, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7083,11 +7020,11 @@ yy773:
 yy774:
                YYDEBUG(774, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1096 "Zend/zend_language_scanner.l"
+#line 1094 "Zend/zend_language_scanner.l"
                {
        return T_ENDFOR;
 }
-#line 7091 "Zend/zend_language_scanner.c"
+#line 7028 "Zend/zend_language_scanner.c"
 yy775:
                YYDEBUG(775, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7111,11 +7048,11 @@ yy778:
                }
                YYDEBUG(779, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1104 "Zend/zend_language_scanner.l"
+#line 1102 "Zend/zend_language_scanner.l"
                {
        return T_ENDFOREACH;
 }
-#line 7119 "Zend/zend_language_scanner.c"
+#line 7056 "Zend/zend_language_scanner.c"
 yy780:
                YYDEBUG(780, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7149,11 +7086,11 @@ yy785:
                }
                YYDEBUG(786, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1112 "Zend/zend_language_scanner.l"
+#line 1110 "Zend/zend_language_scanner.l"
                {
        return T_ENDDECLARE;
 }
-#line 7157 "Zend/zend_language_scanner.c"
+#line 7094 "Zend/zend_language_scanner.c"
 yy787:
                YYDEBUG(787, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7172,11 +7109,11 @@ yy789:
                }
                YYDEBUG(790, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1298 "Zend/zend_language_scanner.l"
+#line 1294 "Zend/zend_language_scanner.l"
                {
        return T_EMPTY;
 }
-#line 7180 "Zend/zend_language_scanner.c"
+#line 7117 "Zend/zend_language_scanner.c"
 yy791:
                YYDEBUG(791, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7205,11 +7142,11 @@ yy792:
 yy793:
                YYDEBUG(793, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1076 "Zend/zend_language_scanner.l"
+#line 1074 "Zend/zend_language_scanner.l"
                {
        return T_ELSE;
 }
-#line 7213 "Zend/zend_language_scanner.c"
+#line 7150 "Zend/zend_language_scanner.c"
 yy794:
                YYDEBUG(794, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7223,11 +7160,11 @@ yy795:
                }
                YYDEBUG(796, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1068 "Zend/zend_language_scanner.l"
+#line 1066 "Zend/zend_language_scanner.l"
                {
        return T_ELSEIF;
 }
-#line 7231 "Zend/zend_language_scanner.c"
+#line 7168 "Zend/zend_language_scanner.c"
 yy797:
                YYDEBUG(797, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7241,11 +7178,11 @@ yy798:
                }
                YYDEBUG(799, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1152 "Zend/zend_language_scanner.l"
+#line 1150 "Zend/zend_language_scanner.l"
                {
        return T_ECHO;
 }
-#line 7249 "Zend/zend_language_scanner.c"
+#line 7186 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_LOOKING_FOR_PROPERTY:
@@ -7318,15 +7255,13 @@ yy802:
 yy803:
                YYDEBUG(803, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1185 "Zend/zend_language_scanner.l"
+#line 1183 "Zend/zend_language_scanner.l"
                {
-       zendlval->value.str.val = yytext; /* no copying - intentional */
-       zendlval->value.str.len = yyleng;
-       zendlval->type = IS_STRING;
+       ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
        HANDLE_NEWLINES(yytext, yyleng);
        return T_WHITESPACE;
 }
-#line 7330 "Zend/zend_language_scanner.c"
+#line 7265 "Zend/zend_language_scanner.c"
 yy804:
                YYDEBUG(804, *YYCURSOR);
                ++YYCURSOR;
@@ -7334,13 +7269,13 @@ yy804:
 yy805:
                YYDEBUG(805, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1204 "Zend/zend_language_scanner.l"
+#line 1200 "Zend/zend_language_scanner.l"
                {
        yyless(0);
        yy_pop_state(TSRMLS_C);
        goto restart;
 }
-#line 7344 "Zend/zend_language_scanner.c"
+#line 7279 "Zend/zend_language_scanner.c"
 yy806:
                YYDEBUG(806, *YYCURSOR);
                ++YYCURSOR;
@@ -7349,14 +7284,14 @@ yy806:
 yy807:
                YYDEBUG(807, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1197 "Zend/zend_language_scanner.l"
+#line 1193 "Zend/zend_language_scanner.l"
                {
        yy_pop_state(TSRMLS_C);
        zend_copy_value(zendlval, yytext, yyleng);
        zendlval->type = IS_STRING;
        return T_STRING;
 }
-#line 7360 "Zend/zend_language_scanner.c"
+#line 7295 "Zend/zend_language_scanner.c"
 yy808:
                YYDEBUG(808, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7377,11 +7312,11 @@ yy811:
                ++YYCURSOR;
                YYDEBUG(812, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1193 "Zend/zend_language_scanner.l"
+#line 1189 "Zend/zend_language_scanner.l"
                {
        return T_OBJECT_OPERATOR;
 }
-#line 7385 "Zend/zend_language_scanner.c"
+#line 7320 "Zend/zend_language_scanner.c"
 yy813:
                YYDEBUG(813, *YYCURSOR);
                ++YYCURSOR;
@@ -7466,14 +7401,14 @@ yy817:
 yy818:
                YYDEBUG(818, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1490 "Zend/zend_language_scanner.l"
+#line 1486 "Zend/zend_language_scanner.l"
                {
        yyless(0);
        yy_pop_state(TSRMLS_C);
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        goto restart;
 }
-#line 7477 "Zend/zend_language_scanner.c"
+#line 7412 "Zend/zend_language_scanner.c"
 yy819:
                YYDEBUG(819, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7498,7 +7433,7 @@ yy823:
                ++YYCURSOR;
                YYDEBUG(824, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1480 "Zend/zend_language_scanner.l"
+#line 1476 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        zend_copy_value(zendlval, yytext, yyleng);
@@ -7507,7 +7442,7 @@ yy823:
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        return T_STRING_VARNAME;
 }
-#line 7511 "Zend/zend_language_scanner.c"
+#line 7446 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_NOWDOC:
@@ -7518,7 +7453,7 @@ yyc_ST_NOWDOC:
        ++YYCURSOR;
        YYDEBUG(828, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
-#line 2374 "Zend/zend_language_scanner.l"
+#line 2306 "Zend/zend_language_scanner.l"
        {
        int newline = 0;
 
@@ -7575,7 +7510,7 @@ nowdoc_scan_done:
        HANDLE_NEWLINES(yytext, yyleng - newline);
        return T_ENCAPSED_AND_WHITESPACE;
 }
-#line 7579 "Zend/zend_language_scanner.c"
+#line 7514 "Zend/zend_language_scanner.c"
 /* *********************************** */
 yyc_ST_VAR_OFFSET:
        {
@@ -7682,19 +7617,16 @@ yy831:
 yy832:
                YYDEBUG(832, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1568 "Zend/zend_language_scanner.l"
+#line 1562 "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)) {
-               zendlval->value.lval = strtol(yytext, NULL, 10);
-               zendlval->type = IS_LONG;
+               ZVAL_LONG(zendlval, strtol(yytext, NULL, 10));
        } else {
-               zendlval->value.str.val = (char *)estrndup(yytext, yyleng);
-               zendlval->value.str.len = yyleng;
-               zendlval->type = IS_STRING;
+               ZVAL_STRINGL(zendlval, yytext, yyleng, 1);
        }
        return T_NUM_STRING;
 }
-#line 7698 "Zend/zend_language_scanner.c"
+#line 7630 "Zend/zend_language_scanner.c"
 yy833:
                YYDEBUG(833, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7714,23 +7646,23 @@ yy834:
 yy835:
                YYDEBUG(835, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1900 "Zend/zend_language_scanner.l"
+#line 1838 "Zend/zend_language_scanner.l"
                {
        /* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */
        return yytext[0];
 }
-#line 7723 "Zend/zend_language_scanner.c"
+#line 7655 "Zend/zend_language_scanner.c"
 yy836:
                YYDEBUG(836, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(837, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1895 "Zend/zend_language_scanner.l"
+#line 1833 "Zend/zend_language_scanner.l"
                {
        yy_pop_state(TSRMLS_C);
        return ']';
 }
-#line 7734 "Zend/zend_language_scanner.c"
+#line 7666 "Zend/zend_language_scanner.c"
 yy838:
                YYDEBUG(838, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7740,14 +7672,14 @@ yy839:
                ++YYCURSOR;
                YYDEBUG(840, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1905 "Zend/zend_language_scanner.l"
+#line 1843 "Zend/zend_language_scanner.l"
                {
        /* Invalid rule to return a more explicit parse error with proper line number */
        yyless(0);
        yy_pop_state(TSRMLS_C);
        return T_ENCAPSED_AND_WHITESPACE;
 }
-#line 7751 "Zend/zend_language_scanner.c"
+#line 7683 "Zend/zend_language_scanner.c"
 yy841:
                YYDEBUG(841, *YYCURSOR);
                ++YYCURSOR;
@@ -7756,19 +7688,19 @@ yy841:
 yy842:
                YYDEBUG(842, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1912 "Zend/zend_language_scanner.l"
+#line 1850 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, yytext, yyleng);
        zendlval->type = IS_STRING;
        return T_STRING;
 }
-#line 7766 "Zend/zend_language_scanner.c"
+#line 7698 "Zend/zend_language_scanner.c"
 yy843:
                YYDEBUG(843, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(844, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2432 "Zend/zend_language_scanner.l"
+#line 2364 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@ -7777,7 +7709,7 @@ yy843:
        zend_error(E_COMPILE_WARNING,"Unexpected character in input:  '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
        goto restart;
 }
-#line 7781 "Zend/zend_language_scanner.c"
+#line 7713 "Zend/zend_language_scanner.c"
 yy845:
                YYDEBUG(845, *YYCURSOR);
                ++YYCURSOR;
@@ -7813,13 +7745,13 @@ yy847:
 yy849:
                YYDEBUG(849, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1889 "Zend/zend_language_scanner.l"
+#line 1827 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 7823 "Zend/zend_language_scanner.c"
+#line 7755 "Zend/zend_language_scanner.c"
 yy850:
                YYDEBUG(850, *YYCURSOR);
                ++YYCURSOR;
@@ -7859,14 +7791,12 @@ yy855:
 yy857:
                YYDEBUG(857, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1580 "Zend/zend_language_scanner.l"
+#line 1571 "Zend/zend_language_scanner.l"
                { /* Offset must be treated as a string */
-       zendlval->value.str.val = (char *)estrndup(yytext, yyleng);
-       zendlval->value.str.len = yyleng;
-       zendlval->type = IS_STRING;
+       ZVAL_STRINGL(zendlval, yytext, yyleng, 1);
        return T_NUM_STRING;
 }
-#line 7870 "Zend/zend_language_scanner.c"
+#line 7800 "Zend/zend_language_scanner.c"
 yy858:
                YYDEBUG(858, *YYCURSOR);
                ++YYCURSOR;
@@ -7889,6 +7819,6 @@ yy860:
                goto yy857;
        }
 }
-#line 2441 "Zend/zend_language_scanner.l"
+#line 2373 "Zend/zend_language_scanner.l"
 
 }
index d2e7243bb2da13d86ee535b2023c2b8b46ec0bfe..95d2d6246b9c6be9292358aa641ef9a6ebbe2a66 100644 (file)
@@ -562,10 +562,8 @@ ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSR
        zend_bool original_in_compilation = CG(in_compilation);
 
        retval_znode.op_type = IS_CONST;
-       retval_znode.u.constant.type = IS_LONG;
-       retval_znode.u.constant.value.lval = 1;
-       Z_UNSET_ISREF(retval_znode.u.constant);
-       Z_SET_REFCOUNT(retval_znode.u.constant, 1);
+       INIT_PZVAL(&retval_znode.u.constant);
+       ZVAL_LONG(&retval_znode.u.constant, 1);
 
        zend_save_lexical_state(&original_lex_state TSRMLS_CC);
 
@@ -622,7 +620,7 @@ zend_op_array *compile_filename(int type, zval *filename TSRMLS_DC)
                convert_to_string(&tmp);
                filename = &tmp;
        }
-       file_handle.filename = filename->value.str.val;
+       file_handle.filename = Z_STRVAL_P(filename);
        file_handle.free_filename = 0;
        file_handle.type = ZEND_HANDLE_FILENAME;
        file_handle.opened_path = NULL;
@@ -633,7 +631,7 @@ zend_op_array *compile_filename(int type, zval *filename TSRMLS_DC)
                int dummy = 1;
 
                if (!file_handle.opened_path) {
-                       file_handle.opened_path = opened_path = estrndup(filename->value.str.val, filename->value.str.len);
+                       file_handle.opened_path = opened_path = estrndup(Z_STRVAL_P(filename), Z_STRLEN_P(filename));
                }
 
                zend_hash_add(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1, (void *)&dummy, sizeof(int), NULL);
@@ -656,21 +654,21 @@ ZEND_API int zend_prepare_string_for_scanning(zval *str, char *filename TSRMLS_D
        size_t size;
 
        /* enforce two trailing NULLs for flex... */
-       if (IS_INTERNED(str->value.str.val)) {
-               char *tmp = safe_emalloc(1, str->value.str.len, ZEND_MMAP_AHEAD);
-               memcpy(tmp, str->value.str.val, str->value.str.len + ZEND_MMAP_AHEAD);
-               str->value.str.val = tmp;
+       if (IS_INTERNED(Z_STRVAL_P(str))) {
+               char *tmp = safe_emalloc(1, Z_STRLEN_P(str), ZEND_MMAP_AHEAD);
+               memcpy(tmp, Z_STRVAL_P(str), Z_STRLEN_P(str) + ZEND_MMAP_AHEAD);
+               Z_STRVAL_P(str) = tmp;
        } else {
-               str->value.str.val = safe_erealloc(str->value.str.val, 1, str->value.str.len, ZEND_MMAP_AHEAD);
+               Z_STRVAL_P(str) = safe_erealloc(Z_STRVAL_P(str), 1, Z_STRLEN_P(str), ZEND_MMAP_AHEAD);
        }
 
-       memset(str->value.str.val + str->value.str.len, 0, ZEND_MMAP_AHEAD);
+       memset(Z_STRVAL_P(str) + Z_STRLEN_P(str), 0, ZEND_MMAP_AHEAD);
 
        SCNG(yy_in) = NULL;
        SCNG(yy_start) = NULL;
 
-       buf = str->value.str.val;
-       size = str->value.str.len;
+       buf = Z_STRVAL_P(str);
+       size = Z_STRLEN_P(str);
 
        if (CG(multibyte)) {
                SCNG(script_org) = (unsigned char*)buf;
@@ -731,7 +729,7 @@ zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC)
        int compiler_result;
        zend_bool original_in_compilation = CG(in_compilation);
 
-       if (source_string->value.str.len==0) {
+       if (Z_STRLEN_P(source_string)==0) {
                efree(op_array);
                return NULL;
        }
@@ -869,11 +867,11 @@ ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter
 # define zend_copy_value(zendlval, yytext, yyleng) \
        if (SCNG(output_filter)) { \
                size_t sz = 0; \
-               SCNG(output_filter)((unsigned char **)&(zendlval->value.str.val), &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC); \
-               zendlval->value.str.len = sz; \
+               SCNG(output_filter)((unsigned char **)&Z_STRVAL_P(zendlval), &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC); \
+               Z_STRLEN_P(zendlval) = sz; \
        } else { \
-               zendlval->value.str.val = (char *) estrndup(yytext, yyleng); \
-               zendlval->value.str.len = yyleng; \
+               Z_STRVAL_P(zendlval) = (char *) estrndup(yytext, yyleng); \
+               Z_STRLEN_P(zendlval) = yyleng; \
        }
 
 static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quote_type TSRMLS_DC)
@@ -884,8 +882,8 @@ static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quo
        ZVAL_STRINGL(zendlval, str, len, 1);
 
        /* convert escape sequences */
-       s = t = zendlval->value.str.val;
-       end = s+zendlval->value.str.len;
+       s = t = Z_STRVAL_P(zendlval);
+       end = s+Z_STRLEN_P(zendlval);
        while (s<end) {
                if (*s=='\\') {
                        s++;
@@ -897,23 +895,23 @@ static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quo
                        switch(*s) {
                                case 'n':
                                        *t++ = '\n';
-                                       zendlval->value.str.len--;
+                                       Z_STRLEN_P(zendlval)--;
                                        break;
                                case 'r':
                                        *t++ = '\r';
-                                       zendlval->value.str.len--;
+                                       Z_STRLEN_P(zendlval)--;
                                        break;
                                case 't':
                                        *t++ = '\t';
-                                       zendlval->value.str.len--;
+                                       Z_STRLEN_P(zendlval)--;
                                        break;
                                case 'f':
                                        *t++ = '\f';
-                                       zendlval->value.str.len--;
+                                       Z_STRLEN_P(zendlval)--;
                                        break;
                                case 'v':
                                        *t++ = '\v';
-                                       zendlval->value.str.len--;
+                                       Z_STRLEN_P(zendlval)--;
                                        break;
                                case 'e':
 #ifdef PHP_WIN32
@@ -921,7 +919,7 @@ static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quo
 #else
                                        *t++ = '\e';
 #endif
-                                       zendlval->value.str.len--;
+                                       Z_STRLEN_P(zendlval)--;
                                        break;
                                case '"':
                                case '`':
@@ -933,20 +931,20 @@ static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quo
                                case '\\':
                                case '$':
                                        *t++ = *s;
-                                       zendlval->value.str.len--;
+                                       Z_STRLEN_P(zendlval)--;
                                        break;
                                case 'x':
                                case 'X':
                                        if (ZEND_IS_HEX(*(s+1))) {
                                                char hex_buf[3] = { 0, 0, 0 };
 
-                                               zendlval->value.str.len--; /* for the 'x' */
+                                               Z_STRLEN_P(zendlval)--; /* for the 'x' */
 
                                                hex_buf[0] = *(++s);
-                                               zendlval->value.str.len--;
+                                               Z_STRLEN_P(zendlval)--;
                                                if (ZEND_IS_HEX(*(s+1))) {
                                                        hex_buf[1] = *(++s);
-                                                       zendlval->value.str.len--;
+                                                       Z_STRLEN_P(zendlval)--;
                                                }
                                                *t++ = (char) strtol(hex_buf, NULL, 16);
                                        } else {
@@ -960,13 +958,13 @@ static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quo
                                                char octal_buf[4] = { 0, 0, 0, 0 };
 
                                                octal_buf[0] = *s;
-                                               zendlval->value.str.len--;
+                                               Z_STRLEN_P(zendlval)--;
                                                if (ZEND_IS_OCT(*(s+1))) {
                                                        octal_buf[1] = *(++s);
-                                                       zendlval->value.str.len--;
+                                                       Z_STRLEN_P(zendlval)--;
                                                        if (ZEND_IS_OCT(*(s+1))) {
                                                                octal_buf[2] = *(++s);
-                                                               zendlval->value.str.len--;
+                                                               Z_STRLEN_P(zendlval)--;
                                                        }
                                                }
                                                *t++ = (char) strtol(octal_buf, NULL, 8);
@@ -988,9 +986,9 @@ static void zend_scan_escape_string(zval *zendlval, char *str, int len, char quo
        *t = 0;
        if (SCNG(output_filter)) {
                size_t sz = 0;
-               s = zendlval->value.str.val;
-               SCNG(output_filter)((unsigned char **)&(zendlval->value.str.val), &sz, (unsigned char *)s, (size_t)zendlval->value.str.len TSRMLS_CC);
-               zendlval->value.str.len = sz;
+               s = Z_STRVAL_P(zendlval);
+               SCNG(output_filter)((unsigned char **)&Z_STRVAL_P(zendlval), &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval) TSRMLS_CC);
+               Z_STRLEN_P(zendlval) = sz;
                efree(s);
        }
 }
@@ -1183,9 +1181,7 @@ NEWLINE ("\r"|"\n"|"\r\n")
 }
 
 <ST_IN_SCRIPTING,ST_LOOKING_FOR_PROPERTY>{WHITESPACE}+ {
-       zendlval->value.str.val = yytext; /* no copying - intentional */
-       zendlval->value.str.len = yyleng;
-       zendlval->type = IS_STRING;
+       ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
        HANDLE_NEWLINES(yytext, yyleng);
        return T_WHITESPACE;
 }
@@ -1506,30 +1502,29 @@ NEWLINE ("\r"|"\n"|"\r\n")
 
        if (len < SIZEOF_LONG * 8) {
                if (len == 0) {
-                       zendlval->value.lval = 0;
+                       Z_LVAL_P(zendlval) = 0;
                } else {
-                       zendlval->value.lval = strtol(bin, NULL, 2);
+                       Z_LVAL_P(zendlval) = strtol(bin, NULL, 2);
                }
                zendlval->type = IS_LONG;
                return T_LNUMBER;
        } else {
-               zendlval->value.dval = zend_bin_strtod(bin, NULL);
-               zendlval->type = IS_DOUBLE;
+               ZVAL_DOUBLE(zendlval, zend_bin_strtod(bin, NULL));
                return T_DNUMBER;
        }
 }
 
 <ST_IN_SCRIPTING>{LNUM} {
        if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */
-               zendlval->value.lval = strtol(yytext, NULL, 0);
+               Z_LVAL_P(zendlval) = strtol(yytext, NULL, 0);
        } else {
                errno = 0;
-               zendlval->value.lval = strtol(yytext, NULL, 0);
+               Z_LVAL_P(zendlval) = strtol(yytext, NULL, 0);
                if (errno == ERANGE) { /* Overflow */
                        if (yytext[0] == '0') { /* octal overflow */
-                               zendlval->value.dval = zend_oct_strtod(yytext, NULL);
+                               Z_DVAL_P(zendlval) = zend_oct_strtod(yytext, NULL);
                        } else {
-                               zendlval->value.dval = zend_strtod(yytext, NULL);
+                               Z_DVAL_P(zendlval) = zend_strtod(yytext, NULL);
                        }
                        zendlval->type = IS_DOUBLE;
                        return T_DNUMBER;
@@ -1552,120 +1547,80 @@ NEWLINE ("\r"|"\n"|"\r\n")
 
        if (len < SIZEOF_LONG * 2 || (len == SIZEOF_LONG * 2 && *hex <= '7')) {
                if (len == 0) {
-                       zendlval->value.lval = 0;
+                       Z_LVAL_P(zendlval) = 0;
                } else {
-                       zendlval->value.lval = strtol(hex, NULL, 16);
+                       Z_LVAL_P(zendlval) = strtol(hex, NULL, 16);
                }
                zendlval->type = IS_LONG;
                return T_LNUMBER;
        } else {
-               zendlval->value.dval = zend_hex_strtod(hex, NULL);
-               zendlval->type = IS_DOUBLE;
+               ZVAL_DOUBLE(zendlval, zend_hex_strtod(hex, NULL));
                return T_DNUMBER;
        }
 }
 
 <ST_VAR_OFFSET>[0]|([1-9][0-9]*) { /* 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)) {
-               zendlval->value.lval = strtol(yytext, NULL, 10);
-               zendlval->type = IS_LONG;
+               ZVAL_LONG(zendlval, strtol(yytext, NULL, 10));
        } else {
-               zendlval->value.str.val = (char *)estrndup(yytext, yyleng);
-               zendlval->value.str.len = yyleng;
-               zendlval->type = IS_STRING;
+               ZVAL_STRINGL(zendlval, yytext, yyleng, 1);
        }
        return T_NUM_STRING;
 }
 
 <ST_VAR_OFFSET>{LNUM}|{HNUM}|{BNUM} { /* Offset must be treated as a string */
-       zendlval->value.str.val = (char *)estrndup(yytext, yyleng);
-       zendlval->value.str.len = yyleng;
-       zendlval->type = IS_STRING;
+       ZVAL_STRINGL(zendlval, yytext, yyleng, 1);
        return T_NUM_STRING;
 }
 
 <ST_IN_SCRIPTING>{DNUM}|{EXPONENT_DNUM} {
-       zendlval->value.dval = zend_strtod(yytext, NULL);
-       zendlval->type = IS_DOUBLE;
+       ZVAL_DOUBLE(zendlval, zend_strtod(yytext, NULL));
        return T_DNUMBER;
 }
 
 <ST_IN_SCRIPTING>"__CLASS__" {
-       const char *class_name = NULL;
-       
-       if (CG(active_class_entry)
-               && (ZEND_ACC_TRAIT ==
-                       (CG(active_class_entry)->ce_flags & ZEND_ACC_TRAIT))) {
+       zend_class_entry *ce = CG(active_class_entry);
+       if (ce && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) {
                /* We create a special __CLASS__ constant that is going to be resolved
                   at run-time */
-               zendlval->value.str.len = sizeof("__CLASS__")-1;
-               zendlval->value.str.val = estrndup("__CLASS__", zendlval->value.str.len);
+               Z_STRLEN_P(zendlval) = sizeof("__CLASS__")-1;
+               Z_STRVAL_P(zendlval) = estrndup("__CLASS__", Z_STRLEN_P(zendlval));
                zendlval->type = IS_CONSTANT;
        } else {
-               if (CG(active_class_entry)) {
-                       class_name = CG(active_class_entry)->name;
-               }
-               
-               if (!class_name) {
-                       class_name = "";
+               if (ce && ce->name) {
+                       ZVAL_STRINGL(zendlval, ce->name, ce->name_length, 1);
+               } else {
+                       ZVAL_EMPTY_STRING(zendlval);
                }
-               
-               zendlval->value.str.len = strlen(class_name);
-               zendlval->value.str.val = estrndup(class_name, zendlval->value.str.len);
-               zendlval->type = IS_STRING;
        }
        return T_CLASS_C;
 }
 
 <ST_IN_SCRIPTING>"__TRAIT__" {
-       const char *trait_name = NULL;
-       
-       if (CG(active_class_entry)
-               && (ZEND_ACC_TRAIT == 
-                       (CG(active_class_entry)->ce_flags & ZEND_ACC_TRAIT))) {
-               trait_name = CG(active_class_entry)->name;
-       }
-       
-       if (!trait_name) {
-               trait_name = "";
-       }
-       
-       zendlval->value.str.len = strlen(trait_name);
-       zendlval->value.str.val = estrndup(trait_name, zendlval->value.str.len);
-       zendlval->type = IS_STRING;
-       
+       zend_class_entry *ce = CG(active_class_entry);
+       if (ce && ce->name && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) {
+               ZVAL_STRINGL(zendlval, ce->name, ce->name_length, 1);
+       } else {
+               ZVAL_EMPTY_STRING(zendlval);
+       }
        return T_TRAIT_C;
 }
 
 <ST_IN_SCRIPTING>"__FUNCTION__" {
-       const char *func_name = NULL;
-
-       if (CG(active_op_array)) {
-               func_name = CG(active_op_array)->function_name;
-       }
-
-       if (!func_name) {
-               func_name = "";
+       zend_op_array *op_array = CG(active_op_array);
+       if (op_array && op_array->function_name) {
+               ZVAL_STRING(zendlval, op_array->function_name, 1);
+       } else {
+               ZVAL_EMPTY_STRING(zendlval);
        }
-       zendlval->value.str.len = strlen(func_name);
-       zendlval->value.str.val = estrndup(func_name, zendlval->value.str.len);
-       zendlval->type = IS_STRING;
        return T_FUNC_C;
 }
 
 <ST_IN_SCRIPTING>"__METHOD__" {
        const char *class_name = CG(active_class_entry) ? CG(active_class_entry)->name : NULL;
        const char *func_name = CG(active_op_array)? CG(active_op_array)->function_name : NULL;
-       size_t len = 0;
 
-       if (class_name) {
-               len += strlen(class_name) + 2;
-       }
-       if (func_name) {
-               len += strlen(func_name);
-       }
-
-       zendlval->value.str.len = zend_spprintf(&zendlval->value.str.val, 0, "%s%s%s",
+       Z_STRLEN_P(zendlval) = zend_spprintf(&Z_STRVAL_P(zendlval), 0, "%s%s%s",
                class_name ? class_name : "",
                class_name && func_name ? "::" : "",
                func_name ? func_name : ""
@@ -1675,8 +1630,7 @@ NEWLINE ("\r"|"\n"|"\r\n")
 }
 
 <ST_IN_SCRIPTING>"__LINE__" {
-       zendlval->value.lval = CG(zend_lineno);
-       zendlval->type = IS_LONG;
+       ZVAL_LONG(zendlval, CG(zend_lineno));
        return T_LINE;
 }
 
@@ -1686,9 +1640,7 @@ NEWLINE ("\r"|"\n"|"\r\n")
        if (!filename) {
                filename = "";
        }
-       zendlval->value.str.len = strlen(filename);
-       zendlval->value.str.val = estrndup(filename, zendlval->value.str.len);
-       zendlval->type = IS_STRING;
+       ZVAL_STRING(zendlval, filename, 1);
        return T_FILE;
 }
 
@@ -1713,9 +1665,7 @@ NEWLINE ("\r"|"\n"|"\r\n")
 #endif
        }
 
-       zendlval->value.str.len = strlen(dirname);
-       zendlval->value.str.val = dirname;
-       zendlval->type = IS_STRING;
+       ZVAL_STRING(zendlval, dirname, 0);
        return T_DIR;
 }
 
@@ -1739,9 +1689,7 @@ NEWLINE ("\r"|"\n"|"\r\n")
        }
 
        HANDLE_NEWLINES(yytext, yyleng);
-       zendlval->value.str.val = yytext; /* no copying - intentional */
-       zendlval->value.str.len = yyleng;
-       zendlval->type = IS_STRING;
+       ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
        BEGIN(ST_IN_SCRIPTING);
        return T_OPEN_TAG;
 }
@@ -1749,9 +1697,7 @@ NEWLINE ("\r"|"\n"|"\r\n")
 
 <INITIAL>"<%=" {
        if (CG(asp_tags)) {
-               zendlval->value.str.val = yytext; /* no copying - intentional */
-               zendlval->value.str.len = yyleng;
-               zendlval->type = IS_STRING;
+               ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
                BEGIN(ST_IN_SCRIPTING);
                return T_OPEN_TAG_WITH_ECHO;
        } else {
@@ -1761,9 +1707,7 @@ NEWLINE ("\r"|"\n"|"\r\n")
 
 
 <INITIAL>"<?=" {
-       zendlval->value.str.val = yytext; /* no copying - intentional */
-       zendlval->value.str.len = yyleng;
-       zendlval->type = IS_STRING;
+       ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
        BEGIN(ST_IN_SCRIPTING);
        return T_OPEN_TAG_WITH_ECHO;
 }
@@ -1771,9 +1715,7 @@ NEWLINE ("\r"|"\n"|"\r\n")
 
 <INITIAL>"<%" {
        if (CG(asp_tags)) {
-               zendlval->value.str.val = yytext; /* no copying - intentional */
-               zendlval->value.str.len = yyleng;
-               zendlval->type = IS_STRING;
+               ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
                BEGIN(ST_IN_SCRIPTING);
                return T_OPEN_TAG;
        } else {
@@ -1783,9 +1725,7 @@ NEWLINE ("\r"|"\n"|"\r\n")
 
 
 <INITIAL>"<?php"([ \t]|{NEWLINE}) {
-       zendlval->value.str.val = yytext; /* no copying - intentional */
-       zendlval->value.str.len = yyleng;
-       zendlval->type = IS_STRING;
+       ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
        HANDLE_NEWLINE(yytext[yyleng-1]);
        BEGIN(ST_IN_SCRIPTING);
        return T_OPEN_TAG;
@@ -1794,9 +1734,7 @@ NEWLINE ("\r"|"\n"|"\r\n")
 
 <INITIAL>"<?" {
        if (CG(short_tags)) {
-               zendlval->value.str.val = yytext; /* no copying - intentional */
-               zendlval->value.str.len = yyleng;
-               zendlval->type = IS_STRING;
+               ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
                BEGIN(ST_IN_SCRIPTING);
                return T_OPEN_TAG;
        } else {
@@ -1850,14 +1788,14 @@ inline_html:
        if (SCNG(output_filter)) {
                int readsize;
                size_t sz = 0;
-               readsize = SCNG(output_filter)((unsigned char **)&(zendlval->value.str.val), &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC);
-               zendlval->value.str.len = sz;
+               readsize = SCNG(output_filter)((unsigned char **)&Z_STRVAL_P(zendlval), &sz, (unsigned char *)yytext, (size_t)yyleng TSRMLS_CC);
+               Z_STRLEN_P(zendlval) = sz;
                if (readsize < yyleng) {
                        yyless(readsize);
                }
        } else {
-         zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
-         zendlval->value.str.len = yyleng;
+         Z_STRVAL_P(zendlval) = (char *) estrndup(yytext, yyleng);
+         Z_STRLEN_P(zendlval) = yyleng;
        }
        zendlval->type = IS_STRING;
        HANDLE_NEWLINES(yytext, yyleng);
@@ -1985,9 +1923,7 @@ inline_html:
 }
 
 <ST_IN_SCRIPTING>("?>"|"</script"{WHITESPACE}*">"){NEWLINE}? {
-       zendlval->value.str.val = yytext; /* no copying - intentional */
-       zendlval->value.str.len = yyleng;
-       zendlval->type = IS_STRING;
+       ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
        BEGIN(INITIAL);
        return T_CLOSE_TAG;  /* implicit ';' at php-end tag */
 }
@@ -1996,9 +1932,7 @@ inline_html:
 <ST_IN_SCRIPTING>"%>"{NEWLINE}? {
        if (CG(asp_tags)) {
                BEGIN(INITIAL);
-               zendlval->value.str.len = yyleng;
-               zendlval->type = IS_STRING;
-               zendlval->value.str.val = yytext; /* no copying - intentional */
+               ZVAL_STRINGL(zendlval, yytext, yyleng, 0); /* no copying - intentional */
                return T_CLOSE_TAG;  /* implicit ';' at php-end tag */
        } else {
                yyless(1);
@@ -2032,13 +1966,11 @@ inline_html:
                }
        }
 
-       zendlval->value.str.val = estrndup(yytext+bprefix+1, yyleng-bprefix-2);
-       zendlval->value.str.len = yyleng-bprefix-2;
-       zendlval->type = IS_STRING;
+       ZVAL_STRINGL(zendlval, yytext+bprefix+1, yyleng-bprefix-2, 1);
 
        /* convert escape sequences */
-       s = t = zendlval->value.str.val;
-       end = s+zendlval->value.str.len;
+       s = t = Z_STRVAL_P(zendlval);
+       end = s+Z_STRLEN_P(zendlval);
        while (s<end) {
                if (*s=='\\') {
                        s++;
@@ -2047,7 +1979,7 @@ inline_html:
                                case '\\':
                                case '\'':
                                        *t++ = *s;
-                                       zendlval->value.str.len--;
+                                       Z_STRLEN_P(zendlval)--;
                                        break;
                                default:
                                        *t++ = '\\';
@@ -2067,9 +1999,9 @@ inline_html:
 
        if (SCNG(output_filter)) {
                size_t sz = 0;
-               s = zendlval->value.str.val;
-               SCNG(output_filter)((unsigned char **)&(zendlval->value.str.val), &sz, (unsigned char *)s, (size_t)zendlval->value.str.len TSRMLS_CC);
-               zendlval->value.str.len = sz;
+               s = Z_STRVAL_P(zendlval);
+               SCNG(output_filter)((unsigned char **)&Z_STRVAL_P(zendlval), &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval) TSRMLS_CC);
+               Z_STRLEN_P(zendlval) = sz;
                efree(s);
        }
        return T_CONSTANT_ENCAPSED_STRING;
@@ -2187,7 +2119,7 @@ inline_html:
 
 
 <ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>"{$" {
-       zendlval->value.lval = (long) '{';
+       Z_LVAL_P(zendlval) = (long) '{';
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        yyless(1);
        return T_CURLY_OPEN;