Skip to content

Commit 2954a30

Browse files
committed
Avoid code duplication
1 parent f153f11 commit 2954a30

File tree

2 files changed

+130
-156
lines changed

2 files changed

+130
-156
lines changed

Zend/zend_vm_def.h

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1826,8 +1826,7 @@ ZEND_VM_HOT_OBJ_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMPVAR|UNUSED|THIS|CV, CONST
18261826
if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
18271827
retval = OBJ_PROP(zobj, prop_offset);
18281828
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);
18311830
}
18321831
} else if (EXPECTED(zobj->properties != NULL)) {
18331832
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
18411840
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
18421841
EXPECTED(p->key != NULL) &&
18431842
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);
18461845
}
18471846
}
18481847
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
18511850
if (EXPECTED(retval)) {
18521851
uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
18531852
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);
18561854
}
18571855
}
18581856
}
@@ -1863,6 +1861,7 @@ ZEND_VM_HOT_OBJ_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMPVAR|UNUSED|THIS|CV, CONST
18631861
retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
18641862

18651863
if (retval != EX_VAR(opline->result.var)) {
1864+
ZEND_VM_C_LABEL(fetch_obj_r_copy):
18661865
ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
18671866
} else if (UNEXPECTED(Z_ISREF_P(retval))) {
18681867
zend_unwrap_reference(retval);
@@ -1966,8 +1965,7 @@ ZEND_VM_COLD_CONST_HANDLER(91, ZEND_FETCH_OBJ_IS, CONST|TMPVAR|UNUSED|THIS|CV, C
19661965
if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
19671966
retval = OBJ_PROP(zobj, prop_offset);
19681967
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);
19711969
}
19721970
} else if (EXPECTED(zobj->properties != NULL)) {
19731971
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
19811979
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
19821980
EXPECTED(p->key != NULL) &&
19831981
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);
19861984
}
19871985
}
19881986
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
19911989
if (EXPECTED(retval)) {
19921990
uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
19931991
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);
19961993
}
19971994
}
19981995
}
@@ -2001,6 +1998,7 @@ ZEND_VM_COLD_CONST_HANDLER(91, ZEND_FETCH_OBJ_IS, CONST|TMPVAR|UNUSED|THIS|CV, C
20011998
retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
20021999

20032000
if (retval != EX_VAR(opline->result.var)) {
2001+
ZEND_VM_C_LABEL(fetch_obj_is_copy):
20042002
ZVAL_COPY(EX_VAR(opline->result.var), retval);
20052003
}
20062004
} while (0);

0 commit comments

Comments
 (0)