if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
if (IS_CONST != IS_TMP_VAR) {
- zval_copy_ctor(EX(return_value));
+ zval_opt_copy_ctor(EX(return_value));
}
} else if (Z_ISREF_P(retval_ptr)) {
} else {
ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
if (IS_CONST == IS_CV) {
- if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
+ if (Z_OPT_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
}
}
}
/* Not sure if a complete copy is what we want here */
ZVAL_COPY_VALUE(&exception, value);
if (!0) {
- zval_copy_ctor(&exception);
+ zval_opt_copy_ctor(&exception);
}
zend_throw_exception_object(&exception TSRMLS_CC);
ZVAL_COPY_VALUE(&valptr, value);
if (!0) {
- zval_copy_ctor(&valptr);
+ zval_opt_copy_ctor(&valptr);
}
zend_vm_stack_push(&valptr TSRMLS_CC);
if (opline->extended_value != IS_STRING) {
ZVAL_COPY_VALUE(result, expr);
if (!0) {
- zval_copy_ctor(result);
+ zval_opt_copy_ctor(result);
}
}
} else {
ZVAL_COPY_VALUE(result, expr);
if (!0) {
- zval_copy_ctor(result);
+ zval_opt_copy_ctor(result);
}
}
break;
if (i_zend_is_true(value TSRMLS_CC)) {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!0) {
- zval_copy_ctor(EX_VAR(opline->result.var));
+ zval_opt_copy_ctor(EX_VAR(opline->result.var));
}
#if DEBUG_ZEND>=2
} else {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!0) {
- zval_copy_ctor(EX_VAR(opline->result.var));
+ zval_opt_copy_ctor(EX_VAR(opline->result.var));
}
}
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!0) {
- zval_copy_ctor(EX_VAR(opline->result.var));
+ zval_opt_copy_ctor(EX_VAR(opline->result.var));
}
CHECK_EXCEPTION();
} else {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!0) {
- zval_copy_ctor(EX_VAR(opline->result.var));
+ zval_opt_copy_ctor(EX_VAR(opline->result.var));
}
}
if (Z_TYPE_FLAGS_P(val) & IS_TYPE_CONSTANT) {
ZVAL_COPY_VALUE(&c.value, val);
if (Z_TYPE_P(val) == IS_CONSTANT_ARRAY) {
- zval_copy_ctor(&c.value);
+ zval_opt_copy_ctor(&c.value);
}
zval_update_constant(&c.value, NULL TSRMLS_CC);
} else {
value = opline->op1.zv;
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
value = opline->op1.zv;
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!1) {
value = opline->op1.zv;
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
value = opline->op1.zv;
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
value = opline->op1.zv;
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
if (IS_TMP_VAR != IS_TMP_VAR) {
- zval_copy_ctor(EX(return_value));
+ zval_opt_copy_ctor(EX(return_value));
}
} else if (Z_ISREF_P(retval_ptr)) {
} else {
ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
if (IS_TMP_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
+ if (Z_OPT_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
}
}
}
/* Not sure if a complete copy is what we want here */
ZVAL_COPY_VALUE(&exception, value);
if (!1) {
- zval_copy_ctor(&exception);
+ zval_opt_copy_ctor(&exception);
}
zend_throw_exception_object(&exception TSRMLS_CC);
ZVAL_COPY_VALUE(&valptr, value);
if (!1) {
- zval_copy_ctor(&valptr);
+ zval_opt_copy_ctor(&valptr);
}
zend_vm_stack_push(&valptr TSRMLS_CC);
if (opline->extended_value != IS_STRING) {
ZVAL_COPY_VALUE(result, expr);
if (!1) {
- zval_copy_ctor(result);
+ zval_opt_copy_ctor(result);
}
}
} else {
ZVAL_COPY_VALUE(result, expr);
if (!1) {
- zval_copy_ctor(result);
+ zval_opt_copy_ctor(result);
}
}
break;
if (i_zend_is_true(value TSRMLS_CC)) {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!1) {
- zval_copy_ctor(EX_VAR(opline->result.var));
+ zval_opt_copy_ctor(EX_VAR(opline->result.var));
}
#if DEBUG_ZEND>=2
} else {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!1) {
- zval_copy_ctor(EX_VAR(opline->result.var));
+ zval_opt_copy_ctor(EX_VAR(opline->result.var));
}
}
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!1) {
- zval_copy_ctor(EX_VAR(opline->result.var));
+ zval_opt_copy_ctor(EX_VAR(opline->result.var));
}
CHECK_EXCEPTION();
} else {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!1) {
- zval_copy_ctor(EX_VAR(opline->result.var));
+ zval_opt_copy_ctor(EX_VAR(opline->result.var));
}
}
value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!1) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!1) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!1) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!1) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!1) {
value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!1) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!1) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!1) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!1) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!1) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!1) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
if (IS_VAR != IS_TMP_VAR) {
- zval_copy_ctor(EX(return_value));
+ zval_opt_copy_ctor(EX(return_value));
}
zval_ptr_dtor_nogc(free_op1.var);
} else if (Z_ISREF_P(retval_ptr)) {
} else {
ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
if (IS_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
+ if (Z_OPT_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
}
}
}
/* Not sure if a complete copy is what we want here */
ZVAL_COPY_VALUE(&exception, value);
if (!0) {
- zval_copy_ctor(&exception);
+ zval_opt_copy_ctor(&exception);
}
zend_throw_exception_object(&exception TSRMLS_CC);
}
ZVAL_COPY_VALUE(&val, varptr);
if (!0) {
- zval_copy_ctor(&val);
+ zval_opt_copy_ctor(&val);
}
zval_ptr_dtor_nogc(free_op1.var);
zend_vm_stack_push(&val TSRMLS_CC);
if (opline->extended_value != IS_STRING) {
ZVAL_COPY_VALUE(result, expr);
if (!0) {
- zval_copy_ctor(result);
+ zval_opt_copy_ctor(result);
}
}
} else {
ZVAL_COPY_VALUE(result, expr);
if (!0) {
- zval_copy_ctor(result);
+ zval_opt_copy_ctor(result);
}
}
break;
if (i_zend_is_true(value TSRMLS_CC)) {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!0) {
- zval_copy_ctor(EX_VAR(opline->result.var));
+ zval_opt_copy_ctor(EX_VAR(opline->result.var));
}
zval_ptr_dtor_nogc(free_op1.var);
#if DEBUG_ZEND>=2
} else {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!0) {
- zval_copy_ctor(EX_VAR(opline->result.var));
+ zval_opt_copy_ctor(EX_VAR(opline->result.var));
}
}
zval_ptr_dtor_nogc(free_op1.var);
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!0) {
- zval_copy_ctor(EX_VAR(opline->result.var));
+ zval_opt_copy_ctor(EX_VAR(opline->result.var));
}
zval_ptr_dtor_nogc(free_op1.var);
CHECK_EXCEPTION();
} else {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!0) {
- zval_copy_ctor(EX_VAR(opline->result.var));
+ zval_opt_copy_ctor(EX_VAR(opline->result.var));
}
}
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
- if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- make_real_object(object TSRMLS_CC);
- }
- ZVAL_DEREF(object);
+ object = make_real_object(object TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
- zend_string *old_str = Z_STR_P(Z_STR_OFFSET_P(variable_ptr)->str);
- if (zend_assign_to_string_offset(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC)) {
- if (RETURN_VALUE_USED(opline)) {
- ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STRVAL_P(Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str) + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
- }
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-//??? instead of FREE_OP_VAR_PTR(free_op_data2);
- STR_RELEASE(old_str);
- efree(Z_STR_OFFSET_P(variable_ptr));
+ zend_assign_to_string_offset(variable_ptr, value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
} else if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (IS_TMP_FREE(free_op_data1)) {
zval_dtor(value);
variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
- zend_string *old_str = Z_STR_P(Z_STR_OFFSET_P(variable_ptr)->str);
- if (zend_assign_to_string_offset(variable_ptr, value, IS_CONST TSRMLS_CC)) {
- if (RETURN_VALUE_USED(opline)) {
- ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STRVAL_P(Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str) + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
- }
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-//??? instead of if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);}
- STR_RELEASE(old_str);
- efree(Z_STR_OFFSET_P(variable_ptr));
+ zend_assign_to_string_offset(variable_ptr, value, IS_CONST, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
} else if (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (0) {
zval_dtor(value);
value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
- if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- make_real_object(object TSRMLS_CC);
- }
- ZVAL_DEREF(object);
+ object = make_real_object(object TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
- zend_string *old_str = Z_STR_P(Z_STR_OFFSET_P(variable_ptr)->str);
- if (zend_assign_to_string_offset(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC)) {
- if (RETURN_VALUE_USED(opline)) {
- ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STRVAL_P(Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str) + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
- }
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-//??? instead of FREE_OP_VAR_PTR(free_op_data2);
- STR_RELEASE(old_str);
- efree(Z_STR_OFFSET_P(variable_ptr));
+ zend_assign_to_string_offset(variable_ptr, value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
} else if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (IS_TMP_FREE(free_op_data1)) {
zval_dtor(value);
variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
- zend_string *old_str = Z_STR_P(Z_STR_OFFSET_P(variable_ptr)->str);
- if (zend_assign_to_string_offset(variable_ptr, value, IS_TMP_VAR TSRMLS_CC)) {
- if (RETURN_VALUE_USED(opline)) {
- ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STRVAL_P(Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str) + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
- }
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-//??? instead of if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);}
- STR_RELEASE(old_str);
- efree(Z_STR_OFFSET_P(variable_ptr));
+ zend_assign_to_string_offset(variable_ptr, value, IS_TMP_VAR, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
} else if (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (1) {
zval_dtor(value);
value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!1) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
- if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- make_real_object(object TSRMLS_CC);
- }
- ZVAL_DEREF(object);
+ object = make_real_object(object TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
- zend_string *old_str = Z_STR_P(Z_STR_OFFSET_P(variable_ptr)->str);
- if (zend_assign_to_string_offset(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC)) {
- if (RETURN_VALUE_USED(opline)) {
- ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STRVAL_P(Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str) + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
- }
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-//??? instead of FREE_OP_VAR_PTR(free_op_data2);
- STR_RELEASE(old_str);
- efree(Z_STR_OFFSET_P(variable_ptr));
+ zend_assign_to_string_offset(variable_ptr, value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
} else if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (IS_TMP_FREE(free_op_data1)) {
zval_dtor(value);
variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
- zend_string *old_str = Z_STR_P(Z_STR_OFFSET_P(variable_ptr)->str);
- if (zend_assign_to_string_offset(variable_ptr, value, IS_VAR TSRMLS_CC)) {
- if (RETURN_VALUE_USED(opline)) {
- ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STRVAL_P(Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str) + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
- }
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-//??? instead of if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);}
- STR_RELEASE(old_str);
- efree(Z_STR_OFFSET_P(variable_ptr));
+ zend_assign_to_string_offset(variable_ptr, value, IS_VAR, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
} else if (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (0) {
zval_dtor(value);
value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
- if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- make_real_object(object TSRMLS_CC);
- }
- ZVAL_DEREF(object);
+ object = make_real_object(object TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
- zend_string *old_str = Z_STR_P(Z_STR_OFFSET_P(variable_ptr)->str);
- if (zend_assign_to_string_offset(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC)) {
- if (RETURN_VALUE_USED(opline)) {
- ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STRVAL_P(Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str) + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
- }
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-//??? instead of FREE_OP_VAR_PTR(free_op_data2);
- STR_RELEASE(old_str);
- efree(Z_STR_OFFSET_P(variable_ptr));
+ zend_assign_to_string_offset(variable_ptr, value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
} else if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (IS_TMP_FREE(free_op_data1)) {
zval_dtor(value);
value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
- if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- make_real_object(object TSRMLS_CC);
- }
- ZVAL_DEREF(object);
+ object = make_real_object(object TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
- zend_string *old_str = Z_STR_P(Z_STR_OFFSET_P(variable_ptr)->str);
- if (zend_assign_to_string_offset(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC)) {
- if (RETURN_VALUE_USED(opline)) {
- ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STRVAL_P(Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str) + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
- }
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-//??? instead of FREE_OP_VAR_PTR(free_op_data2);
- STR_RELEASE(old_str);
- efree(Z_STR_OFFSET_P(variable_ptr));
+ zend_assign_to_string_offset(variable_ptr, value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
} else if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (IS_TMP_FREE(free_op_data1)) {
zval_dtor(value);
variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
- zend_string *old_str = Z_STR_P(Z_STR_OFFSET_P(variable_ptr)->str);
- if (zend_assign_to_string_offset(variable_ptr, value, IS_CV TSRMLS_CC)) {
- if (RETURN_VALUE_USED(opline)) {
- ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STRVAL_P(Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str) + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
- }
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-//??? instead of if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);}
- STR_RELEASE(old_str);
- efree(Z_STR_OFFSET_P(variable_ptr));
+ zend_assign_to_string_offset(variable_ptr, value, IS_CV, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
} else if (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (0) {
zval_dtor(value);
value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
- if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- make_real_object(object TSRMLS_CC);
- }
- ZVAL_DEREF(object);
+ object = make_real_object(object TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
value = NULL;
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
- if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- make_real_object(object TSRMLS_CC);
- }
- ZVAL_DEREF(object);
+ object = make_real_object(object TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
value = NULL;
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!1) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
- if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- make_real_object(object TSRMLS_CC);
- }
- ZVAL_DEREF(object);
+ object = make_real_object(object TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
value = NULL;
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
- if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- make_real_object(object TSRMLS_CC);
- }
- ZVAL_DEREF(object);
+ object = make_real_object(object TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
value = NULL;
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
- if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- make_real_object(object TSRMLS_CC);
- }
- ZVAL_DEREF(object);
+ object = make_real_object(object TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
value = NULL;
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
if (IS_CV != IS_TMP_VAR) {
- zval_copy_ctor(EX(return_value));
+ zval_opt_copy_ctor(EX(return_value));
}
} else if (Z_ISREF_P(retval_ptr)) {
} else {
ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
if (IS_CV == IS_CV) {
- if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
+ if (Z_OPT_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
}
}
}
/* Not sure if a complete copy is what we want here */
ZVAL_COPY_VALUE(&exception, value);
if (!0) {
- zval_copy_ctor(&exception);
+ zval_opt_copy_ctor(&exception);
}
zend_throw_exception_object(&exception TSRMLS_CC);
}
ZVAL_COPY_VALUE(&val, varptr);
if (!0) {
- zval_copy_ctor(&val);
+ zval_opt_copy_ctor(&val);
}
zend_vm_stack_push(&val TSRMLS_CC);
if (opline->extended_value != IS_STRING) {
ZVAL_COPY_VALUE(result, expr);
if (!0) {
- zval_copy_ctor(result);
+ zval_opt_copy_ctor(result);
}
}
} else {
ZVAL_COPY_VALUE(result, expr);
if (!0) {
- zval_copy_ctor(result);
+ zval_opt_copy_ctor(result);
}
}
break;
if (i_zend_is_true(value TSRMLS_CC)) {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!0) {
- zval_copy_ctor(EX_VAR(opline->result.var));
+ zval_opt_copy_ctor(EX_VAR(opline->result.var));
}
#if DEBUG_ZEND>=2
} else {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!0) {
- zval_copy_ctor(EX_VAR(opline->result.var));
+ zval_opt_copy_ctor(EX_VAR(opline->result.var));
}
}
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!0) {
- zval_copy_ctor(EX_VAR(opline->result.var));
+ zval_opt_copy_ctor(EX_VAR(opline->result.var));
}
CHECK_EXCEPTION();
} else {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!0) {
- zval_copy_ctor(EX_VAR(opline->result.var));
+ zval_opt_copy_ctor(EX_VAR(opline->result.var));
}
}
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
- if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- make_real_object(object TSRMLS_CC);
- }
- ZVAL_DEREF(object);
+ object = make_real_object(object TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
- zend_string *old_str = Z_STR_P(Z_STR_OFFSET_P(variable_ptr)->str);
- if (zend_assign_to_string_offset(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC)) {
- if (RETURN_VALUE_USED(opline)) {
- ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STRVAL_P(Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str) + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
- }
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-//??? instead of FREE_OP_VAR_PTR(free_op_data2);
- STR_RELEASE(old_str);
- efree(Z_STR_OFFSET_P(variable_ptr));
+ zend_assign_to_string_offset(variable_ptr, value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
} else if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (IS_TMP_FREE(free_op_data1)) {
zval_dtor(value);
variable_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
- zend_string *old_str = Z_STR_P(Z_STR_OFFSET_P(variable_ptr)->str);
- if (zend_assign_to_string_offset(variable_ptr, value, IS_CONST TSRMLS_CC)) {
- if (RETURN_VALUE_USED(opline)) {
- ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STRVAL_P(Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str) + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
- }
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-//??? instead of
- STR_RELEASE(old_str);
- efree(Z_STR_OFFSET_P(variable_ptr));
+ zend_assign_to_string_offset(variable_ptr, value, IS_CONST, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
} else if (IS_CV == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (0) {
zval_dtor(value);
value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
- if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- make_real_object(object TSRMLS_CC);
- }
- ZVAL_DEREF(object);
+ object = make_real_object(object TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
- zend_string *old_str = Z_STR_P(Z_STR_OFFSET_P(variable_ptr)->str);
- if (zend_assign_to_string_offset(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC)) {
- if (RETURN_VALUE_USED(opline)) {
- ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STRVAL_P(Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str) + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
- }
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-//??? instead of FREE_OP_VAR_PTR(free_op_data2);
- STR_RELEASE(old_str);
- efree(Z_STR_OFFSET_P(variable_ptr));
+ zend_assign_to_string_offset(variable_ptr, value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
} else if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (IS_TMP_FREE(free_op_data1)) {
zval_dtor(value);
variable_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
- zend_string *old_str = Z_STR_P(Z_STR_OFFSET_P(variable_ptr)->str);
- if (zend_assign_to_string_offset(variable_ptr, value, IS_TMP_VAR TSRMLS_CC)) {
- if (RETURN_VALUE_USED(opline)) {
- ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STRVAL_P(Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str) + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
- }
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-//??? instead of
- STR_RELEASE(old_str);
- efree(Z_STR_OFFSET_P(variable_ptr));
+ zend_assign_to_string_offset(variable_ptr, value, IS_TMP_VAR, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
} else if (IS_CV == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (1) {
zval_dtor(value);
value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!1) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
- if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- make_real_object(object TSRMLS_CC);
- }
- ZVAL_DEREF(object);
+ object = make_real_object(object TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
- zend_string *old_str = Z_STR_P(Z_STR_OFFSET_P(variable_ptr)->str);
- if (zend_assign_to_string_offset(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC)) {
- if (RETURN_VALUE_USED(opline)) {
- ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STRVAL_P(Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str) + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
- }
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-//??? instead of FREE_OP_VAR_PTR(free_op_data2);
- STR_RELEASE(old_str);
- efree(Z_STR_OFFSET_P(variable_ptr));
+ zend_assign_to_string_offset(variable_ptr, value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
} else if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (IS_TMP_FREE(free_op_data1)) {
zval_dtor(value);
variable_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
- zend_string *old_str = Z_STR_P(Z_STR_OFFSET_P(variable_ptr)->str);
- if (zend_assign_to_string_offset(variable_ptr, value, IS_VAR TSRMLS_CC)) {
- if (RETURN_VALUE_USED(opline)) {
- ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STRVAL_P(Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str) + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
- }
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-//??? instead of
- STR_RELEASE(old_str);
- efree(Z_STR_OFFSET_P(variable_ptr));
+ zend_assign_to_string_offset(variable_ptr, value, IS_VAR, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
} else if (IS_CV == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (0) {
zval_dtor(value);
value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
- if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- make_real_object(object TSRMLS_CC);
- }
- ZVAL_DEREF(object);
+ object = make_real_object(object TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
- zend_string *old_str = Z_STR_P(Z_STR_OFFSET_P(variable_ptr)->str);
- if (zend_assign_to_string_offset(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC)) {
- if (RETURN_VALUE_USED(opline)) {
- ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STRVAL_P(Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str) + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
- }
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-//??? instead of FREE_OP_VAR_PTR(free_op_data2);
- STR_RELEASE(old_str);
- efree(Z_STR_OFFSET_P(variable_ptr));
+ zend_assign_to_string_offset(variable_ptr, value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
} else if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (IS_TMP_FREE(free_op_data1)) {
zval_dtor(value);
value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
- if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- make_real_object(object TSRMLS_CC);
- }
- ZVAL_DEREF(object);
+ object = make_real_object(object TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
}
- make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
+ object = make_real_object(object TSRMLS_CC); /* this should modify object only if it's empty */
if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
- zend_string *old_str = Z_STR_P(Z_STR_OFFSET_P(variable_ptr)->str);
- if (zend_assign_to_string_offset(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC)) {
- if (RETURN_VALUE_USED(opline)) {
- ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STRVAL_P(Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->str) + Z_STR_OFFSET_P(EX_VAR((opline+1)->op2.var))->offset, 1);
- }
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-//??? instead of FREE_OP_VAR_PTR(free_op_data2);
- STR_RELEASE(old_str);
- efree(Z_STR_OFFSET_P(variable_ptr));
+ zend_assign_to_string_offset(variable_ptr, value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
} else if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (IS_TMP_FREE(free_op_data1)) {
zval_dtor(value);
variable_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
- zend_string *old_str = Z_STR_P(Z_STR_OFFSET_P(variable_ptr)->str);
- if (zend_assign_to_string_offset(variable_ptr, value, IS_CV TSRMLS_CC)) {
- if (RETURN_VALUE_USED(opline)) {
- ZVAL_STRINGL(EX_VAR(opline->result.var), Z_STRVAL_P(Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->str) + Z_STR_OFFSET_P(EX_VAR(opline->op1.var))->offset, 1);
- }
- } else if (RETURN_VALUE_USED(opline)) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-//??? instead of
- STR_RELEASE(old_str);
- efree(Z_STR_OFFSET_P(variable_ptr));
+ zend_assign_to_string_offset(variable_ptr, value, IS_CV, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
} else if (IS_CV == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (0) {
zval_dtor(value);
value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, value);
ZVAL_COPY_VALUE(&generator->value, value);
- if (Z_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
+ if (Z_OPT_REFCOUNTED(generator->value)) Z_SET_REFCOUNT(generator->value, 1);
/* Temporary variables don't need ctor copying */
if (!0) {
) {
//??? INIT_PZVAL_COPY(copy, key);
ZVAL_COPY_VALUE(&generator->key, key);
- if (Z_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
+ if (Z_OPT_REFCOUNTED(generator->key)) Z_SET_REFCOUNT(generator->key, 1);
/* Temporary variables don't need ctor copying */
if (!0) {