zval_copy_ctor_func(EX(return_value));
}
}
- } else if (Z_ISREF_P(retval_ptr)) {
+ } else if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) && Z_ISREF_P(retval_ptr)) {
ZVAL_COPY(EX(return_value), Z_REFVAL_P(retval_ptr));
} else {
} else {
zend_error(E_NOTICE, "Only variable references should be returned by reference");
if (EX(return_value)) {
- zval tmp;
- ZVAL_DUP(&tmp, retval_ptr);
- ZVAL_NEW_REF(EX(return_value), &tmp);
+ ZVAL_NEW_REF(EX(return_value), retval_ptr);
+ if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
}
break;
}
ZVAL_DUP(&new_expr, expr_ptr);
expr_ptr = &new_expr;
}
- } else if (Z_ISREF_P(expr_ptr)) {
- ZVAL_DUP(&new_expr, Z_REFVAL_P(expr_ptr));
- expr_ptr = &new_expr;
+ } else if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) && Z_ISREF_P(expr_ptr)) {
+ expr_ptr = Z_REFVAL_P(expr_ptr);
+ if (Z_REFCOUNTED_P(expr_ptr)) Z_ADDREF_P(expr_ptr);
} else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(expr_ptr)) {
Z_ADDREF_P(expr_ptr);
ZVAL_DUP(&generator->value, value);
} else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_CONST == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_CONST == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&new_expr, expr_ptr);
expr_ptr = &new_expr;
}
- } else if (Z_ISREF_P(expr_ptr)) {
- ZVAL_DUP(&new_expr, Z_REFVAL_P(expr_ptr));
- expr_ptr = &new_expr;
+ } else if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) && Z_ISREF_P(expr_ptr)) {
+ expr_ptr = Z_REFVAL_P(expr_ptr);
+ if (Z_REFCOUNTED_P(expr_ptr)) Z_ADDREF_P(expr_ptr);
} else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(expr_ptr)) {
Z_ADDREF_P(expr_ptr);
ZVAL_DUP(&generator->value, value);
} else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_CONST == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_TMP_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&new_expr, expr_ptr);
expr_ptr = &new_expr;
}
- } else if (Z_ISREF_P(expr_ptr)) {
- ZVAL_DUP(&new_expr, Z_REFVAL_P(expr_ptr));
- expr_ptr = &new_expr;
+ } else if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) && Z_ISREF_P(expr_ptr)) {
+ expr_ptr = Z_REFVAL_P(expr_ptr);
+ if (Z_REFCOUNTED_P(expr_ptr)) Z_ADDREF_P(expr_ptr);
} else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(expr_ptr)) {
Z_ADDREF_P(expr_ptr);
ZVAL_DUP(&generator->value, value);
} else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_CONST == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
zval_ptr_dtor_nogc(free_op2.var);
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&new_expr, expr_ptr);
expr_ptr = &new_expr;
}
- } else if (Z_ISREF_P(expr_ptr)) {
- ZVAL_DUP(&new_expr, Z_REFVAL_P(expr_ptr));
- expr_ptr = &new_expr;
+ } else if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) && Z_ISREF_P(expr_ptr)) {
+ expr_ptr = Z_REFVAL_P(expr_ptr);
+ if (Z_REFCOUNTED_P(expr_ptr)) Z_ADDREF_P(expr_ptr);
} else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(expr_ptr)) {
Z_ADDREF_P(expr_ptr);
ZVAL_DUP(&generator->value, value);
} else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_CONST == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_UNUSED == IS_VAR || IS_UNUSED == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_UNUSED == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&new_expr, expr_ptr);
expr_ptr = &new_expr;
}
- } else if (Z_ISREF_P(expr_ptr)) {
- ZVAL_DUP(&new_expr, Z_REFVAL_P(expr_ptr));
- expr_ptr = &new_expr;
+ } else if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) && Z_ISREF_P(expr_ptr)) {
+ expr_ptr = Z_REFVAL_P(expr_ptr);
+ if (Z_REFCOUNTED_P(expr_ptr)) Z_ADDREF_P(expr_ptr);
} else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(expr_ptr)) {
Z_ADDREF_P(expr_ptr);
ZVAL_DUP(&generator->value, value);
} else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_CONST == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_CV == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
zval_copy_ctor_func(EX(return_value));
}
}
- } else if (Z_ISREF_P(retval_ptr)) {
+ } else if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) && Z_ISREF_P(retval_ptr)) {
ZVAL_COPY(EX(return_value), Z_REFVAL_P(retval_ptr));
} else {
} else {
zend_error(E_NOTICE, "Only variable references should be returned by reference");
if (EX(return_value)) {
- zval tmp;
- ZVAL_DUP(&tmp, retval_ptr);
- ZVAL_NEW_REF(EX(return_value), &tmp);
+ ZVAL_NEW_REF(EX(return_value), retval_ptr);
+ if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
}
break;
}
ZVAL_DUP(&new_expr, expr_ptr);
expr_ptr = &new_expr;
}
- } else if (Z_ISREF_P(expr_ptr)) {
- ZVAL_DUP(&new_expr, Z_REFVAL_P(expr_ptr));
- expr_ptr = &new_expr;
+ } else if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) && Z_ISREF_P(expr_ptr)) {
+ expr_ptr = Z_REFVAL_P(expr_ptr);
+ if (Z_REFCOUNTED_P(expr_ptr)) Z_ADDREF_P(expr_ptr);
} else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(expr_ptr)) {
Z_ADDREF_P(expr_ptr);
ZVAL_DUP(&generator->value, value);
} else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_TMP_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_CONST == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&new_expr, expr_ptr);
expr_ptr = &new_expr;
}
- } else if (Z_ISREF_P(expr_ptr)) {
- ZVAL_DUP(&new_expr, Z_REFVAL_P(expr_ptr));
- expr_ptr = &new_expr;
+ } else if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) && Z_ISREF_P(expr_ptr)) {
+ expr_ptr = Z_REFVAL_P(expr_ptr);
+ if (Z_REFCOUNTED_P(expr_ptr)) Z_ADDREF_P(expr_ptr);
} else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(expr_ptr)) {
Z_ADDREF_P(expr_ptr);
ZVAL_DUP(&generator->value, value);
} else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_TMP_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_TMP_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&new_expr, expr_ptr);
expr_ptr = &new_expr;
}
- } else if (Z_ISREF_P(expr_ptr)) {
- ZVAL_DUP(&new_expr, Z_REFVAL_P(expr_ptr));
- expr_ptr = &new_expr;
+ } else if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) && Z_ISREF_P(expr_ptr)) {
+ expr_ptr = Z_REFVAL_P(expr_ptr);
+ if (Z_REFCOUNTED_P(expr_ptr)) Z_ADDREF_P(expr_ptr);
} else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(expr_ptr)) {
Z_ADDREF_P(expr_ptr);
ZVAL_DUP(&generator->value, value);
} else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_TMP_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
zval_ptr_dtor_nogc(free_op2.var);
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&new_expr, expr_ptr);
expr_ptr = &new_expr;
}
- } else if (Z_ISREF_P(expr_ptr)) {
- ZVAL_DUP(&new_expr, Z_REFVAL_P(expr_ptr));
- expr_ptr = &new_expr;
+ } else if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) && Z_ISREF_P(expr_ptr)) {
+ expr_ptr = Z_REFVAL_P(expr_ptr);
+ if (Z_REFCOUNTED_P(expr_ptr)) Z_ADDREF_P(expr_ptr);
} else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(expr_ptr)) {
Z_ADDREF_P(expr_ptr);
ZVAL_DUP(&generator->value, value);
} else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_TMP_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_UNUSED == IS_VAR || IS_UNUSED == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_UNUSED == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&new_expr, expr_ptr);
expr_ptr = &new_expr;
}
- } else if (Z_ISREF_P(expr_ptr)) {
- ZVAL_DUP(&new_expr, Z_REFVAL_P(expr_ptr));
- expr_ptr = &new_expr;
+ } else if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) && Z_ISREF_P(expr_ptr)) {
+ expr_ptr = Z_REFVAL_P(expr_ptr);
+ if (Z_REFCOUNTED_P(expr_ptr)) Z_ADDREF_P(expr_ptr);
} else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(expr_ptr)) {
Z_ADDREF_P(expr_ptr);
ZVAL_DUP(&generator->value, value);
} else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_TMP_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_CV == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
zval_copy_ctor_func(EX(return_value));
}
}
- } else if (Z_ISREF_P(retval_ptr)) {
+ } else if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_ISREF_P(retval_ptr)) {
ZVAL_COPY(EX(return_value), Z_REFVAL_P(retval_ptr));
zval_ptr_dtor_nogc(free_op1.var);
} else {
} else {
zend_error(E_NOTICE, "Only variable references should be returned by reference");
if (EX(return_value)) {
- zval tmp;
- ZVAL_DUP(&tmp, retval_ptr);
- ZVAL_NEW_REF(EX(return_value), &tmp);
+ ZVAL_NEW_REF(EX(return_value), retval_ptr);
+ if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
}
break;
}
varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
arg = ZEND_CALL_ARG(EX(call), opline->op2.num);
EX(call)->num_args = opline->op2.num;
- if (Z_ISREF_P(varptr)) {
+ if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_ISREF_P(varptr)) {
ZVAL_COPY(arg, Z_REFVAL_P(varptr));
zval_ptr_dtor_nogc(free_op1.var);
} else {
varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
arg = ZEND_CALL_ARG(EX(call), opline->op2.num);
EX(call)->num_args = opline->op2.num;
- if (Z_ISREF_P(varptr)) {
+ if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_ISREF_P(varptr)) {
ZVAL_COPY(arg, Z_REFVAL_P(varptr));
zval_ptr_dtor_nogc(free_op1.var);
} else {
ZVAL_DUP(&new_expr, expr_ptr);
expr_ptr = &new_expr;
}
- } else if (Z_ISREF_P(expr_ptr)) {
- ZVAL_DUP(&new_expr, Z_REFVAL_P(expr_ptr));
- expr_ptr = &new_expr;
+ } else if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_ISREF_P(expr_ptr)) {
+ expr_ptr = Z_REFVAL_P(expr_ptr);
+ if (Z_REFCOUNTED_P(expr_ptr)) Z_ADDREF_P(expr_ptr);
zval_ptr_dtor_nogc(free_op1.var);
} else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(expr_ptr)) {
Z_ADDREF_P(expr_ptr);
ZVAL_DUP(&generator->value, value);
} else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
zval_ptr_dtor_nogc(free_op1.var);
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_CONST == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&new_expr, expr_ptr);
expr_ptr = &new_expr;
}
- } else if (Z_ISREF_P(expr_ptr)) {
- ZVAL_DUP(&new_expr, Z_REFVAL_P(expr_ptr));
- expr_ptr = &new_expr;
+ } else if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_ISREF_P(expr_ptr)) {
+ expr_ptr = Z_REFVAL_P(expr_ptr);
+ if (Z_REFCOUNTED_P(expr_ptr)) Z_ADDREF_P(expr_ptr);
zval_ptr_dtor_nogc(free_op1.var);
} else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(expr_ptr)) {
Z_ADDREF_P(expr_ptr);
ZVAL_DUP(&generator->value, value);
} else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
zval_ptr_dtor_nogc(free_op1.var);
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_TMP_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&new_expr, expr_ptr);
expr_ptr = &new_expr;
}
- } else if (Z_ISREF_P(expr_ptr)) {
- ZVAL_DUP(&new_expr, Z_REFVAL_P(expr_ptr));
- expr_ptr = &new_expr;
+ } else if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_ISREF_P(expr_ptr)) {
+ expr_ptr = Z_REFVAL_P(expr_ptr);
+ if (Z_REFCOUNTED_P(expr_ptr)) Z_ADDREF_P(expr_ptr);
zval_ptr_dtor_nogc(free_op1.var);
} else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(expr_ptr)) {
Z_ADDREF_P(expr_ptr);
ZVAL_DUP(&generator->value, value);
} else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
zval_ptr_dtor_nogc(free_op1.var);
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
zval_ptr_dtor_nogc(free_op2.var);
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&new_expr, expr_ptr);
expr_ptr = &new_expr;
}
- } else if (Z_ISREF_P(expr_ptr)) {
- ZVAL_DUP(&new_expr, Z_REFVAL_P(expr_ptr));
- expr_ptr = &new_expr;
+ } else if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_ISREF_P(expr_ptr)) {
+ expr_ptr = Z_REFVAL_P(expr_ptr);
+ if (Z_REFCOUNTED_P(expr_ptr)) Z_ADDREF_P(expr_ptr);
zval_ptr_dtor_nogc(free_op1.var);
} else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(expr_ptr)) {
Z_ADDREF_P(expr_ptr);
ZVAL_DUP(&generator->value, value);
} else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
zval_ptr_dtor_nogc(free_op1.var);
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_UNUSED == IS_VAR || IS_UNUSED == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_UNUSED == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&new_expr, expr_ptr);
expr_ptr = &new_expr;
}
- } else if (Z_ISREF_P(expr_ptr)) {
- ZVAL_DUP(&new_expr, Z_REFVAL_P(expr_ptr));
- expr_ptr = &new_expr;
+ } else if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_ISREF_P(expr_ptr)) {
+ expr_ptr = Z_REFVAL_P(expr_ptr);
+ if (Z_REFCOUNTED_P(expr_ptr)) Z_ADDREF_P(expr_ptr);
zval_ptr_dtor_nogc(free_op1.var);
} else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(expr_ptr)) {
Z_ADDREF_P(expr_ptr);
ZVAL_DUP(&generator->value, value);
} else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
zval_ptr_dtor_nogc(free_op1.var);
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_CV == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&generator->value, value);
} else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_UNUSED == IS_CV || IS_UNUSED == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_UNUSED == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_CONST == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&generator->value, value);
} else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_UNUSED == IS_CV || IS_UNUSED == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_UNUSED == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_TMP_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&generator->value, value);
} else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_UNUSED == IS_CV || IS_UNUSED == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_UNUSED == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
zval_ptr_dtor_nogc(free_op2.var);
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&generator->value, value);
} else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_UNUSED == IS_CV || IS_UNUSED == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_UNUSED == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_UNUSED == IS_VAR || IS_UNUSED == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_UNUSED == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&generator->value, value);
} else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_UNUSED == IS_CV || IS_UNUSED == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_UNUSED == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_CV == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
zval_copy_ctor_func(EX(return_value));
}
}
- } else if (Z_ISREF_P(retval_ptr)) {
+ } else if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_ISREF_P(retval_ptr)) {
ZVAL_COPY(EX(return_value), Z_REFVAL_P(retval_ptr));
} else {
} else {
zend_error(E_NOTICE, "Only variable references should be returned by reference");
if (EX(return_value)) {
- zval tmp;
- ZVAL_DUP(&tmp, retval_ptr);
- ZVAL_NEW_REF(EX(return_value), &tmp);
+ ZVAL_NEW_REF(EX(return_value), retval_ptr);
+ if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
}
break;
}
varptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
arg = ZEND_CALL_ARG(EX(call), opline->op2.num);
EX(call)->num_args = opline->op2.num;
- if (Z_ISREF_P(varptr)) {
+ if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_ISREF_P(varptr)) {
ZVAL_COPY(arg, Z_REFVAL_P(varptr));
} else {
varptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
arg = ZEND_CALL_ARG(EX(call), opline->op2.num);
EX(call)->num_args = opline->op2.num;
- if (Z_ISREF_P(varptr)) {
+ if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_ISREF_P(varptr)) {
ZVAL_COPY(arg, Z_REFVAL_P(varptr));
} else {
ZVAL_DUP(&new_expr, expr_ptr);
expr_ptr = &new_expr;
}
- } else if (Z_ISREF_P(expr_ptr)) {
- ZVAL_DUP(&new_expr, Z_REFVAL_P(expr_ptr));
- expr_ptr = &new_expr;
+ } else if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_ISREF_P(expr_ptr)) {
+ expr_ptr = Z_REFVAL_P(expr_ptr);
+ if (Z_REFCOUNTED_P(expr_ptr)) Z_ADDREF_P(expr_ptr);
} else if (IS_CV == IS_CV && Z_REFCOUNTED_P(expr_ptr)) {
Z_ADDREF_P(expr_ptr);
ZVAL_DUP(&generator->value, value);
} else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_CV == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_CONST == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&new_expr, expr_ptr);
expr_ptr = &new_expr;
}
- } else if (Z_ISREF_P(expr_ptr)) {
- ZVAL_DUP(&new_expr, Z_REFVAL_P(expr_ptr));
- expr_ptr = &new_expr;
+ } else if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_ISREF_P(expr_ptr)) {
+ expr_ptr = Z_REFVAL_P(expr_ptr);
+ if (Z_REFCOUNTED_P(expr_ptr)) Z_ADDREF_P(expr_ptr);
} else if (IS_CV == IS_CV && Z_REFCOUNTED_P(expr_ptr)) {
Z_ADDREF_P(expr_ptr);
ZVAL_DUP(&generator->value, value);
} else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_CV == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_TMP_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&new_expr, expr_ptr);
expr_ptr = &new_expr;
}
- } else if (Z_ISREF_P(expr_ptr)) {
- ZVAL_DUP(&new_expr, Z_REFVAL_P(expr_ptr));
- expr_ptr = &new_expr;
+ } else if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_ISREF_P(expr_ptr)) {
+ expr_ptr = Z_REFVAL_P(expr_ptr);
+ if (Z_REFCOUNTED_P(expr_ptr)) Z_ADDREF_P(expr_ptr);
} else if (IS_CV == IS_CV && Z_REFCOUNTED_P(expr_ptr)) {
Z_ADDREF_P(expr_ptr);
ZVAL_DUP(&generator->value, value);
} else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_CV == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
zval_ptr_dtor_nogc(free_op2.var);
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&new_expr, expr_ptr);
expr_ptr = &new_expr;
}
- } else if (Z_ISREF_P(expr_ptr)) {
- ZVAL_DUP(&new_expr, Z_REFVAL_P(expr_ptr));
- expr_ptr = &new_expr;
+ } else if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_ISREF_P(expr_ptr)) {
+ expr_ptr = Z_REFVAL_P(expr_ptr);
+ if (Z_REFCOUNTED_P(expr_ptr)) Z_ADDREF_P(expr_ptr);
} else if (IS_CV == IS_CV && Z_REFCOUNTED_P(expr_ptr)) {
Z_ADDREF_P(expr_ptr);
ZVAL_DUP(&generator->value, value);
} else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_CV == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_UNUSED == IS_VAR || IS_UNUSED == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_UNUSED == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
ZVAL_DUP(&new_expr, expr_ptr);
expr_ptr = &new_expr;
}
- } else if (Z_ISREF_P(expr_ptr)) {
- ZVAL_DUP(&new_expr, Z_REFVAL_P(expr_ptr));
- expr_ptr = &new_expr;
+ } else if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_ISREF_P(expr_ptr)) {
+ expr_ptr = Z_REFVAL_P(expr_ptr);
+ if (Z_REFCOUNTED_P(expr_ptr)) Z_ADDREF_P(expr_ptr);
} else if (IS_CV == IS_CV && Z_REFCOUNTED_P(expr_ptr)) {
Z_ADDREF_P(expr_ptr);
ZVAL_DUP(&generator->value, value);
} else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- } else if (Z_ISREF_P(value)) {
+ } else if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_ISREF_P(value)) {
ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
+ ZVAL_COPY_VALUE(&generator->value, value);
if (IS_CV == IS_CV) {
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
}
- ZVAL_COPY_VALUE(&generator->value, value);
}
}
} else {
ZVAL_DUP(&generator->key, key);
} else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- } else if (Z_ISREF_P(key)) {
+ } else if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(key)) {
ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
} else {
+ ZVAL_COPY_VALUE(&generator->key, key);
if (IS_CV == IS_CV) {
- if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
}
- ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG