mirror of
https://github.com/php/php-src.git
synced 2025-08-18 06:58:55 +02:00
Optimize fast path
This commit is contained in:
parent
b928ea2de7
commit
db5898c9e5
2 changed files with 36 additions and 16 deletions
|
@ -7628,20 +7628,30 @@ ZEND_VM_C_LABEL(check_indirect):
|
|||
}
|
||||
}
|
||||
|
||||
variable_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
|
||||
|
||||
do {
|
||||
zend_reference *ref;
|
||||
|
||||
if (UNEXPECTED(!Z_ISREF_P(value))) {
|
||||
ZVAL_NEW_REF(value, value);
|
||||
} else if (UNEXPECTED(variable_ptr == value)) {
|
||||
break;
|
||||
ref = (zend_reference*)emalloc(sizeof(zend_reference));
|
||||
GC_REFCOUNT(ref) = 2;
|
||||
GC_TYPE_INFO(ref) = IS_REFERENCE;
|
||||
ZVAL_COPY_VALUE(&ref->val, value);
|
||||
Z_REF_P(value) = ref;
|
||||
Z_TYPE_INFO_P(value) = IS_REFERENCE_EX;
|
||||
} else {
|
||||
ref = Z_REF_P(value);
|
||||
GC_REFCOUNT(ref)++;
|
||||
}
|
||||
ref = Z_REF_P(value);
|
||||
GC_REFCOUNT(ref)++;
|
||||
|
||||
variable_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
|
||||
|
||||
if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) {
|
||||
if (!Z_DELREF_P(variable_ptr)) {
|
||||
uint32_t refcnt = Z_DELREF_P(variable_ptr);
|
||||
|
||||
if (UNEXPECTED(variable_ptr == value)) {
|
||||
break;
|
||||
}
|
||||
if (refcnt == 0) {
|
||||
SAVE_OPLINE();
|
||||
zval_dtor_func_for_ptr(Z_COUNTED_P(variable_ptr));
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
|
|
|
@ -32798,20 +32798,30 @@ check_indirect:
|
|||
}
|
||||
}
|
||||
|
||||
variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
|
||||
|
||||
do {
|
||||
zend_reference *ref;
|
||||
|
||||
if (UNEXPECTED(!Z_ISREF_P(value))) {
|
||||
ZVAL_NEW_REF(value, value);
|
||||
} else if (UNEXPECTED(variable_ptr == value)) {
|
||||
break;
|
||||
ref = (zend_reference*)emalloc(sizeof(zend_reference));
|
||||
GC_REFCOUNT(ref) = 2;
|
||||
GC_TYPE_INFO(ref) = IS_REFERENCE;
|
||||
ZVAL_COPY_VALUE(&ref->val, value);
|
||||
Z_REF_P(value) = ref;
|
||||
Z_TYPE_INFO_P(value) = IS_REFERENCE_EX;
|
||||
} else {
|
||||
ref = Z_REF_P(value);
|
||||
GC_REFCOUNT(ref)++;
|
||||
}
|
||||
ref = Z_REF_P(value);
|
||||
GC_REFCOUNT(ref)++;
|
||||
|
||||
variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
|
||||
|
||||
if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) {
|
||||
if (!Z_DELREF_P(variable_ptr)) {
|
||||
uint32_t refcnt = Z_DELREF_P(variable_ptr);
|
||||
|
||||
if (UNEXPECTED(variable_ptr == value)) {
|
||||
break;
|
||||
}
|
||||
if (refcnt == 0) {
|
||||
SAVE_OPLINE();
|
||||
zval_dtor_func_for_ptr(Z_COUNTED_P(variable_ptr));
|
||||
if (UNEXPECTED(EG(exception))) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue