]> granicus.if.org Git - php/commitdiff
Avoid code duplication
authorDmitry Stogov <dmitry@zend.com>
Tue, 25 Dec 2018 14:48:29 +0000 (17:48 +0300)
committerDmitry Stogov <dmitry@zend.com>
Tue, 25 Dec 2018 14:48:29 +0000 (17:48 +0300)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index cab784317e067c6453db22ad3d7e80e9451c6fbd..ac5b28784957b471e1f4168299c691e16ef20e48 100644 (file)
@@ -1826,8 +1826,7 @@ ZEND_VM_HOT_OBJ_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMPVAR|UNUSED|THIS|CV, CONST
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               ZEND_VM_C_GOTO(fetch_obj_r_copy);
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -1841,8 +1840,8 @@ ZEND_VM_HOT_OBJ_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMPVAR|UNUSED|THIS|CV, CONST
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               ZEND_VM_C_GOTO(fetch_obj_r_copy);
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -1851,8 +1850,7 @@ ZEND_VM_HOT_OBJ_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMPVAR|UNUSED|THIS|CV, CONST
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               ZEND_VM_C_GOTO(fetch_obj_r_copy);
                                        }
                                }
                        }
@@ -1863,6 +1861,7 @@ ZEND_VM_HOT_OBJ_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMPVAR|UNUSED|THIS|CV, CONST
                retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+ZEND_VM_C_LABEL(fetch_obj_r_copy):
                        ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
                } else if (UNEXPECTED(Z_ISREF_P(retval))) {
                        zend_unwrap_reference(retval);
@@ -1966,8 +1965,7 @@ ZEND_VM_COLD_CONST_HANDLER(91, ZEND_FETCH_OBJ_IS, CONST|TMPVAR|UNUSED|THIS|CV, C
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               ZEND_VM_C_GOTO(fetch_obj_is_copy);
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -1981,8 +1979,8 @@ ZEND_VM_COLD_CONST_HANDLER(91, ZEND_FETCH_OBJ_IS, CONST|TMPVAR|UNUSED|THIS|CV, C
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               ZEND_VM_C_GOTO(fetch_obj_is_copy);
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -1991,8 +1989,7 @@ ZEND_VM_COLD_CONST_HANDLER(91, ZEND_FETCH_OBJ_IS, CONST|TMPVAR|UNUSED|THIS|CV, C
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               ZEND_VM_C_GOTO(fetch_obj_is_copy);
                                        }
                                }
                        }
@@ -2001,6 +1998,7 @@ ZEND_VM_COLD_CONST_HANDLER(91, ZEND_FETCH_OBJ_IS, CONST|TMPVAR|UNUSED|THIS|CV, C
                retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+ZEND_VM_C_LABEL(fetch_obj_is_copy):
                        ZVAL_COPY(EX_VAR(opline->result.var), retval);
                }
        } while (0);
index d72de2b7494084e3ed7458b2e37cc4f8e16b6551..a7775d93b56ca3d67f8499826bfc98ed1c1f1b88 100644 (file)
@@ -4681,8 +4681,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -4696,8 +4695,8 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_r_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -4706,8 +4705,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                }
                        }
@@ -4718,6 +4716,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_
                retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_r_copy:
                        ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
                } else if (UNEXPECTED(Z_ISREF_P(retval))) {
                        zend_unwrap_reference(retval);
@@ -4776,8 +4775,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -4791,8 +4789,8 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_is_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -4801,8 +4799,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                }
                        }
@@ -4811,6 +4808,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC
                retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_is_copy:
                        ZVAL_COPY(EX_VAR(opline->result.var), retval);
                }
        } while (0);
@@ -6842,8 +6840,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -6857,8 +6854,8 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_r_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -6867,8 +6864,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                }
                        }
@@ -6879,6 +6875,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_
                retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_r_copy:
                        ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
                } else if (UNEXPECTED(Z_ISREF_P(retval))) {
                        zend_unwrap_reference(retval);
@@ -6937,8 +6934,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -6952,8 +6948,8 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_is_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -6962,8 +6958,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                }
                        }
@@ -6972,6 +6967,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC
                retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_is_copy:
                        ZVAL_COPY(EX_VAR(opline->result.var), retval);
                }
        } while (0);
@@ -9914,8 +9910,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -9929,8 +9924,8 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_r_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -9939,8 +9934,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                }
                        }
@@ -9951,6 +9945,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_
                retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_r_copy:
                        ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
                } else if (UNEXPECTED(Z_ISREF_P(retval))) {
                        zend_unwrap_reference(retval);
@@ -10009,8 +10004,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -10024,8 +10018,8 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_is_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -10034,8 +10028,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                }
                        }
@@ -10044,6 +10037,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC
                retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_is_copy:
                        ZVAL_COPY(EX_VAR(opline->result.var), retval);
                }
        } while (0);
@@ -13646,8 +13640,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -13661,8 +13654,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_r_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -13671,8 +13664,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                }
                        }
@@ -13683,6 +13675,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_
                retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_r_copy:
                        ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
                } else if (UNEXPECTED(Z_ISREF_P(retval))) {
                        zend_unwrap_reference(retval);
@@ -13741,8 +13734,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -13756,8 +13748,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_is_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -13766,8 +13758,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                }
                        }
@@ -13776,6 +13767,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST
                retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_is_copy:
                        ZVAL_COPY(EX_VAR(opline->result.var), retval);
                }
        } while (0);
@@ -15241,8 +15233,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -15256,8 +15247,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_r_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -15266,8 +15257,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                }
                        }
@@ -15278,6 +15268,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR
                retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_r_copy:
                        ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
                } else if (UNEXPECTED(Z_ISREF_P(retval))) {
                        zend_unwrap_reference(retval);
@@ -15336,8 +15327,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVA
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -15351,8 +15341,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVA
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_is_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -15361,8 +15351,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVA
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                }
                        }
@@ -15371,6 +15360,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVA
                retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_is_copy:
                        ZVAL_COPY(EX_VAR(opline->result.var), retval);
                }
        } while (0);
@@ -17104,8 +17094,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HAN
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -17119,8 +17108,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HAN
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_r_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -17129,8 +17118,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HAN
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                }
                        }
@@ -17141,6 +17129,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HAN
                retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_r_copy:
                        ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
                } else if (UNEXPECTED(Z_ISREF_P(retval))) {
                        zend_unwrap_reference(retval);
@@ -17199,8 +17188,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HA
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -17214,8 +17202,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HA
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_is_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -17224,8 +17212,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HA
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                }
                        }
@@ -17234,6 +17221,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HA
                retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_is_copy:
                        ZVAL_COPY(EX_VAR(opline->result.var), retval);
                }
        } while (0);
@@ -30885,8 +30873,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_U
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -30900,8 +30887,8 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_U
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_r_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -30910,8 +30897,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_U
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                }
                        }
@@ -30922,6 +30908,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_U
                retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_r_copy:
                        ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
                } else if (UNEXPECTED(Z_ISREF_P(retval))) {
                        zend_unwrap_reference(retval);
@@ -31025,8 +31012,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -31040,8 +31026,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_is_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -31050,8 +31036,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                }
                        }
@@ -31060,6 +31045,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST
                retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_is_copy:
                        ZVAL_COPY(EX_VAR(opline->result.var), retval);
                }
        } while (0);
@@ -32569,8 +32555,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -32584,8 +32569,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_r_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -32594,8 +32579,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                }
                        }
@@ -32606,6 +32590,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR
                retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_r_copy:
                        ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
                } else if (UNEXPECTED(Z_ISREF_P(retval))) {
                        zend_unwrap_reference(retval);
@@ -32709,8 +32694,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVA
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -32724,8 +32708,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVA
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_is_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -32734,8 +32718,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVA
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                }
                        }
@@ -32744,6 +32727,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVA
                retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_is_copy:
                        ZVAL_COPY(EX_VAR(opline->result.var), retval);
                }
        } while (0);
@@ -34900,8 +34884,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HAN
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -34915,8 +34898,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HAN
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_r_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -34925,8 +34908,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HAN
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                }
                        }
@@ -34937,6 +34919,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HAN
                retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_r_copy:
                        ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
                } else if (UNEXPECTED(Z_ISREF_P(retval))) {
                        zend_unwrap_reference(retval);
@@ -35040,8 +35023,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HA
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -35055,8 +35037,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HA
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_is_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -35065,8 +35047,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HA
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                }
                        }
@@ -35075,6 +35056,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HA
                retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_is_copy:
                        ZVAL_COPY(EX_VAR(opline->result.var), retval);
                }
        } while (0);
@@ -39339,8 +39321,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_C
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -39354,8 +39335,8 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_C
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_r_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -39364,8 +39345,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_C
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                }
                        }
@@ -39376,6 +39356,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_C
                retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_r_copy:
                        ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
                } else if (UNEXPECTED(Z_ISREF_P(retval))) {
                        zend_unwrap_reference(retval);
@@ -39479,8 +39460,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HAN
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -39494,8 +39474,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HAN
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_is_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -39504,8 +39484,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HAN
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                }
                        }
@@ -39514,6 +39493,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HAN
                retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_is_copy:
                        ZVAL_COPY(EX_VAR(opline->result.var), retval);
                }
        } while (0);
@@ -43059,8 +43039,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HAN
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -43074,8 +43053,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HAN
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_r_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -43084,8 +43063,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HAN
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                }
                        }
@@ -43096,6 +43074,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HAN
                retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_r_copy:
                        ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
                } else if (UNEXPECTED(Z_ISREF_P(retval))) {
                        zend_unwrap_reference(retval);
@@ -43199,8 +43178,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HA
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -43214,8 +43192,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HA
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_is_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -43224,8 +43202,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HA
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                }
                        }
@@ -43234,6 +43211,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HA
                retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_is_copy:
                        ZVAL_COPY(EX_VAR(opline->result.var), retval);
                }
        } while (0);
@@ -48757,8 +48735,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -48772,8 +48749,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_r_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -48782,8 +48759,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_r_copy;
                                        }
                                }
                        }
@@ -48794,6 +48770,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER
                retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_r_copy:
                        ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
                } else if (UNEXPECTED(Z_ISREF_P(retval))) {
                        zend_unwrap_reference(retval);
@@ -48897,8 +48874,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLE
                                if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
                                        retval = OBJ_PROP(zobj, prop_offset);
                                        if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                } else if (EXPECTED(zobj->properties != NULL)) {
                                        if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
@@ -48912,8 +48888,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLE
                                                         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
                                                          EXPECTED(p->key != NULL) &&
                                                          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
-                                                               ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
-                                                               break;
+                                                               retval = &p->val;
+                                                               goto fetch_obj_is_copy;
                                                        }
                                                }
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
@@ -48922,8 +48898,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLE
                                        if (EXPECTED(retval)) {
                                                uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
                                                CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
-                                               ZVAL_COPY(EX_VAR(opline->result.var), retval);
-                                               break;
+                                               goto fetch_obj_is_copy;
                                        }
                                }
                        }
@@ -48932,6 +48907,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLE
                retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
 
                if (retval != EX_VAR(opline->result.var)) {
+fetch_obj_is_copy:
                        ZVAL_COPY(EX_VAR(opline->result.var), retval);
                }
        } while (0);