zval *ret = EX_VAR(opline->result.var);
ZVAL_NULL(ret);
-//??? ret->var.ptr_ptr = &ret->var.ptr;
Z_VAR_FLAGS_P(ret) = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0 ? IS_VAR_RET_REF : 0;
if (!zend_execute_internal) {
zval_ptr_dtor(ret);
}
} else if (RETURN_VALUE_USED(opline)) {
-//??? EX_T(opline->result.var).var.ptr = NULL;
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
}
} else if (fbc->type == ZEND_USER_FUNCTION) {
zval *return_value = NULL;
return_value = EX_VAR(opline->result.var);
ZVAL_NULL(return_value);
-//??? ret->var.ptr_ptr = &ret->var.ptr;
Z_VAR_FLAGS_P(return_value) = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0 ? IS_VAR_RET_REF : 0;
}
//??? Z_UNSET_ISREF_P(EX_T(opline->result.var).var.ptr);
//??? Z_SET_REFCOUNT_P(EX_T(opline->result.var).var.ptr, 1);
Z_VAR_FLAGS_P(EX_VAR(opline->result.var)) = 0;
-//??? EX_T(opline->result.var).var.ptr_ptr = &EX_T(opline->result.var).var.ptr;
}
}
}
unpack_iter_dtor:
-//??? iter->funcs->dtor(iter TSRMLS_CC);
zend_iterator_dtor(iter TSRMLS_CC);
break;
}
if (IS_CONST == IS_VAR && !Z_ISREF_P(retval_ptr)) {
if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
(Z_VAR_FLAGS_P(retval_ptr) & IS_VAR_RET_REF)) {
-//??? } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
} else {
zend_error(E_NOTICE, "Only variable references should be returned by reference");
if (EX(return_value)) {
-//??? ZVAL_DUP(EX(return_value), retval_ptr);
zval tmp;
ZVAL_DUP(&tmp, retval_ptr);
ZVAL_NEW_REF(EX(return_value), &tmp);
if (EXPECTED(EG(exception) == NULL)) {
ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj TSRMLS_CC));
-//??? Z_SET_ISREF_P(retval);
if (!RETURN_VALUE_USED(opline) || UNEXPECTED(EG(exception) != NULL)) {
zval_ptr_dtor(EX_VAR(opline->result.var));
}
EMPTY_SWITCH_DEFAULT_CASE()
}
/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
- } else if (/* ??? (opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_STATIC &&*/
- Z_TYPE_P(retval) == IS_INDIRECT) {
+ } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
retval = Z_INDIRECT_P(retval);
if (Z_TYPE_P(retval) == IS_UNDEF) {
switch (type) {
* not return by reference we throw a notice. */
if (IS_CONST == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = opline->op1.zv;
/* Consts, temporary variables and references need copying */
- if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_CONST == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->value);
- }
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
if (IS_CONST == IS_CV) {
zval *key = opline->op2.zv;
/* Consts, temporary variables and references need copying */
- if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_CONST == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->key);
- }
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_CONST == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
* not return by reference we throw a notice. */
if (IS_CONST == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = opline->op1.zv;
/* Consts, temporary variables and references need copying */
- if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_CONST == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->value);
- }
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
if (IS_CONST == IS_CV) {
zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_TMP_VAR == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
- /* Temporary variables don't need ctor copying */
- if (!1) {
- zval_copy_ctor(&generator->key);
- }
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_CONST == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
EMPTY_SWITCH_DEFAULT_CASE()
}
/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
- } else if (/* ??? (opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_STATIC &&*/
- Z_TYPE_P(retval) == IS_INDIRECT) {
+ } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
retval = Z_INDIRECT_P(retval);
if (Z_TYPE_P(retval) == IS_UNDEF) {
switch (type) {
* not return by reference we throw a notice. */
if (IS_CONST == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = opline->op1.zv;
/* Consts, temporary variables and references need copying */
- if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_CONST == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->value);
- }
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
if (IS_CONST == IS_CV) {
zval *key = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_VAR == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->key);
- }
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
+ zval_ptr_dtor_nogc(free_op2.var);
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_CONST == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
- zval_ptr_dtor_nogc(free_op2.var);
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
EMPTY_SWITCH_DEFAULT_CASE()
}
/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
- } else if (/* ??? (opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_STATIC &&*/
- Z_TYPE_P(retval) == IS_INDIRECT) {
+ } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
retval = Z_INDIRECT_P(retval);
if (Z_TYPE_P(retval) == IS_UNDEF) {
switch (type) {
* not return by reference we throw a notice. */
if (IS_CONST == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = opline->op1.zv;
/* Consts, temporary variables and references need copying */
- if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_CONST == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->value);
- }
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
if (IS_CONST == IS_CV) {
zval *key = NULL;
/* Consts, temporary variables and references need copying */
- if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_UNUSED == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->key);
- }
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_CONST == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
* not return by reference we throw a notice. */
if (IS_CONST == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = opline->op1.zv;
/* Consts, temporary variables and references need copying */
- if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_CONST == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->value);
- }
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
if (IS_CONST == IS_CV) {
zval *key = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_CV == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->key);
- }
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_CONST == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
if (IS_TMP_VAR == IS_VAR && !Z_ISREF_P(retval_ptr)) {
if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
(Z_VAR_FLAGS_P(retval_ptr) & IS_VAR_RET_REF)) {
-//??? } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
} else {
zend_error(E_NOTICE, "Only variable references should be returned by reference");
if (EX(return_value)) {
-//??? ZVAL_DUP(EX(return_value), retval_ptr);
zval tmp;
ZVAL_DUP(&tmp, retval_ptr);
ZVAL_NEW_REF(EX(return_value), &tmp);
if (EXPECTED(EG(exception) == NULL)) {
ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj TSRMLS_CC));
-//??? Z_SET_ISREF_P(retval);
if (!RETURN_VALUE_USED(opline) || UNEXPECTED(EG(exception) != NULL)) {
zval_ptr_dtor(EX_VAR(opline->result.var));
}
EMPTY_SWITCH_DEFAULT_CASE()
}
/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
- } else if (/* ??? (opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_STATIC &&*/
- Z_TYPE_P(retval) == IS_INDIRECT) {
+ } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
retval = Z_INDIRECT_P(retval);
if (Z_TYPE_P(retval) == IS_UNDEF) {
switch (type) {
* not return by reference we throw a notice. */
if (IS_TMP_VAR == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_TMP_VAR == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!1) {
- zval_copy_ctor(&generator->value);
- }
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
if (IS_TMP_VAR == IS_CV) {
zval *key = opline->op2.zv;
/* Consts, temporary variables and references need copying */
- if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_CONST == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->key);
- }
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_TMP_VAR == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
* not return by reference we throw a notice. */
if (IS_TMP_VAR == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_TMP_VAR == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!1) {
- zval_copy_ctor(&generator->value);
- }
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
if (IS_TMP_VAR == IS_CV) {
zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_TMP_VAR == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
- /* Temporary variables don't need ctor copying */
- if (!1) {
- zval_copy_ctor(&generator->key);
- }
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_TMP_VAR == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
EMPTY_SWITCH_DEFAULT_CASE()
}
/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
- } else if (/* ??? (opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_STATIC &&*/
- Z_TYPE_P(retval) == IS_INDIRECT) {
+ } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
retval = Z_INDIRECT_P(retval);
if (Z_TYPE_P(retval) == IS_UNDEF) {
switch (type) {
* not return by reference we throw a notice. */
if (IS_TMP_VAR == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_TMP_VAR == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!1) {
- zval_copy_ctor(&generator->value);
- }
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
if (IS_TMP_VAR == IS_CV) {
zval *key = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_VAR == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->key);
- }
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
+ zval_ptr_dtor_nogc(free_op2.var);
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_TMP_VAR == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
- zval_ptr_dtor_nogc(free_op2.var);
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
EMPTY_SWITCH_DEFAULT_CASE()
}
/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
- } else if (/* ??? (opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_STATIC &&*/
- Z_TYPE_P(retval) == IS_INDIRECT) {
+ } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
retval = Z_INDIRECT_P(retval);
if (Z_TYPE_P(retval) == IS_UNDEF) {
switch (type) {
* not return by reference we throw a notice. */
if (IS_TMP_VAR == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_TMP_VAR == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!1) {
- zval_copy_ctor(&generator->value);
- }
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
if (IS_TMP_VAR == IS_CV) {
zval *key = NULL;
/* Consts, temporary variables and references need copying */
- if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_UNUSED == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->key);
- }
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_TMP_VAR == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
* not return by reference we throw a notice. */
if (IS_TMP_VAR == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_TMP_VAR == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!1) {
- zval_copy_ctor(&generator->value);
- }
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
if (IS_TMP_VAR == IS_CV) {
zval *key = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_CV == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->key);
- }
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_TMP_VAR == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
if (IS_VAR == IS_VAR && !Z_ISREF_P(retval_ptr)) {
if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
(Z_VAR_FLAGS_P(retval_ptr) & IS_VAR_RET_REF)) {
-//??? } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
} else {
zend_error(E_NOTICE, "Only variable references should be returned by reference");
if (EX(return_value)) {
-//??? ZVAL_DUP(EX(return_value), retval_ptr);
zval tmp;
ZVAL_DUP(&tmp, retval_ptr);
ZVAL_NEW_REF(EX(return_value), &tmp);
varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
top = zend_vm_stack_top_inc(TSRMLS_C);
if (Z_ISREF_P(varptr)) {
-//??? if (IS_VAR == IS_CV ||
-//??? (IS_VAR == IS_VAR && Z_REFCOUNT_P(varptr) > 2)) {
- ZVAL_DUP(top, Z_REFVAL_P(varptr));
- zval_ptr_dtor_nogc(free_op1.var);
-//??? } else {
-//??? varptr = Z_REFVAL_P(varptr);
-//??? }
+ ZVAL_DUP(top, Z_REFVAL_P(varptr));
+ zval_ptr_dtor_nogc(free_op1.var);
} else {
if (IS_VAR == IS_CV) {
if (Z_REFCOUNTED_P(varptr)) Z_ADDREF_P(varptr);
if (EXPECTED(EG(exception) == NULL)) {
ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj TSRMLS_CC));
-//??? Z_SET_ISREF_P(retval);
if (!RETURN_VALUE_USED(opline) || UNEXPECTED(EG(exception) != NULL)) {
zval_ptr_dtor(EX_VAR(opline->result.var));
}
EMPTY_SWITCH_DEFAULT_CASE()
}
/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
- } else if (/* ??? (opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_STATIC &&*/
- Z_TYPE_P(retval) == IS_INDIRECT) {
+ } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
retval = Z_INDIRECT_P(retval);
if (Z_TYPE_P(retval) == IS_UNDEF) {
switch (type) {
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
-//??? if (0) {
-//???? if (IS_CONST == IS_CONST) {
-//???? ZVAL_DUP(offset, offset);
-//???? } else if (IS_CONST == IS_TMP_VAR) {
-//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? if (IS_CONST == IS_CONST) {
+//??? zval_copy_ctor(offset);
//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
-//??? if (0) {
-//???? if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
-//??? zval_ptr_dtor(offset);
-//??? } else {
-//??? }
break;
case IS_STRING:
case IS_STR_OFFSET:
* not return by reference we throw a notice. */
if (IS_VAR == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_VAR == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->value);
- }
-
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
zval_ptr_dtor_nogc(free_op1.var);
} else {
if (IS_VAR == IS_CV) {
zval *key = opline->op2.zv;
/* Consts, temporary variables and references need copying */
- if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_CONST == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->key);
- }
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_VAR == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
-//??? if (1) {
-//???? if (IS_TMP_VAR == IS_CONST) {
-//???? ZVAL_DUP(offset, offset);
-//???? } else if (IS_TMP_VAR == IS_TMP_VAR) {
-//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? if (IS_TMP_VAR == IS_CONST) {
+//??? zval_copy_ctor(offset);
//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
-//??? if (1) {
-//???? if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
-//??? zval_ptr_dtor(offset);
-//??? } else {
- zval_dtor(free_op2.var);
-//??? }
+ zval_dtor(free_op2.var);
break;
case IS_STRING:
case IS_STR_OFFSET:
* not return by reference we throw a notice. */
if (IS_VAR == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_VAR == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->value);
- }
-
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
zval_ptr_dtor_nogc(free_op1.var);
} else {
if (IS_VAR == IS_CV) {
zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_TMP_VAR == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
- /* Temporary variables don't need ctor copying */
- if (!1) {
- zval_copy_ctor(&generator->key);
- }
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_VAR == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
EMPTY_SWITCH_DEFAULT_CASE()
}
/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
- } else if (/* ??? (opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_STATIC &&*/
- Z_TYPE_P(retval) == IS_INDIRECT) {
+ } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
retval = Z_INDIRECT_P(retval);
if (Z_TYPE_P(retval) == IS_UNDEF) {
switch (type) {
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
-//??? if (0) {
-//???? if (IS_VAR == IS_CONST) {
-//???? ZVAL_DUP(offset, offset);
-//???? } else if (IS_VAR == IS_TMP_VAR) {
-//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? if (IS_VAR == IS_CONST) {
+//??? zval_copy_ctor(offset);
//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
-//??? if (0) {
-//???? if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
-//??? zval_ptr_dtor(offset);
-//??? } else {
- zval_ptr_dtor_nogc(free_op2.var);
-//??? }
+ zval_ptr_dtor_nogc(free_op2.var);
break;
case IS_STRING:
case IS_STR_OFFSET:
* not return by reference we throw a notice. */
if (IS_VAR == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_VAR == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->value);
- }
-
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
zval_ptr_dtor_nogc(free_op1.var);
} else {
if (IS_VAR == IS_CV) {
zval *key = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_VAR == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->key);
- }
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
+ zval_ptr_dtor_nogc(free_op2.var);
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_VAR == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
- zval_ptr_dtor_nogc(free_op2.var);
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
EMPTY_SWITCH_DEFAULT_CASE()
}
/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
- } else if (/* ??? (opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_STATIC &&*/
- Z_TYPE_P(retval) == IS_INDIRECT) {
+ } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
retval = Z_INDIRECT_P(retval);
if (Z_TYPE_P(retval) == IS_UNDEF) {
switch (type) {
* not return by reference we throw a notice. */
if (IS_VAR == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_VAR == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->value);
- }
-
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
zval_ptr_dtor_nogc(free_op1.var);
} else {
if (IS_VAR == IS_CV) {
zval *key = NULL;
/* Consts, temporary variables and references need copying */
- if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_UNUSED == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->key);
- }
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_VAR == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
-//??? if (0) {
-//???? if (IS_CV == IS_CONST) {
-//???? ZVAL_DUP(offset, offset);
-//???? } else if (IS_CV == IS_TMP_VAR) {
-//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? if (IS_CV == IS_CONST) {
+//??? zval_copy_ctor(offset);
//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
-//??? if (0) {
-//???? if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
-//??? zval_ptr_dtor(offset);
-//??? } else {
-//??? }
break;
case IS_STRING:
case IS_STR_OFFSET:
* not return by reference we throw a notice. */
if (IS_VAR == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_VAR == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->value);
- }
-
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
zval_ptr_dtor_nogc(free_op1.var);
} else {
if (IS_VAR == IS_CV) {
zval *key = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_CV == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->key);
- }
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_VAR == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
if (EXPECTED(EG(exception) == NULL)) {
ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj TSRMLS_CC));
-//??? Z_SET_ISREF_P(retval);
if (!RETURN_VALUE_USED(opline) || UNEXPECTED(EG(exception) != NULL)) {
zval_ptr_dtor(EX_VAR(opline->result.var));
}
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
-//??? if (0) {
-//???? if (IS_CONST == IS_CONST) {
-//???? ZVAL_DUP(offset, offset);
-//???? } else if (IS_CONST == IS_TMP_VAR) {
-//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? if (IS_CONST == IS_CONST) {
+//??? zval_copy_ctor(offset);
//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
-//??? if (0) {
-//???? if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
-//??? zval_ptr_dtor(offset);
-//??? } else {
-//??? }
break;
case IS_STRING:
case IS_STR_OFFSET:
* not return by reference we throw a notice. */
if (IS_UNUSED == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = NULL;
/* Consts, temporary variables and references need copying */
- if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_UNUSED == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->value);
- }
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
if (IS_UNUSED == IS_CV) {
zval *key = opline->op2.zv;
/* Consts, temporary variables and references need copying */
- if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_CONST == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->key);
- }
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_UNUSED == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
-//??? if (1) {
-//???? if (IS_TMP_VAR == IS_CONST) {
-//???? ZVAL_DUP(offset, offset);
-//???? } else if (IS_TMP_VAR == IS_TMP_VAR) {
-//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? if (IS_TMP_VAR == IS_CONST) {
+//??? zval_copy_ctor(offset);
//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
-//??? if (1) {
-//???? if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
-//??? zval_ptr_dtor(offset);
-//??? } else {
- zval_dtor(free_op2.var);
-//??? }
+ zval_dtor(free_op2.var);
break;
case IS_STRING:
case IS_STR_OFFSET:
* not return by reference we throw a notice. */
if (IS_UNUSED == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = NULL;
/* Consts, temporary variables and references need copying */
- if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_UNUSED == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->value);
- }
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
if (IS_UNUSED == IS_CV) {
zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_TMP_VAR == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
- /* Temporary variables don't need ctor copying */
- if (!1) {
- zval_copy_ctor(&generator->key);
- }
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_UNUSED == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
-//??? if (0) {
-//???? if (IS_VAR == IS_CONST) {
-//???? ZVAL_DUP(offset, offset);
-//???? } else if (IS_VAR == IS_TMP_VAR) {
-//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? if (IS_VAR == IS_CONST) {
+//??? zval_copy_ctor(offset);
//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
-//??? if (0) {
-//???? if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
-//??? zval_ptr_dtor(offset);
-//??? } else {
- zval_ptr_dtor_nogc(free_op2.var);
-//??? }
+ zval_ptr_dtor_nogc(free_op2.var);
break;
case IS_STRING:
case IS_STR_OFFSET:
* not return by reference we throw a notice. */
if (IS_UNUSED == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = NULL;
/* Consts, temporary variables and references need copying */
- if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_UNUSED == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->value);
- }
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
if (IS_UNUSED == IS_CV) {
zval *key = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_VAR == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->key);
- }
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
+ zval_ptr_dtor_nogc(free_op2.var);
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_UNUSED == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
- zval_ptr_dtor_nogc(free_op2.var);
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
* not return by reference we throw a notice. */
if (IS_UNUSED == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = NULL;
/* Consts, temporary variables and references need copying */
- if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_UNUSED == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->value);
- }
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
if (IS_UNUSED == IS_CV) {
zval *key = NULL;
/* Consts, temporary variables and references need copying */
- if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_UNUSED == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->key);
- }
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_UNUSED == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
-//??? if (0) {
-//???? if (IS_CV == IS_CONST) {
-//???? ZVAL_DUP(offset, offset);
-//???? } else if (IS_CV == IS_TMP_VAR) {
-//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? if (IS_CV == IS_CONST) {
+//??? zval_copy_ctor(offset);
//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
-//??? if (0) {
-//???? if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
-//??? zval_ptr_dtor(offset);
-//??? } else {
-//??? }
break;
case IS_STRING:
case IS_STR_OFFSET:
* not return by reference we throw a notice. */
if (IS_UNUSED == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = NULL;
/* Consts, temporary variables and references need copying */
- if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_UNUSED == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->value);
- }
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
if (IS_UNUSED == IS_CV) {
zval *key = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_CV == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->key);
- }
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_UNUSED == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
if (IS_CV == IS_VAR && !Z_ISREF_P(retval_ptr)) {
if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
(Z_VAR_FLAGS_P(retval_ptr) & IS_VAR_RET_REF)) {
-//??? } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
} else {
zend_error(E_NOTICE, "Only variable references should be returned by reference");
if (EX(return_value)) {
-//??? ZVAL_DUP(EX(return_value), retval_ptr);
zval tmp;
ZVAL_DUP(&tmp, retval_ptr);
ZVAL_NEW_REF(EX(return_value), &tmp);
varptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
top = zend_vm_stack_top_inc(TSRMLS_C);
if (Z_ISREF_P(varptr)) {
-//??? if (IS_CV == IS_CV ||
-//??? (IS_CV == IS_VAR && Z_REFCOUNT_P(varptr) > 2)) {
- ZVAL_DUP(top, Z_REFVAL_P(varptr));
+ ZVAL_DUP(top, Z_REFVAL_P(varptr));
-//??? } else {
-//??? varptr = Z_REFVAL_P(varptr);
-//??? }
} else {
if (IS_CV == IS_CV) {
if (Z_REFCOUNTED_P(varptr)) Z_ADDREF_P(varptr);
if (EXPECTED(EG(exception) == NULL)) {
ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj TSRMLS_CC));
-//??? Z_SET_ISREF_P(retval);
if (!RETURN_VALUE_USED(opline) || UNEXPECTED(EG(exception) != NULL)) {
zval_ptr_dtor(EX_VAR(opline->result.var));
}
EMPTY_SWITCH_DEFAULT_CASE()
}
/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
- } else if (/* ??? (opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_STATIC &&*/
- Z_TYPE_P(retval) == IS_INDIRECT) {
+ } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
retval = Z_INDIRECT_P(retval);
if (Z_TYPE_P(retval) == IS_UNDEF) {
switch (type) {
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
-//??? if (0) {
-//???? if (IS_CONST == IS_CONST) {
-//???? ZVAL_DUP(offset, offset);
-//???? } else if (IS_CONST == IS_TMP_VAR) {
-//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? if (IS_CONST == IS_CONST) {
+//??? zval_copy_ctor(offset);
//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
-//??? if (0) {
-//???? if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
-//??? zval_ptr_dtor(offset);
-//??? } else {
-//??? }
break;
case IS_STRING:
case IS_STR_OFFSET:
* not return by reference we throw a notice. */
if (IS_CV == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_CV == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->value);
- }
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
if (IS_CV == IS_CV) {
zval *key = opline->op2.zv;
/* Consts, temporary variables and references need copying */
- if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_CONST == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->key);
- }
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_CV == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
-//??? if (1) {
-//???? if (IS_TMP_VAR == IS_CONST) {
-//???? ZVAL_DUP(offset, offset);
-//???? } else if (IS_TMP_VAR == IS_TMP_VAR) {
-//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? if (IS_TMP_VAR == IS_CONST) {
+//??? zval_copy_ctor(offset);
//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
-//??? if (1) {
-//???? if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
-//??? zval_ptr_dtor(offset);
-//??? } else {
- zval_dtor(free_op2.var);
-//??? }
+ zval_dtor(free_op2.var);
break;
case IS_STRING:
case IS_STR_OFFSET:
* not return by reference we throw a notice. */
if (IS_CV == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_CV == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->value);
- }
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
if (IS_CV == IS_CV) {
zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_TMP_VAR == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
- /* Temporary variables don't need ctor copying */
- if (!1) {
- zval_copy_ctor(&generator->key);
- }
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_CV == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
EMPTY_SWITCH_DEFAULT_CASE()
}
/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
- } else if (/* ??? (opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_STATIC &&*/
- Z_TYPE_P(retval) == IS_INDIRECT) {
+ } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
retval = Z_INDIRECT_P(retval);
if (Z_TYPE_P(retval) == IS_UNDEF) {
switch (type) {
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
-//??? if (0) {
-//???? if (IS_VAR == IS_CONST) {
-//???? ZVAL_DUP(offset, offset);
-//???? } else if (IS_VAR == IS_TMP_VAR) {
-//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? if (IS_VAR == IS_CONST) {
+//??? zval_copy_ctor(offset);
//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
-//??? if (0) {
-//???? if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
-//??? zval_ptr_dtor(offset);
-//??? } else {
- zval_ptr_dtor_nogc(free_op2.var);
-//??? }
+ zval_ptr_dtor_nogc(free_op2.var);
break;
case IS_STRING:
case IS_STR_OFFSET:
* not return by reference we throw a notice. */
if (IS_CV == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_CV == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->value);
- }
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
if (IS_CV == IS_CV) {
zval *key = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_VAR == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->key);
- }
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
+ zval_ptr_dtor_nogc(free_op2.var);
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_CV == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
- zval_ptr_dtor_nogc(free_op2.var);
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
EMPTY_SWITCH_DEFAULT_CASE()
}
/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
- } else if (/* ??? (opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_STATIC &&*/
- Z_TYPE_P(retval) == IS_INDIRECT) {
+ } else if (Z_TYPE_P(retval) == IS_INDIRECT) {
retval = Z_INDIRECT_P(retval);
if (Z_TYPE_P(retval) == IS_UNDEF) {
switch (type) {
* not return by reference we throw a notice. */
if (IS_CV == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_CV == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->value);
- }
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
if (IS_CV == IS_CV) {
zval *key = NULL;
/* Consts, temporary variables and references need copying */
- if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_UNUSED == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_UNUSED == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->key);
- }
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_CV == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
-//??? if (0) {
-//???? if (IS_CV == IS_CONST) {
-//???? ZVAL_DUP(offset, offset);
-//???? } else if (IS_CV == IS_TMP_VAR) {
-//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? if (IS_CV == IS_CONST) {
+//??? zval_copy_ctor(offset);
//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
-//??? if (0) {
-//???? if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
-//??? zval_ptr_dtor(offset);
-//??? } else {
-//??? }
break;
case IS_STRING:
case IS_STR_OFFSET:
* not return by reference we throw a notice. */
if (IS_CV == IS_VAR && !Z_ISREF_P(value_ptr)
&& !(opline->extended_value == ZEND_RETURNS_FUNCTION
- && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))
-//??? && EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
-) {
+ && (Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF))) {
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
} else {
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
zval *value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR
- || Z_ISREF_P(value)
- ) {
-//??? INIT_PZVAL_COPY(copy, value);
+ if (IS_CV == IS_CONST) {
+ ZVAL_DUP(&generator->value, value);
+ } else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
-
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->value);
- }
+ } else if (Z_ISREF_P(value)) {
+ ZVAL_DUP(&generator->value, Z_REFVAL_P(value));
} else {
if (IS_CV == IS_CV) {
zval *key = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
/* Consts, temporary variables and references need copying */
- if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR
- || (Z_ISREF_P(key) && Z_REFCOUNT_P(key) > 0)
- ) {
-//??? INIT_PZVAL_COPY(copy, key);
+ if (IS_CV == IS_CONST) {
+ ZVAL_DUP(&generator->key, key);
+ } else if (IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ } else if (Z_ISREF_P(key)) {
+ ZVAL_DUP(&generator->key, Z_REFVAL_P(key));
- /* Temporary variables don't need ctor copying */
- if (!0) {
- zval_copy_ctor(&generator->key);
- }
} else {
- ZVAL_COPY(&generator->key, key);
+ if (IS_CV == IS_CV) {
+ if (Z_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+ }
+ ZVAL_COPY_VALUE(&generator->key, key);
}
if (Z_TYPE(generator->key) == IS_LONG
) {
generator->largest_used_integer_key = Z_LVAL(generator->key);
}
-
} else {
/* If no key was specified we use auto-increment keys */
generator->largest_used_integer_key++;