zend_object_iterator *iter = NULL;
zend_class_entry *ce = NULL;
zend_bool is_empty = 0;
+ zval *array_ref = NULL;
SAVE_OPLINE();
if ((OP1_TYPE == IS_CV || OP1_TYPE == IS_VAR) &&
(opline->extended_value & ZEND_FE_RESET_VARIABLE)) {
array_ptr = GET_OP1_ZVAL_PTR(BP_VAR_R);
+ if (Z_ISREF_P(array_ptr)) {
+ array_ref = array_ptr;
+ array_ptr = Z_REFVAL_P(array_ptr);
+ }
if (Z_TYPE_P(array_ptr) == IS_NULL) {
} else if (Z_TYPE_P(array_ptr) == IS_OBJECT) {
if(Z_OBJ_HT_P(array_ptr)->get_class_entry == NULL) {
ce = Z_OBJCE_P(array_ptr);
if (!ce || ce->get_iterator == NULL) {
- SEPARATE_ZVAL_IF_NOT_REF(array_ptr);
+ if (!array_ref) {
+ SEPARATE_ZVAL(array_ptr);
+ }
Z_ADDREF_P(array_ptr);
}
} else {
if (Z_TYPE_P(array_ptr) == IS_ARRAY) {
- SEPARATE_ZVAL_IF_NOT_REF(array_ptr);
- if (opline->extended_value & ZEND_FE_FETCH_BYREF) {
- ZVAL_NEW_REF(array_ptr, array_ptr);
+ if (!array_ref) {
+ SEPARATE_ZVAL(array_ptr);
+ if (opline->extended_value & ZEND_FE_FETCH_BYREF) {
+ ZVAL_NEW_REF(array_ptr, array_ptr);
+ }
}
}
if (Z_REFCOUNTED_P(array_ptr)) Z_ADDREF_P(array_ptr);
}
} else {
array_ptr = GET_OP1_ZVAL_PTR(BP_VAR_R);
+ if (Z_ISREF_P(array_ptr)) {
+ array_ref = array_ptr;
+ array_ptr = Z_REFVAL_P(array_ptr);
+ }
if (IS_OP1_TMP_FREE()) { /* IS_TMP_VAR */
zval tmp;
} else if (Z_REFCOUNTED_P(array_ptr)) {
if (OP1_TYPE == IS_CONST ||
(OP1_TYPE == IS_CV &&
- !Z_ISREF_P(array_ptr) &&
+ (array_ref == NULL) &&
Z_REFCOUNT_P(array_ptr) > 1) ||
(OP1_TYPE == IS_VAR &&
- !Z_ISREF_P(array_ptr) &&
+ (array_ref == NULL) &&
Z_REFCOUNT_P(array_ptr) > 2)) {
zval tmp;
zend_object_iterator *iter = NULL;
zend_class_entry *ce = NULL;
zend_bool is_empty = 0;
+ zval *array_ref = NULL;
SAVE_OPLINE();
if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) &&
(opline->extended_value & ZEND_FE_RESET_VARIABLE)) {
array_ptr = opline->op1.zv;
+ if (Z_ISREF_P(array_ptr)) {
+ array_ref = array_ptr;
+ array_ptr = Z_REFVAL_P(array_ptr);
+ }
if (Z_TYPE_P(array_ptr) == IS_NULL) {
} else if (Z_TYPE_P(array_ptr) == IS_OBJECT) {
if(Z_OBJ_HT_P(array_ptr)->get_class_entry == NULL) {
ce = Z_OBJCE_P(array_ptr);
if (!ce || ce->get_iterator == NULL) {
- SEPARATE_ZVAL_IF_NOT_REF(array_ptr);
+ if (!array_ref) {
+ SEPARATE_ZVAL(array_ptr);
+ }
Z_ADDREF_P(array_ptr);
}
} else {
if (Z_TYPE_P(array_ptr) == IS_ARRAY) {
- SEPARATE_ZVAL_IF_NOT_REF(array_ptr);
- if (opline->extended_value & ZEND_FE_FETCH_BYREF) {
- ZVAL_NEW_REF(array_ptr, array_ptr);
+ if (!array_ref) {
+ SEPARATE_ZVAL(array_ptr);
+ if (opline->extended_value & ZEND_FE_FETCH_BYREF) {
+ ZVAL_NEW_REF(array_ptr, array_ptr);
+ }
}
}
if (Z_REFCOUNTED_P(array_ptr)) Z_ADDREF_P(array_ptr);
}
} else {
array_ptr = opline->op1.zv;
+ if (Z_ISREF_P(array_ptr)) {
+ array_ref = array_ptr;
+ array_ptr = Z_REFVAL_P(array_ptr);
+ }
if (0) { /* IS_TMP_VAR */
zval tmp;
} else if (Z_REFCOUNTED_P(array_ptr)) {
if (IS_CONST == IS_CONST ||
(IS_CONST == IS_CV &&
- !Z_ISREF_P(array_ptr) &&
+ (array_ref == NULL) &&
Z_REFCOUNT_P(array_ptr) > 1) ||
(IS_CONST == IS_VAR &&
- !Z_ISREF_P(array_ptr) &&
+ (array_ref == NULL) &&
Z_REFCOUNT_P(array_ptr) > 2)) {
zval tmp;
zend_object_iterator *iter = NULL;
zend_class_entry *ce = NULL;
zend_bool is_empty = 0;
+ zval *array_ref = NULL;
SAVE_OPLINE();
if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) &&
(opline->extended_value & ZEND_FE_RESET_VARIABLE)) {
array_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ if (Z_ISREF_P(array_ptr)) {
+ array_ref = array_ptr;
+ array_ptr = Z_REFVAL_P(array_ptr);
+ }
if (Z_TYPE_P(array_ptr) == IS_NULL) {
} else if (Z_TYPE_P(array_ptr) == IS_OBJECT) {
if(Z_OBJ_HT_P(array_ptr)->get_class_entry == NULL) {
ce = Z_OBJCE_P(array_ptr);
if (!ce || ce->get_iterator == NULL) {
- SEPARATE_ZVAL_IF_NOT_REF(array_ptr);
+ if (!array_ref) {
+ SEPARATE_ZVAL(array_ptr);
+ }
Z_ADDREF_P(array_ptr);
}
} else {
if (Z_TYPE_P(array_ptr) == IS_ARRAY) {
- SEPARATE_ZVAL_IF_NOT_REF(array_ptr);
- if (opline->extended_value & ZEND_FE_FETCH_BYREF) {
- ZVAL_NEW_REF(array_ptr, array_ptr);
+ if (!array_ref) {
+ SEPARATE_ZVAL(array_ptr);
+ if (opline->extended_value & ZEND_FE_FETCH_BYREF) {
+ ZVAL_NEW_REF(array_ptr, array_ptr);
+ }
}
}
if (Z_REFCOUNTED_P(array_ptr)) Z_ADDREF_P(array_ptr);
}
} else {
array_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ if (Z_ISREF_P(array_ptr)) {
+ array_ref = array_ptr;
+ array_ptr = Z_REFVAL_P(array_ptr);
+ }
if (1) { /* IS_TMP_VAR */
zval tmp;
} else if (Z_REFCOUNTED_P(array_ptr)) {
if (IS_TMP_VAR == IS_CONST ||
(IS_TMP_VAR == IS_CV &&
- !Z_ISREF_P(array_ptr) &&
+ (array_ref == NULL) &&
Z_REFCOUNT_P(array_ptr) > 1) ||
(IS_TMP_VAR == IS_VAR &&
- !Z_ISREF_P(array_ptr) &&
+ (array_ref == NULL) &&
Z_REFCOUNT_P(array_ptr) > 2)) {
zval tmp;
zend_object_iterator *iter = NULL;
zend_class_entry *ce = NULL;
zend_bool is_empty = 0;
+ zval *array_ref = NULL;
SAVE_OPLINE();
if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) &&
(opline->extended_value & ZEND_FE_RESET_VARIABLE)) {
array_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ if (Z_ISREF_P(array_ptr)) {
+ array_ref = array_ptr;
+ array_ptr = Z_REFVAL_P(array_ptr);
+ }
if (Z_TYPE_P(array_ptr) == IS_NULL) {
} else if (Z_TYPE_P(array_ptr) == IS_OBJECT) {
if(Z_OBJ_HT_P(array_ptr)->get_class_entry == NULL) {
ce = Z_OBJCE_P(array_ptr);
if (!ce || ce->get_iterator == NULL) {
- SEPARATE_ZVAL_IF_NOT_REF(array_ptr);
+ if (!array_ref) {
+ SEPARATE_ZVAL(array_ptr);
+ }
Z_ADDREF_P(array_ptr);
}
} else {
if (Z_TYPE_P(array_ptr) == IS_ARRAY) {
- SEPARATE_ZVAL_IF_NOT_REF(array_ptr);
- if (opline->extended_value & ZEND_FE_FETCH_BYREF) {
- ZVAL_NEW_REF(array_ptr, array_ptr);
+ if (!array_ref) {
+ SEPARATE_ZVAL(array_ptr);
+ if (opline->extended_value & ZEND_FE_FETCH_BYREF) {
+ ZVAL_NEW_REF(array_ptr, array_ptr);
+ }
}
}
if (Z_REFCOUNTED_P(array_ptr)) Z_ADDREF_P(array_ptr);
}
} else {
array_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ if (Z_ISREF_P(array_ptr)) {
+ array_ref = array_ptr;
+ array_ptr = Z_REFVAL_P(array_ptr);
+ }
if (0) { /* IS_TMP_VAR */
zval tmp;
} else if (Z_REFCOUNTED_P(array_ptr)) {
if (IS_VAR == IS_CONST ||
(IS_VAR == IS_CV &&
- !Z_ISREF_P(array_ptr) &&
+ (array_ref == NULL) &&
Z_REFCOUNT_P(array_ptr) > 1) ||
(IS_VAR == IS_VAR &&
- !Z_ISREF_P(array_ptr) &&
+ (array_ref == NULL) &&
Z_REFCOUNT_P(array_ptr) > 2)) {
zval tmp;
zend_object_iterator *iter = NULL;
zend_class_entry *ce = NULL;
zend_bool is_empty = 0;
+ zval *array_ref = NULL;
SAVE_OPLINE();
if ((IS_CV == IS_CV || IS_CV == IS_VAR) &&
(opline->extended_value & ZEND_FE_RESET_VARIABLE)) {
array_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
+ if (Z_ISREF_P(array_ptr)) {
+ array_ref = array_ptr;
+ array_ptr = Z_REFVAL_P(array_ptr);
+ }
if (Z_TYPE_P(array_ptr) == IS_NULL) {
} else if (Z_TYPE_P(array_ptr) == IS_OBJECT) {
if(Z_OBJ_HT_P(array_ptr)->get_class_entry == NULL) {
ce = Z_OBJCE_P(array_ptr);
if (!ce || ce->get_iterator == NULL) {
- SEPARATE_ZVAL_IF_NOT_REF(array_ptr);
+ if (!array_ref) {
+ SEPARATE_ZVAL(array_ptr);
+ }
Z_ADDREF_P(array_ptr);
}
} else {
if (Z_TYPE_P(array_ptr) == IS_ARRAY) {
- SEPARATE_ZVAL_IF_NOT_REF(array_ptr);
- if (opline->extended_value & ZEND_FE_FETCH_BYREF) {
- ZVAL_NEW_REF(array_ptr, array_ptr);
+ if (!array_ref) {
+ SEPARATE_ZVAL(array_ptr);
+ if (opline->extended_value & ZEND_FE_FETCH_BYREF) {
+ ZVAL_NEW_REF(array_ptr, array_ptr);
+ }
}
}
if (Z_REFCOUNTED_P(array_ptr)) Z_ADDREF_P(array_ptr);
}
} else {
array_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
+ if (Z_ISREF_P(array_ptr)) {
+ array_ref = array_ptr;
+ array_ptr = Z_REFVAL_P(array_ptr);
+ }
if (0) { /* IS_TMP_VAR */
zval tmp;
} else if (Z_REFCOUNTED_P(array_ptr)) {
if (IS_CV == IS_CONST ||
(IS_CV == IS_CV &&
- !Z_ISREF_P(array_ptr) &&
+ (array_ref == NULL) &&
Z_REFCOUNT_P(array_ptr) > 1) ||
(IS_CV == IS_VAR &&
- !Z_ISREF_P(array_ptr) &&
+ (array_ref == NULL) &&
Z_REFCOUNT_P(array_ptr) > 2)) {
zval tmp;