]> granicus.if.org Git - php/commitdiff
Use better data structures (incomplete)
authorDmitry Stogov <dmitry@zend.com>
Mon, 17 Feb 2014 21:41:23 +0000 (01:41 +0400)
committerDmitry Stogov <dmitry@zend.com>
Mon, 17 Feb 2014 21:41:23 +0000 (01:41 +0400)
14 files changed:
Zend/zend_API.c
Zend/zend_API.h
Zend/zend_compile.c
Zend/zend_compile.h
Zend/zend_execute.c
Zend/zend_execute.h
Zend/zend_execute_API.c
Zend/zend_ini.h
Zend/zend_language_scanner.c
Zend/zend_language_scanner.l
Zend/zend_opcode.c
Zend/zend_string.h
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index cb539b0f4ca485ffbb2125b4c1fb646ee488c451..84a29559a4b7aa894ed076241510b19c7bb76276 100644 (file)
@@ -763,7 +763,7 @@ static int zend_parse_va_args(int num_args, const char *type_spec, va_list *va,
        int arg_count;
        int quiet = flags & ZEND_PARSE_PARAMS_QUIET;
        zend_bool have_varargs = 0;
-       zval ***varargs = NULL;
+       zval **varargs = NULL;
        int *n_varargs = NULL;
 
        for (spec_walk = type_spec; *spec_walk; spec_walk++) {
@@ -869,7 +869,7 @@ static int zend_parse_va_args(int num_args, const char *type_spec, va_list *va,
                        int num_varargs = num_args + 1 - post_varargs;
 
                        /* eat up the passed in storage even if it won't be filled in with varargs */
-                       varargs = va_arg(*va, zval ***);
+                       varargs = va_arg(*va, zval **);
                        n_varargs = va_arg(*va, int *);
                        type_spec++;
 
@@ -880,9 +880,11 @@ static int zend_parse_va_args(int num_args, const char *type_spec, va_list *va,
                                *n_varargs = num_varargs;
 
                                /* allocate space for array and store args */
-                               *varargs = safe_emalloc(num_varargs, sizeof(zval *), 0);
+                               *varargs = (zval*)safe_emalloc(num_varargs, sizeof(zval), 0);
                                while (num_varargs-- > 0) {
-                                       (*varargs)[iv++] = p++;
+                                       ZVAL_COPY_VALUE(&(*varargs)[iv], p);
+                                       iv++;
+                                       p++;
                                }
 
                                /* adjust how many args we have left and restart loop */
index 2ff7e694375ea1e698d3adcb9187852ac3c9728c..2db0c2d44e8cd9ac35a06c8b775ec5f065d8cd21 100644 (file)
@@ -545,16 +545,12 @@ END_EXTERN_C()
 #define CHECK_NULL_PATH(p, l) (strlen(p) != l)
 
 #define ZVAL_STRINGL(z, s, l) do {                             \
-               zval *_z = (z);                                                 \
-               int __l = l;                                                    \
-               ZVAL_STR(_z, STR_ALLOC(__l, 0));                \
-               memcpy(Z_STRVAL_P(_z), (s), __l + 1);   \
+               ZVAL_STR(z, STR_INIT(s, l, 0));                 \
        } while (0)
 
 #define ZVAL_STRING(z, s) do {                                 \
                const char *_s = (s);                                   \
-               int _l = strlen(_s);                                    \
-               ZVAL_STRINGL(z, _s, _l);                                \
+               ZVAL_STRINGL(z, _s, strlen(_s));                \
        } while (0)
 
 #define ZVAL_EMPTY_STRING(z) do {                              \
@@ -562,16 +558,12 @@ END_EXTERN_C()
        } while (0)
 
 #define ZVAL_PSTRINGL(z, s, l) do {                            \
-               zval *_z = (z);                                                 \
-               int __l = l;                                                    \
-               ZVAL_STR(_z, STR_ALLOC(__l, 1));                \
-               memcpy(Z_STRVAL_P(_z), (s), __l + 1);   \
+               ZVAL_STR(z, STR_INIT(s, l, 1));                 \
        } while (0)
 
 #define ZVAL_PSTRING(z, s) do {                                        \
                const char *_s = (s);                                   \
-               int _l = strlen(_s);                                    \
-               ZVAL_PSTRINGL(z, _s, _l);                               \
+               ZVAL_PSTRINGL(z, _s, strlen(_s));               \
        } while (0)
 
 #define ZVAL_EMPTY_PSTRING(z) do {                             \
index 58d4cc1e50f2a844286c2749278f869b7cea4a43..bc1fd172d5a2550b3962ec04540411766ba833af 100644 (file)
@@ -168,6 +168,7 @@ static void build_runtime_defined_function_key(zval *result, const char *name, i
        ZVAL_STR(result, STR_ALLOC(1+name_length+strlen(filename)+char_pos_len, 0));
 
        /* must be binary safe */
+       Z_STRVAL_P(result)[0] = '\0';
        sprintf(Z_STRVAL_P(result)+1, "%s%s%s", name, filename, char_pos_buf);
 }
 /* }}} */
@@ -298,7 +299,8 @@ ZEND_API zend_bool zend_is_compiling(TSRMLS_D) /* {{{ */
 
 static zend_uint get_temporary_variable(zend_op_array *op_array) /* {{{ */
 {
-       return (zend_uint)(zend_uintptr_t)EX_VAR_NUM_2(0, (op_array->T)++);
+//???  return (zend_uint)(zend_uintptr_t)EX_VAR_NUM_2(0, (op_array->T)++);
+       return (zend_uint)op_array->T++;
 }
 /* }}} */
 
@@ -340,11 +342,11 @@ void zend_del_literal(zend_op_array *op_array, int n) /* {{{ */
 /* }}} */
 
 /* Common part of zend_add_literal and zend_append_individual_literal */
-static inline void zend_insert_literal(zend_op_array *op_array, const zval *zv, int literal_position TSRMLS_DC) /* {{{ */
+static inline void zend_insert_literal(zend_op_array *op_array, zval *zv, int literal_position TSRMLS_DC) /* {{{ */
 {
        if (Z_TYPE_P(zv) == IS_STRING || Z_TYPE_P(zv) == IS_CONSTANT) {
                STR_HASH_VAL(Z_STR_P(zv));
-               zend_new_interned_string(Z_STR_P(zv) TSRMLS_CC);
+               Z_STR_P(zv) = zend_new_interned_string(Z_STR_P(zv) TSRMLS_CC);
        }
        ZVAL_COPY_VALUE(&CONSTANT_EX(op_array, literal_position), zv);
 //???  Z_SET_REFCOUNT(CONSTANT_EX(op_array, literal_position), 2);
@@ -1715,7 +1717,7 @@ void zend_do_begin_function_declaration(znode *function_token, znode *function_n
                        char *tmp = zend_str_tolower_dup(Z_STRVAL_P(ns_name), Z_STRLEN_P(ns_name));
 
                        if (Z_STRLEN_P(ns_name) != Z_STRLEN(function_name->u.constant) ||
-                               memcmp(tmp, lcname, Z_STRLEN(function_name->u.constant))) {
+                               memcmp(tmp, lcname->val, Z_STRLEN(function_name->u.constant))) {
                                zend_error(E_COMPILE_ERROR, "Cannot declare function %s because the name is already in use", Z_STRVAL(function_name->u.constant));
                        }
                        efree(tmp);
index 8af44237bfce202bdb2947ce81e86d1aaba4cecf..563be71629d7f6e0c1f28625f2a8fc932cfed5e8 100644 (file)
@@ -396,7 +396,7 @@ struct _zend_execute_data {
 #define EX(element) execute_data.element
 
 #define EX_VAR_2(ex, n)                        ((zval*)(((char*)(ex)) + ((int)(n))))
-#define EX_VAR_NUM_2(ex, n)            (EX_VAR_2(ex, 0) - (1 + (n)))
+#define EX_VAR_NUM_2(ex, n)     (((zval*)(((char*)(ex))+ZEND_MM_ALIGNED_SIZE(sizeof(zend_execute_data))))+(n))
 
 #define EX_VAR(n)                              EX_VAR_2(execute_data, n)
 #define EX_VAR_NUM(n)                  EX_VAR_NUM_2(execute_data, n)
index 08df3477709f6c5edbe20f469a6405e08626fb68..68b6bef360b981c5661c2833bb37da5a7fddbf14 100644 (file)
@@ -212,7 +212,7 @@ static zend_never_inline zval *_get_zval_cv_lookup(zend_uint var, int type TSRML
                                zend_error(E_NOTICE, "Undefined variable: %s", cv->val);
                                /* break missing intentionally */
                        case BP_VAR_W:
-                               ret = EX_VAR_2(EG(current_execute_data), var);
+                               ret = EX_VAR_NUM_2(EG(current_execute_data), var);
                                ZVAL_NULL(ret);
                                if (EG(active_symbol_table)) {
                                        ret = zend_hash_update(EG(active_symbol_table), cv, ret);
@@ -267,7 +267,7 @@ static zend_never_inline zval *_get_zval_cv_lookup_BP_VAR_RW(zend_uint var TSRML
        zval *ret;
 
        if (!EG(active_symbol_table)) {
-               ret = EX_VAR_2(EG(current_execute_data), var);
+               ret = EX_VAR_NUM_2(EG(current_execute_data), var);
                ZVAL_NULL(ret);
                zend_error(E_NOTICE, "Undefined variable: %s", cv->val);
        } else if ((ret = zend_hash_find(EG(active_symbol_table), cv)) == NULL) {
@@ -283,7 +283,7 @@ static zend_never_inline zval *_get_zval_cv_lookup_BP_VAR_W(zend_uint var TSRMLS
        zval *ret;
 
        if (!EG(active_symbol_table)) {
-               ret = EX_VAR_2(EG(current_execute_data), var);
+               ret = EX_VAR_NUM_2(EG(current_execute_data), var);
                ZVAL_NULL(ret);
        } else if ((ret = zend_hash_find(EG(active_symbol_table), cv)) == NULL) {
                ret = zend_hash_update(EG(active_symbol_table), cv, &EG(uninitialized_zval));
@@ -1365,7 +1365,7 @@ void zend_free_compiled_variables(zend_execute_data *execute_data TSRMLS_DC) /*
  *                             | VAR[op_array->last_var-1]              |
  *                             | VAR[op_array->last_var]                |
  *                             | ...                                    |
- *                             | VAR[op_array->T-1]                     |
+ *                             | VAR[op_array->last_var+op_array->T-1]  |
  *                             +----------------------------------------+
  *           EX(call_slots) -> | CALL_SLOT[0]                           |
  *                             | ...                                    |
index 5a287e05702587c3166cfb4f7775f41c85471cf0..14bb99906e6f51dd43a1e2adfafce0b0bde14471 100644 (file)
@@ -226,7 +226,8 @@ static zend_always_inline zval *zend_vm_stack_top(TSRMLS_D)
 
 static zend_always_inline void zend_vm_stack_push(zval *ptr TSRMLS_DC)
 {
-       *(EG(argument_stack)->top++) = *ptr;
+       ZVAL_COPY_VALUE(EG(argument_stack)->top, ptr);
+       EG(argument_stack)->top++;
 }
 
 static zend_always_inline zval *zend_vm_stack_pop(TSRMLS_D)
index 32a2a7545a1b3b5da22ffdf9d7e2d8f6358fe281..79d946d145c27d344bf00064d02659e010de9171 100644 (file)
@@ -129,6 +129,7 @@ static int clean_non_persistent_class_full(zend_class_entry **ce TSRMLS_DC) /* {
 
 void init_executor(TSRMLS_D) /* {{{ */
 {
+       zval tmp;
        zend_init_fpu(TSRMLS_C);
 
        ZVAL_NULL(&EG(uninitialized_zval));
@@ -152,7 +153,8 @@ void init_executor(TSRMLS_D) /* {{{ */
        EG(error_handling) = EH_NORMAL;
 
        zend_vm_stack_init(TSRMLS_C);
-//???  zend_vm_stack_push((void *) NULL TSRMLS_CC);
+       ZVAL_LONG(&tmp, 0);
+       zend_vm_stack_push(&tmp TSRMLS_CC);
 
        zend_hash_init(&EG(symbol_table).ht, 50, NULL, ZVAL_PTR_DTOR, 0);
        EG(active_symbol_table) = &EG(symbol_table).ht;
@@ -734,6 +736,7 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS
        zval current_this;
        zend_execute_data execute_data;
        zend_fcall_info_cache fci_cache_local;
+       zval tmp;
 
        fci->retval = NULL;
 
@@ -821,7 +824,7 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS
        ZEND_VM_STACK_GROW_IF_NEEDED(fci->param_count + 1);
 
        for (i=0; i<fci->param_count; i++) {
-               zval *param, tmp;
+               zval *param;
 
                if (ARG_SHOULD_BE_SENT_BY_REF(EX(function_state).function, i + 1)) {
                        if (!Z_ISREF(fci->params[i]) && Z_REFCOUNT(fci->params[i]) > 1) {
@@ -831,7 +834,8 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS
                                    !ARG_MAY_BE_SENT_BY_REF(EX(function_state).function, i + 1)) {
                                        if (i || UNEXPECTED(ZEND_VM_STACK_ELEMETS(EG(argument_stack)) == (EG(argument_stack)->top))) {
                                                /* hack to clean up the stack */
-                                               zend_vm_stack_push((void *) (zend_uintptr_t)i TSRMLS_CC);
+                                               ZVAL_LONG(&tmp, i);
+                                               zend_vm_stack_push(&tmp TSRMLS_CC);
                                                zend_vm_stack_clear_multiple(0 TSRMLS_CC);
                                        }
 
@@ -866,7 +870,8 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS
        }
 
        EX(function_state).arguments = zend_vm_stack_top(TSRMLS_C);
-       zend_vm_stack_push((void*)(zend_uintptr_t)fci->param_count TSRMLS_CC);
+       ZVAL_LONG(&tmp, fci->param_count);
+       zend_vm_stack_push(&tmp TSRMLS_CC);
 
        current_scope = EG(scope);
        EG(scope) = calling_scope;
index 86308f1929afd25ef1c2a238de78ba4edf66245c..971a574f8f7d8bca8e8eefc43038d1d56147b1d7 100644 (file)
@@ -115,7 +115,7 @@ END_EXTERN_C()
 #define ZEND_INI_END()         { 0, 0, NULL, 0, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0, 0, NULL } };
 
 #define ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, arg2, arg3, displayer) \
-       { 0, modifiable, name, sizeof(name), on_modify, arg1, arg2, arg3, default_value, sizeof(default_value)-1, NULL, 0, 0, 0, displayer },
+       { 0, modifiable, name, sizeof(name)-1, on_modify, arg1, arg2, arg3, default_value, sizeof(default_value)-1, NULL, 0, 0, 0, displayer },
 
 #define ZEND_INI_ENTRY3(name, default_value, modifiable, on_modify, arg1, arg2, arg3) \
        ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, arg2, arg3, NULL)
@@ -154,21 +154,21 @@ END_EXTERN_C()
        ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr, NULL, zend_ini_boolean_displayer_cb)
 #endif
 
-#define INI_INT(name) zend_ini_long((name), sizeof(name), 0)
-#define INI_FLT(name) zend_ini_double((name), sizeof(name), 0)
-#define INI_STR(name) zend_ini_string_ex((name), sizeof(name), 0, NULL)
+#define INI_INT(name) zend_ini_long((name), sizeof(name)-1, 0)
+#define INI_FLT(name) zend_ini_double((name), sizeof(name)-1, 0)
+#define INI_STR(name) zend_ini_string_ex((name), sizeof(name)-1, 0, NULL)
 #define INI_BOOL(name) ((zend_bool) INI_INT(name))
 
-#define INI_ORIG_INT(name)     zend_ini_long((name), sizeof(name), 1)
-#define INI_ORIG_FLT(name)     zend_ini_double((name), sizeof(name), 1)
-#define INI_ORIG_STR(name)     zend_ini_string((name), sizeof(name), 1)
+#define INI_ORIG_INT(name)     zend_ini_long((name), sizeof(name)-1, 1)
+#define INI_ORIG_FLT(name)     zend_ini_double((name), sizeof(name)-1, 1)
+#define INI_ORIG_STR(name)     zend_ini_string((name), sizeof(name)-1, 1)
 #define INI_ORIG_BOOL(name) ((zend_bool) INI_ORIG_INT(name))
 
 #define REGISTER_INI_ENTRIES() zend_register_ini_entries(ini_entries, module_number TSRMLS_CC)
 #define UNREGISTER_INI_ENTRIES() zend_unregister_ini_entries(module_number TSRMLS_CC)
 #define DISPLAY_INI_ENTRIES() display_ini_entries(zend_module)
 
-#define REGISTER_INI_DISPLAYER(name, displayer) zend_ini_register_displayer((name), sizeof(name), displayer)
+#define REGISTER_INI_DISPLAYER(name, displayer) zend_ini_register_displayer((name), sizeof(name)-1, displayer)
 #define REGISTER_INI_BOOLEAN(name) REGISTER_INI_DISPLAYER(name, zend_ini_boolean_displayer_cb)
 
 /* Standard message handlers */
index ee9dfb8333622b771df4d2e92e14d5044ee45663..78b7c8efef0fc7e9f9f76cf702e1bcd3037dbe6a 100644 (file)
@@ -1103,7 +1103,7 @@ yyc_INITIAL:
 yy3:
                YYDEBUG(3, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1755 "Zend/zend_language_scanner.l"
+#line 1753 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@ -1180,7 +1180,7 @@ yy5:
 yy6:
                YYDEBUG(6, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1745 "Zend/zend_language_scanner.l"
+#line 1743 "Zend/zend_language_scanner.l"
                {
        if (CG(short_tags)) {
                ZVAL_STRINGL(zendlval, yytext, yyleng);
@@ -1197,7 +1197,7 @@ yy7:
                if ((yych = *YYCURSOR) == '=') goto yy43;
                YYDEBUG(8, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1724 "Zend/zend_language_scanner.l"
+#line 1722 "Zend/zend_language_scanner.l"
                {
        if (CG(asp_tags)) {
 //???          ZVAL_STRINGL(zendlval, yytext, yyleng);
@@ -1394,7 +1394,7 @@ yy35:
                ++YYCURSOR;
                YYDEBUG(38, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1687 "Zend/zend_language_scanner.l"
+#line 1685 "Zend/zend_language_scanner.l"
                {
        YYCTYPE *bracket = (YYCTYPE*)zend_memrchr(yytext, '<', yyleng - (sizeof("script language=php>") - 1));
 
@@ -1437,7 +1437,7 @@ yy43:
                ++YYCURSOR;
                YYDEBUG(44, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1704 "Zend/zend_language_scanner.l"
+#line 1702 "Zend/zend_language_scanner.l"
                {
        if (CG(asp_tags)) {
 //???          ZVAL_STRINGL(zendlval, yytext, yyleng);
@@ -1454,7 +1454,7 @@ yy45:
                ++YYCURSOR;
                YYDEBUG(46, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1716 "Zend/zend_language_scanner.l"
+#line 1714 "Zend/zend_language_scanner.l"
                {
 //???  ZVAL_STRINGL(zendlval, yytext, yyleng);
        ZVAL_STR(zendlval, STR_EMPTY_ALLOC()); /* tricky way to no copying - intentional */ 
@@ -1488,7 +1488,7 @@ yy50:
 yy51:
                YYDEBUG(51, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1736 "Zend/zend_language_scanner.l"
+#line 1734 "Zend/zend_language_scanner.l"
                {
 //???  ZVAL_STRINGL(zendlval, yytext, yyleng);
        ZVAL_STR(zendlval, STR_EMPTY_ALLOC()); /* tricky way, no copying intentional */
@@ -1567,7 +1567,7 @@ yyc_ST_BACKQUOTE:
 yy56:
                YYDEBUG(56, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2198 "Zend/zend_language_scanner.l"
+#line 2192 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@ -1619,7 +1619,7 @@ yy58:
                ++YYCURSOR;
                YYDEBUG(59, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2142 "Zend/zend_language_scanner.l"
+#line 2136 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_IN_SCRIPTING);
        return '`';
@@ -1634,7 +1634,7 @@ yy61:
                ++YYCURSOR;
                YYDEBUG(62, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2129 "Zend/zend_language_scanner.l"
+#line 2123 "Zend/zend_language_scanner.l"
                {
        Z_LVAL_P(zendlval) = (long) '{';
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
@@ -1657,24 +1657,23 @@ yy63:
 yy65:
                YYDEBUG(65, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1836 "Zend/zend_language_scanner.l"
+#line 1832 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
-       zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 1667 "Zend/zend_language_scanner.c"
+#line 1666 "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 1464 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
        return T_DOLLAR_OPEN_CURLY_BRACES;
 }
-#line 1678 "Zend/zend_language_scanner.c"
+#line 1677 "Zend/zend_language_scanner.c"
 yy68:
                YYDEBUG(68, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1688,15 +1687,14 @@ yy70:
                ++YYCURSOR;
                YYDEBUG(71, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1828 "Zend/zend_language_scanner.l"
+#line 1825 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
-       zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 1700 "Zend/zend_language_scanner.c"
+#line 1698 "Zend/zend_language_scanner.c"
 yy72:
                YYDEBUG(72, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1714,15 +1712,14 @@ yy73:
                ++YYCURSOR;
                YYDEBUG(74, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1818 "Zend/zend_language_scanner.l"
+#line 1816 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
-       zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 1726 "Zend/zend_language_scanner.c"
+#line 1723 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_DOUBLE_QUOTES:
@@ -1790,7 +1787,7 @@ yy77:
 yy78:
                YYDEBUG(78, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2148 "Zend/zend_language_scanner.l"
+#line 2142 "Zend/zend_language_scanner.l"
                {
        if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) {
                YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1;
@@ -1839,7 +1836,7 @@ double_quotes_scan_done:
        zend_scan_escape_string(zendlval, yytext, yyleng, '"' TSRMLS_CC);
        return T_ENCAPSED_AND_WHITESPACE;
 }
-#line 1843 "Zend/zend_language_scanner.c"
+#line 1840 "Zend/zend_language_scanner.c"
 yy79:
                YYDEBUG(79, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1850,12 +1847,12 @@ yy80:
                ++YYCURSOR;
                YYDEBUG(81, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2137 "Zend/zend_language_scanner.l"
+#line 2131 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_IN_SCRIPTING);
        return '"';
 }
-#line 1859 "Zend/zend_language_scanner.c"
+#line 1856 "Zend/zend_language_scanner.c"
 yy82:
                YYDEBUG(82, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1865,14 +1862,14 @@ yy83:
                ++YYCURSOR;
                YYDEBUG(84, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2129 "Zend/zend_language_scanner.l"
+#line 2123 "Zend/zend_language_scanner.l"
                {
        Z_LVAL_P(zendlval) = (long) '{';
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        yyless(1);
        return T_CURLY_OPEN;
 }
-#line 1876 "Zend/zend_language_scanner.c"
+#line 1873 "Zend/zend_language_scanner.c"
 yy85:
                YYDEBUG(85, *YYCURSOR);
                yyaccept = 0;
@@ -1888,24 +1885,23 @@ yy85:
 yy87:
                YYDEBUG(87, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1836 "Zend/zend_language_scanner.l"
+#line 1832 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
-       zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 1898 "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 1464 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
        return T_DOLLAR_OPEN_CURLY_BRACES;
 }
-#line 1909 "Zend/zend_language_scanner.c"
+#line 1905 "Zend/zend_language_scanner.c"
 yy90:
                YYDEBUG(90, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1919,15 +1915,14 @@ yy92:
                ++YYCURSOR;
                YYDEBUG(93, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1828 "Zend/zend_language_scanner.l"
+#line 1825 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
-       zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 1931 "Zend/zend_language_scanner.c"
+#line 1926 "Zend/zend_language_scanner.c"
 yy94:
                YYDEBUG(94, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -1945,15 +1940,14 @@ yy95:
                ++YYCURSOR;
                YYDEBUG(96, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1818 "Zend/zend_language_scanner.l"
+#line 1816 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
-       zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 1957 "Zend/zend_language_scanner.c"
+#line 1951 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_END_HEREDOC:
@@ -1964,7 +1958,7 @@ yyc_ST_END_HEREDOC:
        ++YYCURSOR;
        YYDEBUG(100, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
-#line 2115 "Zend/zend_language_scanner.l"
+#line 2109 "Zend/zend_language_scanner.l"
        {
        zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack));
 
@@ -1977,7 +1971,7 @@ yyc_ST_END_HEREDOC:
        BEGIN(ST_IN_SCRIPTING);
        return T_END_HEREDOC;
 }
-#line 1981 "Zend/zend_language_scanner.c"
+#line 1975 "Zend/zend_language_scanner.c"
 /* *********************************** */
 yyc_ST_HEREDOC:
        {
@@ -2039,7 +2033,7 @@ yy103:
 yy104:
                YYDEBUG(104, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2240 "Zend/zend_language_scanner.l"
+#line 2234 "Zend/zend_language_scanner.l"
                {
        int newline = 0;
 
@@ -2112,7 +2106,7 @@ heredoc_scan_done:
        zend_scan_escape_string(zendlval, yytext, yyleng - newline, 0 TSRMLS_CC);
        return T_ENCAPSED_AND_WHITESPACE;
 }
-#line 2116 "Zend/zend_language_scanner.c"
+#line 2110 "Zend/zend_language_scanner.c"
 yy105:
                YYDEBUG(105, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -2127,14 +2121,14 @@ yy107:
                ++YYCURSOR;
                YYDEBUG(108, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2129 "Zend/zend_language_scanner.l"
+#line 2123 "Zend/zend_language_scanner.l"
                {
        Z_LVAL_P(zendlval) = (long) '{';
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        yyless(1);
        return T_CURLY_OPEN;
 }
-#line 2138 "Zend/zend_language_scanner.c"
+#line 2132 "Zend/zend_language_scanner.c"
 yy109:
                YYDEBUG(109, *YYCURSOR);
                yyaccept = 0;
@@ -2150,24 +2144,23 @@ yy109:
 yy111:
                YYDEBUG(111, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1836 "Zend/zend_language_scanner.l"
+#line 1832 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
-       zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 2160 "Zend/zend_language_scanner.c"
+#line 2153 "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 1464 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC);
        return T_DOLLAR_OPEN_CURLY_BRACES;
 }
-#line 2171 "Zend/zend_language_scanner.c"
+#line 2164 "Zend/zend_language_scanner.c"
 yy114:
                YYDEBUG(114, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -2181,15 +2174,14 @@ yy116:
                ++YYCURSOR;
                YYDEBUG(117, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1828 "Zend/zend_language_scanner.l"
+#line 1825 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
-       zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 2193 "Zend/zend_language_scanner.c"
+#line 2185 "Zend/zend_language_scanner.c"
 yy118:
                YYDEBUG(118, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -2207,15 +2199,14 @@ yy119:
                ++YYCURSOR;
                YYDEBUG(120, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1818 "Zend/zend_language_scanner.l"
+#line 1816 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
-       zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 2219 "Zend/zend_language_scanner.c"
+#line 2210 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_IN_SCRIPTING:
@@ -2398,13 +2389,12 @@ yy123:
 yy124:
                YYDEBUG(124, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1859 "Zend/zend_language_scanner.l"
+#line 1854 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, yytext, yyleng);
-       zendlval->type = IS_STRING;
        return T_STRING;
 }
-#line 2408 "Zend/zend_language_scanner.c"
+#line 2398 "Zend/zend_language_scanner.c"
 yy125:
                YYDEBUG(125, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -2636,11 +2626,11 @@ yy138:
 yy139:
                YYDEBUG(139, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1454 "Zend/zend_language_scanner.l"
+#line 1453 "Zend/zend_language_scanner.l"
                {
        return yytext[0];
 }
-#line 2644 "Zend/zend_language_scanner.c"
+#line 2634 "Zend/zend_language_scanner.c"
 yy140:
                YYDEBUG(140, *YYCURSOR);
                ++YYCURSOR;
@@ -2656,7 +2646,7 @@ yy141:
        HANDLE_NEWLINES(yytext, yyleng);
        return T_WHITESPACE;
 }
-#line 2660 "Zend/zend_language_scanner.c"
+#line 2650 "Zend/zend_language_scanner.c"
 yy142:
                YYDEBUG(142, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -2667,11 +2657,11 @@ yy143:
                ++YYCURSOR;
                YYDEBUG(144, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1210 "Zend/zend_language_scanner.l"
+#line 1209 "Zend/zend_language_scanner.l"
                {
        return T_NS_SEPARATOR;
 }
-#line 2675 "Zend/zend_language_scanner.c"
+#line 2665 "Zend/zend_language_scanner.c"
 yy145:
                YYDEBUG(145, *YYCURSOR);
                yyaccept = 1;
@@ -2904,18 +2894,18 @@ yy168:
                ++YYCURSOR;
                YYDEBUG(169, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1459 "Zend/zend_language_scanner.l"
+#line 1458 "Zend/zend_language_scanner.l"
                {
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        return '{';
 }
-#line 2913 "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 1470 "Zend/zend_language_scanner.l"
                {
        RESET_DOC_COMMENT();
        if (!zend_stack_is_empty(&SCNG(state_stack))) {
@@ -2923,7 +2913,7 @@ yy170:
        }
        return '}';
 }
-#line 2927 "Zend/zend_language_scanner.c"
+#line 2917 "Zend/zend_language_scanner.c"
 yy172:
                YYDEBUG(172, *YYCURSOR);
                yyaccept = 2;
@@ -2951,7 +2941,7 @@ yy172:
 yy173:
                YYDEBUG(173, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1521 "Zend/zend_language_scanner.l"
+#line 1519 "Zend/zend_language_scanner.l"
                {
        if (yyleng < MAX_LENGTH_OF_LONG - 1) { /* Won't overflow */
                Z_LVAL_P(zendlval) = strtol(yytext, NULL, 0);
@@ -2972,7 +2962,7 @@ yy173:
        zendlval->type = IS_LONG;
        return T_LNUMBER;
 }
-#line 2976 "Zend/zend_language_scanner.c"
+#line 2966 "Zend/zend_language_scanner.c"
 yy174:
                YYDEBUG(174, *YYCURSOR);
                yyaccept = 2;
@@ -3000,7 +2990,7 @@ yy176:
 yy177:
                YYDEBUG(177, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1866 "Zend/zend_language_scanner.l"
+#line 1860 "Zend/zend_language_scanner.l"
                {
        while (YYCURSOR < YYLIMIT) {
                switch (*YYCURSOR++) {
@@ -3034,14 +3024,14 @@ yy177:
 
        return T_COMMENT;
 }
-#line 3038 "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 1952 "Zend/zend_language_scanner.l"
+#line 1946 "Zend/zend_language_scanner.l"
                {
        register char *s, *t;
        char *end;
@@ -3107,14 +3097,14 @@ yy179:
        }
        return T_CONSTANT_ENCAPSED_STRING;
 }
-#line 3111 "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 2019 "Zend/zend_language_scanner.l"
+#line 2013 "Zend/zend_language_scanner.l"
                {
        int bprefix = (yytext[0] != '"') ? 1 : 0;
 
@@ -3155,24 +3145,24 @@ yy181:
        BEGIN(ST_DOUBLE_QUOTES);
        return '"';
 }
-#line 3159 "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 2109 "Zend/zend_language_scanner.l"
+#line 2103 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_BACKQUOTE);
        return '`';
 }
-#line 3170 "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 2372 "Zend/zend_language_scanner.l"
+#line 2365 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@ -3181,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 3185 "Zend/zend_language_scanner.c"
+#line 3175 "Zend/zend_language_scanner.c"
 yy186:
                YYDEBUG(186, *YYCURSOR);
                ++YYCURSOR;
@@ -3208,12 +3198,12 @@ yy188:
 yy190:
                YYDEBUG(190, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1580 "Zend/zend_language_scanner.l"
+#line 1578 "Zend/zend_language_scanner.l"
                {
        ZVAL_DOUBLE(zendlval, zend_strtod(yytext, NULL));
        return T_DNUMBER;
 }
-#line 3217 "Zend/zend_language_scanner.c"
+#line 3207 "Zend/zend_language_scanner.c"
 yy191:
                YYDEBUG(191, *YYCURSOR);
                yyaccept = 2;
@@ -3305,7 +3295,7 @@ yy200:
                }
                YYDEBUG(202, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1497 "Zend/zend_language_scanner.l"
+#line 1495 "Zend/zend_language_scanner.l"
                {
        char *bin = yytext + 2; /* Skip "0b" */
        int len = yyleng - 2;
@@ -3329,7 +3319,7 @@ yy200:
                return T_DNUMBER;
        }
 }
-#line 3333 "Zend/zend_language_scanner.c"
+#line 3323 "Zend/zend_language_scanner.c"
 yy203:
                YYDEBUG(203, *YYCURSOR);
                ++YYCURSOR;
@@ -3341,7 +3331,7 @@ yy203:
                }
                YYDEBUG(205, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1542 "Zend/zend_language_scanner.l"
+#line 1540 "Zend/zend_language_scanner.l"
                {
        char *hex = yytext + 2; /* Skip "0x" */
        int len = yyleng - 2;
@@ -3365,7 +3355,7 @@ yy203:
                return T_DNUMBER;
        }
 }
-#line 3369 "Zend/zend_language_scanner.c"
+#line 3359 "Zend/zend_language_scanner.c"
 yy206:
                YYDEBUG(206, *YYCURSOR);
                ++YYCURSOR;
@@ -3374,13 +3364,13 @@ yy206:
 yy207:
                YYDEBUG(207, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1933 "Zend/zend_language_scanner.l"
+#line 1927 "Zend/zend_language_scanner.l"
                {
        ZVAL_STRINGL(zendlval, yytext, yyleng);
        BEGIN(INITIAL);
        return T_CLOSE_TAG;  /* implicit ';' at php-end tag */
 }
-#line 3384 "Zend/zend_language_scanner.c"
+#line 3374 "Zend/zend_language_scanner.c"
 yy208:
                YYDEBUG(208, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3414,13 +3404,12 @@ yy210:
 yy212:
                YYDEBUG(212, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1836 "Zend/zend_language_scanner.l"
+#line 1832 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
-       zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 3424 "Zend/zend_language_scanner.c"
+#line 3413 "Zend/zend_language_scanner.c"
 yy213:
                YYDEBUG(213, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3434,11 +3423,11 @@ yy214:
                }
                YYDEBUG(215, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1442 "Zend/zend_language_scanner.l"
+#line 1441 "Zend/zend_language_scanner.l"
                {
        return T_LOGICAL_XOR;
 }
-#line 3442 "Zend/zend_language_scanner.c"
+#line 3431 "Zend/zend_language_scanner.c"
 yy216:
                YYDEBUG(216, *YYCURSOR);
                ++YYCURSOR;
@@ -3447,61 +3436,61 @@ yy216:
                }
                YYDEBUG(217, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1434 "Zend/zend_language_scanner.l"
+#line 1433 "Zend/zend_language_scanner.l"
                {
        return T_LOGICAL_OR;
 }
-#line 3455 "Zend/zend_language_scanner.c"
+#line 3444 "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 1421 "Zend/zend_language_scanner.l"
                {
        return T_XOR_EQUAL;
 }
-#line 3465 "Zend/zend_language_scanner.c"
+#line 3454 "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 1425 "Zend/zend_language_scanner.l"
                {
        return T_BOOLEAN_OR;
 }
-#line 3475 "Zend/zend_language_scanner.c"
+#line 3464 "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 1417 "Zend/zend_language_scanner.l"
                {
        return T_OR_EQUAL;
 }
-#line 3485 "Zend/zend_language_scanner.c"
+#line 3474 "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 1429 "Zend/zend_language_scanner.l"
                {
        return T_BOOLEAN_AND;
 }
-#line 3495 "Zend/zend_language_scanner.c"
+#line 3484 "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 1413 "Zend/zend_language_scanner.l"
                {
        return T_AND_EQUAL;
 }
-#line 3505 "Zend/zend_language_scanner.c"
+#line 3494 "Zend/zend_language_scanner.c"
 yy228:
                YYDEBUG(228, *YYCURSOR);
                ++YYCURSOR;
@@ -3510,7 +3499,7 @@ yy228:
 yy229:
                YYDEBUG(229, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1940 "Zend/zend_language_scanner.l"
+#line 1934 "Zend/zend_language_scanner.l"
                {
        if (CG(asp_tags)) {
                BEGIN(INITIAL);
@@ -3521,17 +3510,17 @@ yy229:
                return yytext[0];
        }
 }
-#line 3525 "Zend/zend_language_scanner.c"
+#line 3514 "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 1401 "Zend/zend_language_scanner.l"
                {
        return T_MOD_EQUAL;
 }
-#line 3535 "Zend/zend_language_scanner.c"
+#line 3524 "Zend/zend_language_scanner.c"
 yy232:
                YYDEBUG(232, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3549,7 +3538,7 @@ yy234:
 yy235:
                YYDEBUG(235, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1900 "Zend/zend_language_scanner.l"
+#line 1894 "Zend/zend_language_scanner.l"
                {
        int doc_com;
 
@@ -3582,7 +3571,7 @@ yy235:
 
        return T_COMMENT;
 }
-#line 3586 "Zend/zend_language_scanner.c"
+#line 3575 "Zend/zend_language_scanner.c"
 yy236:
                YYDEBUG(236, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3592,11 +3581,11 @@ yy237:
                ++YYCURSOR;
                YYDEBUG(238, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1394 "Zend/zend_language_scanner.l"
+#line 1393 "Zend/zend_language_scanner.l"
                {
        return T_DIV_EQUAL;
 }
-#line 3600 "Zend/zend_language_scanner.c"
+#line 3589 "Zend/zend_language_scanner.c"
 yy239:
                YYDEBUG(239, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3619,42 +3608,42 @@ yy242:
                ++YYCURSOR;
                YYDEBUG(243, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1390 "Zend/zend_language_scanner.l"
+#line 1389 "Zend/zend_language_scanner.l"
                {
        return T_MUL_EQUAL;
 }
-#line 3627 "Zend/zend_language_scanner.c"
+#line 3616 "Zend/zend_language_scanner.c"
 yy244:
                YYDEBUG(244, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) == '=') goto yy248;
                YYDEBUG(245, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1450 "Zend/zend_language_scanner.l"
+#line 1449 "Zend/zend_language_scanner.l"
                {
        return T_SR;
 }
-#line 3638 "Zend/zend_language_scanner.c"
+#line 3627 "Zend/zend_language_scanner.c"
 yy246:
                YYDEBUG(246, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(247, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1378 "Zend/zend_language_scanner.l"
+#line 1377 "Zend/zend_language_scanner.l"
                {
        return T_IS_GREATER_OR_EQUAL;
 }
-#line 3648 "Zend/zend_language_scanner.c"
+#line 3637 "Zend/zend_language_scanner.c"
 yy248:
                YYDEBUG(248, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(249, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1410 "Zend/zend_language_scanner.l"
+#line 1409 "Zend/zend_language_scanner.l"
                {
        return T_SR_EQUAL;
 }
-#line 3658 "Zend/zend_language_scanner.c"
+#line 3647 "Zend/zend_language_scanner.c"
 yy250:
                YYDEBUG(250, *YYCURSOR);
                yyaccept = 5;
@@ -3665,11 +3654,11 @@ yy250:
 yy251:
                YYDEBUG(251, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1446 "Zend/zend_language_scanner.l"
+#line 1445 "Zend/zend_language_scanner.l"
                {
        return T_SL;
 }
-#line 3673 "Zend/zend_language_scanner.c"
+#line 3662 "Zend/zend_language_scanner.c"
 yy252:
                YYDEBUG(252, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3681,22 +3670,22 @@ yy253:
                ++YYCURSOR;
                YYDEBUG(254, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1374 "Zend/zend_language_scanner.l"
+#line 1373 "Zend/zend_language_scanner.l"
                {
        return T_IS_SMALLER_OR_EQUAL;
 }
-#line 3689 "Zend/zend_language_scanner.c"
+#line 3678 "Zend/zend_language_scanner.c"
 yy255:
                YYDEBUG(255, *YYCURSOR);
                ++YYCURSOR;
 yy256:
                YYDEBUG(256, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1370 "Zend/zend_language_scanner.l"
+#line 1369 "Zend/zend_language_scanner.l"
                {
        return T_IS_NOT_EQUAL;
 }
-#line 3700 "Zend/zend_language_scanner.c"
+#line 3689 "Zend/zend_language_scanner.c"
 yy257:
                YYDEBUG(257, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3747,11 +3736,11 @@ yy264:
                ++YYCURSOR;
                YYDEBUG(265, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1406 "Zend/zend_language_scanner.l"
+#line 1405 "Zend/zend_language_scanner.l"
                {
        return T_SL_EQUAL;
 }
-#line 3755 "Zend/zend_language_scanner.c"
+#line 3744 "Zend/zend_language_scanner.c"
 yy266:
                YYDEBUG(266, *YYCURSOR);
                ++YYCURSOR;
@@ -3856,7 +3845,7 @@ yy275:
 yy276:
                YYDEBUG(276, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2061 "Zend/zend_language_scanner.l"
+#line 2055 "Zend/zend_language_scanner.l"
                {
        char *s;
        int bprefix = (yytext[0] != '<') ? 1 : 0;
@@ -3903,7 +3892,7 @@ yy276:
 
        return T_START_HEREDOC;
 }
-#line 3907 "Zend/zend_language_scanner.c"
+#line 3896 "Zend/zend_language_scanner.c"
 yy277:
                YYDEBUG(277, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3943,31 +3932,31 @@ yy280:
                ++YYCURSOR;
                YYDEBUG(282, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1362 "Zend/zend_language_scanner.l"
+#line 1361 "Zend/zend_language_scanner.l"
                {
        return T_IS_NOT_IDENTICAL;
 }
-#line 3951 "Zend/zend_language_scanner.c"
+#line 3940 "Zend/zend_language_scanner.c"
 yy283:
                YYDEBUG(283, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(284, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1382 "Zend/zend_language_scanner.l"
+#line 1381 "Zend/zend_language_scanner.l"
                {
        return T_PLUS_EQUAL;
 }
-#line 3961 "Zend/zend_language_scanner.c"
+#line 3950 "Zend/zend_language_scanner.c"
 yy285:
                YYDEBUG(285, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(286, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1350 "Zend/zend_language_scanner.l"
+#line 1349 "Zend/zend_language_scanner.l"
                {
        return T_INC;
 }
-#line 3971 "Zend/zend_language_scanner.c"
+#line 3960 "Zend/zend_language_scanner.c"
 yy287:
                YYDEBUG(287, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3986,42 +3975,42 @@ yy289:
                }
                YYDEBUG(290, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1338 "Zend/zend_language_scanner.l"
+#line 1337 "Zend/zend_language_scanner.l"
                {
        return T_LIST;
 }
-#line 3994 "Zend/zend_language_scanner.c"
+#line 3983 "Zend/zend_language_scanner.c"
 yy291:
                YYDEBUG(291, *YYCURSOR);
                ++YYCURSOR;
                if ((yych = *YYCURSOR) == '=') goto yy295;
                YYDEBUG(292, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1366 "Zend/zend_language_scanner.l"
+#line 1365 "Zend/zend_language_scanner.l"
                {
        return T_IS_EQUAL;
 }
-#line 4005 "Zend/zend_language_scanner.c"
+#line 3994 "Zend/zend_language_scanner.c"
 yy293:
                YYDEBUG(293, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(294, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1334 "Zend/zend_language_scanner.l"
+#line 1333 "Zend/zend_language_scanner.l"
                {
        return T_DOUBLE_ARROW;
 }
-#line 4015 "Zend/zend_language_scanner.c"
+#line 4004 "Zend/zend_language_scanner.c"
 yy295:
                YYDEBUG(295, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(296, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1358 "Zend/zend_language_scanner.l"
+#line 1357 "Zend/zend_language_scanner.l"
                {
        return T_IS_IDENTICAL;
 }
-#line 4025 "Zend/zend_language_scanner.c"
+#line 4014 "Zend/zend_language_scanner.c"
 yy297:
                YYDEBUG(297, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4151,7 +4140,7 @@ yy313:
                }
                YYDEBUG(316, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1678 "Zend/zend_language_scanner.l"
+#line 1676 "Zend/zend_language_scanner.l"
                {
        if (Z_TYPE(CG(current_namespace)) != IS_UNDEF) {
                ZVAL_DUP(zendlval, &CG(current_namespace));
@@ -4160,7 +4149,7 @@ yy313:
        }
        return T_NS_C;
 }
-#line 4164 "Zend/zend_language_scanner.c"
+#line 4153 "Zend/zend_language_scanner.c"
 yy317:
                YYDEBUG(317, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4180,7 +4169,7 @@ yy318:
                }
                YYDEBUG(321, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1653 "Zend/zend_language_scanner.l"
+#line 1651 "Zend/zend_language_scanner.l"
                {
        zend_string *filename = zend_get_compiled_filename(TSRMLS_C);
        zend_string *dirname;
@@ -4205,7 +4194,7 @@ yy318:
        ZVAL_STR(zendlval, dirname);
        return T_DIR;
 }
-#line 4209 "Zend/zend_language_scanner.c"
+#line 4198 "Zend/zend_language_scanner.c"
 yy322:
                YYDEBUG(322, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4230,12 +4219,12 @@ yy324:
                }
                YYDEBUG(327, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1638 "Zend/zend_language_scanner.l"
+#line 1636 "Zend/zend_language_scanner.l"
                {
        ZVAL_LONG(zendlval, CG(zend_lineno));
        return T_LINE;
 }
-#line 4239 "Zend/zend_language_scanner.c"
+#line 4228 "Zend/zend_language_scanner.c"
 yy328:
                YYDEBUG(328, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4270,7 +4259,7 @@ yy332:
                }
                YYDEBUG(335, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1625 "Zend/zend_language_scanner.l"
+#line 1623 "Zend/zend_language_scanner.l"
                {
        const char *class_name = CG(active_class_entry) ? CG(active_class_entry)->name->val : NULL;
        const char *func_name = CG(active_op_array)? CG(active_op_array)->function_name->val : NULL;
@@ -4283,7 +4272,7 @@ yy332:
        zendlval->type = IS_STRING;
        return T_METHOD_C;
 }
-#line 4287 "Zend/zend_language_scanner.c"
+#line 4276 "Zend/zend_language_scanner.c"
 yy336:
                YYDEBUG(336, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4334,7 +4323,7 @@ yy343:
                }
                YYDEBUG(346, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1614 "Zend/zend_language_scanner.l"
+#line 1612 "Zend/zend_language_scanner.l"
                {
        zend_op_array *op_array = CG(active_op_array);
        if (op_array && op_array->function_name) {
@@ -4345,7 +4334,7 @@ yy343:
        }
        return T_FUNC_C;
 }
-#line 4349 "Zend/zend_language_scanner.c"
+#line 4338 "Zend/zend_language_scanner.c"
 yy347:
                YYDEBUG(347, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4365,7 +4354,7 @@ yy348:
                }
                YYDEBUG(351, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1643 "Zend/zend_language_scanner.l"
+#line 1641 "Zend/zend_language_scanner.l"
                {
        zend_string *filename = zend_get_compiled_filename(TSRMLS_C);
 
@@ -4375,7 +4364,7 @@ yy348:
        ZVAL_STR(zendlval, filename);
        return T_FILE;
 }
-#line 4379 "Zend/zend_language_scanner.c"
+#line 4368 "Zend/zend_language_scanner.c"
 yy352:
                YYDEBUG(352, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4405,7 +4394,7 @@ yy355:
                }
                YYDEBUG(358, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1603 "Zend/zend_language_scanner.l"
+#line 1601 "Zend/zend_language_scanner.l"
                {
        zend_class_entry *ce = CG(active_class_entry);
        if (ce && ce->name && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) {
@@ -4416,7 +4405,7 @@ yy355:
        }
        return T_TRAIT_C;
 }
-#line 4420 "Zend/zend_language_scanner.c"
+#line 4409 "Zend/zend_language_scanner.c"
 yy359:
                YYDEBUG(359, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4446,7 +4435,7 @@ yy362:
                }
                YYDEBUG(365, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1585 "Zend/zend_language_scanner.l"
+#line 1583 "Zend/zend_language_scanner.l"
                {
        zend_class_entry *ce = CG(active_class_entry);
        if (ce && ZEND_ACC_TRAIT == (ce->ce_flags & ZEND_ACC_TRAIT)) {
@@ -4464,7 +4453,7 @@ yy362:
        }
        return T_CLASS_C;
 }
-#line 4468 "Zend/zend_language_scanner.c"
+#line 4457 "Zend/zend_language_scanner.c"
 yy366:
                YYDEBUG(366, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4526,11 +4515,11 @@ yy377:
                }
                YYDEBUG(378, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1302 "Zend/zend_language_scanner.l"
+#line 1301 "Zend/zend_language_scanner.l"
                {
        return T_HALT_COMPILER;
 }
-#line 4534 "Zend/zend_language_scanner.c"
+#line 4523 "Zend/zend_language_scanner.c"
 yy379:
                YYDEBUG(379, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4550,11 +4539,11 @@ yy381:
                }
                YYDEBUG(382, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1282 "Zend/zend_language_scanner.l"
+#line 1281 "Zend/zend_language_scanner.l"
                {
        return T_USE;
 }
-#line 4558 "Zend/zend_language_scanner.c"
+#line 4547 "Zend/zend_language_scanner.c"
 yy383:
                YYDEBUG(383, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4573,11 +4562,11 @@ yy385:
                }
                YYDEBUG(386, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1330 "Zend/zend_language_scanner.l"
+#line 1329 "Zend/zend_language_scanner.l"
                {
        return T_UNSET;
 }
-#line 4581 "Zend/zend_language_scanner.c"
+#line 4570 "Zend/zend_language_scanner.c"
 yy387:
                YYDEBUG(387, *YYCURSOR);
                ++YYCURSOR;
@@ -4749,11 +4738,11 @@ yy402:
                ++YYCURSOR;
                YYDEBUG(404, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1230 "Zend/zend_language_scanner.l"
+#line 1229 "Zend/zend_language_scanner.l"
                {
        return T_INT_CAST;
 }
-#line 4757 "Zend/zend_language_scanner.c"
+#line 4746 "Zend/zend_language_scanner.c"
 yy405:
                YYDEBUG(405, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4797,11 +4786,11 @@ yy410:
                ++YYCURSOR;
                YYDEBUG(413, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1234 "Zend/zend_language_scanner.l"
+#line 1233 "Zend/zend_language_scanner.l"
                {
        return T_DOUBLE_CAST;
 }
-#line 4805 "Zend/zend_language_scanner.c"
+#line 4794 "Zend/zend_language_scanner.c"
 yy414:
                YYDEBUG(414, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4871,11 +4860,11 @@ yy424:
                ++YYCURSOR;
                YYDEBUG(427, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1238 "Zend/zend_language_scanner.l"
+#line 1237 "Zend/zend_language_scanner.l"
                {
        return T_STRING_CAST;
 }
-#line 4879 "Zend/zend_language_scanner.c"
+#line 4868 "Zend/zend_language_scanner.c"
 yy428:
                YYDEBUG(428, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4908,11 +4897,11 @@ yy431:
                ++YYCURSOR;
                YYDEBUG(434, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1242 "Zend/zend_language_scanner.l"
+#line 1241 "Zend/zend_language_scanner.l"
                {
        return T_ARRAY_CAST;
 }
-#line 4916 "Zend/zend_language_scanner.c"
+#line 4905 "Zend/zend_language_scanner.c"
 yy435:
                YYDEBUG(435, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4950,11 +4939,11 @@ yy439:
                ++YYCURSOR;
                YYDEBUG(442, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1246 "Zend/zend_language_scanner.l"
+#line 1245 "Zend/zend_language_scanner.l"
                {
        return T_OBJECT_CAST;
 }
-#line 4958 "Zend/zend_language_scanner.c"
+#line 4947 "Zend/zend_language_scanner.c"
 yy443:
                YYDEBUG(443, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4995,11 +4984,11 @@ yy448:
                ++YYCURSOR;
                YYDEBUG(450, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1250 "Zend/zend_language_scanner.l"
+#line 1249 "Zend/zend_language_scanner.l"
                {
        return T_BOOL_CAST;
 }
-#line 5003 "Zend/zend_language_scanner.c"
+#line 4992 "Zend/zend_language_scanner.c"
 yy451:
                YYDEBUG(451, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5059,11 +5048,11 @@ yy459:
                ++YYCURSOR;
                YYDEBUG(462, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1254 "Zend/zend_language_scanner.l"
+#line 1253 "Zend/zend_language_scanner.l"
                {
        return T_UNSET_CAST;
 }
-#line 5067 "Zend/zend_language_scanner.c"
+#line 5056 "Zend/zend_language_scanner.c"
 yy463:
                YYDEBUG(463, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5077,11 +5066,11 @@ yy464:
                }
                YYDEBUG(465, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1226 "Zend/zend_language_scanner.l"
+#line 1225 "Zend/zend_language_scanner.l"
                {
        return T_VAR;
 }
-#line 5085 "Zend/zend_language_scanner.c"
+#line 5074 "Zend/zend_language_scanner.c"
 yy466:
                YYDEBUG(466, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5101,11 +5090,11 @@ yy468:
                }
                YYDEBUG(469, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1218 "Zend/zend_language_scanner.l"
+#line 1217 "Zend/zend_language_scanner.l"
                {
        return T_NEW;
 }
-#line 5109 "Zend/zend_language_scanner.c"
+#line 5098 "Zend/zend_language_scanner.c"
 yy470:
                YYDEBUG(470, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5144,11 +5133,11 @@ yy476:
                }
                YYDEBUG(477, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1278 "Zend/zend_language_scanner.l"
+#line 1277 "Zend/zend_language_scanner.l"
                {
        return T_NAMESPACE;
 }
-#line 5152 "Zend/zend_language_scanner.c"
+#line 5141 "Zend/zend_language_scanner.c"
 yy478:
                YYDEBUG(478, *YYCURSOR);
                yyaccept = 3;
@@ -5170,11 +5159,11 @@ yy480:
                ++YYCURSOR;
                YYDEBUG(481, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1398 "Zend/zend_language_scanner.l"
+#line 1397 "Zend/zend_language_scanner.l"
                {
        return T_CONCAT_EQUAL;
 }
-#line 5178 "Zend/zend_language_scanner.c"
+#line 5167 "Zend/zend_language_scanner.c"
 yy482:
                YYDEBUG(482, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5183,21 +5172,21 @@ yy482:
                ++YYCURSOR;
                YYDEBUG(484, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1214 "Zend/zend_language_scanner.l"
+#line 1213 "Zend/zend_language_scanner.l"
                {
        return T_ELLIPSIS;
 }
-#line 5191 "Zend/zend_language_scanner.c"
+#line 5180 "Zend/zend_language_scanner.c"
 yy485:
                YYDEBUG(485, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(486, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1206 "Zend/zend_language_scanner.l"
+#line 1205 "Zend/zend_language_scanner.l"
                {
        return T_PAAMAYIM_NEKUDOTAYIM;
 }
-#line 5201 "Zend/zend_language_scanner.c"
+#line 5190 "Zend/zend_language_scanner.c"
 yy487:
                YYDEBUG(487, *YYCURSOR);
                ++YYCURSOR;
@@ -5219,21 +5208,21 @@ yy489:
                ++YYCURSOR;
                YYDEBUG(490, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1386 "Zend/zend_language_scanner.l"
+#line 1385 "Zend/zend_language_scanner.l"
                {
        return T_MINUS_EQUAL;
 }
-#line 5227 "Zend/zend_language_scanner.c"
+#line 5216 "Zend/zend_language_scanner.c"
 yy491:
                YYDEBUG(491, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(492, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1354 "Zend/zend_language_scanner.l"
+#line 1353 "Zend/zend_language_scanner.l"
                {
        return T_DEC;
 }
-#line 5237 "Zend/zend_language_scanner.c"
+#line 5226 "Zend/zend_language_scanner.c"
 yy493:
                YYDEBUG(493, *YYCURSOR);
                ++YYCURSOR;
@@ -5244,7 +5233,7 @@ yy493:
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
        return T_OBJECT_OPERATOR;
 }
-#line 5248 "Zend/zend_language_scanner.c"
+#line 5237 "Zend/zend_language_scanner.c"
 yy495:
                YYDEBUG(495, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5289,11 +5278,11 @@ yy500:
                }
                YYDEBUG(501, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1326 "Zend/zend_language_scanner.l"
+#line 1325 "Zend/zend_language_scanner.l"
                {
        return T_PUBLIC;
 }
-#line 5297 "Zend/zend_language_scanner.c"
+#line 5286 "Zend/zend_language_scanner.c"
 yy502:
                YYDEBUG(502, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5348,11 +5337,11 @@ yy509:
                }
                YYDEBUG(510, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1322 "Zend/zend_language_scanner.l"
+#line 1321 "Zend/zend_language_scanner.l"
                {
        return T_PROTECTED;
 }
-#line 5356 "Zend/zend_language_scanner.c"
+#line 5345 "Zend/zend_language_scanner.c"
 yy511:
                YYDEBUG(511, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5382,11 +5371,11 @@ yy515:
                }
                YYDEBUG(516, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1318 "Zend/zend_language_scanner.l"
+#line 1317 "Zend/zend_language_scanner.l"
                {
        return T_PRIVATE;
 }
-#line 5390 "Zend/zend_language_scanner.c"
+#line 5379 "Zend/zend_language_scanner.c"
 yy517:
                YYDEBUG(517, *YYCURSOR);
                ++YYCURSOR;
@@ -5399,7 +5388,7 @@ yy517:
                {
        return T_PRINT;
 }
-#line 5403 "Zend/zend_language_scanner.c"
+#line 5392 "Zend/zend_language_scanner.c"
 yy519:
                YYDEBUG(519, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5428,7 +5417,7 @@ yy522:
                {
        return T_GOTO;
 }
-#line 5432 "Zend/zend_language_scanner.c"
+#line 5421 "Zend/zend_language_scanner.c"
 yy524:
                YYDEBUG(524, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5452,11 +5441,11 @@ yy527:
                }
                YYDEBUG(528, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1290 "Zend/zend_language_scanner.l"
+#line 1289 "Zend/zend_language_scanner.l"
                {
        return T_GLOBAL;
 }
-#line 5460 "Zend/zend_language_scanner.c"
+#line 5449 "Zend/zend_language_scanner.c"
 yy529:
                YYDEBUG(529, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5497,7 +5486,7 @@ yy535:
                {
        return T_BREAK;
 }
-#line 5501 "Zend/zend_language_scanner.c"
+#line 5490 "Zend/zend_language_scanner.c"
 yy537:
                YYDEBUG(537, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5541,7 +5530,7 @@ yy543:
                {
        return T_SWITCH;
 }
-#line 5545 "Zend/zend_language_scanner.c"
+#line 5534 "Zend/zend_language_scanner.c"
 yy545:
                YYDEBUG(545, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5565,11 +5554,11 @@ yy548:
                }
                YYDEBUG(549, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1306 "Zend/zend_language_scanner.l"
+#line 1305 "Zend/zend_language_scanner.l"
                {
        return T_STATIC;
 }
-#line 5573 "Zend/zend_language_scanner.c"
+#line 5562 "Zend/zend_language_scanner.c"
 yy550:
                YYDEBUG(550, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5600,7 +5589,7 @@ yy553:
                {
        return T_AS;
 }
-#line 5604 "Zend/zend_language_scanner.c"
+#line 5593 "Zend/zend_language_scanner.c"
 yy555:
                YYDEBUG(555, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5619,11 +5608,11 @@ yy557:
                }
                YYDEBUG(558, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1342 "Zend/zend_language_scanner.l"
+#line 1341 "Zend/zend_language_scanner.l"
                {
        return T_ARRAY;
 }
-#line 5627 "Zend/zend_language_scanner.c"
+#line 5616 "Zend/zend_language_scanner.c"
 yy559:
                YYDEBUG(559, *YYCURSOR);
                ++YYCURSOR;
@@ -5632,11 +5621,11 @@ yy559:
                }
                YYDEBUG(560, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1438 "Zend/zend_language_scanner.l"
+#line 1437 "Zend/zend_language_scanner.l"
                {
        return T_LOGICAL_AND;
 }
-#line 5640 "Zend/zend_language_scanner.c"
+#line 5629 "Zend/zend_language_scanner.c"
 yy561:
                YYDEBUG(561, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5670,11 +5659,11 @@ yy566:
                }
                YYDEBUG(567, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1310 "Zend/zend_language_scanner.l"
+#line 1309 "Zend/zend_language_scanner.l"
                {
        return T_ABSTRACT;
 }
-#line 5678 "Zend/zend_language_scanner.c"
+#line 5667 "Zend/zend_language_scanner.c"
 yy568:
                YYDEBUG(568, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5702,7 +5691,7 @@ yy571:
                {
        return T_WHILE;
 }
-#line 5706 "Zend/zend_language_scanner.c"
+#line 5695 "Zend/zend_language_scanner.c"
 yy573:
                YYDEBUG(573, *YYCURSOR);
                ++YYCURSOR;
@@ -5715,7 +5704,7 @@ yy573:
                {
        return T_IF;
 }
-#line 5719 "Zend/zend_language_scanner.c"
+#line 5708 "Zend/zend_language_scanner.c"
 yy575:
                YYDEBUG(575, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5767,11 +5756,11 @@ yy580:
                }
                YYDEBUG(581, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1294 "Zend/zend_language_scanner.l"
+#line 1293 "Zend/zend_language_scanner.l"
                {
        return T_ISSET;
 }
-#line 5775 "Zend/zend_language_scanner.c"
+#line 5764 "Zend/zend_language_scanner.c"
 yy582:
                YYDEBUG(582, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5825,11 +5814,11 @@ yy588:
 yy589:
                YYDEBUG(589, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1262 "Zend/zend_language_scanner.l"
+#line 1261 "Zend/zend_language_scanner.l"
                {
        return T_INCLUDE;
 }
-#line 5833 "Zend/zend_language_scanner.c"
+#line 5822 "Zend/zend_language_scanner.c"
 yy590:
                YYDEBUG(590, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5858,11 +5847,11 @@ yy594:
                }
                YYDEBUG(595, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1266 "Zend/zend_language_scanner.l"
+#line 1265 "Zend/zend_language_scanner.l"
                {
        return T_INCLUDE_ONCE;
 }
-#line 5866 "Zend/zend_language_scanner.c"
+#line 5855 "Zend/zend_language_scanner.c"
 yy596:
                YYDEBUG(596, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5900,7 +5889,7 @@ yy601:
                {
        return T_INTERFACE;
 }
-#line 5904 "Zend/zend_language_scanner.c"
+#line 5893 "Zend/zend_language_scanner.c"
 yy603:
                YYDEBUG(603, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5950,11 +5939,11 @@ yy609:
                }
                YYDEBUG(610, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1286 "Zend/zend_language_scanner.l"
+#line 1285 "Zend/zend_language_scanner.l"
                {
         return T_INSTEADOF;
 }
-#line 5958 "Zend/zend_language_scanner.c"
+#line 5947 "Zend/zend_language_scanner.c"
 yy611:
                YYDEBUG(611, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5987,7 +5976,7 @@ yy615:
                {
        return T_INSTANCEOF;
 }
-#line 5991 "Zend/zend_language_scanner.c"
+#line 5980 "Zend/zend_language_scanner.c"
 yy617:
                YYDEBUG(617, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6035,7 +6024,7 @@ yy624:
                {
        return T_IMPLEMENTS;
 }
-#line 6039 "Zend/zend_language_scanner.c"
+#line 6028 "Zend/zend_language_scanner.c"
 yy626:
                YYDEBUG(626, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6067,7 +6056,7 @@ yy627:
                {
        return T_TRY;
 }
-#line 6071 "Zend/zend_language_scanner.c"
+#line 6060 "Zend/zend_language_scanner.c"
 yy630:
                YYDEBUG(630, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6090,7 +6079,7 @@ yy632:
                {
        return T_TRAIT;
 }
-#line 6094 "Zend/zend_language_scanner.c"
+#line 6083 "Zend/zend_language_scanner.c"
 yy634:
                YYDEBUG(634, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6113,7 +6102,7 @@ yy636:
                {
        return T_THROW;
 }
-#line 6117 "Zend/zend_language_scanner.c"
+#line 6106 "Zend/zend_language_scanner.c"
 yy638:
                YYDEBUG(638, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6141,7 +6130,7 @@ yy641:
                {
        return T_YIELD;
 }
-#line 6145 "Zend/zend_language_scanner.c"
+#line 6134 "Zend/zend_language_scanner.c"
 yy643:
                YYDEBUG(643, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6202,11 +6191,11 @@ yy649:
 yy650:
                YYDEBUG(650, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1270 "Zend/zend_language_scanner.l"
+#line 1269 "Zend/zend_language_scanner.l"
                {
        return T_REQUIRE;
 }
-#line 6210 "Zend/zend_language_scanner.c"
+#line 6199 "Zend/zend_language_scanner.c"
 yy651:
                YYDEBUG(651, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6235,11 +6224,11 @@ yy655:
                }
                YYDEBUG(656, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1274 "Zend/zend_language_scanner.l"
+#line 1273 "Zend/zend_language_scanner.l"
                {
        return T_REQUIRE_ONCE;
 }
-#line 6243 "Zend/zend_language_scanner.c"
+#line 6232 "Zend/zend_language_scanner.c"
 yy657:
                YYDEBUG(657, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6262,7 +6251,7 @@ yy659:
                {
        return T_RETURN;
 }
-#line 6266 "Zend/zend_language_scanner.c"
+#line 6255 "Zend/zend_language_scanner.c"
 yy661:
                YYDEBUG(661, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6356,7 +6345,7 @@ yy670:
                {
        return T_CONTINUE;
 }
-#line 6360 "Zend/zend_language_scanner.c"
+#line 6349 "Zend/zend_language_scanner.c"
 yy672:
                YYDEBUG(672, *YYCURSOR);
                ++YYCURSOR;
@@ -6369,7 +6358,7 @@ yy672:
                {
        return T_CONST;
 }
-#line 6373 "Zend/zend_language_scanner.c"
+#line 6362 "Zend/zend_language_scanner.c"
 yy674:
                YYDEBUG(674, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6394,11 +6383,11 @@ yy677:
                }
                YYDEBUG(678, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1222 "Zend/zend_language_scanner.l"
+#line 1221 "Zend/zend_language_scanner.l"
                {
        return T_CLONE;
 }
-#line 6402 "Zend/zend_language_scanner.c"
+#line 6391 "Zend/zend_language_scanner.c"
 yy679:
                YYDEBUG(679, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6416,7 +6405,7 @@ yy680:
                {
        return T_CLASS;
 }
-#line 6420 "Zend/zend_language_scanner.c"
+#line 6409 "Zend/zend_language_scanner.c"
 yy682:
                YYDEBUG(682, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6462,11 +6451,11 @@ yy689:
                }
                YYDEBUG(690, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1346 "Zend/zend_language_scanner.l"
+#line 1345 "Zend/zend_language_scanner.l"
                {
  return T_CALLABLE;
 }
-#line 6470 "Zend/zend_language_scanner.c"
+#line 6459 "Zend/zend_language_scanner.c"
 yy691:
                YYDEBUG(691, *YYCURSOR);
                ++YYCURSOR;
@@ -6479,7 +6468,7 @@ yy691:
                {
        return T_CASE;
 }
-#line 6483 "Zend/zend_language_scanner.c"
+#line 6472 "Zend/zend_language_scanner.c"
 yy693:
                YYDEBUG(693, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6497,7 +6486,7 @@ yy694:
                {
        return T_CATCH;
 }
-#line 6501 "Zend/zend_language_scanner.c"
+#line 6490 "Zend/zend_language_scanner.c"
 yy696:
                YYDEBUG(696, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6552,7 +6541,7 @@ yy704:
                {
        return T_FUNCTION;
 }
-#line 6556 "Zend/zend_language_scanner.c"
+#line 6545 "Zend/zend_language_scanner.c"
 yy706:
                YYDEBUG(706, *YYCURSOR);
                ++YYCURSOR;
@@ -6580,7 +6569,7 @@ yy707:
                {
        return T_FOR;
 }
-#line 6584 "Zend/zend_language_scanner.c"
+#line 6573 "Zend/zend_language_scanner.c"
 yy708:
                YYDEBUG(708, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6608,7 +6597,7 @@ yy711:
                {
        return T_FOREACH;
 }
-#line 6612 "Zend/zend_language_scanner.c"
+#line 6601 "Zend/zend_language_scanner.c"
 yy713:
                YYDEBUG(713, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6642,11 +6631,11 @@ yy715:
 yy716:
                YYDEBUG(716, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1314 "Zend/zend_language_scanner.l"
+#line 1313 "Zend/zend_language_scanner.l"
                {
        return T_FINAL;
 }
-#line 6650 "Zend/zend_language_scanner.c"
+#line 6639 "Zend/zend_language_scanner.c"
 yy717:
                YYDEBUG(717, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6664,7 +6653,7 @@ yy718:
                {
        return T_FINALLY;
 }
-#line 6668 "Zend/zend_language_scanner.c"
+#line 6657 "Zend/zend_language_scanner.c"
 yy720:
                YYDEBUG(720, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6699,7 +6688,7 @@ yy722:
                {
        return T_DO;
 }
-#line 6703 "Zend/zend_language_scanner.c"
+#line 6692 "Zend/zend_language_scanner.c"
 yy724:
                YYDEBUG(724, *YYCURSOR);
                ++YYCURSOR;
@@ -6712,7 +6701,7 @@ yy724:
                {
        return T_EXIT;
 }
-#line 6716 "Zend/zend_language_scanner.c"
+#line 6705 "Zend/zend_language_scanner.c"
 yy726:
                YYDEBUG(726, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6751,7 +6740,7 @@ yy731:
                {
        return T_DEFAULT;
 }
-#line 6755 "Zend/zend_language_scanner.c"
+#line 6744 "Zend/zend_language_scanner.c"
 yy733:
                YYDEBUG(733, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6779,7 +6768,7 @@ yy736:
                {
        return T_DECLARE;
 }
-#line 6783 "Zend/zend_language_scanner.c"
+#line 6772 "Zend/zend_language_scanner.c"
 yy738:
                YYDEBUG(738, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6863,7 +6852,7 @@ yy749:
                {
        return T_EXTENDS;
 }
-#line 6867 "Zend/zend_language_scanner.c"
+#line 6856 "Zend/zend_language_scanner.c"
 yy751:
                YYDEBUG(751, *YYCURSOR);
                ++YYCURSOR;
@@ -6876,7 +6865,7 @@ yy751:
                {
        return T_EXIT;
 }
-#line 6880 "Zend/zend_language_scanner.c"
+#line 6869 "Zend/zend_language_scanner.c"
 yy753:
                YYDEBUG(753, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6890,11 +6879,11 @@ yy754:
                }
                YYDEBUG(755, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1258 "Zend/zend_language_scanner.l"
+#line 1257 "Zend/zend_language_scanner.l"
                {
        return T_EVAL;
 }
-#line 6898 "Zend/zend_language_scanner.c"
+#line 6887 "Zend/zend_language_scanner.c"
 yy756:
                YYDEBUG(756, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6968,7 +6957,7 @@ yy765:
                {
        return T_ENDWHILE;
 }
-#line 6972 "Zend/zend_language_scanner.c"
+#line 6961 "Zend/zend_language_scanner.c"
 yy767:
                YYDEBUG(767, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7001,7 +6990,7 @@ yy771:
                {
        return T_ENDSWITCH;
 }
-#line 7005 "Zend/zend_language_scanner.c"
+#line 6994 "Zend/zend_language_scanner.c"
 yy773:
                YYDEBUG(773, *YYCURSOR);
                ++YYCURSOR;
@@ -7014,7 +7003,7 @@ yy773:
                {
        return T_ENDIF;
 }
-#line 7018 "Zend/zend_language_scanner.c"
+#line 7007 "Zend/zend_language_scanner.c"
 yy775:
                YYDEBUG(775, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7047,7 +7036,7 @@ yy777:
                {
        return T_ENDFOR;
 }
-#line 7051 "Zend/zend_language_scanner.c"
+#line 7040 "Zend/zend_language_scanner.c"
 yy778:
                YYDEBUG(778, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7075,7 +7064,7 @@ yy781:
                {
        return T_ENDFOREACH;
 }
-#line 7079 "Zend/zend_language_scanner.c"
+#line 7068 "Zend/zend_language_scanner.c"
 yy783:
                YYDEBUG(783, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7113,7 +7102,7 @@ yy788:
                {
        return T_ENDDECLARE;
 }
-#line 7117 "Zend/zend_language_scanner.c"
+#line 7106 "Zend/zend_language_scanner.c"
 yy790:
                YYDEBUG(790, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7132,11 +7121,11 @@ yy792:
                }
                YYDEBUG(793, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1298 "Zend/zend_language_scanner.l"
+#line 1297 "Zend/zend_language_scanner.l"
                {
        return T_EMPTY;
 }
-#line 7140 "Zend/zend_language_scanner.c"
+#line 7129 "Zend/zend_language_scanner.c"
 yy794:
                YYDEBUG(794, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7169,7 +7158,7 @@ yy796:
                {
        return T_ELSE;
 }
-#line 7173 "Zend/zend_language_scanner.c"
+#line 7162 "Zend/zend_language_scanner.c"
 yy797:
                YYDEBUG(797, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7187,7 +7176,7 @@ yy798:
                {
        return T_ELSEIF;
 }
-#line 7191 "Zend/zend_language_scanner.c"
+#line 7180 "Zend/zend_language_scanner.c"
 yy800:
                YYDEBUG(800, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7205,7 +7194,7 @@ yy801:
                {
        return T_ECHO;
 }
-#line 7209 "Zend/zend_language_scanner.c"
+#line 7198 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_LOOKING_FOR_PROPERTY:
@@ -7285,7 +7274,7 @@ yy806:
        HANDLE_NEWLINES(yytext, yyleng);
        return T_WHITESPACE;
 }
-#line 7289 "Zend/zend_language_scanner.c"
+#line 7278 "Zend/zend_language_scanner.c"
 yy807:
                YYDEBUG(807, *YYCURSOR);
                ++YYCURSOR;
@@ -7293,13 +7282,13 @@ yy807:
 yy808:
                YYDEBUG(808, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1200 "Zend/zend_language_scanner.l"
+#line 1199 "Zend/zend_language_scanner.l"
                {
        yyless(0);
        yy_pop_state(TSRMLS_C);
        goto restart;
 }
-#line 7303 "Zend/zend_language_scanner.c"
+#line 7292 "Zend/zend_language_scanner.c"
 yy809:
                YYDEBUG(809, *YYCURSOR);
                ++YYCURSOR;
@@ -7312,10 +7301,9 @@ yy810:
                {
        yy_pop_state(TSRMLS_C);
        zend_copy_value(zendlval, yytext, yyleng);
-       zendlval->type = IS_STRING;
        return T_STRING;
 }
-#line 7319 "Zend/zend_language_scanner.c"
+#line 7307 "Zend/zend_language_scanner.c"
 yy811:
                YYDEBUG(811, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7340,7 +7328,7 @@ yy814:
                {
        return T_OBJECT_OPERATOR;
 }
-#line 7344 "Zend/zend_language_scanner.c"
+#line 7332 "Zend/zend_language_scanner.c"
 yy816:
                YYDEBUG(816, *YYCURSOR);
                ++YYCURSOR;
@@ -7425,14 +7413,14 @@ yy820:
 yy821:
                YYDEBUG(821, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1490 "Zend/zend_language_scanner.l"
+#line 1488 "Zend/zend_language_scanner.l"
                {
        yyless(0);
        yy_pop_state(TSRMLS_C);
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        goto restart;
 }
-#line 7436 "Zend/zend_language_scanner.c"
+#line 7424 "Zend/zend_language_scanner.c"
 yy822:
                YYDEBUG(822, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7457,16 +7445,15 @@ yy826:
                ++YYCURSOR;
                YYDEBUG(827, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1480 "Zend/zend_language_scanner.l"
+#line 1479 "Zend/zend_language_scanner.l"
                {
        yyless(yyleng - 1);
        zend_copy_value(zendlval, yytext, yyleng);
-       zendlval->type = IS_STRING;
        yy_pop_state(TSRMLS_C);
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        return T_STRING_VARNAME;
 }
-#line 7470 "Zend/zend_language_scanner.c"
+#line 7457 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_NOWDOC:
@@ -7477,7 +7464,7 @@ yyc_ST_NOWDOC:
        ++YYCURSOR;
        YYDEBUG(831, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
-#line 2314 "Zend/zend_language_scanner.l"
+#line 2308 "Zend/zend_language_scanner.l"
        {
        int newline = 0;
 
@@ -7530,11 +7517,10 @@ nowdoc_scan_done:
        yyleng = YYCURSOR - SCNG(yy_text);
 
        zend_copy_value(zendlval, yytext, yyleng - newline);
-       zendlval->type = IS_STRING;
        HANDLE_NEWLINES(yytext, yyleng - newline);
        return T_ENCAPSED_AND_WHITESPACE;
 }
-#line 7538 "Zend/zend_language_scanner.c"
+#line 7524 "Zend/zend_language_scanner.c"
 /* *********************************** */
 yyc_ST_VAR_OFFSET:
        {
@@ -7641,7 +7627,7 @@ yy834:
 yy835:
                YYDEBUG(835, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1566 "Zend/zend_language_scanner.l"
+#line 1564 "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)) {
                ZVAL_LONG(zendlval, strtol(yytext, NULL, 10));
@@ -7650,7 +7636,7 @@ yy835:
        }
        return T_NUM_STRING;
 }
-#line 7654 "Zend/zend_language_scanner.c"
+#line 7640 "Zend/zend_language_scanner.c"
 yy836:
                YYDEBUG(836, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7670,23 +7656,23 @@ yy837:
 yy838:
                YYDEBUG(838, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1847 "Zend/zend_language_scanner.l"
+#line 1842 "Zend/zend_language_scanner.l"
                {
        /* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */
        return yytext[0];
 }
-#line 7679 "Zend/zend_language_scanner.c"
+#line 7665 "Zend/zend_language_scanner.c"
 yy839:
                YYDEBUG(839, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(840, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1842 "Zend/zend_language_scanner.l"
+#line 1837 "Zend/zend_language_scanner.l"
                {
        yy_pop_state(TSRMLS_C);
        return ']';
 }
-#line 7690 "Zend/zend_language_scanner.c"
+#line 7676 "Zend/zend_language_scanner.c"
 yy841:
                YYDEBUG(841, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7696,14 +7682,14 @@ yy842:
                ++YYCURSOR;
                YYDEBUG(843, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1852 "Zend/zend_language_scanner.l"
+#line 1847 "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 7707 "Zend/zend_language_scanner.c"
+#line 7693 "Zend/zend_language_scanner.c"
 yy844:
                YYDEBUG(844, *YYCURSOR);
                ++YYCURSOR;
@@ -7712,19 +7698,18 @@ yy844:
 yy845:
                YYDEBUG(845, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1859 "Zend/zend_language_scanner.l"
+#line 1854 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, yytext, yyleng);
-       zendlval->type = IS_STRING;
        return T_STRING;
 }
-#line 7722 "Zend/zend_language_scanner.c"
+#line 7707 "Zend/zend_language_scanner.c"
 yy846:
                YYDEBUG(846, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(847, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2372 "Zend/zend_language_scanner.l"
+#line 2365 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@ -7733,7 +7718,7 @@ yy846:
        zend_error(E_COMPILE_WARNING,"Unexpected character in input:  '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
        goto restart;
 }
-#line 7737 "Zend/zend_language_scanner.c"
+#line 7722 "Zend/zend_language_scanner.c"
 yy848:
                YYDEBUG(848, *YYCURSOR);
                ++YYCURSOR;
@@ -7769,13 +7754,12 @@ yy850:
 yy852:
                YYDEBUG(852, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1836 "Zend/zend_language_scanner.l"
+#line 1832 "Zend/zend_language_scanner.l"
                {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
-       zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
-#line 7779 "Zend/zend_language_scanner.c"
+#line 7763 "Zend/zend_language_scanner.c"
 yy853:
                YYDEBUG(853, *YYCURSOR);
                ++YYCURSOR;
@@ -7815,12 +7799,12 @@ yy858:
 yy860:
                YYDEBUG(860, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1575 "Zend/zend_language_scanner.l"
+#line 1573 "Zend/zend_language_scanner.l"
                { /* Offset must be treated as a string */
        ZVAL_STRINGL(zendlval, yytext, yyleng);
        return T_NUM_STRING;
 }
-#line 7824 "Zend/zend_language_scanner.c"
+#line 7808 "Zend/zend_language_scanner.c"
 yy861:
                YYDEBUG(861, *YYCURSOR);
                ++YYCURSOR;
@@ -7843,6 +7827,6 @@ yy863:
                goto yy860;
        }
 }
-#line 2381 "Zend/zend_language_scanner.l"
+#line 2374 "Zend/zend_language_scanner.l"
 
 }
index 0f120524a52967e710371040a7a438f883b84d2e..abe6826321bf613958fdbfa4dec5826ff0251974 100644 (file)
@@ -1193,7 +1193,6 @@ NEWLINE ("\r"|"\n"|"\r\n")
 <ST_LOOKING_FOR_PROPERTY>{LABEL} {
        yy_pop_state(TSRMLS_C);
        zend_copy_value(zendlval, yytext, yyleng);
-       zendlval->type = IS_STRING;
        return T_STRING;
 }
 
@@ -1480,7 +1479,6 @@ NEWLINE ("\r"|"\n"|"\r\n")
 <ST_LOOKING_FOR_VARNAME>{LABEL}[[}] {
        yyless(yyleng - 1);
        zend_copy_value(zendlval, yytext, yyleng);
-       zendlval->type = IS_STRING;
        yy_pop_state(TSRMLS_C);
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        return T_STRING_VARNAME;
@@ -1819,7 +1817,6 @@ inline_html:
        yyless(yyleng - 3);
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
-       zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
 
@@ -1829,13 +1826,11 @@ inline_html:
        yyless(yyleng - 1);
        yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
-       zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
 
 <ST_IN_SCRIPTING,ST_DOUBLE_QUOTES,ST_HEREDOC,ST_BACKQUOTE,ST_VAR_OFFSET>"$"{LABEL} {
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
-       zendlval->type = IS_STRING;
        return T_VARIABLE;
 }
 
@@ -1858,7 +1853,6 @@ inline_html:
 
 <ST_IN_SCRIPTING,ST_VAR_OFFSET>{LABEL} {
        zend_copy_value(zendlval, yytext, yyleng);
-       zendlval->type = IS_STRING;
        return T_STRING;
 }
 
@@ -2363,7 +2357,6 @@ nowdoc_scan_done:
        yyleng = YYCURSOR - SCNG(yy_text);
 
        zend_copy_value(zendlval, yytext, yyleng - newline);
-       zendlval->type = IS_STRING;
        HANDLE_NEWLINES(yytext, yyleng - newline);
        return T_ENCAPSED_AND_WHITESPACE;
 }
index 8a9b26d3e7b9eba21eb7035392bffedb3dff57b3..ce7084817a3d863cf2ea96d193b5ede93ad7006b 100644 (file)
@@ -695,9 +695,16 @@ ZEND_API int pass_two(zend_op_array *op_array TSRMLS_DC)
        while (opline < end) {
                if (opline->op1_type == IS_CONST) {
                        opline->op1.zv = &op_array->literals[opline->op1.constant].constant;
+               } else if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
+                       opline->op1.var = (zend_uint)EX_VAR_NUM_2(NULL, op_array->last_var + opline->op1.var);
                }
                if (opline->op2_type == IS_CONST) {
                        opline->op2.zv = &op_array->literals[opline->op2.constant].constant;
+               } else if (opline->op2_type & (IS_VAR|IS_TMP_VAR)) {
+                       opline->op2.var = (zend_uint)EX_VAR_NUM_2(NULL, op_array->last_var + opline->op2.var);
+               }
+               if (opline->result_type & (IS_VAR|IS_TMP_VAR)) {
+                       opline->result.var = (zend_uint)EX_VAR_NUM_2(NULL, op_array->last_var + opline->result.var);
                }
                switch (opline->opcode) {
                        case ZEND_GOTO:
index 55db9439947d1af6630210a85bdd5e3941853bb9..7cbeb26164a35789901949ec4b046c09168cf2e2 100644 (file)
@@ -110,7 +110,8 @@ static zend_always_inline zend_string *zend_str_init(const char *str, int len, i
 {
        zend_string *ret = STR_ALLOC(len, persistent);
 
-       memcpy(ret->val, str, len + 1);
+       memcpy(ret->val, str, len);
+       ret->val[len] = '\0';
        return ret;
 }
 
index 2cf7e5268bd41fb0f48fb2668296446498794f5b..647efe423147e4974030df28c05ebd712b2ab83f 100644 (file)
@@ -1027,7 +1027,6 @@ ZEND_VM_HELPER_EX(zend_fetch_var_address_helper, CONST|TMP|VAR|CV, UNUSED|CONST|
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_W:
-                                       Z_ADDREF_P(&EG(uninitialized_zval));
                                        retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval));
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
@@ -1602,7 +1601,7 @@ ZEND_VM_HANDLER(147, ZEND_ASSIGN_DIM, VAR|CV, CONST|TMP|VAR|UNUSED|CV)
                if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
                        if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                                if (RETURN_VALUE_USED(opline)) {
-                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
+                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str->val + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
                                }
                        } else if (RETURN_VALUE_USED(opline)) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -1650,7 +1649,7 @@ ZEND_VM_HANDLER(38, ZEND_ASSIGN, VAR|CV, CONST|TMP|VAR|CV)
        if (OP1_TYPE == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
                if (zend_assign_to_string_offset(EX_VAR(opline->op1.var), value, OP2_TYPE TSRMLS_CC)) {
                        if (RETURN_VALUE_USED(opline)) {
-                               ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
+                               ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str->val + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
                        }
                } else if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -1748,7 +1747,7 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY)
                i_free_compiled_variables(execute_data TSRMLS_CC);
        }
 
-       zend_vm_stack_free((char*)execute_data - (ZEND_MM_ALIGNED_SIZE(sizeof(zval)) * op_array->T) TSRMLS_CC);
+       zend_vm_stack_free((char*)execute_data TSRMLS_CC);
 
        if ((op_array->fn_flags & ZEND_ACC_CLOSURE) && op_array->prototype) {
                zval_ptr_dtor((zval*)op_array->prototype);
@@ -1877,8 +1876,11 @@ ZEND_VM_HELPER(zend_do_fcall_common_helper, ANY, ANY)
        if (EX(call)->num_additional_args) {
                EX(function_state).arguments = zend_vm_stack_push_args(num_args TSRMLS_CC);
        } else {
+               zval tmp;
+
+               ZVAL_LONG(&tmp, num_args);
                EX(function_state).arguments = zend_vm_stack_top(TSRMLS_C);
-               zend_vm_stack_push((void*)(zend_uintptr_t) num_args TSRMLS_CC);
+               zend_vm_stack_push(&tmp TSRMLS_CC);
        }
        LOAD_OPLINE();
 
@@ -2955,7 +2957,7 @@ ZEND_VM_HELPER(zend_send_by_var_helper, VAR|CV, ANY)
                        varptr = Z_REFVAL_P(varptr);
                }
        } else if (OP1_TYPE == IS_CV) {
-               Z_ADDREF_P(varptr);
+               if (IS_REFCOUNTED(Z_TYPE_P(varptr))) Z_ADDREF_P(varptr);
        }
        zend_vm_stack_push(varptr TSRMLS_CC);
 
@@ -3240,7 +3242,7 @@ ZEND_VM_HANDLER(63, ZEND_RECV, ANY, ANY)
 
                zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, param, opline->extended_value TSRMLS_CC);
                var_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->result.var TSRMLS_CC);
-               Z_DELREF_P(var_ptr);
+               if (IS_REFCOUNTED(Z_TYPE_P(var_ptr))) Z_DELREF_P(var_ptr);
                ZVAL_COPY(var_ptr, param);
        }
 
index ebb0b810927c61b7bd37c4bec6806a1052a69fa5..6f6746c3bcedcd9eae0a2daafe57a09d0c258fe8 100644 (file)
@@ -392,7 +392,7 @@ static int ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
                i_free_compiled_variables(execute_data TSRMLS_CC);
        }
 
-       zend_vm_stack_free((char*)execute_data - (ZEND_MM_ALIGNED_SIZE(sizeof(zval)) * op_array->T) TSRMLS_CC);
+       zend_vm_stack_free((char*)execute_data TSRMLS_CC);
 
        if ((op_array->fn_flags & ZEND_ACC_CLOSURE) && op_array->prototype) {
                zval_ptr_dtor((zval*)op_array->prototype);
@@ -521,8 +521,11 @@ static int ZEND_FASTCALL zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_AR
        if (EX(call)->num_additional_args) {
                EX(function_state).arguments = zend_vm_stack_push_args(num_args TSRMLS_CC);
        } else {
+               zval tmp;
+
+               ZVAL_LONG(&tmp, num_args);
                EX(function_state).arguments = zend_vm_stack_top(TSRMLS_C);
-               zend_vm_stack_push((void*)(zend_uintptr_t) num_args TSRMLS_CC);
+               zend_vm_stack_push(&tmp TSRMLS_CC);
        }
        LOAD_OPLINE();
 
@@ -868,7 +871,7 @@ static int ZEND_FASTCALL  ZEND_RECV_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
                zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, param, opline->extended_value TSRMLS_CC);
                var_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->result.var TSRMLS_CC);
-               Z_DELREF_P(var_ptr);
+               if (IS_REFCOUNTED(Z_TYPE_P(var_ptr))) Z_DELREF_P(var_ptr);
                ZVAL_COPY(var_ptr, param);
        }
 
@@ -3499,9 +3502,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_CONST(int type
        varname = opline->op1.zv;
 
        if (IS_CONST != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
-               ZVAL_DUP(&tmp_varname, varname);
-//???          Z_SET_REFCOUNT(tmp_varname, 1);
-//???          Z_UNSET_ISREF(tmp_varname);
+               ZVAL_DUP_DEREF(&tmp_varname, varname);
                convert_to_string(&tmp_varname);
                varname = &tmp_varname;
        }
@@ -3550,7 +3551,6 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_CONST(int type
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_W:
-                                       Z_ADDREF_P(&EG(uninitialized_zval));
                                        retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval));
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
@@ -5248,9 +5248,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_VAR(int type,
        varname = opline->op1.zv;
 
        if (IS_CONST != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
-               ZVAL_DUP(&tmp_varname, varname);
-//???          Z_SET_REFCOUNT(tmp_varname, 1);
-//???          Z_UNSET_ISREF(tmp_varname);
+               ZVAL_DUP_DEREF(&tmp_varname, varname);
                convert_to_string(&tmp_varname);
                varname = &tmp_varname;
        }
@@ -5299,7 +5297,6 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_VAR(int type,
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_W:
-                                       Z_ADDREF_P(&EG(uninitialized_zval));
                                        retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval));
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
@@ -5930,9 +5927,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int typ
        varname = opline->op1.zv;
 
        if (IS_CONST != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
-               ZVAL_DUP(&tmp_varname, varname);
-//???          Z_SET_REFCOUNT(tmp_varname, 1);
-//???          Z_UNSET_ISREF(tmp_varname);
+               ZVAL_DUP_DEREF(&tmp_varname, varname);
                convert_to_string(&tmp_varname);
                varname = &tmp_varname;
        }
@@ -5981,7 +5976,6 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int typ
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_W:
-                                       Z_ADDREF_P(&EG(uninitialized_zval));
                                        retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval));
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
@@ -8524,9 +8518,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_CONST(int type,
        varname = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 
        if (IS_TMP_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
-               ZVAL_DUP(&tmp_varname, varname);
-//???          Z_SET_REFCOUNT(tmp_varname, 1);
-//???          Z_UNSET_ISREF(tmp_varname);
+               ZVAL_DUP_DEREF(&tmp_varname, varname);
                convert_to_string(&tmp_varname);
                varname = &tmp_varname;
        }
@@ -8575,7 +8567,6 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_CONST(int type,
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_W:
-                                       Z_ADDREF_P(&EG(uninitialized_zval));
                                        retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval));
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
@@ -10149,9 +10140,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_VAR(int type, ZE
        varname = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 
        if (IS_TMP_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
-               ZVAL_DUP(&tmp_varname, varname);
-//???          Z_SET_REFCOUNT(tmp_varname, 1);
-//???          Z_UNSET_ISREF(tmp_varname);
+               ZVAL_DUP_DEREF(&tmp_varname, varname);
                convert_to_string(&tmp_varname);
                varname = &tmp_varname;
        }
@@ -10200,7 +10189,6 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_VAR(int type, ZE
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_W:
-                                       Z_ADDREF_P(&EG(uninitialized_zval));
                                        retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval));
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
@@ -10834,9 +10822,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_UNUSED(int type,
        varname = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 
        if (IS_TMP_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
-               ZVAL_DUP(&tmp_varname, varname);
-//???          Z_SET_REFCOUNT(tmp_varname, 1);
-//???          Z_UNSET_ISREF(tmp_varname);
+               ZVAL_DUP_DEREF(&tmp_varname, varname);
                convert_to_string(&tmp_varname);
                varname = &tmp_varname;
        }
@@ -10885,7 +10871,6 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_UNUSED(int type,
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_W:
-                                       Z_ADDREF_P(&EG(uninitialized_zval));
                                        retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval));
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
@@ -12534,7 +12519,7 @@ static int ZEND_FASTCALL zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_AR
                        varptr = Z_REFVAL_P(varptr);
                }
        } else if (IS_VAR == IS_CV) {
-               Z_ADDREF_P(varptr);
+               if (IS_REFCOUNTED(Z_TYPE_P(varptr))) Z_ADDREF_P(varptr);
        }
        zend_vm_stack_push(varptr TSRMLS_CC);
 
@@ -14055,9 +14040,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_CONST(int type,
        varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 
        if (IS_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
-               ZVAL_DUP(&tmp_varname, varname);
-//???          Z_SET_REFCOUNT(tmp_varname, 1);
-//???          Z_UNSET_ISREF(tmp_varname);
+               ZVAL_DUP_DEREF(&tmp_varname, varname);
                convert_to_string(&tmp_varname);
                varname = &tmp_varname;
        }
@@ -14106,7 +14089,6 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_CONST(int type,
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_W:
-                                       Z_ADDREF_P(&EG(uninitialized_zval));
                                        retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval));
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
@@ -14657,7 +14639,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HAN
                if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
                        if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                                if (RETURN_VALUE_USED(opline)) {
-                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
+                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str->val + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
                                }
                        } else if (RETURN_VALUE_USED(opline)) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -14705,7 +14687,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER
        if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
                if (zend_assign_to_string_offset(EX_VAR(opline->op1.var), value, IS_CONST TSRMLS_CC)) {
                        if (RETURN_VALUE_USED(opline)) {
-                               ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
+                               ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str->val + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
                        }
                } else if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -16868,7 +16850,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDL
                if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
                        if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                                if (RETURN_VALUE_USED(opline)) {
-                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
+                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str->val + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
                                }
                        } else if (RETURN_VALUE_USED(opline)) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -16916,7 +16898,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
        if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
                if (zend_assign_to_string_offset(EX_VAR(opline->op1.var), value, IS_TMP_VAR TSRMLS_CC)) {
                        if (RETURN_VALUE_USED(opline)) {
-                               ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
+                               ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str->val + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
                        }
                } else if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -18379,9 +18361,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_VAR(int type, ZE
        varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 
        if (IS_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
-               ZVAL_DUP(&tmp_varname, varname);
-//???          Z_SET_REFCOUNT(tmp_varname, 1);
-//???          Z_UNSET_ISREF(tmp_varname);
+               ZVAL_DUP_DEREF(&tmp_varname, varname);
                convert_to_string(&tmp_varname);
                varname = &tmp_varname;
        }
@@ -18430,7 +18410,6 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_VAR(int type, ZE
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_W:
-                                       Z_ADDREF_P(&EG(uninitialized_zval));
                                        retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval));
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
@@ -18982,7 +18961,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDL
                if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
                        if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                                if (RETURN_VALUE_USED(opline)) {
-                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
+                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str->val + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
                                }
                        } else if (RETURN_VALUE_USED(opline)) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -19030,7 +19009,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
        if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
                if (zend_assign_to_string_offset(EX_VAR(opline->op1.var), value, IS_VAR TSRMLS_CC)) {
                        if (RETURN_VALUE_USED(opline)) {
-                               ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
+                               ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str->val + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
                        }
                } else if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -20237,9 +20216,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_UNUSED(int type,
        varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 
        if (IS_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
-               ZVAL_DUP(&tmp_varname, varname);
-//???          Z_SET_REFCOUNT(tmp_varname, 1);
-//???          Z_UNSET_ISREF(tmp_varname);
+               ZVAL_DUP_DEREF(&tmp_varname, varname);
                convert_to_string(&tmp_varname);
                varname = &tmp_varname;
        }
@@ -20288,7 +20265,6 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_UNUSED(int type,
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_W:
-                                       Z_ADDREF_P(&EG(uninitialized_zval));
                                        retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval));
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
@@ -20501,7 +20477,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HA
                if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
                        if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                                if (RETURN_VALUE_USED(opline)) {
-                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
+                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str->val + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
                                }
                        } else if (RETURN_VALUE_USED(opline)) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -22224,7 +22200,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLE
                if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
                        if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                                if (RETURN_VALUE_USED(opline)) {
-                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
+                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str->val + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
                                }
                        } else if (RETURN_VALUE_USED(opline)) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -22272,7 +22248,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_AR
        if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
                if (zend_assign_to_string_offset(EX_VAR(opline->op1.var), value, IS_CV TSRMLS_CC)) {
                        if (RETURN_VALUE_USED(opline)) {
-                               ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
+                               ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str->val + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
                        }
                } else if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -29091,7 +29067,7 @@ static int ZEND_FASTCALL zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARG
                        varptr = Z_REFVAL_P(varptr);
                }
        } else if (IS_CV == IS_CV) {
-               Z_ADDREF_P(varptr);
+               if (IS_REFCOUNTED(Z_TYPE_P(varptr))) Z_ADDREF_P(varptr);
        }
        zend_vm_stack_push(varptr TSRMLS_CC);
 
@@ -30468,9 +30444,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_CONST(int type, Z
        varname = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
 
        if (IS_CV != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
-               ZVAL_DUP(&tmp_varname, varname);
-//???          Z_SET_REFCOUNT(tmp_varname, 1);
-//???          Z_UNSET_ISREF(tmp_varname);
+               ZVAL_DUP_DEREF(&tmp_varname, varname);
                convert_to_string(&tmp_varname);
                varname = &tmp_varname;
        }
@@ -30519,7 +30493,6 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_CONST(int type, Z
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_W:
-                                       Z_ADDREF_P(&EG(uninitialized_zval));
                                        retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval));
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
@@ -31065,7 +31038,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HAND
                if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
                        if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                                if (RETURN_VALUE_USED(opline)) {
-                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
+                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str->val + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
                                }
                        } else if (RETURN_VALUE_USED(opline)) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -31113,7 +31086,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_
        if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
                if (zend_assign_to_string_offset(EX_VAR(opline->op1.var), value, IS_CONST TSRMLS_CC)) {
                        if (RETURN_VALUE_USED(opline)) {
-                               ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
+                               ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str->val + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
                        }
                } else if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -33057,7 +33030,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLE
                if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
                        if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                                if (RETURN_VALUE_USED(opline)) {
-                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
+                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str->val + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
                                }
                        } else if (RETURN_VALUE_USED(opline)) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -33105,7 +33078,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
        if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
                if (zend_assign_to_string_offset(EX_VAR(opline->op1.var), value, IS_TMP_VAR TSRMLS_CC)) {
                        if (RETURN_VALUE_USED(opline)) {
-                               ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
+                               ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str->val + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
                        }
                } else if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -34447,9 +34420,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_VAR(int type, ZEN
        varname = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
 
        if (IS_CV != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
-               ZVAL_DUP(&tmp_varname, varname);
-//???          Z_SET_REFCOUNT(tmp_varname, 1);
-//???          Z_UNSET_ISREF(tmp_varname);
+               ZVAL_DUP_DEREF(&tmp_varname, varname);
                convert_to_string(&tmp_varname);
                varname = &tmp_varname;
        }
@@ -34498,7 +34469,6 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_VAR(int type, ZEN
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_W:
-                                       Z_ADDREF_P(&EG(uninitialized_zval));
                                        retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval));
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
@@ -35045,7 +35015,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLE
                if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
                        if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                                if (RETURN_VALUE_USED(opline)) {
-                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
+                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str->val + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
                                }
                        } else if (RETURN_VALUE_USED(opline)) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -35093,7 +35063,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
        if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
                if (zend_assign_to_string_offset(EX_VAR(opline->op1.var), value, IS_VAR TSRMLS_CC)) {
                        if (RETURN_VALUE_USED(opline)) {
-                               ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
+                               ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str->val + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
                        }
                } else if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -36178,9 +36148,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type,
        varname = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
 
        if (IS_CV != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
-               ZVAL_DUP(&tmp_varname, varname);
-//???          Z_SET_REFCOUNT(tmp_varname, 1);
-//???          Z_UNSET_ISREF(tmp_varname);
+               ZVAL_DUP_DEREF(&tmp_varname, varname);
                convert_to_string(&tmp_varname);
                varname = &tmp_varname;
        }
@@ -36229,7 +36197,6 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type,
                                        zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
                                        /* break missing intentionally */
                                case BP_VAR_W:
-                                       Z_ADDREF_P(&EG(uninitialized_zval));
                                        retval = zend_hash_update(target_symbol_table, Z_STR_P(varname), &EG(uninitialized_zval));
                                        break;
                                EMPTY_SWITCH_DEFAULT_CASE()
@@ -36441,7 +36408,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HAN
                if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
                        if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                                if (RETURN_VALUE_USED(opline)) {
-                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
+                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str->val + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
                                }
                        } else if (RETURN_VALUE_USED(opline)) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -38028,7 +37995,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER
                if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
                        if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
                                if (RETURN_VALUE_USED(opline)) {
-                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
+                                       ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str->val + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
                                }
                        } else if (RETURN_VALUE_USED(opline)) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -38076,7 +38043,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG
        if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
                if (zend_assign_to_string_offset(EX_VAR(opline->op1.var), value, IS_CV TSRMLS_CC)) {
                        if (RETURN_VALUE_USED(opline)) {
-                               ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
+                               ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str->val + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
                        }
                } else if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(EX_VAR(opline->result.var));