if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(prop, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
prop = &EG(uninitialized_zval);
}
+ } else if (UNEXPECTED(prop_info->type)) {
+ prop = zend_assign_to_typed_property_reference(prop_info, prop, value_ptr);
} else {
- do {
- if (UNEXPECTED(prop_info->type)) {
- if (!zend_verify_prop_assignable_by_ref(prop_info, value_ptr, EX_USES_STRICT_TYPES())) {
- prop = &EG(uninitialized_zval);
- break;
- }
- if (Z_ISREF_P(prop)) {
- ZEND_REF_DEL_TYPE_SOURCE(Z_REF_P(prop), prop_info);
- }
- }
- zend_assign_to_variable_reference(prop, value_ptr);
- if (prop_info->type) {
- ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(prop), prop_info);
- }
- } while (0);
+ zend_assign_to_variable_reference(prop, value_ptr);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
{
USE_OPLINE
zend_free_op free_op1, free_op_data;
- zval *property;
- zval *container;
- zval variable, *variable_ptr = &variable;
- zval *value_ptr;
- void **cache_addr;
+ zval *property, *container, *value_ptr;
SAVE_OPLINE();
property = RT_CONSTANT(opline, opline->op2);
- cache_addr = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_RETURNS_FUNCTION) : NULL;
-
- zend_fetch_property_address(variable_ptr, container, IS_VAR, property, IS_CONST, cache_addr, BP_VAR_W, 0, 0 OPLINE_CC EXECUTE_DATA_CC);
- if (Z_TYPE_P(variable_ptr) == IS_INDIRECT) {
- variable_ptr = Z_INDIRECT_P(variable_ptr);
- }
-
value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
- if (UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (UNEXPECTED(Z_TYPE(variable) != IS_INDIRECT)) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_VAR == IS_VAR &&
- (opline->extended_value & ZEND_RETURNS_FUNCTION) &&
- UNEXPECTED(!Z_ISREF_P(value_ptr))) {
-
- if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(
- variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
- variable_ptr = &EG(uninitialized_zval);
- }
- } else {
- zend_property_info *prop_info = NULL;
-
- if (IS_CONST == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_addr + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(container), variable_ptr);
- }
-
- do {
- if (UNEXPECTED(prop_info)) {
- if (!zend_verify_prop_assignable_by_ref(prop_info, value_ptr, EX_USES_STRICT_TYPES())) {
- variable_ptr = &EG(uninitialized_zval);
- break;
- }
-
- if (Z_ISREF_P(variable_ptr)) {
- ZEND_REF_DEL_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
- }
+ if (ZEND_VM_SPEC) {
+ if (IS_VAR == IS_UNUSED) {
+ if (IS_CONST == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- zend_assign_to_variable_reference(variable_ptr, value_ptr);
- if (prop_info) {
- ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
+ } else {
+ if (IS_CONST == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- } while (0);
- }
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
{
USE_OPLINE
zend_free_op free_op1;
- zval *property;
- zval *container;
- zval variable, *variable_ptr = &variable;
- zval *value_ptr;
- void **cache_addr;
+ zval *property, *container, *value_ptr;
SAVE_OPLINE();
property = RT_CONSTANT(opline, opline->op2);
- cache_addr = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_RETURNS_FUNCTION) : NULL;
-
- zend_fetch_property_address(variable_ptr, container, IS_VAR, property, IS_CONST, cache_addr, BP_VAR_W, 0, 0 OPLINE_CC EXECUTE_DATA_CC);
- if (Z_TYPE_P(variable_ptr) == IS_INDIRECT) {
- variable_ptr = Z_INDIRECT_P(variable_ptr);
- }
-
value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
- if (UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (UNEXPECTED(Z_TYPE(variable) != IS_INDIRECT)) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_CV == IS_VAR &&
- (opline->extended_value & ZEND_RETURNS_FUNCTION) &&
- UNEXPECTED(!Z_ISREF_P(value_ptr))) {
-
- if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(
- variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
- variable_ptr = &EG(uninitialized_zval);
- }
- } else {
- zend_property_info *prop_info = NULL;
-
- if (IS_CONST == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_addr + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(container), variable_ptr);
- }
-
- do {
- if (UNEXPECTED(prop_info)) {
- if (!zend_verify_prop_assignable_by_ref(prop_info, value_ptr, EX_USES_STRICT_TYPES())) {
- variable_ptr = &EG(uninitialized_zval);
- break;
- }
-
- if (Z_ISREF_P(variable_ptr)) {
- ZEND_REF_DEL_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
- }
+ if (ZEND_VM_SPEC) {
+ if (IS_VAR == IS_UNUSED) {
+ if (IS_CONST == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- zend_assign_to_variable_reference(variable_ptr, value_ptr);
- if (prop_info) {
- ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
+ } else {
+ if (IS_CONST == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- } while (0);
- }
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
{
USE_OPLINE
zend_free_op free_op1, free_op2, free_op_data;
- zval *property;
- zval *container;
- zval variable, *variable_ptr = &variable;
- zval *value_ptr;
- void **cache_addr;
+ zval *property, *container, *value_ptr;
SAVE_OPLINE();
property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
- cache_addr = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_RETURNS_FUNCTION) : NULL;
-
- zend_fetch_property_address(variable_ptr, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), cache_addr, BP_VAR_W, 0, 0 OPLINE_CC EXECUTE_DATA_CC);
- if (Z_TYPE_P(variable_ptr) == IS_INDIRECT) {
- variable_ptr = Z_INDIRECT_P(variable_ptr);
- }
-
value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
- if (UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (UNEXPECTED(Z_TYPE(variable) != IS_INDIRECT)) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_VAR == IS_VAR &&
- (opline->extended_value & ZEND_RETURNS_FUNCTION) &&
- UNEXPECTED(!Z_ISREF_P(value_ptr))) {
-
- if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(
- variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
- variable_ptr = &EG(uninitialized_zval);
- }
- } else {
- zend_property_info *prop_info = NULL;
-
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_addr + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(container), variable_ptr);
- }
-
- do {
- if (UNEXPECTED(prop_info)) {
- if (!zend_verify_prop_assignable_by_ref(prop_info, value_ptr, EX_USES_STRICT_TYPES())) {
- variable_ptr = &EG(uninitialized_zval);
- break;
- }
-
- if (Z_ISREF_P(variable_ptr)) {
- ZEND_REF_DEL_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
- }
+ if (ZEND_VM_SPEC) {
+ if (IS_VAR == IS_UNUSED) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- zend_assign_to_variable_reference(variable_ptr, value_ptr);
- if (prop_info) {
- ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
+ } else {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- } while (0);
- }
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
{
USE_OPLINE
zend_free_op free_op1, free_op2;
- zval *property;
- zval *container;
- zval variable, *variable_ptr = &variable;
- zval *value_ptr;
- void **cache_addr;
+ zval *property, *container, *value_ptr;
SAVE_OPLINE();
property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
- cache_addr = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_RETURNS_FUNCTION) : NULL;
-
- zend_fetch_property_address(variable_ptr, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), cache_addr, BP_VAR_W, 0, 0 OPLINE_CC EXECUTE_DATA_CC);
- if (Z_TYPE_P(variable_ptr) == IS_INDIRECT) {
- variable_ptr = Z_INDIRECT_P(variable_ptr);
- }
-
value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
- if (UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (UNEXPECTED(Z_TYPE(variable) != IS_INDIRECT)) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_CV == IS_VAR &&
- (opline->extended_value & ZEND_RETURNS_FUNCTION) &&
- UNEXPECTED(!Z_ISREF_P(value_ptr))) {
-
- if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(
- variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
- variable_ptr = &EG(uninitialized_zval);
- }
- } else {
- zend_property_info *prop_info = NULL;
-
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_addr + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(container), variable_ptr);
- }
-
- do {
- if (UNEXPECTED(prop_info)) {
- if (!zend_verify_prop_assignable_by_ref(prop_info, value_ptr, EX_USES_STRICT_TYPES())) {
- variable_ptr = &EG(uninitialized_zval);
- break;
- }
-
- if (Z_ISREF_P(variable_ptr)) {
- ZEND_REF_DEL_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
- }
+ if (ZEND_VM_SPEC) {
+ if (IS_VAR == IS_UNUSED) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- zend_assign_to_variable_reference(variable_ptr, value_ptr);
- if (prop_info) {
- ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
+ } else {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- } while (0);
- }
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
{
USE_OPLINE
zend_free_op free_op1, free_op_data;
- zval *property;
- zval *container;
- zval variable, *variable_ptr = &variable;
- zval *value_ptr;
- void **cache_addr;
+ zval *property, *container, *value_ptr;
SAVE_OPLINE();
property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
- cache_addr = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_RETURNS_FUNCTION) : NULL;
-
- zend_fetch_property_address(variable_ptr, container, IS_VAR, property, IS_CV, cache_addr, BP_VAR_W, 0, 0 OPLINE_CC EXECUTE_DATA_CC);
- if (Z_TYPE_P(variable_ptr) == IS_INDIRECT) {
- variable_ptr = Z_INDIRECT_P(variable_ptr);
- }
-
value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
- if (UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (UNEXPECTED(Z_TYPE(variable) != IS_INDIRECT)) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_VAR == IS_VAR &&
- (opline->extended_value & ZEND_RETURNS_FUNCTION) &&
- UNEXPECTED(!Z_ISREF_P(value_ptr))) {
-
- if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(
- variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
- variable_ptr = &EG(uninitialized_zval);
- }
- } else {
- zend_property_info *prop_info = NULL;
-
- if (IS_CV == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_addr + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(container), variable_ptr);
- }
-
- do {
- if (UNEXPECTED(prop_info)) {
- if (!zend_verify_prop_assignable_by_ref(prop_info, value_ptr, EX_USES_STRICT_TYPES())) {
- variable_ptr = &EG(uninitialized_zval);
- break;
- }
-
- if (Z_ISREF_P(variable_ptr)) {
- ZEND_REF_DEL_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
- }
+ if (ZEND_VM_SPEC) {
+ if (IS_VAR == IS_UNUSED) {
+ if (IS_CV == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- zend_assign_to_variable_reference(variable_ptr, value_ptr);
- if (prop_info) {
- ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
+ } else {
+ if (IS_CV == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- } while (0);
- }
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
{
USE_OPLINE
zend_free_op free_op1;
- zval *property;
- zval *container;
- zval variable, *variable_ptr = &variable;
- zval *value_ptr;
- void **cache_addr;
+ zval *property, *container, *value_ptr;
SAVE_OPLINE();
property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
- cache_addr = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_RETURNS_FUNCTION) : NULL;
-
- zend_fetch_property_address(variable_ptr, container, IS_VAR, property, IS_CV, cache_addr, BP_VAR_W, 0, 0 OPLINE_CC EXECUTE_DATA_CC);
- if (Z_TYPE_P(variable_ptr) == IS_INDIRECT) {
- variable_ptr = Z_INDIRECT_P(variable_ptr);
- }
-
value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
- if (UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (UNEXPECTED(Z_TYPE(variable) != IS_INDIRECT)) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_CV == IS_VAR &&
- (opline->extended_value & ZEND_RETURNS_FUNCTION) &&
- UNEXPECTED(!Z_ISREF_P(value_ptr))) {
-
- if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(
- variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
- variable_ptr = &EG(uninitialized_zval);
- }
- } else {
- zend_property_info *prop_info = NULL;
-
- if (IS_CV == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_addr + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(container), variable_ptr);
- }
-
- do {
- if (UNEXPECTED(prop_info)) {
- if (!zend_verify_prop_assignable_by_ref(prop_info, value_ptr, EX_USES_STRICT_TYPES())) {
- variable_ptr = &EG(uninitialized_zval);
- break;
- }
-
- if (Z_ISREF_P(variable_ptr)) {
- ZEND_REF_DEL_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
- }
+ if (ZEND_VM_SPEC) {
+ if (IS_VAR == IS_UNUSED) {
+ if (IS_CV == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- zend_assign_to_variable_reference(variable_ptr, value_ptr);
- if (prop_info) {
- ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
+ } else {
+ if (IS_CV == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- } while (0);
- }
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
{
USE_OPLINE
zend_free_op free_op_data;
- zval *property;
- zval *container;
- zval variable, *variable_ptr = &variable;
- zval *value_ptr;
- void **cache_addr;
+ zval *property, *container, *value_ptr;
SAVE_OPLINE();
property = RT_CONSTANT(opline, opline->op2);
- cache_addr = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_RETURNS_FUNCTION) : NULL;
-
- zend_fetch_property_address(variable_ptr, container, IS_UNUSED, property, IS_CONST, cache_addr, BP_VAR_W, 0, 0 OPLINE_CC EXECUTE_DATA_CC);
- if (Z_TYPE_P(variable_ptr) == IS_INDIRECT) {
- variable_ptr = Z_INDIRECT_P(variable_ptr);
- }
-
value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
- if (UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (UNEXPECTED(Z_TYPE(variable) != IS_INDIRECT)) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_VAR == IS_VAR &&
- (opline->extended_value & ZEND_RETURNS_FUNCTION) &&
- UNEXPECTED(!Z_ISREF_P(value_ptr))) {
-
- if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(
- variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
- variable_ptr = &EG(uninitialized_zval);
- }
- } else {
- zend_property_info *prop_info = NULL;
-
- if (IS_CONST == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_addr + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(container), variable_ptr);
- }
-
- do {
- if (UNEXPECTED(prop_info)) {
- if (!zend_verify_prop_assignable_by_ref(prop_info, value_ptr, EX_USES_STRICT_TYPES())) {
- variable_ptr = &EG(uninitialized_zval);
- break;
- }
-
- if (Z_ISREF_P(variable_ptr)) {
- ZEND_REF_DEL_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
- }
+ if (ZEND_VM_SPEC) {
+ if (IS_UNUSED == IS_UNUSED) {
+ if (IS_CONST == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- zend_assign_to_variable_reference(variable_ptr, value_ptr);
- if (prop_info) {
- ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
+ } else {
+ if (IS_CONST == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- } while (0);
- }
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
{
USE_OPLINE
- zval *property;
- zval *container;
- zval variable, *variable_ptr = &variable;
- zval *value_ptr;
- void **cache_addr;
+ zval *property, *container, *value_ptr;
SAVE_OPLINE();
property = RT_CONSTANT(opline, opline->op2);
- cache_addr = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_RETURNS_FUNCTION) : NULL;
-
- zend_fetch_property_address(variable_ptr, container, IS_UNUSED, property, IS_CONST, cache_addr, BP_VAR_W, 0, 0 OPLINE_CC EXECUTE_DATA_CC);
- if (Z_TYPE_P(variable_ptr) == IS_INDIRECT) {
- variable_ptr = Z_INDIRECT_P(variable_ptr);
- }
-
value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
- if (UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (UNEXPECTED(Z_TYPE(variable) != IS_INDIRECT)) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_CV == IS_VAR &&
- (opline->extended_value & ZEND_RETURNS_FUNCTION) &&
- UNEXPECTED(!Z_ISREF_P(value_ptr))) {
-
- if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(
- variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
- variable_ptr = &EG(uninitialized_zval);
- }
- } else {
- zend_property_info *prop_info = NULL;
-
- if (IS_CONST == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_addr + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(container), variable_ptr);
- }
-
- do {
- if (UNEXPECTED(prop_info)) {
- if (!zend_verify_prop_assignable_by_ref(prop_info, value_ptr, EX_USES_STRICT_TYPES())) {
- variable_ptr = &EG(uninitialized_zval);
- break;
- }
-
- if (Z_ISREF_P(variable_ptr)) {
- ZEND_REF_DEL_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
- }
+ if (ZEND_VM_SPEC) {
+ if (IS_UNUSED == IS_UNUSED) {
+ if (IS_CONST == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- zend_assign_to_variable_reference(variable_ptr, value_ptr);
- if (prop_info) {
- ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
+ } else {
+ if (IS_CONST == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- } while (0);
- }
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
{
USE_OPLINE
zend_free_op free_op2, free_op_data;
- zval *property;
- zval *container;
- zval variable, *variable_ptr = &variable;
- zval *value_ptr;
- void **cache_addr;
+ zval *property, *container, *value_ptr;
SAVE_OPLINE();
property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
- cache_addr = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_RETURNS_FUNCTION) : NULL;
-
- zend_fetch_property_address(variable_ptr, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), cache_addr, BP_VAR_W, 0, 0 OPLINE_CC EXECUTE_DATA_CC);
- if (Z_TYPE_P(variable_ptr) == IS_INDIRECT) {
- variable_ptr = Z_INDIRECT_P(variable_ptr);
- }
-
value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
- if (UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (UNEXPECTED(Z_TYPE(variable) != IS_INDIRECT)) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_VAR == IS_VAR &&
- (opline->extended_value & ZEND_RETURNS_FUNCTION) &&
- UNEXPECTED(!Z_ISREF_P(value_ptr))) {
-
- if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(
- variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
- variable_ptr = &EG(uninitialized_zval);
- }
- } else {
- zend_property_info *prop_info = NULL;
-
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_addr + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(container), variable_ptr);
- }
-
- do {
- if (UNEXPECTED(prop_info)) {
- if (!zend_verify_prop_assignable_by_ref(prop_info, value_ptr, EX_USES_STRICT_TYPES())) {
- variable_ptr = &EG(uninitialized_zval);
- break;
- }
-
- if (Z_ISREF_P(variable_ptr)) {
- ZEND_REF_DEL_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
- }
+ if (ZEND_VM_SPEC) {
+ if (IS_UNUSED == IS_UNUSED) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- zend_assign_to_variable_reference(variable_ptr, value_ptr);
- if (prop_info) {
- ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
+ } else {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- } while (0);
- }
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
zval_ptr_dtor_nogc(free_op2);
{
USE_OPLINE
zend_free_op free_op2;
- zval *property;
- zval *container;
- zval variable, *variable_ptr = &variable;
- zval *value_ptr;
- void **cache_addr;
+ zval *property, *container, *value_ptr;
SAVE_OPLINE();
property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
- cache_addr = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_RETURNS_FUNCTION) : NULL;
-
- zend_fetch_property_address(variable_ptr, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), cache_addr, BP_VAR_W, 0, 0 OPLINE_CC EXECUTE_DATA_CC);
- if (Z_TYPE_P(variable_ptr) == IS_INDIRECT) {
- variable_ptr = Z_INDIRECT_P(variable_ptr);
- }
-
value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
- if (UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (UNEXPECTED(Z_TYPE(variable) != IS_INDIRECT)) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_CV == IS_VAR &&
- (opline->extended_value & ZEND_RETURNS_FUNCTION) &&
- UNEXPECTED(!Z_ISREF_P(value_ptr))) {
-
- if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(
- variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
- variable_ptr = &EG(uninitialized_zval);
- }
- } else {
- zend_property_info *prop_info = NULL;
-
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_addr + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(container), variable_ptr);
- }
-
- do {
- if (UNEXPECTED(prop_info)) {
- if (!zend_verify_prop_assignable_by_ref(prop_info, value_ptr, EX_USES_STRICT_TYPES())) {
- variable_ptr = &EG(uninitialized_zval);
- break;
- }
-
- if (Z_ISREF_P(variable_ptr)) {
- ZEND_REF_DEL_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
- }
+ if (ZEND_VM_SPEC) {
+ if (IS_UNUSED == IS_UNUSED) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- zend_assign_to_variable_reference(variable_ptr, value_ptr);
- if (prop_info) {
- ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
+ } else {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- } while (0);
- }
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
zval_ptr_dtor_nogc(free_op2);
{
USE_OPLINE
zend_free_op free_op_data;
- zval *property;
- zval *container;
- zval variable, *variable_ptr = &variable;
- zval *value_ptr;
- void **cache_addr;
+ zval *property, *container, *value_ptr;
SAVE_OPLINE();
property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
- cache_addr = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_RETURNS_FUNCTION) : NULL;
-
- zend_fetch_property_address(variable_ptr, container, IS_UNUSED, property, IS_CV, cache_addr, BP_VAR_W, 0, 0 OPLINE_CC EXECUTE_DATA_CC);
- if (Z_TYPE_P(variable_ptr) == IS_INDIRECT) {
- variable_ptr = Z_INDIRECT_P(variable_ptr);
- }
-
value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
- if (UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (UNEXPECTED(Z_TYPE(variable) != IS_INDIRECT)) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_VAR == IS_VAR &&
- (opline->extended_value & ZEND_RETURNS_FUNCTION) &&
- UNEXPECTED(!Z_ISREF_P(value_ptr))) {
-
- if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(
- variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
- variable_ptr = &EG(uninitialized_zval);
- }
- } else {
- zend_property_info *prop_info = NULL;
-
- if (IS_CV == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_addr + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(container), variable_ptr);
- }
-
- do {
- if (UNEXPECTED(prop_info)) {
- if (!zend_verify_prop_assignable_by_ref(prop_info, value_ptr, EX_USES_STRICT_TYPES())) {
- variable_ptr = &EG(uninitialized_zval);
- break;
- }
-
- if (Z_ISREF_P(variable_ptr)) {
- ZEND_REF_DEL_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
- }
+ if (ZEND_VM_SPEC) {
+ if (IS_UNUSED == IS_UNUSED) {
+ if (IS_CV == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- zend_assign_to_variable_reference(variable_ptr, value_ptr);
- if (prop_info) {
- ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
+ } else {
+ if (IS_CV == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- } while (0);
- }
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
{
USE_OPLINE
- zval *property;
- zval *container;
- zval variable, *variable_ptr = &variable;
- zval *value_ptr;
- void **cache_addr;
+ zval *property, *container, *value_ptr;
SAVE_OPLINE();
property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
- cache_addr = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_RETURNS_FUNCTION) : NULL;
-
- zend_fetch_property_address(variable_ptr, container, IS_UNUSED, property, IS_CV, cache_addr, BP_VAR_W, 0, 0 OPLINE_CC EXECUTE_DATA_CC);
- if (Z_TYPE_P(variable_ptr) == IS_INDIRECT) {
- variable_ptr = Z_INDIRECT_P(variable_ptr);
- }
-
value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
- if (UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (UNEXPECTED(Z_TYPE(variable) != IS_INDIRECT)) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_CV == IS_VAR &&
- (opline->extended_value & ZEND_RETURNS_FUNCTION) &&
- UNEXPECTED(!Z_ISREF_P(value_ptr))) {
-
- if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(
- variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
- variable_ptr = &EG(uninitialized_zval);
- }
- } else {
- zend_property_info *prop_info = NULL;
-
- if (IS_CV == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_addr + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(container), variable_ptr);
- }
-
- do {
- if (UNEXPECTED(prop_info)) {
- if (!zend_verify_prop_assignable_by_ref(prop_info, value_ptr, EX_USES_STRICT_TYPES())) {
- variable_ptr = &EG(uninitialized_zval);
- break;
- }
-
- if (Z_ISREF_P(variable_ptr)) {
- ZEND_REF_DEL_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
- }
+ if (ZEND_VM_SPEC) {
+ if (IS_UNUSED == IS_UNUSED) {
+ if (IS_CV == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- zend_assign_to_variable_reference(variable_ptr, value_ptr);
- if (prop_info) {
- ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
+ } else {
+ if (IS_CV == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- } while (0);
- }
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
{
USE_OPLINE
zend_free_op free_op_data;
- zval *property;
- zval *container;
- zval variable, *variable_ptr = &variable;
- zval *value_ptr;
- void **cache_addr;
+ zval *property, *container, *value_ptr;
SAVE_OPLINE();
property = RT_CONSTANT(opline, opline->op2);
- cache_addr = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_RETURNS_FUNCTION) : NULL;
-
- zend_fetch_property_address(variable_ptr, container, IS_CV, property, IS_CONST, cache_addr, BP_VAR_W, 0, 0 OPLINE_CC EXECUTE_DATA_CC);
- if (Z_TYPE_P(variable_ptr) == IS_INDIRECT) {
- variable_ptr = Z_INDIRECT_P(variable_ptr);
- }
-
value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
- if (UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (UNEXPECTED(Z_TYPE(variable) != IS_INDIRECT)) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_VAR == IS_VAR &&
- (opline->extended_value & ZEND_RETURNS_FUNCTION) &&
- UNEXPECTED(!Z_ISREF_P(value_ptr))) {
-
- if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(
- variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
- variable_ptr = &EG(uninitialized_zval);
- }
- } else {
- zend_property_info *prop_info = NULL;
-
- if (IS_CONST == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_addr + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(container), variable_ptr);
- }
-
- do {
- if (UNEXPECTED(prop_info)) {
- if (!zend_verify_prop_assignable_by_ref(prop_info, value_ptr, EX_USES_STRICT_TYPES())) {
- variable_ptr = &EG(uninitialized_zval);
- break;
- }
-
- if (Z_ISREF_P(variable_ptr)) {
- ZEND_REF_DEL_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
- }
+ if (ZEND_VM_SPEC) {
+ if (IS_CV == IS_UNUSED) {
+ if (IS_CONST == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- zend_assign_to_variable_reference(variable_ptr, value_ptr);
- if (prop_info) {
- ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
+ } else {
+ if (IS_CONST == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- } while (0);
- }
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_CV, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
{
USE_OPLINE
- zval *property;
- zval *container;
- zval variable, *variable_ptr = &variable;
- zval *value_ptr;
- void **cache_addr;
+ zval *property, *container, *value_ptr;
SAVE_OPLINE();
property = RT_CONSTANT(opline, opline->op2);
- cache_addr = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_RETURNS_FUNCTION) : NULL;
-
- zend_fetch_property_address(variable_ptr, container, IS_CV, property, IS_CONST, cache_addr, BP_VAR_W, 0, 0 OPLINE_CC EXECUTE_DATA_CC);
- if (Z_TYPE_P(variable_ptr) == IS_INDIRECT) {
- variable_ptr = Z_INDIRECT_P(variable_ptr);
- }
-
value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
- if (UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (UNEXPECTED(Z_TYPE(variable) != IS_INDIRECT)) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_CV == IS_VAR &&
- (opline->extended_value & ZEND_RETURNS_FUNCTION) &&
- UNEXPECTED(!Z_ISREF_P(value_ptr))) {
-
- if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(
- variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
- variable_ptr = &EG(uninitialized_zval);
- }
- } else {
- zend_property_info *prop_info = NULL;
-
- if (IS_CONST == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_addr + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(container), variable_ptr);
- }
-
- do {
- if (UNEXPECTED(prop_info)) {
- if (!zend_verify_prop_assignable_by_ref(prop_info, value_ptr, EX_USES_STRICT_TYPES())) {
- variable_ptr = &EG(uninitialized_zval);
- break;
- }
-
- if (Z_ISREF_P(variable_ptr)) {
- ZEND_REF_DEL_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
- }
+ if (ZEND_VM_SPEC) {
+ if (IS_CV == IS_UNUSED) {
+ if (IS_CONST == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- zend_assign_to_variable_reference(variable_ptr, value_ptr);
- if (prop_info) {
- ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
+ } else {
+ if (IS_CONST == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- } while (0);
- }
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_CV, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
{
USE_OPLINE
zend_free_op free_op2, free_op_data;
- zval *property;
- zval *container;
- zval variable, *variable_ptr = &variable;
- zval *value_ptr;
- void **cache_addr;
+ zval *property, *container, *value_ptr;
SAVE_OPLINE();
property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
- cache_addr = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_RETURNS_FUNCTION) : NULL;
-
- zend_fetch_property_address(variable_ptr, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), cache_addr, BP_VAR_W, 0, 0 OPLINE_CC EXECUTE_DATA_CC);
- if (Z_TYPE_P(variable_ptr) == IS_INDIRECT) {
- variable_ptr = Z_INDIRECT_P(variable_ptr);
- }
-
value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
- if (UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (UNEXPECTED(Z_TYPE(variable) != IS_INDIRECT)) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_VAR == IS_VAR &&
- (opline->extended_value & ZEND_RETURNS_FUNCTION) &&
- UNEXPECTED(!Z_ISREF_P(value_ptr))) {
-
- if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(
- variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
- variable_ptr = &EG(uninitialized_zval);
- }
- } else {
- zend_property_info *prop_info = NULL;
-
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_addr + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(container), variable_ptr);
- }
-
- do {
- if (UNEXPECTED(prop_info)) {
- if (!zend_verify_prop_assignable_by_ref(prop_info, value_ptr, EX_USES_STRICT_TYPES())) {
- variable_ptr = &EG(uninitialized_zval);
- break;
- }
-
- if (Z_ISREF_P(variable_ptr)) {
- ZEND_REF_DEL_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
- }
+ if (ZEND_VM_SPEC) {
+ if (IS_CV == IS_UNUSED) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- zend_assign_to_variable_reference(variable_ptr, value_ptr);
- if (prop_info) {
- ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
+ } else {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- } while (0);
- }
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_CV, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
zval_ptr_dtor_nogc(free_op2);
{
USE_OPLINE
zend_free_op free_op2;
- zval *property;
- zval *container;
- zval variable, *variable_ptr = &variable;
- zval *value_ptr;
- void **cache_addr;
+ zval *property, *container, *value_ptr;
SAVE_OPLINE();
property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
- cache_addr = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_RETURNS_FUNCTION) : NULL;
-
- zend_fetch_property_address(variable_ptr, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), cache_addr, BP_VAR_W, 0, 0 OPLINE_CC EXECUTE_DATA_CC);
- if (Z_TYPE_P(variable_ptr) == IS_INDIRECT) {
- variable_ptr = Z_INDIRECT_P(variable_ptr);
- }
-
value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
- if (UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (UNEXPECTED(Z_TYPE(variable) != IS_INDIRECT)) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_CV == IS_VAR &&
- (opline->extended_value & ZEND_RETURNS_FUNCTION) &&
- UNEXPECTED(!Z_ISREF_P(value_ptr))) {
-
- if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(
- variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
- variable_ptr = &EG(uninitialized_zval);
- }
- } else {
- zend_property_info *prop_info = NULL;
-
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_addr + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(container), variable_ptr);
- }
-
- do {
- if (UNEXPECTED(prop_info)) {
- if (!zend_verify_prop_assignable_by_ref(prop_info, value_ptr, EX_USES_STRICT_TYPES())) {
- variable_ptr = &EG(uninitialized_zval);
- break;
- }
-
- if (Z_ISREF_P(variable_ptr)) {
- ZEND_REF_DEL_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
- }
+ if (ZEND_VM_SPEC) {
+ if (IS_CV == IS_UNUSED) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- zend_assign_to_variable_reference(variable_ptr, value_ptr);
- if (prop_info) {
- ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
+ } else {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- } while (0);
- }
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_CV, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
zval_ptr_dtor_nogc(free_op2);
{
USE_OPLINE
zend_free_op free_op_data;
- zval *property;
- zval *container;
- zval variable, *variable_ptr = &variable;
- zval *value_ptr;
- void **cache_addr;
+ zval *property, *container, *value_ptr;
SAVE_OPLINE();
property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
- cache_addr = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_RETURNS_FUNCTION) : NULL;
-
- zend_fetch_property_address(variable_ptr, container, IS_CV, property, IS_CV, cache_addr, BP_VAR_W, 0, 0 OPLINE_CC EXECUTE_DATA_CC);
- if (Z_TYPE_P(variable_ptr) == IS_INDIRECT) {
- variable_ptr = Z_INDIRECT_P(variable_ptr);
- }
-
value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
- if (UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (UNEXPECTED(Z_TYPE(variable) != IS_INDIRECT)) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_VAR == IS_VAR &&
- (opline->extended_value & ZEND_RETURNS_FUNCTION) &&
- UNEXPECTED(!Z_ISREF_P(value_ptr))) {
-
- if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(
- variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
- variable_ptr = &EG(uninitialized_zval);
- }
- } else {
- zend_property_info *prop_info = NULL;
-
- if (IS_CV == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_addr + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(container), variable_ptr);
- }
-
- do {
- if (UNEXPECTED(prop_info)) {
- if (!zend_verify_prop_assignable_by_ref(prop_info, value_ptr, EX_USES_STRICT_TYPES())) {
- variable_ptr = &EG(uninitialized_zval);
- break;
- }
-
- if (Z_ISREF_P(variable_ptr)) {
- ZEND_REF_DEL_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
- }
+ if (ZEND_VM_SPEC) {
+ if (IS_CV == IS_UNUSED) {
+ if (IS_CV == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- zend_assign_to_variable_reference(variable_ptr, value_ptr);
- if (prop_info) {
- ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
+ } else {
+ if (IS_CV == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- } while (0);
- }
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_CV, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
{
USE_OPLINE
- zval *property;
- zval *container;
- zval variable, *variable_ptr = &variable;
- zval *value_ptr;
- void **cache_addr;
+ zval *property, *container, *value_ptr;
SAVE_OPLINE();
property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
- cache_addr = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_RETURNS_FUNCTION) : NULL;
-
- zend_fetch_property_address(variable_ptr, container, IS_CV, property, IS_CV, cache_addr, BP_VAR_W, 0, 0 OPLINE_CC EXECUTE_DATA_CC);
- if (Z_TYPE_P(variable_ptr) == IS_INDIRECT) {
- variable_ptr = Z_INDIRECT_P(variable_ptr);
- }
-
value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
- if (UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (UNEXPECTED(Z_TYPE(variable) != IS_INDIRECT)) {
- zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
- variable_ptr = &EG(uninitialized_zval);
- } else if (IS_CV == IS_VAR &&
- (opline->extended_value & ZEND_RETURNS_FUNCTION) &&
- UNEXPECTED(!Z_ISREF_P(value_ptr))) {
-
- if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(
- variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
- variable_ptr = &EG(uninitialized_zval);
- }
- } else {
- zend_property_info *prop_info = NULL;
-
- if (IS_CV == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_addr + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(container), variable_ptr);
- }
-
- do {
- if (UNEXPECTED(prop_info)) {
- if (!zend_verify_prop_assignable_by_ref(prop_info, value_ptr, EX_USES_STRICT_TYPES())) {
- variable_ptr = &EG(uninitialized_zval);
- break;
- }
-
- if (Z_ISREF_P(variable_ptr)) {
- ZEND_REF_DEL_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
- }
+ if (ZEND_VM_SPEC) {
+ if (IS_CV == IS_UNUSED) {
+ if (IS_CV == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- zend_assign_to_variable_reference(variable_ptr, value_ptr);
- if (prop_info) {
- ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(variable_ptr), prop_info);
+ } else {
+ if (IS_CV == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- } while (0);
- }
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_CV, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}