top = ZEND_CALL_ARG(EX(call), arg_num);
if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
if (Z_REFCOUNT_P(args) == 1) {
- ZVAL_MAKE_REF(arg);
- Z_ADDREF_P(arg);
+ if (Z_ISREF_P(arg)) {
+ Z_ADDREF_P(arg);
+ } else {
+ ZVAL_MAKE_REF_EX(arg, 2);
+ }
ZVAL_REF(top, Z_REF_P(arg));
} else {
ZVAL_DUP(top, arg);
}
if (EX(return_value)) {
- ZVAL_MAKE_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
+ if (Z_ISREF_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(retval_ptr, 2);
+ }
ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
}
if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
expr_ptr = NULL;
- ZVAL_MAKE_REF(expr_ptr);
- Z_ADDREF_P(expr_ptr);
+ if (Z_ISREF_P(expr_ptr)) {
+ Z_ADDREF_P(expr_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(expr_ptr, 2);
+ }
} else {
expr_ptr = RT_CONSTANT(opline, opline->op1);
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
}
} else {
if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
expr_ptr = NULL;
- ZVAL_MAKE_REF(expr_ptr);
- Z_ADDREF_P(expr_ptr);
+ if (Z_ISREF_P(expr_ptr)) {
+ Z_ADDREF_P(expr_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(expr_ptr, 2);
+ }
} else {
expr_ptr = RT_CONSTANT(opline, opline->op1);
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
}
} else {
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
}
} else {
if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
expr_ptr = NULL;
- ZVAL_MAKE_REF(expr_ptr);
- Z_ADDREF_P(expr_ptr);
+ if (Z_ISREF_P(expr_ptr)) {
+ Z_ADDREF_P(expr_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(expr_ptr, 2);
+ }
} else {
expr_ptr = RT_CONSTANT(opline, opline->op1);
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
}
} else {
if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
expr_ptr = NULL;
- ZVAL_MAKE_REF(expr_ptr);
- Z_ADDREF_P(expr_ptr);
+ if (Z_ISREF_P(expr_ptr)) {
+ Z_ADDREF_P(expr_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(expr_ptr, 2);
+ }
} else {
expr_ptr = RT_CONSTANT(opline, opline->op1);
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
}
} else {
}
if (EX(return_value)) {
- ZVAL_MAKE_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
+ if (Z_ISREF_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(retval_ptr, 2);
+ }
ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
}
if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
expr_ptr = NULL;
- ZVAL_MAKE_REF(expr_ptr);
- Z_ADDREF_P(expr_ptr);
+ if (Z_ISREF_P(expr_ptr)) {
+ Z_ADDREF_P(expr_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(expr_ptr, 2);
+ }
} else {
expr_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
}
} else {
if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
expr_ptr = NULL;
- ZVAL_MAKE_REF(expr_ptr);
- Z_ADDREF_P(expr_ptr);
+ if (Z_ISREF_P(expr_ptr)) {
+ Z_ADDREF_P(expr_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(expr_ptr, 2);
+ }
} else {
expr_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
}
} else {
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
}
} else {
if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
expr_ptr = NULL;
- ZVAL_MAKE_REF(expr_ptr);
- Z_ADDREF_P(expr_ptr);
+ if (Z_ISREF_P(expr_ptr)) {
+ Z_ADDREF_P(expr_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(expr_ptr, 2);
+ }
} else {
expr_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
}
} else {
if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
expr_ptr = NULL;
- ZVAL_MAKE_REF(expr_ptr);
- Z_ADDREF_P(expr_ptr);
+ if (Z_ISREF_P(expr_ptr)) {
+ Z_ADDREF_P(expr_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(expr_ptr, 2);
+ }
} else {
expr_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
}
} else {
if (opline->extended_value) {
/* By-ref binding */
var = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
- ZVAL_MAKE_REF(var);
- Z_ADDREF_P(var);
+ if (Z_ISREF_P(var)) {
+ Z_ADDREF_P(var);
+ } else {
+ ZVAL_MAKE_REF_EX(var, 2);
+ }
} else {
var = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (UNEXPECTED(Z_ISUNDEF_P(var))) {
}
if (EX(return_value)) {
- ZVAL_MAKE_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
+ if (Z_ISREF_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(retval_ptr, 2);
+ }
ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
}
if (Z_ISREF_P(varptr)) {
Z_ADDREF_P(varptr);
- ZVAL_COPY_VALUE(arg, varptr);
} else {
- ZVAL_NEW_REF(arg, varptr);
- Z_ADDREF_P(arg);
- ZVAL_REF(varptr, Z_REF_P(arg));
+ ZVAL_MAKE_REF_EX(varptr, 2);
}
+ ZVAL_REF(arg, Z_REF_P(varptr));
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
ZEND_VM_NEXT_OPCODE();
if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
- ZVAL_MAKE_REF(expr_ptr);
- Z_ADDREF_P(expr_ptr);
+ if (Z_ISREF_P(expr_ptr)) {
+ Z_ADDREF_P(expr_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(expr_ptr, 2);
+ }
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
} else {
expr_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
}
if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
- ZVAL_MAKE_REF(expr_ptr);
- Z_ADDREF_P(expr_ptr);
+ if (Z_ISREF_P(expr_ptr)) {
+ Z_ADDREF_P(expr_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(expr_ptr, 2);
+ }
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
} else {
expr_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
}
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
}
if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
- ZVAL_MAKE_REF(expr_ptr);
- Z_ADDREF_P(expr_ptr);
+ if (Z_ISREF_P(expr_ptr)) {
+ Z_ADDREF_P(expr_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(expr_ptr, 2);
+ }
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
} else {
expr_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
}
ZVAL_NULL(Z_REFVAL_P(op1));
ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
} else {
- ZVAL_MAKE_REF(op1);
- ZVAL_COPY(EX_VAR(opline->result.var), op1);
+ if (Z_ISREF_P(op1)) {
+ Z_ADDREF_P(op1);
+ } else {
+ ZVAL_MAKE_REF_EX(op1, 2);
+ }
+ ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
op1 = Z_INDIRECT_P(op1);
if (EXPECTED(!Z_ISREF_P(op1))) {
- ZVAL_MAKE_REF(op1);
+ ZVAL_MAKE_REF_EX(op1, 2);
+ } else {
+ GC_ADDREF(Z_REF_P(op1));
}
- GC_ADDREF(Z_REF_P(op1));
ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
} else {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
- ZVAL_MAKE_REF(expr_ptr);
- Z_ADDREF_P(expr_ptr);
+ if (Z_ISREF_P(expr_ptr)) {
+ Z_ADDREF_P(expr_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(expr_ptr, 2);
+ }
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
} else {
expr_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
}
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
}
} else {
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
}
} else {
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
}
} else {
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
}
} else {
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
}
} else {
}
if (EX(return_value)) {
- ZVAL_MAKE_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
+ if (Z_ISREF_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(retval_ptr, 2);
+ }
ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
}
if (Z_ISREF_P(varptr)) {
Z_ADDREF_P(varptr);
- ZVAL_COPY_VALUE(arg, varptr);
} else {
- ZVAL_NEW_REF(arg, varptr);
- Z_ADDREF_P(arg);
- ZVAL_REF(varptr, Z_REF_P(arg));
+ ZVAL_MAKE_REF_EX(varptr, 2);
}
+ ZVAL_REF(arg, Z_REF_P(varptr));
ZEND_VM_NEXT_OPCODE();
}
if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
- ZVAL_MAKE_REF(expr_ptr);
- Z_ADDREF_P(expr_ptr);
+ if (Z_ISREF_P(expr_ptr)) {
+ Z_ADDREF_P(expr_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(expr_ptr, 2);
+ }
} else {
expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
}
} else {
}
if (UNEXPECTED(!Z_ISREF_P(value))) {
- ref = (zend_reference*)emalloc(sizeof(zend_reference));
- GC_SET_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;
+ ZVAL_MAKE_REF_EX(value, 2);
+ ref = Z_REF_P(value);
} else {
ref = Z_REF_P(value);
GC_ADDREF(ref);
if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
- ZVAL_MAKE_REF(expr_ptr);
- Z_ADDREF_P(expr_ptr);
+ if (Z_ISREF_P(expr_ptr)) {
+ Z_ADDREF_P(expr_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(expr_ptr, 2);
+ }
} else {
expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
}
} else {
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
}
} else {
if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
- ZVAL_MAKE_REF(expr_ptr);
- Z_ADDREF_P(expr_ptr);
+ if (Z_ISREF_P(expr_ptr)) {
+ Z_ADDREF_P(expr_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(expr_ptr, 2);
+ }
} else {
expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
}
} else {
ZVAL_NULL(Z_REFVAL_P(op1));
ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
} else {
- ZVAL_MAKE_REF(op1);
- ZVAL_COPY(EX_VAR(opline->result.var), op1);
+ if (Z_ISREF_P(op1)) {
+ Z_ADDREF_P(op1);
+ } else {
+ ZVAL_MAKE_REF_EX(op1, 2);
+ }
+ ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
op1 = Z_INDIRECT_P(op1);
if (EXPECTED(!Z_ISREF_P(op1))) {
- ZVAL_MAKE_REF(op1);
+ ZVAL_MAKE_REF_EX(op1, 2);
+ } else {
+ GC_ADDREF(Z_REF_P(op1));
}
- GC_ADDREF(Z_REF_P(op1));
ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
} else {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
- ZVAL_MAKE_REF(expr_ptr);
- Z_ADDREF_P(expr_ptr);
+ if (Z_ISREF_P(expr_ptr)) {
+ Z_ADDREF_P(expr_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(expr_ptr, 2);
+ }
} else {
expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
(opline->extended_value == ZEND_RETURNS_FUNCTION &&
!Z_ISREF_P(value_ptr)))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+ ZVAL_COPY(&generator->value, value_ptr);
} else {
- ZVAL_MAKE_REF(value_ptr);
+ if (Z_ISREF_P(value_ptr)) {
+ Z_ADDREF_P(value_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(value_ptr, 2);
+ }
+ ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
}
- ZVAL_COPY(&generator->value, value_ptr);
}
} else {