]> granicus.if.org Git - php/commitdiff
Cleanup
authorDmitry Stogov <dmitry@zend.com>
Fri, 21 Jun 2019 08:43:17 +0000 (11:43 +0300)
committerDmitry Stogov <dmitry@zend.com>
Fri, 21 Jun 2019 08:43:17 +0000 (11:43 +0300)
Zend/zend_execute.c
Zend/zend_execute.h
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 95a63e9bcf2691d3034fe9a6cf6e97e0accd481c..9996d7c82fefb14e021455bdb2dae430a97a37e8 100644 (file)
@@ -658,7 +658,8 @@ static zend_never_inline ZEND_COLD void zend_throw_access_uninit_prop_by_ref_err
                zend_get_unmangled_property_name(prop->name));
 }
 
-static zend_always_inline zend_property_info *i_zend_check_ref_stdClass_assignable(zend_reference *ref);
+static zend_never_inline zend_bool zend_verify_ref_stdClass_assignable(zend_reference *ref);
+static zend_never_inline zend_bool zend_verify_ref_array_assignable(zend_reference *ref);
 
 /* this should modify object only if it's empty */
 static zend_never_inline ZEND_COLD zval* ZEND_FASTCALL make_real_object(zval *object, zval *property OPLINE_DC EXECUTE_DATA_DC)
@@ -697,10 +698,8 @@ static zend_never_inline ZEND_COLD zval* ZEND_FASTCALL make_real_object(zval *ob
                return NULL;
        }
 
-       if (ref) {
-               zend_property_info *error_prop = i_zend_check_ref_stdClass_assignable(Z_REF_P(ref));
-               if (error_prop) {
-                       zend_throw_auto_init_in_ref_error(error_prop, "stdClass");
+       if (ref && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(ref))) {
+               if (UNEXPECTED(!zend_verify_ref_stdClass_assignable(Z_REF_P(ref)))) {
                        if (RETURN_VALUE_USED(opline)) {
                                ZVAL_UNDEF(EX_VAR(opline->result.var));
                        }
@@ -2168,9 +2167,7 @@ fetch_from_array:
                } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
                        if (type != BP_VAR_UNSET) {
                                if (ZEND_REF_HAS_TYPE_SOURCES(ref)) {
-                                       zend_property_info *error_prop = zend_check_ref_array_assignable(ref);
-                                       if (UNEXPECTED(error_prop != NULL)) {
-                                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                                       if (UNEXPECTED(!zend_verify_ref_array_assignable(ref))) {
                                                ZVAL_ERROR(result);
                                                return;
                                        }
@@ -2598,36 +2595,30 @@ static zend_always_inline zend_bool check_type_stdClass_assignable(zend_type typ
 
 /* Checks whether an array can be assigned to the reference. Returns conflicting property if
  * assignment is not possible, NULL otherwise. */
-static zend_always_inline zend_property_info *i_zend_check_ref_array_assignable(zend_reference *ref) {
+static zend_never_inline zend_bool zend_verify_ref_array_assignable(zend_reference *ref) {
        zend_property_info *prop;
-       if (!ZEND_REF_HAS_TYPE_SOURCES(ref)) {
-               return NULL;
-       }
+       ZEND_ASSERT(ZEND_REF_HAS_TYPE_SOURCES(ref));
        ZEND_REF_FOREACH_TYPE_SOURCES(ref, prop) {
                if (!check_type_array_assignable(prop->type)) {
-                       return prop;
+                       zend_throw_auto_init_in_ref_error(prop, "array");
+                       return 0;
                }
        } ZEND_REF_FOREACH_TYPE_SOURCES_END();
-       return NULL;
+       return 1;
 }
 
 /* Checks whether an stdClass can be assigned to the reference. Returns conflicting property if
  * assignment is not possible, NULL otherwise. */
-static zend_always_inline zend_property_info *i_zend_check_ref_stdClass_assignable(zend_reference *ref) {
+static zend_never_inline zend_bool zend_verify_ref_stdClass_assignable(zend_reference *ref) {
        zend_property_info *prop;
-       if (!ZEND_REF_HAS_TYPE_SOURCES(ref)) {
-               return NULL;
-       }
+       ZEND_ASSERT(ZEND_REF_HAS_TYPE_SOURCES(ref));
        ZEND_REF_FOREACH_TYPE_SOURCES(ref, prop) {
                if (!check_type_stdClass_assignable(prop->type)) {
-                       return prop;
+                       zend_throw_auto_init_in_ref_error(prop, "stdClass");
+                       return 0;
                }
        } ZEND_REF_FOREACH_TYPE_SOURCES_END();
-       return NULL;
-}
-
-ZEND_API zend_property_info* ZEND_FASTCALL zend_check_ref_array_assignable(zend_reference *ref) {
-       return i_zend_check_ref_array_assignable(ref);
+       return 1;
 }
 
 static zend_property_info *zend_object_fetch_property_type_info(
@@ -3073,7 +3064,8 @@ static zend_always_inline int i_zend_verify_type_assignable_zval(
        return -1;
 }
 
-static zend_always_inline zend_bool i_zend_verify_ref_assignable_zval(zend_reference *ref, zval *zv, zend_bool strict) {
+ZEND_API zend_bool ZEND_FASTCALL zend_verify_ref_assignable_zval(zend_reference *ref, zval *zv, zend_bool strict)
+{
        zend_property_info *prop;
 
        /* The value must satisfy each property type, and coerce to the same value for each property
@@ -3113,11 +3105,6 @@ static zend_always_inline zend_bool i_zend_verify_ref_assignable_zval(zend_refer
        return 1;
 }
 
-ZEND_API zend_bool ZEND_FASTCALL zend_verify_ref_assignable_zval(zend_reference *ref, zval *zv, zend_bool strict)
-{
-       return i_zend_verify_ref_assignable_zval(ref, zv, strict);
-}
-
 ZEND_API zval* zend_assign_to_typed_ref(zval *variable_ptr, zval *value, zend_uchar value_type, zend_bool strict, zend_refcounted *ref)
 {
        zend_bool need_copy = ZEND_CONST_COND(value_type & (IS_CONST|IS_CV), 1) ||
@@ -4581,15 +4568,3 @@ ZEND_API zval *zend_get_zval_ptr(const zend_op *opline, int op_type, const znode
        }
        return ret;
 }
-
-ZEND_API void ZEND_FASTCALL zend_check_internal_arg_type(zend_function *zf, uint32_t arg_num, zval *arg)
-{
-       void *dummy_cache_slot = NULL;
-
-       zend_verify_arg_type(zf, arg_num, arg, NULL, &dummy_cache_slot);
-}
-
-ZEND_API int ZEND_FASTCALL zend_check_arg_type(zend_function *zf, uint32_t arg_num, zval *arg, zval *default_value, void **cache_slot)
-{
-       return zend_verify_arg_type(zf, arg_num, arg, default_value, cache_slot);
-}
index b75aa0a2ad3c73ab914ea8fe840323abda9657c5..1ff9403f515bac7d9f348ac9188e68efeea15f4b 100644 (file)
@@ -52,11 +52,8 @@ ZEND_API int zend_eval_stringl_ex(char *str, size_t str_len, zval *retval_ptr, c
 /* export zend_pass_function to allow comparisons against it */
 extern ZEND_API const zend_internal_function zend_pass_function;
 
-ZEND_API void ZEND_FASTCALL zend_check_internal_arg_type(zend_function *zf, uint32_t arg_num, zval *arg);
-ZEND_API int  ZEND_FASTCALL zend_check_arg_type(zend_function *zf, uint32_t arg_num, zval *arg, zval *default_value, void **cache_slot);
 ZEND_API ZEND_COLD void ZEND_FASTCALL zend_missing_arg_error(zend_execute_data *execute_data);
 
-ZEND_API zend_property_info* ZEND_FASTCALL zend_check_ref_array_assignable(zend_reference *ref);
 ZEND_API zend_bool ZEND_FASTCALL zend_verify_ref_assignable_zval(zend_reference *ref, zval *zv, zend_bool strict);
 ZEND_API zend_bool ZEND_FASTCALL zend_verify_prop_assignable_by_ref(zend_property_info *prop_info, zval *orig_val, zend_bool strict);
 
index ab0a6fbd1c96a5a8d195abc9591c4e88ee3cbf7b..330132b43dbfe3cdd3dab4772bf0b4d92d8e9865 100644 (file)
@@ -2501,9 +2501,9 @@ ZEND_VM_C_LABEL(try_assign_dim_array):
                                FREE_OP_DATA();
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = GET_OP2_ZVAL_PTR(BP_VAR_R);
                                FREE_UNFETCHED_OP_DATA();
                                UNDEF_RESULT();
index 7b535d62bf88126cd71fa130623cfb61494e2008..832f9bef426154ffadbcdcbe044ed86ce988545c 100644 (file)
@@ -22757,9 +22757,9 @@ try_assign_dim_array:
 
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = RT_CONSTANT(opline, opline->op2);
 
                                UNDEF_RESULT();
@@ -22874,9 +22874,9 @@ try_assign_dim_array:
                                zval_ptr_dtor_nogc(free_op_data);
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = RT_CONSTANT(opline, opline->op2);
                                zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
                                UNDEF_RESULT();
@@ -22991,9 +22991,9 @@ try_assign_dim_array:
                                zval_ptr_dtor_nogc(free_op_data);
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = RT_CONSTANT(opline, opline->op2);
                                zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
                                UNDEF_RESULT();
@@ -23107,9 +23107,9 @@ try_assign_dim_array:
 
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = RT_CONSTANT(opline, opline->op2);
 
                                UNDEF_RESULT();
@@ -25239,9 +25239,9 @@ try_assign_dim_array:
 
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
 
                                UNDEF_RESULT();
@@ -25356,9 +25356,9 @@ try_assign_dim_array:
                                zval_ptr_dtor_nogc(free_op_data);
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
                                zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
                                UNDEF_RESULT();
@@ -25473,9 +25473,9 @@ try_assign_dim_array:
                                zval_ptr_dtor_nogc(free_op_data);
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
                                zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
                                UNDEF_RESULT();
@@ -25589,9 +25589,9 @@ try_assign_dim_array:
 
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
 
                                UNDEF_RESULT();
@@ -26878,9 +26878,9 @@ try_assign_dim_array:
 
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = NULL;
 
                                UNDEF_RESULT();
@@ -26995,9 +26995,9 @@ try_assign_dim_array:
                                zval_ptr_dtor_nogc(free_op_data);
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = NULL;
                                zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
                                UNDEF_RESULT();
@@ -27112,9 +27112,9 @@ try_assign_dim_array:
                                zval_ptr_dtor_nogc(free_op_data);
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = NULL;
                                zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
                                UNDEF_RESULT();
@@ -27228,9 +27228,9 @@ try_assign_dim_array:
 
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = NULL;
 
                                UNDEF_RESULT();
@@ -29245,9 +29245,9 @@ try_assign_dim_array:
 
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
                                UNDEF_RESULT();
@@ -29362,9 +29362,9 @@ try_assign_dim_array:
                                zval_ptr_dtor_nogc(free_op_data);
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
                                zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
                                UNDEF_RESULT();
@@ -29479,9 +29479,9 @@ try_assign_dim_array:
                                zval_ptr_dtor_nogc(free_op_data);
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
                                zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
                                UNDEF_RESULT();
@@ -29595,9 +29595,9 @@ try_assign_dim_array:
 
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
                                UNDEF_RESULT();
@@ -40693,9 +40693,9 @@ try_assign_dim_array:
 
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = RT_CONSTANT(opline, opline->op2);
 
                                UNDEF_RESULT();
@@ -40810,9 +40810,9 @@ try_assign_dim_array:
                                zval_ptr_dtor_nogc(free_op_data);
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = RT_CONSTANT(opline, opline->op2);
                                zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
                                UNDEF_RESULT();
@@ -40927,9 +40927,9 @@ try_assign_dim_array:
                                zval_ptr_dtor_nogc(free_op_data);
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = RT_CONSTANT(opline, opline->op2);
                                zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
                                UNDEF_RESULT();
@@ -41043,9 +41043,9 @@ try_assign_dim_array:
 
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = RT_CONSTANT(opline, opline->op2);
 
                                UNDEF_RESULT();
@@ -44533,9 +44533,9 @@ try_assign_dim_array:
 
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
 
                                UNDEF_RESULT();
@@ -44650,9 +44650,9 @@ try_assign_dim_array:
                                zval_ptr_dtor_nogc(free_op_data);
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
                                zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
                                UNDEF_RESULT();
@@ -44767,9 +44767,9 @@ try_assign_dim_array:
                                zval_ptr_dtor_nogc(free_op_data);
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
                                zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
                                UNDEF_RESULT();
@@ -44883,9 +44883,9 @@ try_assign_dim_array:
 
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
 
                                UNDEF_RESULT();
@@ -46617,9 +46617,9 @@ try_assign_dim_array:
 
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = NULL;
 
                                UNDEF_RESULT();
@@ -46734,9 +46734,9 @@ try_assign_dim_array:
                                zval_ptr_dtor_nogc(free_op_data);
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = NULL;
                                zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
                                UNDEF_RESULT();
@@ -46851,9 +46851,9 @@ try_assign_dim_array:
                                zval_ptr_dtor_nogc(free_op_data);
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = NULL;
                                zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
                                UNDEF_RESULT();
@@ -46967,9 +46967,9 @@ try_assign_dim_array:
 
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = NULL;
 
                                UNDEF_RESULT();
@@ -50002,9 +50002,9 @@ try_assign_dim_array:
 
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
                                UNDEF_RESULT();
@@ -50119,9 +50119,9 @@ try_assign_dim_array:
                                zval_ptr_dtor_nogc(free_op_data);
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
                                zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
                                UNDEF_RESULT();
@@ -50236,9 +50236,9 @@ try_assign_dim_array:
                                zval_ptr_dtor_nogc(free_op_data);
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
                                zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
                                UNDEF_RESULT();
@@ -50352,9 +50352,9 @@ try_assign_dim_array:
 
                        }
                } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
-                       zend_property_info *error_prop;
-                       if (Z_ISREF_P(orig_object_ptr) && (error_prop = zend_check_ref_array_assignable(Z_REF_P(orig_object_ptr))) != NULL) {
-                               zend_throw_auto_init_in_ref_error(error_prop, "array");
+                       if (Z_ISREF_P(orig_object_ptr)
+                        && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
+                        && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
                                dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
 
                                UNDEF_RESULT();