//??? if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
//??? EX_T(opline->op1.var).var.fcall_returned_reference) {
//??? } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
- zend_error(E_NOTICE, "Only variable references should be returned by reference");
- if (EX(return_value)) {
- ZVAL_DUP(EX(return_value), retval_ptr);
- }
- break;
+//??? zend_error(E_NOTICE, "Only variable references should be returned by reference");
+//??? if (EX(return_value)) {
+//??? ZVAL_DUP(EX(return_value), retval_ptr);
+//??? }
+//??? break;
//??? }
}
//??? if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
//??? EX_T(opline->op1.var).var.fcall_returned_reference) {
//??? } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
- zend_error(E_NOTICE, "Only variable references should be returned by reference");
- if (EX(return_value)) {
- ZVAL_DUP(EX(return_value), retval_ptr);
- }
- break;
+//??? zend_error(E_NOTICE, "Only variable references should be returned by reference");
+//??? if (EX(return_value)) {
+//??? ZVAL_DUP(EX(return_value), retval_ptr);
+//??? }
+//??? break;
//??? }
}
//??? if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
//??? EX_T(opline->op1.var).var.fcall_returned_reference) {
//??? } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
- zend_error(E_NOTICE, "Only variable references should be returned by reference");
- if (EX(return_value)) {
- ZVAL_DUP(EX(return_value), retval_ptr);
- }
- break;
+//??? zend_error(E_NOTICE, "Only variable references should be returned by reference");
+//??? if (EX(return_value)) {
+//??? ZVAL_DUP(EX(return_value), retval_ptr);
+//??? }
+//??? break;
//??? }
}
if (UNEXPECTED(opline->extended_value != 0)) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
-//??? EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
-//??? EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
}
- FREE_OP_VAR_PTR(free_op_data2);
+//??? FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
}
if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
if (UNEXPECTED(opline->extended_value != 0)) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
-//??? EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
-//??? EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
}
- FREE_OP_VAR_PTR(free_op_data2);
+//??? FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
}
if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
if (UNEXPECTED(opline->extended_value != 0)) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
-//??? EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
-//??? EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
}
- FREE_OP_VAR_PTR(free_op_data2);
+//??? FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
}
if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
if (UNEXPECTED(opline->extended_value != 0)) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
}
- FREE_OP_VAR_PTR(free_op_data2);
+//??? FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
}
if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
if (UNEXPECTED(opline->extended_value != 0)) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
-//??? EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
-//??? EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
}
- FREE_OP_VAR_PTR(free_op_data2);
+//??? FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
}
if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
-//??? EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
-//??? EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
-//??? EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
-//??? EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
-//??? EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
-//??? EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
-//??? EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
-//??? EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
//??? if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
//??? EX_T(opline->op1.var).var.fcall_returned_reference) {
//??? } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
- zend_error(E_NOTICE, "Only variable references should be returned by reference");
- if (EX(return_value)) {
- ZVAL_DUP(EX(return_value), retval_ptr);
- }
- break;
+//??? zend_error(E_NOTICE, "Only variable references should be returned by reference");
+//??? if (EX(return_value)) {
+//??? ZVAL_DUP(EX(return_value), retval_ptr);
+//??? }
+//??? break;
//??? }
}
if (UNEXPECTED(opline->extended_value != 0)) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
-//??? EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
-//??? EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
}
- FREE_OP_VAR_PTR(free_op_data2);
+//??? FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
}
if (UNEXPECTED(opline->extended_value != 0)) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
-//??? EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
-//??? EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
}
- FREE_OP_VAR_PTR(free_op_data2);
+//??? FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
}
if (UNEXPECTED(opline->extended_value != 0)) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
-//??? EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
-//??? EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
}
- FREE_OP_VAR_PTR(free_op_data2);
+//??? FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
}
if (UNEXPECTED(opline->extended_value != 0)) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
}
- FREE_OP_VAR_PTR(free_op_data2);
+//??? FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
}
if (UNEXPECTED(opline->extended_value != 0)) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
zval *retval_ptr = EX_VAR(opline->result.var);
-//??? Z_DELREF_P(retval_ptr);
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
-//??? Z_ADDREF_P(retval_ptr);
-//??? EX_T(opline->result.var).var.ptr = *EX_T(opline->result.var).var.ptr_ptr;
-//??? EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
+ if (Z_TYPE_P(retval_ptr) == IS_INDIRECT) {
+ retval_ptr = Z_INDIRECT_P(retval_ptr);
+ }
+ if (!Z_ISREF_P(retval_ptr)) {
+ if (Z_REFCOUNTED_P(retval_ptr)) {
+ Z_DELREF_P(retval_ptr);
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_NEW_REF(retval_ptr, retval_ptr);
+ }
+ }
}
CHECK_EXCEPTION();
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
}
- FREE_OP_VAR_PTR(free_op_data2);
+//??? FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
}