value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_assignment(property);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_op_object;
}
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
+assign_op_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
do {
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_inc_dec(property);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto pre_incdec_object;
}
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
+pre_incdec_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
do {
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_inc_dec(property);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto post_incdec_object;
+ }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
-
+post_incdec_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
value = RT_CONSTANT((opline+1), (opline+1)->op1);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
- goto exit_assign_obj;
- }
- } while (0);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CONST == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
- }
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- goto exit_assign_obj;
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- } while (0);
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
+ zval_ptr_dtor_nogc(free_op_data);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CONST == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- goto exit_assign_obj;
- }
- } while (0);
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
+ zval_ptr_dtor_nogc(free_op_data);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CONST == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
- goto exit_assign_obj;
- }
- } while (0);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CONST == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_assignment(property);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_op_object;
}
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
+assign_op_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
do {
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_inc_dec(property);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto pre_incdec_object;
}
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
+pre_incdec_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
do {
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_inc_dec(property);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto post_incdec_object;
+ }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
-
+post_incdec_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
value = RT_CONSTANT((opline+1), (opline+1)->op1);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
- goto exit_assign_obj;
- }
- } while (0);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
- }
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- goto exit_assign_obj;
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- } while (0);
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
+ zval_ptr_dtor_nogc(free_op_data);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
- }
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- goto exit_assign_obj;
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- } while (0);
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
+ zval_ptr_dtor_nogc(free_op_data);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
- goto exit_assign_obj;
- }
- } while (0);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_assignment(property);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_op_object;
}
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
+assign_op_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
do {
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_inc_dec(property);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto pre_incdec_object;
}
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
+pre_incdec_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
do {
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_inc_dec(property);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto post_incdec_object;
+ }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
-
+post_incdec_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
value = RT_CONSTANT((opline+1), (opline+1)->op1);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
- goto exit_assign_obj;
- }
- } while (0);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CV == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- goto exit_assign_obj;
- }
- } while (0);
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
+ zval_ptr_dtor_nogc(free_op_data);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CV == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
- }
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- goto exit_assign_obj;
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- } while (0);
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
+ zval_ptr_dtor_nogc(free_op_data);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CV == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
- goto exit_assign_obj;
- }
- } while (0);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CV == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_assignment(property);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_op_object;
}
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
+assign_op_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
do {
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_inc_dec(property);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto pre_incdec_object;
}
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
+pre_incdec_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
do {
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_inc_dec(property);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto post_incdec_object;
+ }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
-
+post_incdec_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
value = RT_CONSTANT((opline+1), (opline+1)->op1);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
- goto exit_assign_obj;
- }
- } while (0);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CONST == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
- }
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- goto exit_assign_obj;
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- } while (0);
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
+ zval_ptr_dtor_nogc(free_op_data);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CONST == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
- }
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- goto exit_assign_obj;
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- } while (0);
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
+ zval_ptr_dtor_nogc(free_op_data);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CONST == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
- goto exit_assign_obj;
- }
- } while (0);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CONST == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_assignment(property);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_op_object;
}
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
+assign_op_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
do {
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_inc_dec(property);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto pre_incdec_object;
}
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
+pre_incdec_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
do {
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_inc_dec(property);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto post_incdec_object;
+ }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
-
+post_incdec_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
value = RT_CONSTANT((opline+1), (opline+1)->op1);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
- goto exit_assign_obj;
- }
- } while (0);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
- }
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- goto exit_assign_obj;
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- } while (0);
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
+ zval_ptr_dtor_nogc(free_op_data);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
- }
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- goto exit_assign_obj;
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- } while (0);
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
+ zval_ptr_dtor_nogc(free_op_data);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
- goto exit_assign_obj;
- }
- } while (0);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_assignment(property);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_op_object;
}
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
+assign_op_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
do {
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_inc_dec(property);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto pre_incdec_object;
}
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
+pre_incdec_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
do {
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_inc_dec(property);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto post_incdec_object;
+ }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
-
+post_incdec_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
value = RT_CONSTANT((opline+1), (opline+1)->op1);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
- goto exit_assign_obj;
- }
- } while (0);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CV == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
- }
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- goto exit_assign_obj;
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- } while (0);
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
+ zval_ptr_dtor_nogc(free_op_data);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CV == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
- }
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- goto exit_assign_obj;
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- } while (0);
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
+ zval_ptr_dtor_nogc(free_op_data);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CV == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
- goto exit_assign_obj;
- }
- } while (0);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CV == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_assignment(property);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_op_object;
}
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
+assign_op_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
do {
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_inc_dec(property);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto pre_incdec_object;
}
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
+pre_incdec_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
do {
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_inc_dec(property);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto post_incdec_object;
+ }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
-
+post_incdec_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
value = RT_CONSTANT((opline+1), (opline+1)->op1);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
- goto exit_assign_obj;
- }
- } while (0);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CONST == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
SAVE_OPLINE();
object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
-
- if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
-
- property = RT_CONSTANT(opline, opline->op2);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
-
- if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
- }
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- goto exit_assign_obj;
+
+ if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+
+ property = RT_CONSTANT(opline, opline->op2);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
+
+ if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- } while (0);
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
+ zval_ptr_dtor_nogc(free_op_data);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CONST == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
- }
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- goto exit_assign_obj;
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- } while (0);
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
+ zval_ptr_dtor_nogc(free_op_data);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CONST == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
- goto exit_assign_obj;
- }
- } while (0);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CONST == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_assignment(property);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_op_object;
}
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
+assign_op_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
do {
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_inc_dec(property);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto pre_incdec_object;
}
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
+pre_incdec_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
do {
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_inc_dec(property);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto post_incdec_object;
+ }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
-
+post_incdec_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
value = RT_CONSTANT((opline+1), (opline+1)->op1);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
- goto exit_assign_obj;
- }
- } while (0);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
- }
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- goto exit_assign_obj;
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- } while (0);
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
+ zval_ptr_dtor_nogc(free_op_data);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
- }
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- goto exit_assign_obj;
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- } while (0);
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
+ zval_ptr_dtor_nogc(free_op_data);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
- goto exit_assign_obj;
- }
- } while (0);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_assignment(property);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_op_object;
}
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
+assign_op_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
do {
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_inc_dec(property);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto pre_incdec_object;
}
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
+pre_incdec_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
do {
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- ZVAL_DEREF(object);
- if (UNEXPECTED(!make_real_object(object))) {
- zend_wrong_property_inc_dec(property);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto post_incdec_object;
+ }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
break;
}
}
/* here we are sure we are dealing with an object */
-
+post_incdec_object:
if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) {
if (UNEXPECTED(Z_ISERROR_P(zptr))) {
value = RT_CONSTANT((opline+1), (opline+1)->op1);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
- goto exit_assign_obj;
- }
- } while (0);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CV == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
- }
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- goto exit_assign_obj;
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- } while (0);
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
+ zval_ptr_dtor_nogc(free_op_data);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CV == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
- }
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- zval_ptr_dtor_nogc(free_op_data);
- goto exit_assign_obj;
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- } while (0);
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
+ zval_ptr_dtor_nogc(free_op_data);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CV == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));
value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- do {
- if (Z_ISREF_P(object)) {
- object = Z_REFVAL_P(object);
- if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
- break;
- }
+ if (Z_ISREF_P(object)) {
+ object = Z_REFVAL_P(object);
+ if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
+ goto assign_object;
}
- if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
- (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
- zend_object *obj;
-
- zval_ptr_dtor_nogc(object);
- object_init(object);
- Z_ADDREF_P(object);
- obj = Z_OBJ_P(object);
- zend_error(E_WARNING, "Creating default object from empty value");
- if (GC_REFCOUNT(obj) == 1) {
- /* the enclosing container was deleted, obj is unreferenced */
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
-
- OBJ_RELEASE(obj);
- goto exit_assign_obj;
- }
- Z_DELREF_P(object);
- } else {
- if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_wrong_property_assignment(property);
- }
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
+ }
+ if (UNEXPECTED(!make_real_object(object, property OPLINE_CC))) {
- goto exit_assign_obj;
- }
- } while (0);
+ goto exit_assign_obj;
+ }
}
+assign_object:
if (IS_CV == IS_CONST &&
EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*));