@@ -950,23 +950,28 @@ static zend_bool zend_verify_scalar_type_hint(zend_uchar type_hint, zval *arg, z
950
950
951
951
ZEND_COLD zend_never_inline void zend_verify_property_type_error (zend_property_info * info , zval * property )
952
952
{
953
+ const char * prop_type1 , * prop_type2 ;
954
+
953
955
/* we _may_ land here in case reading already errored and runtime cache thus has not been updated (i.e. it contains a valid but unrelated info) */
954
956
if (EG (exception )) {
955
957
return ;
956
958
}
957
959
960
+ // TODO Switch to a more standard error message?
961
+ zend_format_type (info -> type , & prop_type1 , & prop_type2 );
962
+ (void ) prop_type1 ;
958
963
if (ZEND_TYPE_IS_CLASS (info -> type )) {
959
964
zend_type_error ("Typed property %s::$%s must be an instance of %s%s, %s used" ,
960
965
ZSTR_VAL (info -> ce -> name ),
961
966
zend_get_unmangled_property_name (info -> name ),
962
- ZSTR_VAL ( ZEND_TYPE_IS_CE ( info -> type ) ? ZEND_TYPE_CE ( info -> type ) -> name : zend_resolve_property_type ( ZEND_TYPE_NAME ( info -> type ), info -> ce )) ,
967
+ prop_type2 ,
963
968
ZEND_TYPE_ALLOW_NULL (info -> type ) ? " or null" : "" ,
964
969
Z_TYPE_P (property ) == IS_OBJECT ? ZSTR_VAL (Z_OBJCE_P (property )-> name ) : zend_get_type_by_const (Z_TYPE_P (property )));
965
970
} else {
966
971
zend_type_error ("Typed property %s::$%s must be %s%s, %s used" ,
967
972
ZSTR_VAL (info -> ce -> name ),
968
973
zend_get_unmangled_property_name (info -> name ),
969
- zend_get_type_by_const ( ZEND_TYPE_CODE ( info -> type )) ,
974
+ prop_type2 ,
970
975
ZEND_TYPE_ALLOW_NULL (info -> type ) ? " or null" : "" ,
971
976
Z_TYPE_P (property ) == IS_OBJECT ? ZSTR_VAL (Z_OBJCE_P (property )-> name ) : zend_get_type_by_const (Z_TYPE_P (property )));
972
977
}
0 commit comments