@@ -861,8 +861,6 @@ pub trait PrettyPrinter<'tcx>:
861
861
return Ok ( self ) ;
862
862
}
863
863
864
- let u8 = self . tcx ( ) . types . u8 ;
865
-
866
864
match ( ct. val , & ct. ty . kind ) {
867
865
( _, ty:: FnDef ( did, substs) ) => p ! ( print_value_path( * did, substs) ) ,
868
866
( ty:: ConstKind :: Unevaluated ( did, substs) , _) => {
@@ -884,13 +882,38 @@ pub trait PrettyPrinter<'tcx>:
884
882
} ,
885
883
( ty:: ConstKind :: Infer ( ..) , _) => p ! ( write( "_: " ) , print( ct. ty) ) ,
886
884
( ty:: ConstKind :: Param ( ParamConst { name, .. } ) , _) => p ! ( write( "{}" , name) ) ,
887
- ( ty:: ConstKind :: Value ( ConstValue :: Scalar ( Scalar :: Raw { data, .. } ) ) , ty:: Bool ) =>
885
+ ( ty:: ConstKind :: Value ( value) , _) => return self . pretty_print_const_value ( value, ct. ty ) ,
886
+
887
+ _ => {
888
+ // fallback
889
+ p ! ( write( "{:?} : " , ct. val) , print( ct. ty) )
890
+ }
891
+ } ;
892
+ Ok ( self )
893
+ }
894
+
895
+ fn pretty_print_const_value (
896
+ mut self ,
897
+ ct : ConstValue < ' tcx > ,
898
+ ty : Ty < ' tcx > ,
899
+ ) -> Result < Self :: Const , Self :: Error > {
900
+ define_scoped_cx ! ( self ) ;
901
+
902
+ if self . tcx ( ) . sess . verbose ( ) {
903
+ p ! ( write( "ConstValue({:?}: {:?})" , ct, ty) ) ;
904
+ return Ok ( self ) ;
905
+ }
906
+
907
+ let u8 = self . tcx ( ) . types . u8 ;
908
+
909
+ match ( ct, & ty. kind ) {
910
+ ( ConstValue :: Scalar ( Scalar :: Raw { data, .. } ) , ty:: Bool ) =>
888
911
p ! ( write( "{}" , if data == 0 { "false" } else { "true" } ) ) ,
889
- ( ty :: ConstKind :: Value ( ConstValue :: Scalar ( Scalar :: Raw { data, .. } ) ) , ty:: Float ( ast:: FloatTy :: F32 ) ) =>
912
+ ( ConstValue :: Scalar ( Scalar :: Raw { data, .. } ) , ty:: Float ( ast:: FloatTy :: F32 ) ) =>
890
913
p ! ( write( "{}f32" , Single :: from_bits( data) ) ) ,
891
- ( ty :: ConstKind :: Value ( ConstValue :: Scalar ( Scalar :: Raw { data, .. } ) ) , ty:: Float ( ast:: FloatTy :: F64 ) ) =>
914
+ ( ConstValue :: Scalar ( Scalar :: Raw { data, .. } ) , ty:: Float ( ast:: FloatTy :: F64 ) ) =>
892
915
p ! ( write( "{}f64" , Double :: from_bits( data) ) ) ,
893
- ( ty :: ConstKind :: Value ( ConstValue :: Scalar ( Scalar :: Raw { data, .. } ) ) , ty:: Uint ( ui) ) => {
916
+ ( ConstValue :: Scalar ( Scalar :: Raw { data, .. } ) , ty:: Uint ( ui) ) => {
894
917
let bit_size = Integer :: from_attr ( & self . tcx ( ) , UnsignedInt ( * ui) ) . size ( ) ;
895
918
let max = truncate ( u128:: max_value ( ) , bit_size) ;
896
919
@@ -901,13 +924,13 @@ pub trait PrettyPrinter<'tcx>:
901
924
p ! ( write( "{}{}" , data, ui_str) )
902
925
} ;
903
926
} ,
904
- ( ty :: ConstKind :: Value ( ConstValue :: Scalar ( Scalar :: Raw { data, .. } ) ) , ty:: Int ( i) ) => {
927
+ ( ConstValue :: Scalar ( Scalar :: Raw { data, .. } ) , ty:: Int ( i) ) => {
905
928
let bit_size = Integer :: from_attr ( & self . tcx ( ) , SignedInt ( * i) )
906
929
. size ( ) . bits ( ) as u128 ;
907
930
let min = 1u128 << ( bit_size - 1 ) ;
908
931
let max = min - 1 ;
909
932
910
- let ty = self . tcx ( ) . lift ( & ct . ty ) . unwrap ( ) ;
933
+ let ty = self . tcx ( ) . lift ( & ty) . unwrap ( ) ;
911
934
let size = self . tcx ( ) . layout_of ( ty:: ParamEnv :: empty ( ) . and ( ty) )
912
935
. unwrap ( )
913
936
. size ;
@@ -918,27 +941,27 @@ pub trait PrettyPrinter<'tcx>:
918
941
_ => p ! ( write( "{}{}" , sign_extend( data, size) as i128 , i_str) )
919
942
}
920
943
} ,
921
- ( ty :: ConstKind :: Value ( ConstValue :: Scalar ( Scalar :: Raw { data, .. } ) ) , ty:: Char ) =>
944
+ ( ConstValue :: Scalar ( Scalar :: Raw { data, .. } ) , ty:: Char ) =>
922
945
p ! ( write( "{:?}" , :: std:: char :: from_u32( data as u32 ) . unwrap( ) ) ) ,
923
- ( ty :: ConstKind :: Value ( ConstValue :: Scalar ( _) ) , ty:: RawPtr ( _) ) => p ! ( write( "{{pointer}}" ) ) ,
924
- ( ty :: ConstKind :: Value ( ConstValue :: Scalar ( Scalar :: Ptr ( ptr) ) ) , ty:: FnPtr ( _) ) => {
946
+ ( ConstValue :: Scalar ( _) , ty:: RawPtr ( _) ) => p ! ( write( "{{pointer}}" ) ) ,
947
+ ( ConstValue :: Scalar ( Scalar :: Ptr ( ptr) ) , ty:: FnPtr ( _) ) => {
925
948
let instance = {
926
949
let alloc_map = self . tcx ( ) . alloc_map . lock ( ) ;
927
950
alloc_map. unwrap_fn ( ptr. alloc_id )
928
951
} ;
929
952
p ! ( print_value_path( instance. def_id( ) , instance. substs) ) ;
930
953
} ,
931
954
_ => {
932
- let printed = if let ty:: Ref ( _, ref_ty, _) = ct . ty . kind {
933
- let byte_str = match ( ct. val , & ref_ty. kind ) {
934
- ( ty :: ConstKind :: Value ( ConstValue :: Scalar ( Scalar :: Ptr ( ptr) ) ) , ty:: Array ( t, n) ) if * t == u8 => {
955
+ let printed = if let ty:: Ref ( _, ref_ty, _) = ty. kind {
956
+ let byte_str = match ( ct, & ref_ty. kind ) {
957
+ ( ConstValue :: Scalar ( Scalar :: Ptr ( ptr) ) , ty:: Array ( t, n) ) if * t == u8 => {
935
958
let n = n. eval_usize ( self . tcx ( ) , ty:: ParamEnv :: empty ( ) ) ;
936
959
Some ( self . tcx ( )
937
960
. alloc_map . lock ( )
938
961
. unwrap_memory ( ptr. alloc_id )
939
962
. get_bytes ( & self . tcx ( ) , ptr, Size :: from_bytes ( n) ) . unwrap ( ) )
940
963
} ,
941
- ( ty :: ConstKind :: Value ( ConstValue :: Slice { data, start, end } ) , ty:: Slice ( t) ) if * t == u8 => {
964
+ ( ConstValue :: Slice { data, start, end } , ty:: Slice ( t) ) if * t == u8 => {
942
965
// The `inspect` here is okay since we checked the bounds, and there are
943
966
// no relocations (we have an active slice reference here). We don't use
944
967
// this result to affect interpreter execution.
@@ -956,8 +979,8 @@ pub trait PrettyPrinter<'tcx>:
956
979
}
957
980
p ! ( write( "\" " ) ) ;
958
981
true
959
- } else if let ( ty :: ConstKind :: Value ( ConstValue :: Slice { data, start, end } ) , ty:: Str ) =
960
- ( ct. val , & ref_ty. kind )
982
+ } else if let ( ConstValue :: Slice { data, start, end } , ty:: Str ) =
983
+ ( ct, & ref_ty. kind )
961
984
{
962
985
// The `inspect` here is okay since we checked the bounds, and there are no
963
986
// relocations (we have an active `str` reference here). We don't use this
@@ -975,7 +998,7 @@ pub trait PrettyPrinter<'tcx>:
975
998
} ;
976
999
if !printed {
977
1000
// fallback
978
- p ! ( write( "{:?} : " , ct. val ) , print( ct . ty) )
1001
+ p ! ( write( "{:?} : " , ct) , print( ty) )
979
1002
}
980
1003
}
981
1004
} ;
0 commit comments