@@ -1826,8 +1826,7 @@ ZEND_VM_HOT_OBJ_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMPVAR|UNUSED|THIS|CV, CONST
1826
1826
if (EXPECTED (IS_VALID_PROPERTY_OFFSET (prop_offset ))) {
1827
1827
retval = OBJ_PROP (zobj , prop_offset );
1828
1828
if (EXPECTED (Z_TYPE_INFO_P (retval ) != IS_UNDEF )) {
1829
- ZVAL_COPY_DEREF (EX_VAR (opline -> result .var ), retval );
1830
- break ;
1829
+ ZEND_VM_C_GOTO (fetch_obj_r_copy );
1831
1830
}
1832
1831
} else if (EXPECTED (zobj -> properties != NULL )) {
1833
1832
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
1841
1840
(EXPECTED (p -> h == ZSTR_H (Z_STR_P (offset ))) &&
1842
1841
EXPECTED (p -> key != NULL ) &&
1843
1842
EXPECTED (zend_string_equal_content (p -> key , Z_STR_P (offset )))))) {
1844
- ZVAL_COPY_DEREF ( EX_VAR ( opline -> result . var ), & p -> val ) ;
1845
- break ;
1843
+ retval = & p -> val ;
1844
+ ZEND_VM_C_GOTO ( fetch_obj_r_copy ) ;
1846
1845
}
1847
1846
}
1848
1847
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
1851
1850
if (EXPECTED (retval )) {
1852
1851
uintptr_t idx = (char * )retval - (char * )zobj -> properties -> arData ;
1853
1852
CACHE_PTR_EX (cache_slot + 1 , (void * )ZEND_ENCODE_DYN_PROP_OFFSET (idx ));
1854
- ZVAL_COPY_DEREF (EX_VAR (opline -> result .var ), retval );
1855
- break ;
1853
+ ZEND_VM_C_GOTO (fetch_obj_r_copy );
1856
1854
}
1857
1855
}
1858
1856
}
@@ -1863,6 +1861,7 @@ ZEND_VM_HOT_OBJ_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMPVAR|UNUSED|THIS|CV, CONST
1863
1861
retval = zobj -> handlers -> read_property (container , offset , BP_VAR_R , cache_slot , EX_VAR (opline -> result .var ));
1864
1862
1865
1863
if (retval != EX_VAR (opline -> result .var )) {
1864
+ ZEND_VM_C_LABEL (fetch_obj_r_copy ):
1866
1865
ZVAL_COPY_DEREF (EX_VAR (opline -> result .var ), retval );
1867
1866
} else if (UNEXPECTED (Z_ISREF_P (retval ))) {
1868
1867
zend_unwrap_reference (retval );
@@ -1966,8 +1965,7 @@ ZEND_VM_COLD_CONST_HANDLER(91, ZEND_FETCH_OBJ_IS, CONST|TMPVAR|UNUSED|THIS|CV, C
1966
1965
if (EXPECTED (IS_VALID_PROPERTY_OFFSET (prop_offset ))) {
1967
1966
retval = OBJ_PROP (zobj , prop_offset );
1968
1967
if (EXPECTED (Z_TYPE_P (retval ) != IS_UNDEF )) {
1969
- ZVAL_COPY (EX_VAR (opline -> result .var ), retval );
1970
- break ;
1968
+ ZEND_VM_C_GOTO (fetch_obj_is_copy );
1971
1969
}
1972
1970
} else if (EXPECTED (zobj -> properties != NULL )) {
1973
1971
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
1981
1979
(EXPECTED (p -> h == ZSTR_H (Z_STR_P (offset ))) &&
1982
1980
EXPECTED (p -> key != NULL ) &&
1983
1981
EXPECTED (zend_string_equal_content (p -> key , Z_STR_P (offset )))))) {
1984
- ZVAL_COPY ( EX_VAR ( opline -> result . var ), & p -> val ) ;
1985
- break ;
1982
+ retval = & p -> val ;
1983
+ ZEND_VM_C_GOTO ( fetch_obj_is_copy ) ;
1986
1984
}
1987
1985
}
1988
1986
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
1991
1989
if (EXPECTED (retval )) {
1992
1990
uintptr_t idx = (char * )retval - (char * )zobj -> properties -> arData ;
1993
1991
CACHE_PTR_EX (cache_slot + 1 , (void * )ZEND_ENCODE_DYN_PROP_OFFSET (idx ));
1994
- ZVAL_COPY (EX_VAR (opline -> result .var ), retval );
1995
- break ;
1992
+ ZEND_VM_C_GOTO (fetch_obj_is_copy );
1996
1993
}
1997
1994
}
1998
1995
}
@@ -2001,6 +1998,7 @@ ZEND_VM_COLD_CONST_HANDLER(91, ZEND_FETCH_OBJ_IS, CONST|TMPVAR|UNUSED|THIS|CV, C
2001
1998
retval = zobj -> handlers -> read_property (container , offset , BP_VAR_IS , cache_slot , EX_VAR (opline -> result .var ));
2002
1999
2003
2000
if (retval != EX_VAR (opline -> result .var )) {
2001
+ ZEND_VM_C_LABEL (fetch_obj_is_copy ):
2004
2002
ZVAL_COPY (EX_VAR (opline -> result .var ), retval );
2005
2003
}
2006
2004
} while (0 );
0 commit comments