]> granicus.if.org Git - php/commitdiff
Use better data structures (incomplete; able to run bench.php)
authorDmitry Stogov <dmitry@zend.com>
Tue, 18 Feb 2014 12:27:38 +0000 (16:27 +0400)
committerDmitry Stogov <dmitry@zend.com>
Tue, 18 Feb 2014 12:27:38 +0000 (16:27 +0400)
17 files changed:
Zend/zend_API.c
Zend/zend_compile.c
Zend/zend_execute.c
Zend/zend_execute.h
Zend/zend_execute_API.c
Zend/zend_hash.c
Zend/zend_language_scanner.c
Zend/zend_language_scanner.l
Zend/zend_operators.c
Zend/zend_variables.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h
Zend/zend_vm_gen.php
ext/standard/string.c
main/php_ini.c
sapi/cgi/cgi_main.c
sapi/fpm/fpm/fpm_main.c

index 84a29559a4b7aa894ed076241510b19c7bb76276..1f171adfa48d9e7bac416dacdc3180f860db95f2 100644 (file)
@@ -2168,30 +2168,30 @@ ZEND_API int zend_register_functions(zend_class_entry *scope, const zend_functio
                         * If it's an old-style constructor, store it only if we don't have
                         * a constructor already.
                         */
-                       if ((fname_len == class_name_len) && !ctor && !memcmp(lowercase_name, lc_class_name, class_name_len+1)) {
+                       if ((fname_len == class_name_len) && !ctor && !memcmp(lowercase_name->val, lc_class_name, class_name_len+1)) {
                                ctor = reg_function;
-                       } else if ((fname_len == sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME) - 1)) {
+                       } else if ((fname_len == sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME) - 1)) {
                                ctor = reg_function;
-                       } else if ((fname_len == sizeof(ZEND_DESTRUCTOR_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_DESTRUCTOR_FUNC_NAME, sizeof(ZEND_DESTRUCTOR_FUNC_NAME) - 1)) {
+                       } else if ((fname_len == sizeof(ZEND_DESTRUCTOR_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_DESTRUCTOR_FUNC_NAME, sizeof(ZEND_DESTRUCTOR_FUNC_NAME) - 1)) {
                                dtor = reg_function;
                                if (internal_function->num_args) {
                                        zend_error(error_type, "Destructor %s::%s() cannot take arguments", scope->name->val, ptr->fname);
                                }
-                       } else if ((fname_len == sizeof(ZEND_CLONE_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_CLONE_FUNC_NAME, sizeof(ZEND_CLONE_FUNC_NAME) - 1)) {
+                       } else if ((fname_len == sizeof(ZEND_CLONE_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_CLONE_FUNC_NAME, sizeof(ZEND_CLONE_FUNC_NAME) - 1)) {
                                clone = reg_function;
-                       } else if ((fname_len == sizeof(ZEND_CALL_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_CALL_FUNC_NAME, sizeof(ZEND_CALL_FUNC_NAME) - 1)) {
+                       } else if ((fname_len == sizeof(ZEND_CALL_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_CALL_FUNC_NAME, sizeof(ZEND_CALL_FUNC_NAME) - 1)) {
                                __call = reg_function;
-                       } else if ((fname_len == sizeof(ZEND_CALLSTATIC_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_CALLSTATIC_FUNC_NAME, sizeof(ZEND_CALLSTATIC_FUNC_NAME) - 1)) {
+                       } else if ((fname_len == sizeof(ZEND_CALLSTATIC_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_CALLSTATIC_FUNC_NAME, sizeof(ZEND_CALLSTATIC_FUNC_NAME) - 1)) {
                                __callstatic = reg_function;
-                       } else if ((fname_len == sizeof(ZEND_TOSTRING_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_TOSTRING_FUNC_NAME, sizeof(ZEND_TOSTRING_FUNC_NAME) - 1)) {
+                       } else if ((fname_len == sizeof(ZEND_TOSTRING_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_TOSTRING_FUNC_NAME, sizeof(ZEND_TOSTRING_FUNC_NAME) - 1)) {
                                __tostring = reg_function;
-                       } else if ((fname_len == sizeof(ZEND_GET_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_GET_FUNC_NAME, sizeof(ZEND_GET_FUNC_NAME) - 1)) {
+                       } else if ((fname_len == sizeof(ZEND_GET_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_GET_FUNC_NAME, sizeof(ZEND_GET_FUNC_NAME) - 1)) {
                                __get = reg_function;
-                       } else if ((fname_len == sizeof(ZEND_SET_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_SET_FUNC_NAME, sizeof(ZEND_SET_FUNC_NAME) - 1)) {
+                       } else if ((fname_len == sizeof(ZEND_SET_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_SET_FUNC_NAME, sizeof(ZEND_SET_FUNC_NAME) - 1)) {
                                __set = reg_function;
-                       } else if ((fname_len == sizeof(ZEND_UNSET_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_UNSET_FUNC_NAME, sizeof(ZEND_UNSET_FUNC_NAME) - 1)) {
+                       } else if ((fname_len == sizeof(ZEND_UNSET_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_UNSET_FUNC_NAME, sizeof(ZEND_UNSET_FUNC_NAME) - 1)) {
                                __unset = reg_function;
-                       } else if ((fname_len == sizeof(ZEND_ISSET_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_ISSET_FUNC_NAME, sizeof(ZEND_ISSET_FUNC_NAME) - 1)) {
+                       } else if ((fname_len == sizeof(ZEND_ISSET_FUNC_NAME)-1) && !memcmp(lowercase_name->val, ZEND_ISSET_FUNC_NAME, sizeof(ZEND_ISSET_FUNC_NAME) - 1)) {
                                __isset = reg_function;
                        } else {
                                reg_function = NULL;
index bc1fd172d5a2550b3962ec04540411766ba833af..728ec163538242e02b2db5dfaa1a3437985937bf 100644 (file)
@@ -1636,7 +1636,7 @@ void zend_do_begin_function_declaration(znode *function_token, znode *function_n
                                if (!CG(active_class_entry)->constructor) {
                                        CG(active_class_entry)->constructor = (zend_function *) CG(active_op_array);
                                }
-                       } else if ((name->len == sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) && (!memcmp(lcname->val, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)))) {
+                       } else if ((name->len == sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) && (!memcmp(lcname->val, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1))) {
                                if (CG(active_class_entry)->constructor) {
                                        zend_error(E_STRICT, "Redefining already defined constructor for class %s", CG(active_class_entry)->name->val);
                                }
index a3f99a2f1afd5b12a7d22105494e169aa464b0f8..cf3f84e2b5ab669d25e68bf3f839881cf963b5fd 100644 (file)
@@ -72,9 +72,9 @@ static zend_always_inline void zend_pzval_unlock_func(zval *z, zend_free_op *sho
                        Z_SET_REFCOUNT_P(z, 1);
 //???                  Z_UNSET_ISREF_P(z);
                        if (Z_ISREF_P(z)) {
-                               zend_reference *ref = Z_REF_P(z);
-                               ZVAL_COPY_VALUE(z, &ref->val);
-                               efree(ref);
+//???                          zend_reference *ref = Z_REF_P(z);
+//???                          ZVAL_COPY_VALUE(z, &ref->val);
+//???                          efree(ref);
                        }
                        should_free->var = z;
 /*             should_free->is_var = 1; */
@@ -82,9 +82,9 @@ static zend_always_inline void zend_pzval_unlock_func(zval *z, zend_free_op *sho
                        if (unref && Z_ISREF_P(z) && Z_REFCOUNT_P(z) == 1) {
 //???                  Z_UNSET_ISREF_P(z);
                                if (Z_ISREF_P(z)) {
-                                       zend_reference *ref = Z_REF_P(z);
-                                       ZVAL_COPY_VALUE(z, &ref->val);
-                                       efree(ref);
+//???                                  zend_reference *ref = Z_REF_P(z);
+//???                                  ZVAL_COPY_VALUE(z, &ref->val);
+//???                                  efree(ref);
                                }
                        }
                }
@@ -189,7 +189,27 @@ static zend_always_inline zval *_get_zval_ptr_tmp(zend_uint var, const zend_exec
 
 static zend_always_inline zval *_get_zval_ptr_var(zend_uint var, const zend_execute_data *execute_data, zend_free_op *should_free TSRMLS_DC)
 {
-       return should_free->var = EX_VAR(var);
+       zval *ret = EX_VAR(var);
+
+       if (UNEXPECTED(Z_TYPE_P(ret) == IS_INDIRECT)) {
+               ret = Z_INDIRECT_P(ret);
+       }
+       should_free->var = ret;
+       return ret;
+}
+
+static zend_always_inline zval *_get_zval_ptr_var_deref(zend_uint var, const zend_execute_data *execute_data, zend_free_op *should_free TSRMLS_DC)
+{
+       zval *ret = EX_VAR(var);
+
+       if (UNEXPECTED(Z_TYPE_P(ret) == IS_INDIRECT)) {
+               ret = Z_INDIRECT_P(ret);
+       }
+       should_free->var = ret;
+       if (UNEXPECTED(Z_TYPE_P(ret) == IS_REFERENCE)) {
+               ret = Z_REFVAL_P(ret);
+       }
+       return ret;
 }
 
 static zend_never_inline zval *_get_zval_cv_lookup(zend_uint var, int type TSRMLS_DC)
@@ -301,6 +321,18 @@ static zend_always_inline zval *_get_zval_ptr_cv(zend_uint var, int type TSRMLS_
        return ret;
 }
 
+static zend_always_inline zval *_get_zval_ptr_cv_deref(zend_uint var, int type TSRMLS_DC)
+{
+       zval *ret = EX_VAR_NUM_2(EG(current_execute_data), var);
+
+       if (UNEXPECTED(Z_TYPE_P(ret) == IS_UNDEF)) {
+               return _get_zval_cv_lookup(var, type TSRMLS_CC);
+       } else if (UNEXPECTED(Z_TYPE_P(ret) == IS_REFERENCE)) {
+               ret = Z_REFVAL_P(ret);
+       }
+       return ret;
+}
+
 static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_R(const zend_execute_data *execute_data, zend_uint var TSRMLS_DC)
 {
        zval *ret = EX_VAR_NUM(var);
@@ -311,6 +343,18 @@ static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_R(const zend_execute_dat
        return ret;
 }
 
+static zend_always_inline zval *_get_zval_ptr_cv_deref_BP_VAR_R(const zend_execute_data *execute_data, zend_uint var TSRMLS_DC)
+{
+       zval *ret = EX_VAR_NUM(var);
+
+       if (UNEXPECTED(Z_TYPE_P(ret) == IS_UNDEF)) {
+               return _get_zval_cv_lookup_BP_VAR_R(var TSRMLS_CC);
+       } else if (UNEXPECTED(Z_TYPE_P(ret) == IS_REFERENCE)) {
+               ret = Z_REFVAL_P(ret);
+       }
+       return ret;
+}
+
 static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_UNSET(const zend_execute_data *execute_data, zend_uint var TSRMLS_DC)
 {
        zval *ret = EX_VAR_NUM(var);
@@ -321,6 +365,18 @@ static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_UNSET(const zend_execute
        return ret;
 }
 
+static zend_always_inline zval *_get_zval_ptr_cv_deref_BP_VAR_UNSET(const zend_execute_data *execute_data, zend_uint var TSRMLS_DC)
+{
+       zval *ret = EX_VAR_NUM(var);
+
+       if (UNEXPECTED(Z_TYPE_P(ret) == IS_UNDEF)) {
+               return _get_zval_cv_lookup_BP_VAR_UNSET(var TSRMLS_CC);
+       } else if (UNEXPECTED(Z_TYPE_P(ret) == IS_REFERENCE)) {
+               ret = Z_REFVAL_P(ret);
+       }
+       return ret;
+}
+
 static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_IS(const zend_execute_data *execute_data, zend_uint var TSRMLS_DC)
 {
        zval *ret = EX_VAR_NUM(var);
@@ -331,6 +387,18 @@ static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_IS(const zend_execute_da
        return ret;
 }
 
+static zend_always_inline zval *_get_zval_ptr_cv_deref_BP_VAR_IS(const zend_execute_data *execute_data, zend_uint var TSRMLS_DC)
+{
+       zval *ret = EX_VAR_NUM(var);
+
+       if (UNEXPECTED(Z_TYPE_P(ret) == IS_UNDEF)) {
+               return _get_zval_cv_lookup_BP_VAR_IS(var TSRMLS_CC);
+       } else if (UNEXPECTED(Z_TYPE_P(ret) == IS_REFERENCE)) {
+               ret = Z_REFVAL_P(ret);
+       }
+       return ret;
+}
+
 static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_RW(const zend_execute_data *execute_data, zend_uint var TSRMLS_DC)
 {
        zval *ret = EX_VAR_NUM(var);
@@ -341,6 +409,18 @@ static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_RW(const zend_execute_da
        return ret;
 }
 
+static zend_always_inline zval *_get_zval_ptr_cv_deref_BP_VAR_RW(const zend_execute_data *execute_data, zend_uint var TSRMLS_DC)
+{
+       zval *ret = EX_VAR_NUM(var);
+
+       if (UNEXPECTED(Z_TYPE_P(ret) == IS_UNDEF)) {
+               return _get_zval_cv_lookup_BP_VAR_RW(var TSRMLS_CC);
+       } else if (UNEXPECTED(Z_TYPE_P(ret) == IS_REFERENCE)) {
+               ret = Z_REFVAL_P(ret);
+       }
+       return ret;
+}
+
 static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_W(const zend_execute_data *execute_data, zend_uint var TSRMLS_DC)
 {
        zval *ret = EX_VAR_NUM(var);
@@ -351,6 +431,18 @@ static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_W(const zend_execute_dat
        return ret;
 }
 
+static zend_always_inline zval *_get_zval_ptr_cv_deref_BP_VAR_W(const zend_execute_data *execute_data, zend_uint var TSRMLS_DC)
+{
+       zval *ret = EX_VAR_NUM(var);
+
+       if (UNEXPECTED(Z_TYPE_P(ret) == IS_UNDEF)) {
+               return _get_zval_cv_lookup_BP_VAR_W(var TSRMLS_CC);
+       } else if (UNEXPECTED(Z_TYPE_P(ret) == IS_REFERENCE)) {
+               ret = Z_REFVAL_P(ret);
+       }
+       return ret;
+}
+
 static inline zval *_get_zval_ptr(int op_type, const znode_op *node, const zend_execute_data *execute_data, zend_free_op *should_free, int type TSRMLS_DC)
 {
 /*     should_free->is_var = 0; */
@@ -379,6 +471,34 @@ static inline zval *_get_zval_ptr(int op_type, const znode_op *node, const zend_
        return NULL;
 }
 
+static inline zval *_get_zval_ptr_deref(int op_type, const znode_op *node, const zend_execute_data *execute_data, zend_free_op *should_free, int type TSRMLS_DC)
+{
+/*     should_free->is_var = 0; */
+       switch (op_type) {
+               case IS_CONST:
+                       should_free->var = 0;
+                       return node->zv;
+                       break;
+               case IS_TMP_VAR:
+                       should_free->var = TMP_FREE(EX_VAR(node->var));
+                       return EX_VAR(node->var);
+                       break;
+               case IS_VAR:
+                       return _get_zval_ptr_var_deref(node->var, execute_data, should_free TSRMLS_CC);
+                       break;
+               case IS_UNUSED:
+                       should_free->var = 0;
+                       return NULL;
+                       break;
+               case IS_CV:
+                       should_free->var = 0;
+                       return _get_zval_ptr_cv_deref(node->var, type TSRMLS_CC);
+                       break;
+               EMPTY_SWITCH_DEFAULT_CASE()
+       }
+       return NULL;
+}
+
 //???
 #if 0
 static zend_always_inline zval **_get_zval_ptr_ptr_var(zend_uint var, const zend_execute_data *execute_data, zend_free_op *should_free TSRMLS_DC)
index 14bb99906e6f51dd43a1e2adfafce0b0bde14471..169831c41fffa3ddca52b1a7db3cd9b2e4799918 100644 (file)
@@ -80,9 +80,9 @@ static zend_always_inline void i_zval_ptr_dtor(zval *zval_ptr ZEND_FILE_LINE_DC
                } else {
                        if (Z_REFCOUNT_P(zval_ptr) == 1 && Z_TYPE_P(zval_ptr) == IS_REFERENCE) {
                                /* convert reference to regular value */
-                               zend_reference *ref = Z_REF_P(zval_ptr);
-                               ZVAL_COPY_VALUE(zval_ptr, &ref->val);
-                               efree_rel(ref);
+//???                          zend_reference *ref = Z_REF_P(zval_ptr);
+//???                          ZVAL_COPY_VALUE(zval_ptr, &ref->val);
+//???                          efree_rel(ref);
                        }
                        GC_ZVAL_CHECK_POSSIBLE_ROOT(zval_ptr);
                }
@@ -99,9 +99,9 @@ static zend_always_inline void i_zval_ptr_dtor_nogc(zval *zval_ptr ZEND_FILE_LIN
                } else {
                        if (Z_REFCOUNT_P(zval_ptr) == 1 && Z_TYPE_P(zval_ptr) == IS_REFERENCE) {
                                /* convert reference to regular value */
-                               zend_reference *ref = Z_REF_P(zval_ptr);
-                               ZVAL_COPY_VALUE(zval_ptr, &ref->val);
-                               efree_rel(ref);
+//???                          zend_reference *ref = Z_REF_P(zval_ptr);
+//???                          ZVAL_COPY_VALUE(zval_ptr, &ref->val);
+//???                          efree_rel(ref);
                        }
                }
        }
@@ -188,7 +188,7 @@ struct _zend_vm_stack {
        } while (0)
 
 static zend_always_inline zend_vm_stack zend_vm_stack_new_page(int count) {
-       zend_vm_stack page = (zend_vm_stack)emalloc(ZEND_MM_ALIGNED_SIZE(sizeof(*page)) + sizeof(void*) * count);
+       zend_vm_stack page = (zend_vm_stack)emalloc(ZEND_MM_ALIGNED_SIZE(sizeof(*page)) + sizeof(zval) * count);
 
        page->top = ZEND_VM_STACK_ELEMETS(page);
        page->end = page->top + count;
index 79d946d145c27d344bf00064d02659e010de9171..509e6b8ed68cdb8edf93b4ff825435317ea44807 100644 (file)
@@ -434,9 +434,9 @@ ZEND_API void _zval_internal_ptr_dtor(zval *zval_ptr ZEND_FILE_LINE_DC) /* {{{ *
                        _zval_internal_dtor_for_ptr(zval_ptr ZEND_FILE_LINE_CC);
                } else if (Z_REFCOUNT_P(zval_ptr) == 1) {               
                        if (Z_ISREF_P(zval_ptr)) {
-                               zend_reference *ref = Z_REF_P(zval_ptr);
-                               ZVAL_COPY_VALUE(zval_ptr, Z_REFVAL_P(zval_ptr));
-                               efree(ref);
+//???                          zend_reference *ref = Z_REF_P(zval_ptr);
+//???                          ZVAL_COPY_VALUE(zval_ptr, Z_REFVAL_P(zval_ptr));
+//???                          efree(ref);
                        }
                }
        }
index c3ec0349da18a279b211416db55def715eeb05c8..e1dd96c569594cdcf8e09260ddd16a82c6b6c106 100644 (file)
@@ -267,7 +267,7 @@ ZEND_API zval *_zend_hash_add_or_update(HashTable *ht, zend_string *key, zval *p
                if (ht->pDestructor) {
                        ht->pDestructor(&p->val);
                }
-               p->val = *pData;
+               ZVAL_COPY_VALUE(&p->val, pData);
                HANDLE_UNBLOCK_INTERRUPTIONS();
                return &p->val;
        }
@@ -284,7 +284,7 @@ ZEND_API zval *_zend_hash_add_or_update(HashTable *ht, zend_string *key, zval *p
        p->h = h;
        p->key = key;
        STR_ADDREF(key);
-       p->val = *pData;
+       ZVAL_COPY_VALUE(&p->val, pData);
        nIndex = h & ht->nTableMask;
        p->val.u.next = ht->arHash[nIndex];
        ht->arHash[nIndex] = idx;
@@ -342,7 +342,7 @@ ZEND_API zval *_zend_hash_index_update_or_next_insert(HashTable *ht, ulong h, zv
                                if (ht->pDestructor) {
                                        ht->pDestructor(&p->val);
                                }
-                               p->val = *pData;
+                               ZVAL_COPY_VALUE(&p->val, pData);
                                HANDLE_UNBLOCK_INTERRUPTIONS();
                                if ((long)h >= (long)ht->nNextFreeElement) {
                                        ht->nNextFreeElement = h < LONG_MAX ? h + 1 : LONG_MAX;
@@ -373,7 +373,7 @@ new_packed:
                        p = ht->arData + h;
                        p->h = h;
                        p->key = NULL;
-                       p->val = *pData;
+                       ZVAL_COPY_VALUE(&p->val, pData);
                        p->val.u.next = INVALID_IDX;
 
                        HANDLE_UNBLOCK_INTERRUPTIONS();
@@ -395,7 +395,7 @@ convert_to_hash:
                if (ht->pDestructor) {
                        ht->pDestructor(&p->val);
                }
-               p->val = *pData;
+               ZVAL_COPY_VALUE(&p->val, pData);
                HANDLE_UNBLOCK_INTERRUPTIONS();
                if ((long)h >= (long)ht->nNextFreeElement) {
                        ht->nNextFreeElement = h < LONG_MAX ? h + 1 : LONG_MAX;
@@ -418,7 +418,7 @@ convert_to_hash:
        p->h = h;
        p->key = NULL;
        nIndex = h & ht->nTableMask;
-       p->val = *pData;
+       ZVAL_COPY_VALUE(&p->val, pData);
        p->val.u.next = ht->arHash[nIndex];
        ht->arHash[nIndex] = idx;
        HANDLE_UNBLOCK_INTERRUPTIONS();
index 78b7c8efef0fc7e9f9f76cf702e1bcd3037dbe6a..c648f83ad8247557701c0f7f163cbe110a955c11 100644 (file)
@@ -1567,7 +1567,7 @@ yyc_ST_BACKQUOTE:
 yy56:
                YYDEBUG(56, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2192 "Zend/zend_language_scanner.l"
+#line 2193 "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 2136 "Zend/zend_language_scanner.l"
+#line 2137 "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 2123 "Zend/zend_language_scanner.l"
+#line 2124 "Zend/zend_language_scanner.l"
                {
        Z_LVAL_P(zendlval) = (long) '{';
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
@@ -1787,7 +1787,7 @@ yy77:
 yy78:
                YYDEBUG(78, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2142 "Zend/zend_language_scanner.l"
+#line 2143 "Zend/zend_language_scanner.l"
                {
        if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) {
                YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1;
@@ -1847,7 +1847,7 @@ yy80:
                ++YYCURSOR;
                YYDEBUG(81, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2131 "Zend/zend_language_scanner.l"
+#line 2132 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_IN_SCRIPTING);
        return '"';
@@ -1862,7 +1862,7 @@ yy83:
                ++YYCURSOR;
                YYDEBUG(84, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2123 "Zend/zend_language_scanner.l"
+#line 2124 "Zend/zend_language_scanner.l"
                {
        Z_LVAL_P(zendlval) = (long) '{';
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
@@ -1958,7 +1958,7 @@ yyc_ST_END_HEREDOC:
        ++YYCURSOR;
        YYDEBUG(100, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
-#line 2109 "Zend/zend_language_scanner.l"
+#line 2110 "Zend/zend_language_scanner.l"
        {
        zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack));
 
@@ -2033,7 +2033,7 @@ yy103:
 yy104:
                YYDEBUG(104, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2234 "Zend/zend_language_scanner.l"
+#line 2235 "Zend/zend_language_scanner.l"
                {
        int newline = 0;
 
@@ -2121,7 +2121,7 @@ yy107:
                ++YYCURSOR;
                YYDEBUG(108, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2123 "Zend/zend_language_scanner.l"
+#line 2124 "Zend/zend_language_scanner.l"
                {
        Z_LVAL_P(zendlval) = (long) '{';
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
@@ -3031,7 +3031,7 @@ yy178:
 yy179:
                YYDEBUG(179, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1946 "Zend/zend_language_scanner.l"
+#line 1947 "Zend/zend_language_scanner.l"
                {
        register char *s, *t;
        char *end;
@@ -3104,7 +3104,7 @@ yy180:
 yy181:
                YYDEBUG(181, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2013 "Zend/zend_language_scanner.l"
+#line 2014 "Zend/zend_language_scanner.l"
                {
        int bprefix = (yytext[0] != '"') ? 1 : 0;
 
@@ -3151,7 +3151,7 @@ yy182:
                ++YYCURSOR;
                YYDEBUG(183, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2103 "Zend/zend_language_scanner.l"
+#line 2104 "Zend/zend_language_scanner.l"
                {
        BEGIN(ST_BACKQUOTE);
        return '`';
@@ -3162,7 +3162,7 @@ yy184:
                ++YYCURSOR;
                YYDEBUG(185, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2365 "Zend/zend_language_scanner.l"
+#line 2366 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@ -3366,11 +3366,12 @@ yy207:
                yyleng = YYCURSOR - SCNG(yy_text);
 #line 1927 "Zend/zend_language_scanner.l"
                {
-       ZVAL_STRINGL(zendlval, yytext, yyleng);
+//???  ZVAL_STRINGL(zendlval, yytext, yyleng);
+       ZVAL_STR(zendlval, STR_EMPTY_ALLOC()); /* tricky way to no copying - intentional */ 
        BEGIN(INITIAL);
        return T_CLOSE_TAG;  /* implicit ';' at php-end tag */
 }
-#line 3374 "Zend/zend_language_scanner.c"
+#line 3375 "Zend/zend_language_scanner.c"
 yy208:
                YYDEBUG(208, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3409,7 +3410,7 @@ yy212:
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        return T_VARIABLE;
 }
-#line 3413 "Zend/zend_language_scanner.c"
+#line 3414 "Zend/zend_language_scanner.c"
 yy213:
                YYDEBUG(213, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3427,7 +3428,7 @@ yy214:
                {
        return T_LOGICAL_XOR;
 }
-#line 3431 "Zend/zend_language_scanner.c"
+#line 3432 "Zend/zend_language_scanner.c"
 yy216:
                YYDEBUG(216, *YYCURSOR);
                ++YYCURSOR;
@@ -3440,7 +3441,7 @@ yy216:
                {
        return T_LOGICAL_OR;
 }
-#line 3444 "Zend/zend_language_scanner.c"
+#line 3445 "Zend/zend_language_scanner.c"
 yy218:
                YYDEBUG(218, *YYCURSOR);
                ++YYCURSOR;
@@ -3450,7 +3451,7 @@ yy218:
                {
        return T_XOR_EQUAL;
 }
-#line 3454 "Zend/zend_language_scanner.c"
+#line 3455 "Zend/zend_language_scanner.c"
 yy220:
                YYDEBUG(220, *YYCURSOR);
                ++YYCURSOR;
@@ -3460,7 +3461,7 @@ yy220:
                {
        return T_BOOLEAN_OR;
 }
-#line 3464 "Zend/zend_language_scanner.c"
+#line 3465 "Zend/zend_language_scanner.c"
 yy222:
                YYDEBUG(222, *YYCURSOR);
                ++YYCURSOR;
@@ -3470,7 +3471,7 @@ yy222:
                {
        return T_OR_EQUAL;
 }
-#line 3474 "Zend/zend_language_scanner.c"
+#line 3475 "Zend/zend_language_scanner.c"
 yy224:
                YYDEBUG(224, *YYCURSOR);
                ++YYCURSOR;
@@ -3480,7 +3481,7 @@ yy224:
                {
        return T_BOOLEAN_AND;
 }
-#line 3484 "Zend/zend_language_scanner.c"
+#line 3485 "Zend/zend_language_scanner.c"
 yy226:
                YYDEBUG(226, *YYCURSOR);
                ++YYCURSOR;
@@ -3490,7 +3491,7 @@ yy226:
                {
        return T_AND_EQUAL;
 }
-#line 3494 "Zend/zend_language_scanner.c"
+#line 3495 "Zend/zend_language_scanner.c"
 yy228:
                YYDEBUG(228, *YYCURSOR);
                ++YYCURSOR;
@@ -3499,7 +3500,7 @@ yy228:
 yy229:
                YYDEBUG(229, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 1934 "Zend/zend_language_scanner.l"
+#line 1935 "Zend/zend_language_scanner.l"
                {
        if (CG(asp_tags)) {
                BEGIN(INITIAL);
@@ -3510,7 +3511,7 @@ yy229:
                return yytext[0];
        }
 }
-#line 3514 "Zend/zend_language_scanner.c"
+#line 3515 "Zend/zend_language_scanner.c"
 yy230:
                YYDEBUG(230, *YYCURSOR);
                ++YYCURSOR;
@@ -3520,7 +3521,7 @@ yy230:
                {
        return T_MOD_EQUAL;
 }
-#line 3524 "Zend/zend_language_scanner.c"
+#line 3525 "Zend/zend_language_scanner.c"
 yy232:
                YYDEBUG(232, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3571,7 +3572,7 @@ yy235:
 
        return T_COMMENT;
 }
-#line 3575 "Zend/zend_language_scanner.c"
+#line 3576 "Zend/zend_language_scanner.c"
 yy236:
                YYDEBUG(236, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3585,7 +3586,7 @@ yy237:
                {
        return T_DIV_EQUAL;
 }
-#line 3589 "Zend/zend_language_scanner.c"
+#line 3590 "Zend/zend_language_scanner.c"
 yy239:
                YYDEBUG(239, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3612,7 +3613,7 @@ yy242:
                {
        return T_MUL_EQUAL;
 }
-#line 3616 "Zend/zend_language_scanner.c"
+#line 3617 "Zend/zend_language_scanner.c"
 yy244:
                YYDEBUG(244, *YYCURSOR);
                ++YYCURSOR;
@@ -3623,7 +3624,7 @@ yy244:
                {
        return T_SR;
 }
-#line 3627 "Zend/zend_language_scanner.c"
+#line 3628 "Zend/zend_language_scanner.c"
 yy246:
                YYDEBUG(246, *YYCURSOR);
                ++YYCURSOR;
@@ -3633,7 +3634,7 @@ yy246:
                {
        return T_IS_GREATER_OR_EQUAL;
 }
-#line 3637 "Zend/zend_language_scanner.c"
+#line 3638 "Zend/zend_language_scanner.c"
 yy248:
                YYDEBUG(248, *YYCURSOR);
                ++YYCURSOR;
@@ -3643,7 +3644,7 @@ yy248:
                {
        return T_SR_EQUAL;
 }
-#line 3647 "Zend/zend_language_scanner.c"
+#line 3648 "Zend/zend_language_scanner.c"
 yy250:
                YYDEBUG(250, *YYCURSOR);
                yyaccept = 5;
@@ -3658,7 +3659,7 @@ yy251:
                {
        return T_SL;
 }
-#line 3662 "Zend/zend_language_scanner.c"
+#line 3663 "Zend/zend_language_scanner.c"
 yy252:
                YYDEBUG(252, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3674,7 +3675,7 @@ yy253:
                {
        return T_IS_SMALLER_OR_EQUAL;
 }
-#line 3678 "Zend/zend_language_scanner.c"
+#line 3679 "Zend/zend_language_scanner.c"
 yy255:
                YYDEBUG(255, *YYCURSOR);
                ++YYCURSOR;
@@ -3685,7 +3686,7 @@ yy256:
                {
        return T_IS_NOT_EQUAL;
 }
-#line 3689 "Zend/zend_language_scanner.c"
+#line 3690 "Zend/zend_language_scanner.c"
 yy257:
                YYDEBUG(257, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3740,7 +3741,7 @@ yy264:
                {
        return T_SL_EQUAL;
 }
-#line 3744 "Zend/zend_language_scanner.c"
+#line 3745 "Zend/zend_language_scanner.c"
 yy266:
                YYDEBUG(266, *YYCURSOR);
                ++YYCURSOR;
@@ -3845,7 +3846,7 @@ yy275:
 yy276:
                YYDEBUG(276, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2055 "Zend/zend_language_scanner.l"
+#line 2056 "Zend/zend_language_scanner.l"
                {
        char *s;
        int bprefix = (yytext[0] != '<') ? 1 : 0;
@@ -3892,7 +3893,7 @@ yy276:
 
        return T_START_HEREDOC;
 }
-#line 3896 "Zend/zend_language_scanner.c"
+#line 3897 "Zend/zend_language_scanner.c"
 yy277:
                YYDEBUG(277, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3936,7 +3937,7 @@ yy280:
                {
        return T_IS_NOT_IDENTICAL;
 }
-#line 3940 "Zend/zend_language_scanner.c"
+#line 3941 "Zend/zend_language_scanner.c"
 yy283:
                YYDEBUG(283, *YYCURSOR);
                ++YYCURSOR;
@@ -3946,7 +3947,7 @@ yy283:
                {
        return T_PLUS_EQUAL;
 }
-#line 3950 "Zend/zend_language_scanner.c"
+#line 3951 "Zend/zend_language_scanner.c"
 yy285:
                YYDEBUG(285, *YYCURSOR);
                ++YYCURSOR;
@@ -3956,7 +3957,7 @@ yy285:
                {
        return T_INC;
 }
-#line 3960 "Zend/zend_language_scanner.c"
+#line 3961 "Zend/zend_language_scanner.c"
 yy287:
                YYDEBUG(287, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -3979,7 +3980,7 @@ yy289:
                {
        return T_LIST;
 }
-#line 3983 "Zend/zend_language_scanner.c"
+#line 3984 "Zend/zend_language_scanner.c"
 yy291:
                YYDEBUG(291, *YYCURSOR);
                ++YYCURSOR;
@@ -3990,7 +3991,7 @@ yy291:
                {
        return T_IS_EQUAL;
 }
-#line 3994 "Zend/zend_language_scanner.c"
+#line 3995 "Zend/zend_language_scanner.c"
 yy293:
                YYDEBUG(293, *YYCURSOR);
                ++YYCURSOR;
@@ -4000,7 +4001,7 @@ yy293:
                {
        return T_DOUBLE_ARROW;
 }
-#line 4004 "Zend/zend_language_scanner.c"
+#line 4005 "Zend/zend_language_scanner.c"
 yy295:
                YYDEBUG(295, *YYCURSOR);
                ++YYCURSOR;
@@ -4010,7 +4011,7 @@ yy295:
                {
        return T_IS_IDENTICAL;
 }
-#line 4014 "Zend/zend_language_scanner.c"
+#line 4015 "Zend/zend_language_scanner.c"
 yy297:
                YYDEBUG(297, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4149,7 +4150,7 @@ yy313:
        }
        return T_NS_C;
 }
-#line 4153 "Zend/zend_language_scanner.c"
+#line 4154 "Zend/zend_language_scanner.c"
 yy317:
                YYDEBUG(317, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4194,7 +4195,7 @@ yy318:
        ZVAL_STR(zendlval, dirname);
        return T_DIR;
 }
-#line 4198 "Zend/zend_language_scanner.c"
+#line 4199 "Zend/zend_language_scanner.c"
 yy322:
                YYDEBUG(322, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4224,7 +4225,7 @@ yy324:
        ZVAL_LONG(zendlval, CG(zend_lineno));
        return T_LINE;
 }
-#line 4228 "Zend/zend_language_scanner.c"
+#line 4229 "Zend/zend_language_scanner.c"
 yy328:
                YYDEBUG(328, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4272,7 +4273,7 @@ yy332:
        zendlval->type = IS_STRING;
        return T_METHOD_C;
 }
-#line 4276 "Zend/zend_language_scanner.c"
+#line 4277 "Zend/zend_language_scanner.c"
 yy336:
                YYDEBUG(336, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4334,7 +4335,7 @@ yy343:
        }
        return T_FUNC_C;
 }
-#line 4338 "Zend/zend_language_scanner.c"
+#line 4339 "Zend/zend_language_scanner.c"
 yy347:
                YYDEBUG(347, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4364,7 +4365,7 @@ yy348:
        ZVAL_STR(zendlval, filename);
        return T_FILE;
 }
-#line 4368 "Zend/zend_language_scanner.c"
+#line 4369 "Zend/zend_language_scanner.c"
 yy352:
                YYDEBUG(352, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4405,7 +4406,7 @@ yy355:
        }
        return T_TRAIT_C;
 }
-#line 4409 "Zend/zend_language_scanner.c"
+#line 4410 "Zend/zend_language_scanner.c"
 yy359:
                YYDEBUG(359, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4453,7 +4454,7 @@ yy362:
        }
        return T_CLASS_C;
 }
-#line 4457 "Zend/zend_language_scanner.c"
+#line 4458 "Zend/zend_language_scanner.c"
 yy366:
                YYDEBUG(366, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4519,7 +4520,7 @@ yy377:
                {
        return T_HALT_COMPILER;
 }
-#line 4523 "Zend/zend_language_scanner.c"
+#line 4524 "Zend/zend_language_scanner.c"
 yy379:
                YYDEBUG(379, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4543,7 +4544,7 @@ yy381:
                {
        return T_USE;
 }
-#line 4547 "Zend/zend_language_scanner.c"
+#line 4548 "Zend/zend_language_scanner.c"
 yy383:
                YYDEBUG(383, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4566,7 +4567,7 @@ yy385:
                {
        return T_UNSET;
 }
-#line 4570 "Zend/zend_language_scanner.c"
+#line 4571 "Zend/zend_language_scanner.c"
 yy387:
                YYDEBUG(387, *YYCURSOR);
                ++YYCURSOR;
@@ -4742,7 +4743,7 @@ yy402:
                {
        return T_INT_CAST;
 }
-#line 4746 "Zend/zend_language_scanner.c"
+#line 4747 "Zend/zend_language_scanner.c"
 yy405:
                YYDEBUG(405, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4790,7 +4791,7 @@ yy410:
                {
        return T_DOUBLE_CAST;
 }
-#line 4794 "Zend/zend_language_scanner.c"
+#line 4795 "Zend/zend_language_scanner.c"
 yy414:
                YYDEBUG(414, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4864,7 +4865,7 @@ yy424:
                {
        return T_STRING_CAST;
 }
-#line 4868 "Zend/zend_language_scanner.c"
+#line 4869 "Zend/zend_language_scanner.c"
 yy428:
                YYDEBUG(428, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4901,7 +4902,7 @@ yy431:
                {
        return T_ARRAY_CAST;
 }
-#line 4905 "Zend/zend_language_scanner.c"
+#line 4906 "Zend/zend_language_scanner.c"
 yy435:
                YYDEBUG(435, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4943,7 +4944,7 @@ yy439:
                {
        return T_OBJECT_CAST;
 }
-#line 4947 "Zend/zend_language_scanner.c"
+#line 4948 "Zend/zend_language_scanner.c"
 yy443:
                YYDEBUG(443, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -4988,7 +4989,7 @@ yy448:
                {
        return T_BOOL_CAST;
 }
-#line 4992 "Zend/zend_language_scanner.c"
+#line 4993 "Zend/zend_language_scanner.c"
 yy451:
                YYDEBUG(451, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5052,7 +5053,7 @@ yy459:
                {
        return T_UNSET_CAST;
 }
-#line 5056 "Zend/zend_language_scanner.c"
+#line 5057 "Zend/zend_language_scanner.c"
 yy463:
                YYDEBUG(463, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5070,7 +5071,7 @@ yy464:
                {
        return T_VAR;
 }
-#line 5074 "Zend/zend_language_scanner.c"
+#line 5075 "Zend/zend_language_scanner.c"
 yy466:
                YYDEBUG(466, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5094,7 +5095,7 @@ yy468:
                {
        return T_NEW;
 }
-#line 5098 "Zend/zend_language_scanner.c"
+#line 5099 "Zend/zend_language_scanner.c"
 yy470:
                YYDEBUG(470, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5137,7 +5138,7 @@ yy476:
                {
        return T_NAMESPACE;
 }
-#line 5141 "Zend/zend_language_scanner.c"
+#line 5142 "Zend/zend_language_scanner.c"
 yy478:
                YYDEBUG(478, *YYCURSOR);
                yyaccept = 3;
@@ -5163,7 +5164,7 @@ yy480:
                {
        return T_CONCAT_EQUAL;
 }
-#line 5167 "Zend/zend_language_scanner.c"
+#line 5168 "Zend/zend_language_scanner.c"
 yy482:
                YYDEBUG(482, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5176,7 +5177,7 @@ yy482:
                {
        return T_ELLIPSIS;
 }
-#line 5180 "Zend/zend_language_scanner.c"
+#line 5181 "Zend/zend_language_scanner.c"
 yy485:
                YYDEBUG(485, *YYCURSOR);
                ++YYCURSOR;
@@ -5186,7 +5187,7 @@ yy485:
                {
        return T_PAAMAYIM_NEKUDOTAYIM;
 }
-#line 5190 "Zend/zend_language_scanner.c"
+#line 5191 "Zend/zend_language_scanner.c"
 yy487:
                YYDEBUG(487, *YYCURSOR);
                ++YYCURSOR;
@@ -5212,7 +5213,7 @@ yy489:
                {
        return T_MINUS_EQUAL;
 }
-#line 5216 "Zend/zend_language_scanner.c"
+#line 5217 "Zend/zend_language_scanner.c"
 yy491:
                YYDEBUG(491, *YYCURSOR);
                ++YYCURSOR;
@@ -5222,7 +5223,7 @@ yy491:
                {
        return T_DEC;
 }
-#line 5226 "Zend/zend_language_scanner.c"
+#line 5227 "Zend/zend_language_scanner.c"
 yy493:
                YYDEBUG(493, *YYCURSOR);
                ++YYCURSOR;
@@ -5233,7 +5234,7 @@ yy493:
        yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
        return T_OBJECT_OPERATOR;
 }
-#line 5237 "Zend/zend_language_scanner.c"
+#line 5238 "Zend/zend_language_scanner.c"
 yy495:
                YYDEBUG(495, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5282,7 +5283,7 @@ yy500:
                {
        return T_PUBLIC;
 }
-#line 5286 "Zend/zend_language_scanner.c"
+#line 5287 "Zend/zend_language_scanner.c"
 yy502:
                YYDEBUG(502, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5341,7 +5342,7 @@ yy509:
                {
        return T_PROTECTED;
 }
-#line 5345 "Zend/zend_language_scanner.c"
+#line 5346 "Zend/zend_language_scanner.c"
 yy511:
                YYDEBUG(511, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5375,7 +5376,7 @@ yy515:
                {
        return T_PRIVATE;
 }
-#line 5379 "Zend/zend_language_scanner.c"
+#line 5380 "Zend/zend_language_scanner.c"
 yy517:
                YYDEBUG(517, *YYCURSOR);
                ++YYCURSOR;
@@ -5388,7 +5389,7 @@ yy517:
                {
        return T_PRINT;
 }
-#line 5392 "Zend/zend_language_scanner.c"
+#line 5393 "Zend/zend_language_scanner.c"
 yy519:
                YYDEBUG(519, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5417,7 +5418,7 @@ yy522:
                {
        return T_GOTO;
 }
-#line 5421 "Zend/zend_language_scanner.c"
+#line 5422 "Zend/zend_language_scanner.c"
 yy524:
                YYDEBUG(524, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5445,7 +5446,7 @@ yy527:
                {
        return T_GLOBAL;
 }
-#line 5449 "Zend/zend_language_scanner.c"
+#line 5450 "Zend/zend_language_scanner.c"
 yy529:
                YYDEBUG(529, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5486,7 +5487,7 @@ yy535:
                {
        return T_BREAK;
 }
-#line 5490 "Zend/zend_language_scanner.c"
+#line 5491 "Zend/zend_language_scanner.c"
 yy537:
                YYDEBUG(537, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5530,7 +5531,7 @@ yy543:
                {
        return T_SWITCH;
 }
-#line 5534 "Zend/zend_language_scanner.c"
+#line 5535 "Zend/zend_language_scanner.c"
 yy545:
                YYDEBUG(545, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5558,7 +5559,7 @@ yy548:
                {
        return T_STATIC;
 }
-#line 5562 "Zend/zend_language_scanner.c"
+#line 5563 "Zend/zend_language_scanner.c"
 yy550:
                YYDEBUG(550, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5589,7 +5590,7 @@ yy553:
                {
        return T_AS;
 }
-#line 5593 "Zend/zend_language_scanner.c"
+#line 5594 "Zend/zend_language_scanner.c"
 yy555:
                YYDEBUG(555, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5612,7 +5613,7 @@ yy557:
                {
        return T_ARRAY;
 }
-#line 5616 "Zend/zend_language_scanner.c"
+#line 5617 "Zend/zend_language_scanner.c"
 yy559:
                YYDEBUG(559, *YYCURSOR);
                ++YYCURSOR;
@@ -5625,7 +5626,7 @@ yy559:
                {
        return T_LOGICAL_AND;
 }
-#line 5629 "Zend/zend_language_scanner.c"
+#line 5630 "Zend/zend_language_scanner.c"
 yy561:
                YYDEBUG(561, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5663,7 +5664,7 @@ yy566:
                {
        return T_ABSTRACT;
 }
-#line 5667 "Zend/zend_language_scanner.c"
+#line 5668 "Zend/zend_language_scanner.c"
 yy568:
                YYDEBUG(568, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5691,7 +5692,7 @@ yy571:
                {
        return T_WHILE;
 }
-#line 5695 "Zend/zend_language_scanner.c"
+#line 5696 "Zend/zend_language_scanner.c"
 yy573:
                YYDEBUG(573, *YYCURSOR);
                ++YYCURSOR;
@@ -5704,7 +5705,7 @@ yy573:
                {
        return T_IF;
 }
-#line 5708 "Zend/zend_language_scanner.c"
+#line 5709 "Zend/zend_language_scanner.c"
 yy575:
                YYDEBUG(575, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5760,7 +5761,7 @@ yy580:
                {
        return T_ISSET;
 }
-#line 5764 "Zend/zend_language_scanner.c"
+#line 5765 "Zend/zend_language_scanner.c"
 yy582:
                YYDEBUG(582, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5818,7 +5819,7 @@ yy589:
                {
        return T_INCLUDE;
 }
-#line 5822 "Zend/zend_language_scanner.c"
+#line 5823 "Zend/zend_language_scanner.c"
 yy590:
                YYDEBUG(590, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5851,7 +5852,7 @@ yy594:
                {
        return T_INCLUDE_ONCE;
 }
-#line 5855 "Zend/zend_language_scanner.c"
+#line 5856 "Zend/zend_language_scanner.c"
 yy596:
                YYDEBUG(596, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5889,7 +5890,7 @@ yy601:
                {
        return T_INTERFACE;
 }
-#line 5893 "Zend/zend_language_scanner.c"
+#line 5894 "Zend/zend_language_scanner.c"
 yy603:
                YYDEBUG(603, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5943,7 +5944,7 @@ yy609:
                {
         return T_INSTEADOF;
 }
-#line 5947 "Zend/zend_language_scanner.c"
+#line 5948 "Zend/zend_language_scanner.c"
 yy611:
                YYDEBUG(611, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -5976,7 +5977,7 @@ yy615:
                {
        return T_INSTANCEOF;
 }
-#line 5980 "Zend/zend_language_scanner.c"
+#line 5981 "Zend/zend_language_scanner.c"
 yy617:
                YYDEBUG(617, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6024,7 +6025,7 @@ yy624:
                {
        return T_IMPLEMENTS;
 }
-#line 6028 "Zend/zend_language_scanner.c"
+#line 6029 "Zend/zend_language_scanner.c"
 yy626:
                YYDEBUG(626, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6056,7 +6057,7 @@ yy627:
                {
        return T_TRY;
 }
-#line 6060 "Zend/zend_language_scanner.c"
+#line 6061 "Zend/zend_language_scanner.c"
 yy630:
                YYDEBUG(630, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6079,7 +6080,7 @@ yy632:
                {
        return T_TRAIT;
 }
-#line 6083 "Zend/zend_language_scanner.c"
+#line 6084 "Zend/zend_language_scanner.c"
 yy634:
                YYDEBUG(634, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6102,7 +6103,7 @@ yy636:
                {
        return T_THROW;
 }
-#line 6106 "Zend/zend_language_scanner.c"
+#line 6107 "Zend/zend_language_scanner.c"
 yy638:
                YYDEBUG(638, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6130,7 +6131,7 @@ yy641:
                {
        return T_YIELD;
 }
-#line 6134 "Zend/zend_language_scanner.c"
+#line 6135 "Zend/zend_language_scanner.c"
 yy643:
                YYDEBUG(643, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6195,7 +6196,7 @@ yy650:
                {
        return T_REQUIRE;
 }
-#line 6199 "Zend/zend_language_scanner.c"
+#line 6200 "Zend/zend_language_scanner.c"
 yy651:
                YYDEBUG(651, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6228,7 +6229,7 @@ yy655:
                {
        return T_REQUIRE_ONCE;
 }
-#line 6232 "Zend/zend_language_scanner.c"
+#line 6233 "Zend/zend_language_scanner.c"
 yy657:
                YYDEBUG(657, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6251,7 +6252,7 @@ yy659:
                {
        return T_RETURN;
 }
-#line 6255 "Zend/zend_language_scanner.c"
+#line 6256 "Zend/zend_language_scanner.c"
 yy661:
                YYDEBUG(661, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6345,7 +6346,7 @@ yy670:
                {
        return T_CONTINUE;
 }
-#line 6349 "Zend/zend_language_scanner.c"
+#line 6350 "Zend/zend_language_scanner.c"
 yy672:
                YYDEBUG(672, *YYCURSOR);
                ++YYCURSOR;
@@ -6358,7 +6359,7 @@ yy672:
                {
        return T_CONST;
 }
-#line 6362 "Zend/zend_language_scanner.c"
+#line 6363 "Zend/zend_language_scanner.c"
 yy674:
                YYDEBUG(674, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6387,7 +6388,7 @@ yy677:
                {
        return T_CLONE;
 }
-#line 6391 "Zend/zend_language_scanner.c"
+#line 6392 "Zend/zend_language_scanner.c"
 yy679:
                YYDEBUG(679, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6405,7 +6406,7 @@ yy680:
                {
        return T_CLASS;
 }
-#line 6409 "Zend/zend_language_scanner.c"
+#line 6410 "Zend/zend_language_scanner.c"
 yy682:
                YYDEBUG(682, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6455,7 +6456,7 @@ yy689:
                {
  return T_CALLABLE;
 }
-#line 6459 "Zend/zend_language_scanner.c"
+#line 6460 "Zend/zend_language_scanner.c"
 yy691:
                YYDEBUG(691, *YYCURSOR);
                ++YYCURSOR;
@@ -6468,7 +6469,7 @@ yy691:
                {
        return T_CASE;
 }
-#line 6472 "Zend/zend_language_scanner.c"
+#line 6473 "Zend/zend_language_scanner.c"
 yy693:
                YYDEBUG(693, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6486,7 +6487,7 @@ yy694:
                {
        return T_CATCH;
 }
-#line 6490 "Zend/zend_language_scanner.c"
+#line 6491 "Zend/zend_language_scanner.c"
 yy696:
                YYDEBUG(696, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6541,7 +6542,7 @@ yy704:
                {
        return T_FUNCTION;
 }
-#line 6545 "Zend/zend_language_scanner.c"
+#line 6546 "Zend/zend_language_scanner.c"
 yy706:
                YYDEBUG(706, *YYCURSOR);
                ++YYCURSOR;
@@ -6569,7 +6570,7 @@ yy707:
                {
        return T_FOR;
 }
-#line 6573 "Zend/zend_language_scanner.c"
+#line 6574 "Zend/zend_language_scanner.c"
 yy708:
                YYDEBUG(708, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6597,7 +6598,7 @@ yy711:
                {
        return T_FOREACH;
 }
-#line 6601 "Zend/zend_language_scanner.c"
+#line 6602 "Zend/zend_language_scanner.c"
 yy713:
                YYDEBUG(713, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6635,7 +6636,7 @@ yy716:
                {
        return T_FINAL;
 }
-#line 6639 "Zend/zend_language_scanner.c"
+#line 6640 "Zend/zend_language_scanner.c"
 yy717:
                YYDEBUG(717, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6653,7 +6654,7 @@ yy718:
                {
        return T_FINALLY;
 }
-#line 6657 "Zend/zend_language_scanner.c"
+#line 6658 "Zend/zend_language_scanner.c"
 yy720:
                YYDEBUG(720, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6688,7 +6689,7 @@ yy722:
                {
        return T_DO;
 }
-#line 6692 "Zend/zend_language_scanner.c"
+#line 6693 "Zend/zend_language_scanner.c"
 yy724:
                YYDEBUG(724, *YYCURSOR);
                ++YYCURSOR;
@@ -6701,7 +6702,7 @@ yy724:
                {
        return T_EXIT;
 }
-#line 6705 "Zend/zend_language_scanner.c"
+#line 6706 "Zend/zend_language_scanner.c"
 yy726:
                YYDEBUG(726, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6740,7 +6741,7 @@ yy731:
                {
        return T_DEFAULT;
 }
-#line 6744 "Zend/zend_language_scanner.c"
+#line 6745 "Zend/zend_language_scanner.c"
 yy733:
                YYDEBUG(733, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6768,7 +6769,7 @@ yy736:
                {
        return T_DECLARE;
 }
-#line 6772 "Zend/zend_language_scanner.c"
+#line 6773 "Zend/zend_language_scanner.c"
 yy738:
                YYDEBUG(738, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6852,7 +6853,7 @@ yy749:
                {
        return T_EXTENDS;
 }
-#line 6856 "Zend/zend_language_scanner.c"
+#line 6857 "Zend/zend_language_scanner.c"
 yy751:
                YYDEBUG(751, *YYCURSOR);
                ++YYCURSOR;
@@ -6865,7 +6866,7 @@ yy751:
                {
        return T_EXIT;
 }
-#line 6869 "Zend/zend_language_scanner.c"
+#line 6870 "Zend/zend_language_scanner.c"
 yy753:
                YYDEBUG(753, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6883,7 +6884,7 @@ yy754:
                {
        return T_EVAL;
 }
-#line 6887 "Zend/zend_language_scanner.c"
+#line 6888 "Zend/zend_language_scanner.c"
 yy756:
                YYDEBUG(756, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6957,7 +6958,7 @@ yy765:
                {
        return T_ENDWHILE;
 }
-#line 6961 "Zend/zend_language_scanner.c"
+#line 6962 "Zend/zend_language_scanner.c"
 yy767:
                YYDEBUG(767, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -6990,7 +6991,7 @@ yy771:
                {
        return T_ENDSWITCH;
 }
-#line 6994 "Zend/zend_language_scanner.c"
+#line 6995 "Zend/zend_language_scanner.c"
 yy773:
                YYDEBUG(773, *YYCURSOR);
                ++YYCURSOR;
@@ -7003,7 +7004,7 @@ yy773:
                {
        return T_ENDIF;
 }
-#line 7007 "Zend/zend_language_scanner.c"
+#line 7008 "Zend/zend_language_scanner.c"
 yy775:
                YYDEBUG(775, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7036,7 +7037,7 @@ yy777:
                {
        return T_ENDFOR;
 }
-#line 7040 "Zend/zend_language_scanner.c"
+#line 7041 "Zend/zend_language_scanner.c"
 yy778:
                YYDEBUG(778, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7064,7 +7065,7 @@ yy781:
                {
        return T_ENDFOREACH;
 }
-#line 7068 "Zend/zend_language_scanner.c"
+#line 7069 "Zend/zend_language_scanner.c"
 yy783:
                YYDEBUG(783, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7102,7 +7103,7 @@ yy788:
                {
        return T_ENDDECLARE;
 }
-#line 7106 "Zend/zend_language_scanner.c"
+#line 7107 "Zend/zend_language_scanner.c"
 yy790:
                YYDEBUG(790, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7125,7 +7126,7 @@ yy792:
                {
        return T_EMPTY;
 }
-#line 7129 "Zend/zend_language_scanner.c"
+#line 7130 "Zend/zend_language_scanner.c"
 yy794:
                YYDEBUG(794, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7158,7 +7159,7 @@ yy796:
                {
        return T_ELSE;
 }
-#line 7162 "Zend/zend_language_scanner.c"
+#line 7163 "Zend/zend_language_scanner.c"
 yy797:
                YYDEBUG(797, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7176,7 +7177,7 @@ yy798:
                {
        return T_ELSEIF;
 }
-#line 7180 "Zend/zend_language_scanner.c"
+#line 7181 "Zend/zend_language_scanner.c"
 yy800:
                YYDEBUG(800, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7194,7 +7195,7 @@ yy801:
                {
        return T_ECHO;
 }
-#line 7198 "Zend/zend_language_scanner.c"
+#line 7199 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_LOOKING_FOR_PROPERTY:
@@ -7274,7 +7275,7 @@ yy806:
        HANDLE_NEWLINES(yytext, yyleng);
        return T_WHITESPACE;
 }
-#line 7278 "Zend/zend_language_scanner.c"
+#line 7279 "Zend/zend_language_scanner.c"
 yy807:
                YYDEBUG(807, *YYCURSOR);
                ++YYCURSOR;
@@ -7288,7 +7289,7 @@ yy808:
        yy_pop_state(TSRMLS_C);
        goto restart;
 }
-#line 7292 "Zend/zend_language_scanner.c"
+#line 7293 "Zend/zend_language_scanner.c"
 yy809:
                YYDEBUG(809, *YYCURSOR);
                ++YYCURSOR;
@@ -7303,7 +7304,7 @@ yy810:
        zend_copy_value(zendlval, yytext, yyleng);
        return T_STRING;
 }
-#line 7307 "Zend/zend_language_scanner.c"
+#line 7308 "Zend/zend_language_scanner.c"
 yy811:
                YYDEBUG(811, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7328,7 +7329,7 @@ yy814:
                {
        return T_OBJECT_OPERATOR;
 }
-#line 7332 "Zend/zend_language_scanner.c"
+#line 7333 "Zend/zend_language_scanner.c"
 yy816:
                YYDEBUG(816, *YYCURSOR);
                ++YYCURSOR;
@@ -7420,7 +7421,7 @@ yy821:
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        goto restart;
 }
-#line 7424 "Zend/zend_language_scanner.c"
+#line 7425 "Zend/zend_language_scanner.c"
 yy822:
                YYDEBUG(822, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7453,7 +7454,7 @@ yy826:
        yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
        return T_STRING_VARNAME;
 }
-#line 7457 "Zend/zend_language_scanner.c"
+#line 7458 "Zend/zend_language_scanner.c"
        }
 /* *********************************** */
 yyc_ST_NOWDOC:
@@ -7464,7 +7465,7 @@ yyc_ST_NOWDOC:
        ++YYCURSOR;
        YYDEBUG(831, *YYCURSOR);
        yyleng = YYCURSOR - SCNG(yy_text);
-#line 2308 "Zend/zend_language_scanner.l"
+#line 2309 "Zend/zend_language_scanner.l"
        {
        int newline = 0;
 
@@ -7520,7 +7521,7 @@ nowdoc_scan_done:
        HANDLE_NEWLINES(yytext, yyleng - newline);
        return T_ENCAPSED_AND_WHITESPACE;
 }
-#line 7524 "Zend/zend_language_scanner.c"
+#line 7525 "Zend/zend_language_scanner.c"
 /* *********************************** */
 yyc_ST_VAR_OFFSET:
        {
@@ -7636,7 +7637,7 @@ yy835:
        }
        return T_NUM_STRING;
 }
-#line 7640 "Zend/zend_language_scanner.c"
+#line 7641 "Zend/zend_language_scanner.c"
 yy836:
                YYDEBUG(836, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7661,7 +7662,7 @@ yy838:
        /* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */
        return yytext[0];
 }
-#line 7665 "Zend/zend_language_scanner.c"
+#line 7666 "Zend/zend_language_scanner.c"
 yy839:
                YYDEBUG(839, *YYCURSOR);
                ++YYCURSOR;
@@ -7672,7 +7673,7 @@ yy839:
        yy_pop_state(TSRMLS_C);
        return ']';
 }
-#line 7676 "Zend/zend_language_scanner.c"
+#line 7677 "Zend/zend_language_scanner.c"
 yy841:
                YYDEBUG(841, *YYCURSOR);
                yych = *++YYCURSOR;
@@ -7689,7 +7690,7 @@ yy842:
        yy_pop_state(TSRMLS_C);
        return T_ENCAPSED_AND_WHITESPACE;
 }
-#line 7693 "Zend/zend_language_scanner.c"
+#line 7694 "Zend/zend_language_scanner.c"
 yy844:
                YYDEBUG(844, *YYCURSOR);
                ++YYCURSOR;
@@ -7703,13 +7704,13 @@ yy845:
        zend_copy_value(zendlval, yytext, yyleng);
        return T_STRING;
 }
-#line 7707 "Zend/zend_language_scanner.c"
+#line 7708 "Zend/zend_language_scanner.c"
 yy846:
                YYDEBUG(846, *YYCURSOR);
                ++YYCURSOR;
                YYDEBUG(847, *YYCURSOR);
                yyleng = YYCURSOR - SCNG(yy_text);
-#line 2365 "Zend/zend_language_scanner.l"
+#line 2366 "Zend/zend_language_scanner.l"
                {
        if (YYCURSOR > YYLIMIT) {
                return 0;
@@ -7718,7 +7719,7 @@ yy846:
        zend_error(E_COMPILE_WARNING,"Unexpected character in input:  '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
        goto restart;
 }
-#line 7722 "Zend/zend_language_scanner.c"
+#line 7723 "Zend/zend_language_scanner.c"
 yy848:
                YYDEBUG(848, *YYCURSOR);
                ++YYCURSOR;
@@ -7759,7 +7760,7 @@ yy852:
        zend_copy_value(zendlval, (yytext+1), (yyleng-1));
        return T_VARIABLE;
 }
-#line 7763 "Zend/zend_language_scanner.c"
+#line 7764 "Zend/zend_language_scanner.c"
 yy853:
                YYDEBUG(853, *YYCURSOR);
                ++YYCURSOR;
@@ -7804,7 +7805,7 @@ yy860:
        ZVAL_STRINGL(zendlval, yytext, yyleng);
        return T_NUM_STRING;
 }
-#line 7808 "Zend/zend_language_scanner.c"
+#line 7809 "Zend/zend_language_scanner.c"
 yy861:
                YYDEBUG(861, *YYCURSOR);
                ++YYCURSOR;
@@ -7827,6 +7828,6 @@ yy863:
                goto yy860;
        }
 }
-#line 2374 "Zend/zend_language_scanner.l"
+#line 2375 "Zend/zend_language_scanner.l"
 
 }
index abe6826321bf613958fdbfa4dec5826ff0251974..7648eafb95fccd27c8eb0eedbc731b67400cc273 100644 (file)
@@ -1925,7 +1925,8 @@ inline_html:
 }
 
 <ST_IN_SCRIPTING>("?>"|"</script"{WHITESPACE}*">"){NEWLINE}? {
-       ZVAL_STRINGL(zendlval, yytext, yyleng);
+//???  ZVAL_STRINGL(zendlval, yytext, yyleng);
+       ZVAL_STR(zendlval, STR_EMPTY_ALLOC()); /* tricky way to no copying - intentional */ 
        BEGIN(INITIAL);
        return T_CLOSE_TAG;  /* implicit ';' at php-end tag */
 }
index 5a61c1bea0a49c1be567afab08222ad81eb7e4a3..4c44c0ee8466563a905e88c30d19d6c57bffb25b 100644 (file)
@@ -1302,7 +1302,7 @@ ZEND_API int shift_right_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
 ZEND_API int add_char_to_string(zval *result, const zval *op1, const zval *op2) /* {{{ */
 {
        int length = Z_STRLEN_P(op1) + 1;
-       zend_string *buf = STR_REALLOC(Z_STR_P(op1), length + 1, 0);
+       zend_string *buf = STR_REALLOC(Z_STR_P(op1), length, 0);
 
        buf->val[length - 1] = (char) Z_LVAL_P(op2);
        buf->val[length] = 0;
@@ -1314,10 +1314,11 @@ ZEND_API int add_char_to_string(zval *result, const zval *op1, const zval *op2)
 /* must support result==op1 */
 ZEND_API int add_string_to_string(zval *result, const zval *op1, const zval *op2) /* {{{ */
 {
-       int length = Z_STRLEN_P(op1) + Z_STRLEN_P(op2);
-       zend_string *buf = STR_REALLOC(Z_STR_P(op1), length + 1, 0);
+       int op1_len = Z_STRLEN_P(op1);
+       int length = op1_len + Z_STRLEN_P(op2);
+       zend_string *buf = STR_REALLOC(Z_STR_P(op1), length, 0);
 
-       memcpy(buf->val + Z_STRLEN_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op2));
+       memcpy(buf->val + op1_len, Z_STRVAL_P(op2), Z_STRLEN_P(op2));
        buf->val[length] = 0;
        ZVAL_STR(result, buf);
        return SUCCESS;
@@ -1353,16 +1354,17 @@ ZEND_API int concat_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{
                op2 = &op2_copy;
        }
        if (result==op1 && !IS_INTERNED(Z_STR_P(op1))) {        /* special case, perform operations on result */
-               uint res_len = Z_STRLEN_P(op1) + Z_STRLEN_P(op2);
+               uint op1_len = Z_STRLEN_P(op1);
+               uint res_len = op1_len + Z_STRLEN_P(op2);
 
                if (Z_STRLEN_P(result) < 0 || (int) (Z_STRLEN_P(op1) + Z_STRLEN_P(op2)) < 0) {
                        ZVAL_EMPTY_STRING(result);
                        zend_error(E_ERROR, "String size overflow");
                }
 
-               Z_STR_P(result) = STR_REALLOC(Z_STR_P(result), res_len+1, 0 );
+               Z_STR_P(result) = STR_REALLOC(Z_STR_P(result), res_len, 0 );
 
-               memcpy(Z_STRVAL_P(result)+Z_STRLEN_P(result), Z_STRVAL_P(op2), Z_STRLEN_P(op2));
+               memcpy(Z_STRVAL_P(result) + op1_len, Z_STRVAL_P(op2), Z_STRLEN_P(op2));
                Z_STRVAL_P(result)[res_len]=0;
        } else {
                int length = Z_STRLEN_P(op1) + Z_STRLEN_P(op2);
index b9fc79ff3502133dfba5cbcc46230319c9ed3a23..90415ba47ee0ccd7dfb01bfdcb4fee0e0b907e97 100644 (file)
@@ -68,6 +68,12 @@ ZEND_API void _zval_dtor_func(zval *zvalue ZEND_FILE_LINE_DC)
                                }
                        }
                        break;
+               case IS_REFERENCE:
+                       if (Z_DELREF_P(zvalue) == 0) {
+                               zval_dtor(Z_REFVAL_P(zvalue));
+                               efree(Z_REF_P(zvalue));
+                       }
+                       break;
                case IS_LONG:
                case IS_DOUBLE:
                case IS_BOOL:
@@ -117,6 +123,10 @@ ZEND_API void _zval_dtor_func_for_ptr(zval *zvalue ZEND_FILE_LINE_DC)
                                zend_list_delete(Z_RES_P(zvalue));
                        }
                        break;
+               case IS_REFERENCE:
+                       zval_dtor(Z_REFVAL_P(zvalue));
+                       efree(Z_REF_P(zvalue));
+                       break;
                case IS_LONG:
                case IS_DOUBLE:
                case IS_BOOL:
index 9dc9f91d16096a890f1e0e4a422d54534b7d105e..04c57366f13e63ecbd3a239c2c6cdf3dd1b32e5e 100644 (file)
@@ -32,8 +32,8 @@ ZEND_VM_HANDLER(1, ZEND_ADD, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
 
        SAVE_OPLINE();
        fast_add_function(EX_VAR(opline->result.var),
-               GET_OP1_ZVAL_PTR(BP_VAR_R),
-               GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC);
+               GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R),
+               GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC);
        FREE_OP1();
        FREE_OP2();
        CHECK_EXCEPTION();
@@ -47,8 +47,8 @@ ZEND_VM_HANDLER(2, ZEND_SUB, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
 
        SAVE_OPLINE();
        fast_sub_function(EX_VAR(opline->result.var),
-               GET_OP1_ZVAL_PTR(BP_VAR_R),
-               GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC);
+               GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R),
+               GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC);
        FREE_OP1();
        FREE_OP2();
        CHECK_EXCEPTION();
@@ -62,8 +62,8 @@ ZEND_VM_HANDLER(3, ZEND_MUL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
 
        SAVE_OPLINE();
        fast_mul_function(EX_VAR(opline->result.var),
-               GET_OP1_ZVAL_PTR(BP_VAR_R),
-               GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC);
+               GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R),
+               GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC);
        FREE_OP1();
        FREE_OP2();
        CHECK_EXCEPTION();
@@ -77,8 +77,8 @@ ZEND_VM_HANDLER(4, ZEND_DIV, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
 
        SAVE_OPLINE();
        fast_div_function(EX_VAR(opline->result.var),
-               GET_OP1_ZVAL_PTR(BP_VAR_R),
-               GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC);
+               GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R),
+               GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC);
        FREE_OP1();
        FREE_OP2();
        CHECK_EXCEPTION();
@@ -92,8 +92,8 @@ ZEND_VM_HANDLER(5, ZEND_MOD, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
 
        SAVE_OPLINE();
        fast_mod_function(EX_VAR(opline->result.var),
-               GET_OP1_ZVAL_PTR(BP_VAR_R),
-               GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC);
+               GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R),
+               GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC);
        FREE_OP1();
        FREE_OP2();
        CHECK_EXCEPTION();
@@ -107,8 +107,8 @@ ZEND_VM_HANDLER(6, ZEND_SL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
 
        SAVE_OPLINE();
        shift_left_function(EX_VAR(opline->result.var),
-               GET_OP1_ZVAL_PTR(BP_VAR_R),
-               GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC);
+               GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R),
+               GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC);
        FREE_OP1();
        FREE_OP2();
        CHECK_EXCEPTION();
@@ -122,8 +122,8 @@ ZEND_VM_HANDLER(7, ZEND_SR, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
 
        SAVE_OPLINE();
        shift_right_function(EX_VAR(opline->result.var),
-               GET_OP1_ZVAL_PTR(BP_VAR_R),
-               GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC);
+               GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R),
+               GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC);
        FREE_OP1();
        FREE_OP2();
        CHECK_EXCEPTION();
@@ -137,8 +137,8 @@ ZEND_VM_HANDLER(8, ZEND_CONCAT, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
 
        SAVE_OPLINE();
        concat_function(EX_VAR(opline->result.var),
-               GET_OP1_ZVAL_PTR(BP_VAR_R),
-               GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC);
+               GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R),
+               GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC);
        FREE_OP1();
        FREE_OP2();
        CHECK_EXCEPTION();
@@ -152,8 +152,8 @@ ZEND_VM_HANDLER(15, ZEND_IS_IDENTICAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
 
        SAVE_OPLINE();
        is_identical_function(EX_VAR(opline->result.var),
-               GET_OP1_ZVAL_PTR(BP_VAR_R),
-               GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC);
+               GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R),
+               GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC);
        FREE_OP1();
        FREE_OP2();
        CHECK_EXCEPTION();
@@ -168,8 +168,8 @@ ZEND_VM_HANDLER(16, ZEND_IS_NOT_IDENTICAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
 
        SAVE_OPLINE();
        is_identical_function(result,
-               GET_OP1_ZVAL_PTR(BP_VAR_R),
-               GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC);
+               GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R),
+               GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC);
        Z_LVAL_P(result) = !Z_LVAL_P(result);
        FREE_OP1();
        FREE_OP2();
@@ -185,8 +185,8 @@ ZEND_VM_HANDLER(17, ZEND_IS_EQUAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_equal_function(result,
-               GET_OP1_ZVAL_PTR(BP_VAR_R),
-               GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC));
+               GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R),
+               GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC));
        FREE_OP1();
        FREE_OP2();
        CHECK_EXCEPTION();
@@ -201,8 +201,8 @@ ZEND_VM_HANDLER(18, ZEND_IS_NOT_EQUAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_not_equal_function(result,
-               GET_OP1_ZVAL_PTR(BP_VAR_R),
-               GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC));
+               GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R),
+               GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC));
        FREE_OP1();
        FREE_OP2();
        CHECK_EXCEPTION();
@@ -217,8 +217,8 @@ ZEND_VM_HANDLER(19, ZEND_IS_SMALLER, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_function(result,
-               GET_OP1_ZVAL_PTR(BP_VAR_R),
-               GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC));
+               GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R),
+               GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC));
        FREE_OP1();
        FREE_OP2();
        CHECK_EXCEPTION();
@@ -233,8 +233,8 @@ ZEND_VM_HANDLER(20, ZEND_IS_SMALLER_OR_EQUAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
-               GET_OP1_ZVAL_PTR(BP_VAR_R),
-               GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC));
+               GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R),
+               GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC));
        FREE_OP1();
        FREE_OP2();
        CHECK_EXCEPTION();
@@ -248,8 +248,8 @@ ZEND_VM_HANDLER(9, ZEND_BW_OR, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
 
        SAVE_OPLINE();
        bitwise_or_function(EX_VAR(opline->result.var),
-               GET_OP1_ZVAL_PTR(BP_VAR_R),
-               GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC);
+               GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R),
+               GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC);
        FREE_OP1();
        FREE_OP2();
        CHECK_EXCEPTION();
@@ -263,8 +263,8 @@ ZEND_VM_HANDLER(10, ZEND_BW_AND, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
 
        SAVE_OPLINE();
        bitwise_and_function(EX_VAR(opline->result.var),
-               GET_OP1_ZVAL_PTR(BP_VAR_R),
-               GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC);
+               GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R),
+               GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC);
        FREE_OP1();
        FREE_OP2();
        CHECK_EXCEPTION();
@@ -278,8 +278,8 @@ ZEND_VM_HANDLER(11, ZEND_BW_XOR, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
 
        SAVE_OPLINE();
        bitwise_xor_function(EX_VAR(opline->result.var),
-               GET_OP1_ZVAL_PTR(BP_VAR_R),
-               GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC);
+               GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R),
+               GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC);
        FREE_OP1();
        FREE_OP2();
        CHECK_EXCEPTION();
@@ -293,8 +293,8 @@ ZEND_VM_HANDLER(14, ZEND_BOOL_XOR, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
 
        SAVE_OPLINE();
        boolean_xor_function(EX_VAR(opline->result.var),
-               GET_OP1_ZVAL_PTR(BP_VAR_R),
-               GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC);
+               GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R),
+               GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC);
        FREE_OP1();
        FREE_OP2();
        CHECK_EXCEPTION();
@@ -308,7 +308,7 @@ ZEND_VM_HANDLER(12, ZEND_BW_NOT, CONST|TMP|VAR|CV, ANY)
 
        SAVE_OPLINE();
        bitwise_not_function(EX_VAR(opline->result.var),
-               GET_OP1_ZVAL_PTR(BP_VAR_R) TSRMLS_CC);
+               GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC);
        FREE_OP1();
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -321,7 +321,7 @@ ZEND_VM_HANDLER(13, ZEND_BOOL_NOT, CONST|TMP|VAR|CV, ANY)
 
        SAVE_OPLINE();
        boolean_not_function(EX_VAR(opline->result.var),
-               GET_OP1_ZVAL_PTR(BP_VAR_R) TSRMLS_CC);
+               GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R) TSRMLS_CC);
        FREE_OP1();
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -495,8 +495,9 @@ ZEND_VM_HELPER_EX(zend_binary_assign_op_helper, VAR|UNUSED|CV, CONST|TMP|VAR|UNU
                Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                zval_ptr_dtor(objval);
        } else {
-               if (Z_ISREF_P(var_ptr)) {
-                       var_ptr = Z_REFVAL_P(var_ptr);
+//???deref
+           if (Z_ISREF_P(var_ptr)) {
+               var_ptr = Z_REFVAL_P(var_ptr);
                }
                binary_op(var_ptr, var_ptr, value TSRMLS_CC);
        }
@@ -1062,7 +1063,8 @@ ZEND_VM_HELPER_EX(zend_fetch_var_address_helper, CONST|TMP|VAR|CV, UNUSED|CONST|
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
-       ZVAL_COPY(EX_VAR(opline->result.var), retval);
+//     ZVAL_COPY(EX_VAR(opline->result.var), retval);
+       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
 //???  switch (type) {
 //???          case BP_VAR_R:
 //???          case BP_VAR_IS:
@@ -2028,7 +2030,7 @@ ZEND_VM_HANDLER(43, ZEND_JMPZ, CONST|TMP|VAR|CV, ANY)
        int ret;
 
        SAVE_OPLINE();
-       val = GET_OP1_ZVAL_PTR(BP_VAR_R);
+       val = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
 
        if (OP1_TYPE == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
                ret = Z_LVAL_P(val);
@@ -2058,7 +2060,7 @@ ZEND_VM_HANDLER(44, ZEND_JMPNZ, CONST|TMP|VAR|CV, ANY)
        int ret;
 
        SAVE_OPLINE();
-       val = GET_OP1_ZVAL_PTR(BP_VAR_R);
+       val = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
 
        if (OP1_TYPE == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
                ret = Z_LVAL_P(val);
@@ -2088,7 +2090,7 @@ ZEND_VM_HANDLER(45, ZEND_JMPZNZ, CONST|TMP|VAR|CV, ANY)
        int retval;
 
        SAVE_OPLINE();
-       val = GET_OP1_ZVAL_PTR(BP_VAR_R);
+       val = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
 
        if (OP1_TYPE == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
                retval = Z_LVAL_P(val);
@@ -2122,7 +2124,7 @@ ZEND_VM_HANDLER(46, ZEND_JMPZ_EX, CONST|TMP|VAR|CV, ANY)
        int retval;
 
        SAVE_OPLINE();
-       val = GET_OP1_ZVAL_PTR(BP_VAR_R);
+       val = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
 
        if (OP1_TYPE == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
                retval = Z_LVAL_P(val);
@@ -2152,7 +2154,7 @@ ZEND_VM_HANDLER(47, ZEND_JMPNZ_EX, CONST|TMP|VAR|CV, ANY)
        int retval;
 
        SAVE_OPLINE();
-       val = GET_OP1_ZVAL_PTR(BP_VAR_R);
+       val = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
 
        if (OP1_TYPE == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
                retval = Z_LVAL_P(val);
index 5420c8e418bb3f0e6334980ab5a426096241bba0..edcd3c9bb4cc3771ecebde3f1627efa4877af8a6 100644 (file)
@@ -3583,7 +3583,8 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_CONST(int type
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
-       ZVAL_COPY(EX_VAR(opline->result.var), retval);
+//     ZVAL_COPY(EX_VAR(opline->result.var), retval);
+       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
 //???  switch (type) {
 //???          case BP_VAR_R:
 //???          case BP_VAR_IS:
@@ -4967,7 +4968,7 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
        SAVE_OPLINE();
        fast_add_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -4982,7 +4983,7 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
        SAVE_OPLINE();
        fast_sub_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -4997,7 +4998,7 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
        SAVE_OPLINE();
        fast_mul_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -5012,7 +5013,7 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
        SAVE_OPLINE();
        fast_div_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -5027,7 +5028,7 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
        SAVE_OPLINE();
        fast_mod_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -5042,7 +5043,7 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
        SAVE_OPLINE();
        shift_left_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -5057,7 +5058,7 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
        SAVE_OPLINE();
        shift_right_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -5072,7 +5073,7 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER
        SAVE_OPLINE();
        concat_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -5087,7 +5088,7 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_H
        SAVE_OPLINE();
        is_identical_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -5103,7 +5104,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCO
        SAVE_OPLINE();
        is_identical_function(result,
                opline->op1.zv,
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        Z_LVAL_P(result) = !Z_LVAL_P(result);
 
        zval_ptr_dtor_nogc(free_op2.var);
@@ -5120,7 +5121,7 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDL
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_equal_function(result,
                opline->op1.zv,
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -5136,7 +5137,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_H
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_not_equal_function(result,
                opline->op1.zv,
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -5152,7 +5153,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HAN
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_function(result,
                opline->op1.zv,
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -5168,7 +5169,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_VAR_HANDLER(ZEND_O
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                opline->op1.zv,
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -5183,7 +5184,7 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_
        SAVE_OPLINE();
        bitwise_or_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -5198,7 +5199,7 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER
        SAVE_OPLINE();
        bitwise_and_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -5213,7 +5214,7 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER
        SAVE_OPLINE();
        bitwise_xor_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -5228,7 +5229,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDL
        SAVE_OPLINE();
        boolean_xor_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -5329,7 +5330,8 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_VAR(int type,
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
-       ZVAL_COPY(EX_VAR(opline->result.var), retval);
+//     ZVAL_COPY(EX_VAR(opline->result.var), retval);
+       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
 //???  switch (type) {
 //???          case BP_VAR_R:
 //???          case BP_VAR_IS:
@@ -6008,7 +6010,8 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int typ
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
-       ZVAL_COPY(EX_VAR(opline->result.var), retval);
+//     ZVAL_COPY(EX_VAR(opline->result.var), retval);
+       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
 //???  switch (type) {
 //???          case BP_VAR_R:
 //???          case BP_VAR_IS:
@@ -6586,7 +6589,7 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG
        SAVE_OPLINE();
        fast_add_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -6601,7 +6604,7 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG
        SAVE_OPLINE();
        fast_sub_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -6616,7 +6619,7 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG
        SAVE_OPLINE();
        fast_mul_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -6631,7 +6634,7 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG
        SAVE_OPLINE();
        fast_div_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -6646,7 +6649,7 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG
        SAVE_OPLINE();
        fast_mod_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -6661,7 +6664,7 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        SAVE_OPLINE();
        shift_left_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -6676,7 +6679,7 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        SAVE_OPLINE();
        shift_right_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -6691,7 +6694,7 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_
        SAVE_OPLINE();
        concat_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -6706,7 +6709,7 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HA
        SAVE_OPLINE();
        is_identical_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -6722,7 +6725,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CV_HANDLER(ZEND_OPCOD
        SAVE_OPLINE();
        is_identical_function(result,
                opline->op1.zv,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        Z_LVAL_P(result) = !Z_LVAL_P(result);
 
 
@@ -6739,7 +6742,7 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLE
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_equal_function(result,
                opline->op1.zv,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
 
 
        CHECK_EXCEPTION();
@@ -6755,7 +6758,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HA
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_not_equal_function(result,
                opline->op1.zv,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
 
 
        CHECK_EXCEPTION();
@@ -6771,7 +6774,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HAND
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_function(result,
                opline->op1.zv,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
 
 
        CHECK_EXCEPTION();
@@ -6787,7 +6790,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OP
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                opline->op1.zv,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
 
 
        CHECK_EXCEPTION();
@@ -6802,7 +6805,7 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_A
        SAVE_OPLINE();
        bitwise_or_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -6817,7 +6820,7 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_
        SAVE_OPLINE();
        bitwise_and_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -6832,7 +6835,7 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_
        SAVE_OPLINE();
        bitwise_xor_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -6847,7 +6850,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLE
        SAVE_OPLINE();
        boolean_xor_function(EX_VAR(opline->result.var),
                opline->op1.zv,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -8599,7 +8602,8 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_CONST(int type,
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
-       ZVAL_COPY(EX_VAR(opline->result.var), retval);
+//     ZVAL_COPY(EX_VAR(opline->result.var), retval);
+       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
 //???  switch (type) {
 //???          case BP_VAR_R:
 //???          case BP_VAR_IS:
@@ -9859,7 +9863,7 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        SAVE_OPLINE();
        fast_add_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -9874,7 +9878,7 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        SAVE_OPLINE();
        fast_sub_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -9889,7 +9893,7 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        SAVE_OPLINE();
        fast_mul_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -9904,7 +9908,7 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        SAVE_OPLINE();
        fast_div_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -9919,7 +9923,7 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        SAVE_OPLINE();
        fast_mod_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -9934,7 +9938,7 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        SAVE_OPLINE();
        shift_left_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -9949,7 +9953,7 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        SAVE_OPLINE();
        shift_right_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -9964,7 +9968,7 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
        SAVE_OPLINE();
        concat_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -9979,7 +9983,7 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HAN
        SAVE_OPLINE();
        is_identical_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -9995,7 +9999,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE
        SAVE_OPLINE();
        is_identical_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        Z_LVAL_P(result) = !Z_LVAL_P(result);
        zval_dtor(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
@@ -10012,7 +10016,7 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_equal_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
        zval_dtor(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -10028,7 +10032,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HAN
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_not_equal_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
        zval_dtor(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -10044,7 +10048,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDL
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
        zval_dtor(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -10060,7 +10064,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_VAR_HANDLER(ZEND_OPC
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
        zval_dtor(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -10075,7 +10079,7 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
        SAVE_OPLINE();
        bitwise_or_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -10090,7 +10094,7 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
        SAVE_OPLINE();
        bitwise_and_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -10105,7 +10109,7 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
        SAVE_OPLINE();
        bitwise_xor_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -10120,7 +10124,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER
        SAVE_OPLINE();
        boolean_xor_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -10221,7 +10225,8 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_VAR(int type, ZE
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
-       ZVAL_COPY(EX_VAR(opline->result.var), retval);
+//     ZVAL_COPY(EX_VAR(opline->result.var), retval);
+       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
 //???  switch (type) {
 //???          case BP_VAR_R:
 //???          case BP_VAR_IS:
@@ -10903,7 +10908,8 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_UNUSED(int type,
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
-       ZVAL_COPY(EX_VAR(opline->result.var), retval);
+//     ZVAL_COPY(EX_VAR(opline->result.var), retval);
+       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
 //???  switch (type) {
 //???          case BP_VAR_R:
 //???          case BP_VAR_IS:
@@ -11352,7 +11358,7 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        SAVE_OPLINE();
        fast_add_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -11367,7 +11373,7 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        SAVE_OPLINE();
        fast_sub_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -11382,7 +11388,7 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        SAVE_OPLINE();
        fast_mul_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -11397,7 +11403,7 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        SAVE_OPLINE();
        fast_div_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -11412,7 +11418,7 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        SAVE_OPLINE();
        fast_mod_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -11427,7 +11433,7 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        SAVE_OPLINE();
        shift_left_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -11442,7 +11448,7 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        SAVE_OPLINE();
        shift_right_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -11457,7 +11463,7 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_AR
        SAVE_OPLINE();
        concat_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -11472,7 +11478,7 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HAND
        SAVE_OPLINE();
        is_identical_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -11488,7 +11494,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_
        SAVE_OPLINE();
        is_identical_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        Z_LVAL_P(result) = !Z_LVAL_P(result);
        zval_dtor(free_op1.var);
 
@@ -11505,7 +11511,7 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_equal_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
        zval_dtor(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -11521,7 +11527,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HAND
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_not_equal_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
        zval_dtor(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -11537,7 +11543,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLE
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
        zval_dtor(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -11553,7 +11559,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_CV_HANDLER(ZEND_OPCO
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
        zval_dtor(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -11568,7 +11574,7 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG
        SAVE_OPLINE();
        bitwise_or_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -11583,7 +11589,7 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_AR
        SAVE_OPLINE();
        bitwise_and_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -11598,7 +11604,7 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_AR
        SAVE_OPLINE();
        bitwise_xor_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -11613,7 +11619,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_
        SAVE_OPLINE();
        boolean_xor_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_dtor(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -11996,7 +12002,7 @@ static int ZEND_FASTCALL  ZEND_BW_NOT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        bitwise_not_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12009,7 +12015,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_NOT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
        SAVE_OPLINE();
        boolean_not_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12224,7 +12230,7 @@ static int ZEND_FASTCALL  ZEND_JMPZ_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        int ret;
 
        SAVE_OPLINE();
-       val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+       val = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 
        if (IS_VAR == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
                ret = Z_LVAL_P(val);
@@ -12254,7 +12260,7 @@ static int ZEND_FASTCALL  ZEND_JMPNZ_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        int ret;
 
        SAVE_OPLINE();
-       val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+       val = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 
        if (IS_VAR == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
                ret = Z_LVAL_P(val);
@@ -12284,7 +12290,7 @@ static int ZEND_FASTCALL  ZEND_JMPZNZ_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        int retval;
 
        SAVE_OPLINE();
-       val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+       val = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 
        if (IS_VAR == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
                retval = Z_LVAL_P(val);
@@ -12318,7 +12324,7 @@ static int ZEND_FASTCALL  ZEND_JMPZ_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        int retval;
 
        SAVE_OPLINE();
-       val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+       val = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 
        if (IS_VAR == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
                retval = Z_LVAL_P(val);
@@ -12348,7 +12354,7 @@ static int ZEND_FASTCALL  ZEND_JMPNZ_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
        int retval;
 
        SAVE_OPLINE();
-       val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+       val = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 
        if (IS_VAR == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
                retval = Z_LVAL_P(val);
@@ -13322,7 +13328,7 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        SAVE_OPLINE();
        fast_add_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
@@ -13337,7 +13343,7 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        SAVE_OPLINE();
        fast_sub_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
@@ -13352,7 +13358,7 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        SAVE_OPLINE();
        fast_mul_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
@@ -13367,7 +13373,7 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        SAVE_OPLINE();
        fast_div_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
@@ -13382,7 +13388,7 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        SAVE_OPLINE();
        fast_mod_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
@@ -13397,7 +13403,7 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
        SAVE_OPLINE();
        shift_left_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
@@ -13412,7 +13418,7 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
        SAVE_OPLINE();
        shift_right_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
@@ -13427,7 +13433,7 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER
 
        SAVE_OPLINE();
        concat_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
@@ -13442,7 +13448,7 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_H
 
        SAVE_OPLINE();
        is_identical_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
@@ -13458,7 +13464,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCO
 
        SAVE_OPLINE();
        is_identical_function(result,
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
        Z_LVAL_P(result) = !Z_LVAL_P(result);
        zval_ptr_dtor_nogc(free_op1.var);
@@ -13475,7 +13481,7 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDL
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_equal_function(result,
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC));
        zval_ptr_dtor_nogc(free_op1.var);
 
@@ -13491,7 +13497,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_H
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_not_equal_function(result,
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC));
        zval_ptr_dtor_nogc(free_op1.var);
 
@@ -13507,7 +13513,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HAN
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_function(result,
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC));
        zval_ptr_dtor_nogc(free_op1.var);
 
@@ -13523,7 +13529,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_CONST_HANDLER(ZEND_O
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC));
        zval_ptr_dtor_nogc(free_op1.var);
 
@@ -13538,7 +13544,7 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_
 
        SAVE_OPLINE();
        bitwise_or_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
@@ -13553,7 +13559,7 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER
 
        SAVE_OPLINE();
        bitwise_and_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
@@ -13568,7 +13574,7 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER
 
        SAVE_OPLINE();
        bitwise_xor_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
@@ -13583,7 +13589,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDL
 
        SAVE_OPLINE();
        boolean_xor_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
@@ -13759,8 +13765,9 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_CONST(int (*binar
                Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                zval_ptr_dtor(objval);
        } else {
-               if (Z_ISREF_P(var_ptr)) {
-                       var_ptr = Z_REFVAL_P(var_ptr);
+//???deref
+           if (Z_ISREF_P(var_ptr)) {
+               var_ptr = Z_REFVAL_P(var_ptr);
                }
                binary_op(var_ptr, var_ptr, value TSRMLS_CC);
        }
@@ -14124,7 +14131,8 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_CONST(int type,
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
-       ZVAL_COPY(EX_VAR(opline->result.var), retval);
+//     ZVAL_COPY(EX_VAR(opline->result.var), retval);
+       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
 //???  switch (type) {
 //???          case BP_VAR_R:
 //???          case BP_VAR_IS:
@@ -15684,7 +15692,7 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
 
        SAVE_OPLINE();
        fast_add_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_dtor(free_op2.var);
@@ -15699,7 +15707,7 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
 
        SAVE_OPLINE();
        fast_sub_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_dtor(free_op2.var);
@@ -15714,7 +15722,7 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
 
        SAVE_OPLINE();
        fast_mul_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_dtor(free_op2.var);
@@ -15729,7 +15737,7 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
 
        SAVE_OPLINE();
        fast_div_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_dtor(free_op2.var);
@@ -15744,7 +15752,7 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
 
        SAVE_OPLINE();
        fast_mod_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_dtor(free_op2.var);
@@ -15759,7 +15767,7 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        shift_left_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_dtor(free_op2.var);
@@ -15774,7 +15782,7 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        shift_right_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_dtor(free_op2.var);
@@ -15789,7 +15797,7 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
 
        SAVE_OPLINE();
        concat_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_dtor(free_op2.var);
@@ -15804,7 +15812,7 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAN
 
        SAVE_OPLINE();
        is_identical_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_dtor(free_op2.var);
@@ -15820,7 +15828,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE
 
        SAVE_OPLINE();
        is_identical_function(result,
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        Z_LVAL_P(result) = !Z_LVAL_P(result);
        zval_ptr_dtor_nogc(free_op1.var);
@@ -15837,7 +15845,7 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_equal_function(result,
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
        zval_ptr_dtor_nogc(free_op1.var);
        zval_dtor(free_op2.var);
@@ -15853,7 +15861,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAN
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_not_equal_function(result,
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
        zval_ptr_dtor_nogc(free_op1.var);
        zval_dtor(free_op2.var);
@@ -15869,7 +15877,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDL
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_function(result,
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
        zval_ptr_dtor_nogc(free_op1.var);
        zval_dtor(free_op2.var);
@@ -15885,7 +15893,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_TMP_HANDLER(ZEND_OPC
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
        zval_ptr_dtor_nogc(free_op1.var);
        zval_dtor(free_op2.var);
@@ -15900,7 +15908,7 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        SAVE_OPLINE();
        bitwise_or_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_dtor(free_op2.var);
@@ -15915,7 +15923,7 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
 
        SAVE_OPLINE();
        bitwise_and_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_dtor(free_op2.var);
@@ -15930,7 +15938,7 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
 
        SAVE_OPLINE();
        bitwise_xor_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_dtor(free_op2.var);
@@ -15945,7 +15953,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER
 
        SAVE_OPLINE();
        boolean_xor_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_dtor(free_op2.var);
@@ -16121,8 +16129,9 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_TMP(int (*binary_
                Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                zval_ptr_dtor(objval);
        } else {
-               if (Z_ISREF_P(var_ptr)) {
-                       var_ptr = Z_REFVAL_P(var_ptr);
+//???deref
+           if (Z_ISREF_P(var_ptr)) {
+               var_ptr = Z_REFVAL_P(var_ptr);
                }
                binary_op(var_ptr, var_ptr, value TSRMLS_CC);
        }
@@ -17648,8 +17657,8 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
 
        SAVE_OPLINE();
        fast_add_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -17663,8 +17672,8 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
 
        SAVE_OPLINE();
        fast_sub_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -17678,8 +17687,8 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
 
        SAVE_OPLINE();
        fast_mul_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -17693,8 +17702,8 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
 
        SAVE_OPLINE();
        fast_div_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -17708,8 +17717,8 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
 
        SAVE_OPLINE();
        fast_mod_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -17723,8 +17732,8 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        shift_left_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -17738,8 +17747,8 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        shift_right_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -17753,8 +17762,8 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
 
        SAVE_OPLINE();
        concat_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -17768,8 +17777,8 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HAN
 
        SAVE_OPLINE();
        is_identical_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -17784,8 +17793,8 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE
 
        SAVE_OPLINE();
        is_identical_function(result,
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        Z_LVAL_P(result) = !Z_LVAL_P(result);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
@@ -17801,8 +17810,8 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_equal_function(result,
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
        zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -17817,8 +17826,8 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HAN
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_not_equal_function(result,
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
        zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -17833,8 +17842,8 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDL
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_function(result,
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
        zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -17849,8 +17858,8 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_VAR_HANDLER(ZEND_OPC
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
        zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -17864,8 +17873,8 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        SAVE_OPLINE();
        bitwise_or_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -17879,8 +17888,8 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
 
        SAVE_OPLINE();
        bitwise_and_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -17894,8 +17903,8 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
 
        SAVE_OPLINE();
        bitwise_xor_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -17909,8 +17918,8 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER
 
        SAVE_OPLINE();
        boolean_xor_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -18085,8 +18094,9 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_VAR(int (*binary_
                Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                zval_ptr_dtor(objval);
        } else {
-               if (Z_ISREF_P(var_ptr)) {
-                       var_ptr = Z_REFVAL_P(var_ptr);
+//???deref
+           if (Z_ISREF_P(var_ptr)) {
+               var_ptr = Z_REFVAL_P(var_ptr);
                }
                binary_op(var_ptr, var_ptr, value TSRMLS_CC);
        }
@@ -18451,7 +18461,8 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_VAR(int type, ZE
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
-       ZVAL_COPY(EX_VAR(opline->result.var), retval);
+//     ZVAL_COPY(EX_VAR(opline->result.var), retval);
+       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
 //???  switch (type) {
 //???          case BP_VAR_R:
 //???          case BP_VAR_IS:
@@ -20137,8 +20148,9 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_UNUSED(int (*bina
                Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                zval_ptr_dtor(objval);
        } else {
-               if (Z_ISREF_P(var_ptr)) {
-                       var_ptr = Z_REFVAL_P(var_ptr);
+//???deref
+           if (Z_ISREF_P(var_ptr)) {
+               var_ptr = Z_REFVAL_P(var_ptr);
                }
                binary_op(var_ptr, var_ptr, value TSRMLS_CC);
        }
@@ -20309,7 +20321,8 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_UNUSED(int type,
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
-       ZVAL_COPY(EX_VAR(opline->result.var), retval);
+//     ZVAL_COPY(EX_VAR(opline->result.var), retval);
+       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
 //???  switch (type) {
 //???          case BP_VAR_R:
 //???          case BP_VAR_IS:
@@ -21045,8 +21058,8 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        fast_add_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -21060,8 +21073,8 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        fast_sub_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -21075,8 +21088,8 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        fast_mul_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -21090,8 +21103,8 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        fast_div_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -21105,8 +21118,8 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        fast_mod_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -21120,8 +21133,8 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        shift_left_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -21135,8 +21148,8 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        shift_right_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -21150,8 +21163,8 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        SAVE_OPLINE();
        concat_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -21165,8 +21178,8 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HAND
 
        SAVE_OPLINE();
        is_identical_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -21181,8 +21194,8 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_
 
        SAVE_OPLINE();
        is_identical_function(result,
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        Z_LVAL_P(result) = !Z_LVAL_P(result);
        zval_ptr_dtor_nogc(free_op1.var);
 
@@ -21198,8 +21211,8 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_equal_function(result,
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
        zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -21214,8 +21227,8 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HAND
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_not_equal_function(result,
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
        zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -21230,8 +21243,8 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLE
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_function(result,
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
        zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -21246,8 +21259,8 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_CV_HANDLER(ZEND_OPCO
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
        zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -21261,8 +21274,8 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
        SAVE_OPLINE();
        bitwise_or_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -21276,8 +21289,8 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        SAVE_OPLINE();
        bitwise_and_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -21291,8 +21304,8 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        SAVE_OPLINE();
        bitwise_xor_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -21306,8 +21319,8 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_
 
        SAVE_OPLINE();
        boolean_xor_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -21482,8 +21495,9 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_CV(int (*binary_o
                Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                zval_ptr_dtor(objval);
        } else {
-               if (Z_ISREF_P(var_ptr)) {
-                       var_ptr = Z_REFVAL_P(var_ptr);
+//???deref
+           if (Z_ISREF_P(var_ptr)) {
+               var_ptr = Z_REFVAL_P(var_ptr);
                }
                binary_op(var_ptr, var_ptr, value TSRMLS_CC);
        }
@@ -23299,8 +23313,9 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_CONST(int (*bi
                Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                zval_ptr_dtor(objval);
        } else {
-               if (Z_ISREF_P(var_ptr)) {
-                       var_ptr = Z_REFVAL_P(var_ptr);
+//???deref
+           if (Z_ISREF_P(var_ptr)) {
+               var_ptr = Z_REFVAL_P(var_ptr);
                }
                binary_op(var_ptr, var_ptr, value TSRMLS_CC);
        }
@@ -24630,8 +24645,9 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_TMP(int (*bina
                Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                zval_ptr_dtor(objval);
        } else {
-               if (Z_ISREF_P(var_ptr)) {
-                       var_ptr = Z_REFVAL_P(var_ptr);
+//???deref
+           if (Z_ISREF_P(var_ptr)) {
+               var_ptr = Z_REFVAL_P(var_ptr);
                }
                binary_op(var_ptr, var_ptr, value TSRMLS_CC);
        }
@@ -25873,8 +25889,9 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_VAR(int (*bina
                Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                zval_ptr_dtor(objval);
        } else {
-               if (Z_ISREF_P(var_ptr)) {
-                       var_ptr = Z_REFVAL_P(var_ptr);
+//???deref
+           if (Z_ISREF_P(var_ptr)) {
+               var_ptr = Z_REFVAL_P(var_ptr);
                }
                binary_op(var_ptr, var_ptr, value TSRMLS_CC);
        }
@@ -27117,8 +27134,9 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(int (*b
                Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                zval_ptr_dtor(objval);
        } else {
-               if (Z_ISREF_P(var_ptr)) {
-                       var_ptr = Z_REFVAL_P(var_ptr);
+//???deref
+           if (Z_ISREF_P(var_ptr)) {
+               var_ptr = Z_REFVAL_P(var_ptr);
                }
                binary_op(var_ptr, var_ptr, value TSRMLS_CC);
        }
@@ -27515,8 +27533,9 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_CV(int (*binar
                Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                zval_ptr_dtor(objval);
        } else {
-               if (Z_ISREF_P(var_ptr)) {
-                       var_ptr = Z_REFVAL_P(var_ptr);
+//???deref
+           if (Z_ISREF_P(var_ptr)) {
+               var_ptr = Z_REFVAL_P(var_ptr);
                }
                binary_op(var_ptr, var_ptr, value TSRMLS_CC);
        }
@@ -28595,7 +28614,7 @@ static int ZEND_FASTCALL  ZEND_BW_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        bitwise_not_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC) TSRMLS_CC);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -28608,7 +28627,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS
 
        SAVE_OPLINE();
        boolean_not_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC) TSRMLS_CC);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -28818,7 +28837,7 @@ static int ZEND_FASTCALL  ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        int ret;
 
        SAVE_OPLINE();
-       val = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
+       val = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
 
        if (IS_CV == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
                ret = Z_LVAL_P(val);
@@ -28848,7 +28867,7 @@ static int ZEND_FASTCALL  ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        int ret;
 
        SAVE_OPLINE();
-       val = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
+       val = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
 
        if (IS_CV == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
                ret = Z_LVAL_P(val);
@@ -28878,7 +28897,7 @@ static int ZEND_FASTCALL  ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        int retval;
 
        SAVE_OPLINE();
-       val = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
+       val = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
 
        if (IS_CV == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
                retval = Z_LVAL_P(val);
@@ -28912,7 +28931,7 @@ static int ZEND_FASTCALL  ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        int retval;
 
        SAVE_OPLINE();
-       val = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
+       val = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
 
        if (IS_CV == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
                retval = Z_LVAL_P(val);
@@ -28942,7 +28961,7 @@ static int ZEND_FASTCALL  ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        int retval;
 
        SAVE_OPLINE();
-       val = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
+       val = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
 
        if (IS_CV == IS_TMP_VAR && EXPECTED(Z_TYPE_P(val) == IS_BOOL)) {
                retval = Z_LVAL_P(val);
@@ -29758,7 +29777,7 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
        SAVE_OPLINE();
        fast_add_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
 
 
@@ -29773,7 +29792,7 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
        SAVE_OPLINE();
        fast_sub_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
 
 
@@ -29788,7 +29807,7 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
        SAVE_OPLINE();
        fast_mul_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
 
 
@@ -29803,7 +29822,7 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
        SAVE_OPLINE();
        fast_div_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
 
 
@@ -29818,7 +29837,7 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
        SAVE_OPLINE();
        fast_mod_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
 
 
@@ -29833,7 +29852,7 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS
 
        SAVE_OPLINE();
        shift_left_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
 
 
@@ -29848,7 +29867,7 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS
 
        SAVE_OPLINE();
        shift_right_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
 
 
@@ -29863,7 +29882,7 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_
 
        SAVE_OPLINE();
        concat_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
 
 
@@ -29878,7 +29897,7 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HA
 
        SAVE_OPLINE();
        is_identical_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
 
 
@@ -29894,7 +29913,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCOD
 
        SAVE_OPLINE();
        is_identical_function(result,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
        Z_LVAL_P(result) = !Z_LVAL_P(result);
 
@@ -29911,7 +29930,7 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLE
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_equal_function(result,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                opline->op2.zv TSRMLS_CC));
 
 
@@ -29927,7 +29946,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HA
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_not_equal_function(result,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                opline->op2.zv TSRMLS_CC));
 
 
@@ -29943,7 +29962,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HAND
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_function(result,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                opline->op2.zv TSRMLS_CC));
 
 
@@ -29959,7 +29978,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OP
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                opline->op2.zv TSRMLS_CC));
 
 
@@ -29974,7 +29993,7 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_A
 
        SAVE_OPLINE();
        bitwise_or_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
 
 
@@ -29989,7 +30008,7 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_
 
        SAVE_OPLINE();
        bitwise_and_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
 
 
@@ -30004,7 +30023,7 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_
 
        SAVE_OPLINE();
        bitwise_xor_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
 
 
@@ -30019,7 +30038,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLE
 
        SAVE_OPLINE();
        boolean_xor_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
 
 
@@ -30194,8 +30213,9 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_CONST(int (*binary
                Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                zval_ptr_dtor(objval);
        } else {
-               if (Z_ISREF_P(var_ptr)) {
-                       var_ptr = Z_REFVAL_P(var_ptr);
+//???deref
+           if (Z_ISREF_P(var_ptr)) {
+               var_ptr = Z_REFVAL_P(var_ptr);
                }
                binary_op(var_ptr, var_ptr, value TSRMLS_CC);
        }
@@ -30559,7 +30579,8 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_CONST(int type, Z
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
-       ZVAL_COPY(EX_VAR(opline->result.var), retval);
+//     ZVAL_COPY(EX_VAR(opline->result.var), retval);
+       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
 //???  switch (type) {
 //???          case BP_VAR_R:
 //???          case BP_VAR_IS:
@@ -31901,7 +31922,7 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        fast_add_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_dtor(free_op2.var);
@@ -31916,7 +31937,7 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        fast_sub_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_dtor(free_op2.var);
@@ -31931,7 +31952,7 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        fast_mul_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_dtor(free_op2.var);
@@ -31946,7 +31967,7 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        fast_div_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_dtor(free_op2.var);
@@ -31961,7 +31982,7 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        fast_mod_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_dtor(free_op2.var);
@@ -31976,7 +31997,7 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        shift_left_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_dtor(free_op2.var);
@@ -31991,7 +32012,7 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        shift_right_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_dtor(free_op2.var);
@@ -32006,7 +32027,7 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        SAVE_OPLINE();
        concat_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_dtor(free_op2.var);
@@ -32021,7 +32042,7 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HAND
 
        SAVE_OPLINE();
        is_identical_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_dtor(free_op2.var);
@@ -32037,7 +32058,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_
 
        SAVE_OPLINE();
        is_identical_function(result,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        Z_LVAL_P(result) = !Z_LVAL_P(result);
 
@@ -32054,7 +32075,7 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_equal_function(result,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
 
        zval_dtor(free_op2.var);
@@ -32070,7 +32091,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HAND
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_not_equal_function(result,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
 
        zval_dtor(free_op2.var);
@@ -32086,7 +32107,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLE
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_function(result,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
 
        zval_dtor(free_op2.var);
@@ -32102,7 +32123,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMP_HANDLER(ZEND_OPCO
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
 
        zval_dtor(free_op2.var);
@@ -32117,7 +32138,7 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
        SAVE_OPLINE();
        bitwise_or_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_dtor(free_op2.var);
@@ -32132,7 +32153,7 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        SAVE_OPLINE();
        bitwise_and_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_dtor(free_op2.var);
@@ -32147,7 +32168,7 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        SAVE_OPLINE();
        bitwise_xor_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_dtor(free_op2.var);
@@ -32162,7 +32183,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_
 
        SAVE_OPLINE();
        boolean_xor_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_dtor(free_op2.var);
@@ -32337,8 +32358,9 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_TMP(int (*binary_o
                Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                zval_ptr_dtor(objval);
        } else {
-               if (Z_ISREF_P(var_ptr)) {
-                       var_ptr = Z_REFVAL_P(var_ptr);
+//???deref
+           if (Z_ISREF_P(var_ptr)) {
+               var_ptr = Z_REFVAL_P(var_ptr);
                }
                binary_op(var_ptr, var_ptr, value TSRMLS_CC);
        }
@@ -33739,8 +33761,8 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        fast_add_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -33754,8 +33776,8 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        fast_sub_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -33769,8 +33791,8 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        fast_mul_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -33784,8 +33806,8 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        fast_div_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -33799,8 +33821,8 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        fast_mod_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -33814,8 +33836,8 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        shift_left_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -33829,8 +33851,8 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        shift_right_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -33844,8 +33866,8 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        SAVE_OPLINE();
        concat_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -33859,8 +33881,8 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HAND
 
        SAVE_OPLINE();
        is_identical_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -33875,8 +33897,8 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_
 
        SAVE_OPLINE();
        is_identical_function(result,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        Z_LVAL_P(result) = !Z_LVAL_P(result);
 
        zval_ptr_dtor_nogc(free_op2.var);
@@ -33892,8 +33914,8 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_equal_function(result,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -33908,8 +33930,8 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HAND
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_not_equal_function(result,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -33924,8 +33946,8 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLE
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_function(result,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -33940,8 +33962,8 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_VAR_HANDLER(ZEND_OPCO
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -33955,8 +33977,8 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
        SAVE_OPLINE();
        bitwise_or_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -33970,8 +33992,8 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        SAVE_OPLINE();
        bitwise_and_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -33985,8 +34007,8 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        SAVE_OPLINE();
        bitwise_xor_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -34000,8 +34022,8 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_
 
        SAVE_OPLINE();
        boolean_xor_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
@@ -34175,8 +34197,9 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_VAR(int (*binary_o
                Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                zval_ptr_dtor(objval);
        } else {
-               if (Z_ISREF_P(var_ptr)) {
-                       var_ptr = Z_REFVAL_P(var_ptr);
+//???deref
+           if (Z_ISREF_P(var_ptr)) {
+               var_ptr = Z_REFVAL_P(var_ptr);
                }
                binary_op(var_ptr, var_ptr, value TSRMLS_CC);
        }
@@ -34541,7 +34564,8 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_VAR(int type, ZEN
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
-       ZVAL_COPY(EX_VAR(opline->result.var), retval);
+//     ZVAL_COPY(EX_VAR(opline->result.var), retval);
+       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
 //???  switch (type) {
 //???          case BP_VAR_R:
 //???          case BP_VAR_IS:
@@ -36101,8 +36125,9 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_UNUSED(int (*binar
                Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                zval_ptr_dtor(objval);
        } else {
-               if (Z_ISREF_P(var_ptr)) {
-                       var_ptr = Z_REFVAL_P(var_ptr);
+//???deref
+           if (Z_ISREF_P(var_ptr)) {
+               var_ptr = Z_REFVAL_P(var_ptr);
                }
                binary_op(var_ptr, var_ptr, value TSRMLS_CC);
        }
@@ -36273,7 +36298,8 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type,
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
                SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
        }
-       ZVAL_COPY(EX_VAR(opline->result.var), retval);
+//     ZVAL_COPY(EX_VAR(opline->result.var), retval);
+       ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
 //???  switch (type) {
 //???          case BP_VAR_R:
 //???          case BP_VAR_IS:
@@ -36878,8 +36904,8 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        fast_add_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -36893,8 +36919,8 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        fast_sub_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -36908,8 +36934,8 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        fast_mul_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -36923,8 +36949,8 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        fast_div_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -36938,8 +36964,8 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        fast_mod_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -36953,8 +36979,8 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        shift_left_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -36968,8 +36994,8 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        SAVE_OPLINE();
        shift_right_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -36983,8 +37009,8 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
        SAVE_OPLINE();
        concat_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -36998,8 +37024,8 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDL
 
        SAVE_OPLINE();
        is_identical_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -37014,8 +37040,8 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_H
 
        SAVE_OPLINE();
        is_identical_function(result,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
        Z_LVAL_P(result) = !Z_LVAL_P(result);
 
 
@@ -37031,8 +37057,8 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_A
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_equal_function(result,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
 
 
        CHECK_EXCEPTION();
@@ -37047,8 +37073,8 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDL
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_not_equal_function(result,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
 
 
        CHECK_EXCEPTION();
@@ -37063,8 +37089,8 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_function(result,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
 
 
        CHECK_EXCEPTION();
@@ -37079,8 +37105,8 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCOD
 
        SAVE_OPLINE();
        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC));
 
 
        CHECK_EXCEPTION();
@@ -37094,8 +37120,8 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS
 
        SAVE_OPLINE();
        bitwise_or_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -37109,8 +37135,8 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
        SAVE_OPLINE();
        bitwise_and_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -37124,8 +37150,8 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
        SAVE_OPLINE();
        bitwise_xor_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -37139,8 +37165,8 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_A
 
        SAVE_OPLINE();
        boolean_xor_function(EX_VAR(opline->result.var),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
-               _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
+               _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
 
 
        CHECK_EXCEPTION();
@@ -37314,8 +37340,9 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_CV(int (*binary_op
                Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
                zval_ptr_dtor(objval);
        } else {
-               if (Z_ISREF_P(var_ptr)) {
-                       var_ptr = Z_REFVAL_P(var_ptr);
+//???deref
+           if (Z_ISREF_P(var_ptr)) {
+               var_ptr = Z_REFVAL_P(var_ptr);
                }
                binary_op(var_ptr, var_ptr, value TSRMLS_CC);
        }
index 9db18a50883e942307f9a37026417c085c9abf51..a2af3e55c720a8f340a90c37e6e13f1ddd0c4253 100644 (file)
@@ -135,6 +135,24 @@ $op2_get_zval_ptr = array(
        "CV"     => "_get_zval_ptr_cv_\\1(execute_data, opline->op2.var TSRMLS_CC)",
 );
 
+$op1_get_zval_ptr_deref = array(
+       "ANY"    => "get_zval_ptr_deref(opline->op1_type, &opline->op1, execute_data, &free_op1, \\1)",
+       "TMP"    => "_get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC)",
+       "VAR"    => "_get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC)",
+       "CONST"  => "opline->op1.zv",
+       "UNUSED" => "NULL",
+       "CV"     => "_get_zval_ptr_cv_deref_\\1(execute_data, opline->op1.var TSRMLS_CC)",
+);
+
+$op2_get_zval_ptr_deref = array(
+       "ANY"    => "get_zval_ptr_deref(opline->op2_type, &opline->op2, execute_data, &free_op2, \\1)",
+       "TMP"    => "_get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC)",
+       "VAR"    => "_get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC)",
+       "CONST"  => "opline->op2.zv",
+       "UNUSED" => "NULL",
+       "CV"     => "_get_zval_ptr_cv_deref_\\1(execute_data, opline->op2.var TSRMLS_CC)",
+);
+
 $op1_get_obj_zval_ptr = array(
        "ANY"    => "get_obj_zval_ptr(opline->op1_type, &opline->op1, execute_data, &free_op1, \\1)",
        "TMP"    => "_get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC)",
@@ -274,6 +292,7 @@ function helper_name($name, $spec, $op1, $op2) {
 // Generates code for opcode handler or helper
 function gen_code($f, $spec, $kind, $export, $code, $op1, $op2, $name) {
        global $op1_type, $op2_type, $op1_get_zval_ptr, $op2_get_zval_ptr,
+               $op1_get_zval_ptr_deref, $op2_get_zval_ptr_deref,
                $op1_get_obj_zval_ptr, $op2_get_obj_zval_ptr,
                $op1_is_tmp_free, $op2_is_tmp_free, $op1_free, $op2_free,
                $op1_free_op, $op2_free_op, $op1_free_op_if_var, $op2_free_op_if_var,
@@ -289,6 +308,8 @@ function gen_code($f, $spec, $kind, $export, $code, $op1, $op2, $name) {
                        "/OP2_FREE/",
                        "/GET_OP1_ZVAL_PTR\(([^)]*)\)/",
                        "/GET_OP2_ZVAL_PTR\(([^)]*)\)/",
+                       "/GET_OP1_ZVAL_PTR_DEREF\(([^)]*)\)/",
+                       "/GET_OP2_ZVAL_PTR_DEREF\(([^)]*)\)/",
                        "/GET_OP1_OBJ_ZVAL_PTR\(([^)]*)\)/",
                        "/GET_OP2_OBJ_ZVAL_PTR\(([^)]*)\)/",
                        "/IS_OP1_TMP_FREE\(\)/",
@@ -319,6 +340,8 @@ function gen_code($f, $spec, $kind, $export, $code, $op1, $op2, $name) {
                        $op2_free[$op2],
                        $op1_get_zval_ptr[$op1],
                        $op2_get_zval_ptr[$op2],
+                       $op1_get_zval_ptr_deref[$op1],
+                       $op2_get_zval_ptr_deref[$op2],
                        $op1_get_obj_zval_ptr[$op1],
                        $op2_get_obj_zval_ptr[$op2],
                        $op1_is_tmp_free[$op1],
index 76815def26fb59c4e0a7466c74fe763bb60f24d5..b0100f676f35cfae02f077654726e66edecedd32 100644 (file)
@@ -4858,7 +4858,7 @@ PHP_FUNCTION(str_repeat)
        char            *input_str;             /* Input string */
        int             input_len;
        long            mult;                   /* Multiplier */
-       char            *result;                /* Resulting string */
+       zend_string     *result;                /* Resulting string */
        size_t          result_len;             /* Length of the resulting string */
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &input_str, &input_len, &mult) == FAILURE) {
@@ -4877,18 +4877,19 @@ PHP_FUNCTION(str_repeat)
 
        /* Initialize the result string */
        result_len = input_len * mult;
-       result = (char *)safe_emalloc(input_len, mult, 1);
+//???  result = (char *)safe_emalloc(input_len, mult, 1);
+       result = STR_ALLOC(result_len, 0);
 
        /* Heavy optimization for situations where input string is 1 byte long */
        if (input_len == 1) {
-               memset(result, *(input_str), mult);
+               memset(result->val, *(input_str), mult);
        } else {
                char *s, *e, *ee;
                int l=0;
-               memcpy(result, input_str, input_len);
-               s = result;
-               e = result + input_len;
-               ee = result + result_len;
+               memcpy(result->val, input_str, input_len);
+               s = result->val;
+               e = result->val + input_len;
+               ee = result->val + result_len;
 
                while (e<ee) {
                        l = (e-s) < (ee-e) ? (e-s) : (ee-e);
@@ -4897,10 +4898,9 @@ PHP_FUNCTION(str_repeat)
                }
        }
 
-       result[result_len] = '\0';
+       result->val[result_len] = '\0';
 
-//???  RETURN_STRINGL(result, result_len, 0);
-       RETURN_STRINGL(result, result_len);
+       RETURN_STR(result);
 }
 /* }}} */
 
index cb68d83e656adbc9bfa65e9de2eb550d913a1363..0c2ccc958f8506483a624fb13c77a4bf977c409c 100644 (file)
@@ -837,8 +837,7 @@ PHPAPI void php_ini_activate_per_host_config(const char *host, uint host_len TSR
 
        if (has_per_host_config && host && host_len) {
                /* Search for source array matching the host from configuration_hash */
-//??? remove -1
-               if ((tmp = zend_hash_str_find(&configuration_hash, host, host_len-1)) != NULL) {
+               if ((tmp = zend_hash_str_find(&configuration_hash, host, host_len)) != NULL) {
                        php_ini_activate_config(Z_ARRVAL_P(tmp), PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE TSRMLS_CC);
                }
        }
@@ -849,8 +848,7 @@ PHPAPI void php_ini_activate_per_host_config(const char *host, uint host_len TSR
  */
 PHPAPI zval *cfg_get_entry(const char *name, uint name_length)
 {
-//??? remove -1
-       return zend_hash_str_find(&configuration_hash, name, name_length-1);
+       return zend_hash_str_find(&configuration_hash, name, name_length);
 }
 /* }}} */
 
index 990bffbcaf377abbacfb44746d5d1062de9e271e..dc0d1128f2a19feab5442f8f38d03485b8bc18ad 100644 (file)
@@ -845,7 +845,7 @@ static int sapi_cgi_activate(TSRMLS_D)
                        server_name_len = strlen(server_name);
                        server_name = estrndup(server_name, server_name_len);
                        zend_str_tolower(server_name, server_name_len);
-                       php_ini_activate_per_host_config(server_name, server_name_len + 1 TSRMLS_CC);
+                       php_ini_activate_per_host_config(server_name, server_name_len TSRMLS_CC);
                        efree(server_name);
                }
        }
index da780e68aa818ad9f03345499b5eb6882af66b52..9b2878dd6334e8e1a72df7f0101d090174f6a3be 100644 (file)
@@ -784,7 +784,7 @@ static int sapi_cgi_activate(TSRMLS_D)
                        server_name_len = strlen(server_name);
                        server_name = estrndup(server_name, server_name_len);
                        zend_str_tolower(server_name, server_name_len);
-                       php_ini_activate_per_host_config(server_name, server_name_len + 1 TSRMLS_CC);
+                       php_ini_activate_per_host_config(server_name, server_name_len TSRMLS_CC);
                        efree(server_name);
                }
        }