@@ -64,7 +64,8 @@ impl<'tcx> Context for Tables<'tcx> {
64
64
}
65
65
66
66
fn ty_kind ( & mut self , ty : crate :: stable_mir:: ty:: Ty ) -> TyKind {
67
- self . rustc_ty_to_ty ( self . types [ ty. 0 ] )
67
+ let ty = self . types [ ty. 0 ] ;
68
+ ty. stable ( self )
68
69
}
69
70
}
70
71
@@ -75,85 +76,6 @@ pub struct Tables<'tcx> {
75
76
}
76
77
77
78
impl < ' tcx > Tables < ' tcx > {
78
- fn rustc_ty_to_ty ( & mut self , ty : Ty < ' tcx > ) -> TyKind {
79
- match ty. kind ( ) {
80
- ty:: Bool => TyKind :: RigidTy ( RigidTy :: Bool ) ,
81
- ty:: Char => TyKind :: RigidTy ( RigidTy :: Char ) ,
82
- ty:: Int ( int_ty) => match int_ty {
83
- ty:: IntTy :: Isize => TyKind :: RigidTy ( RigidTy :: Int ( IntTy :: Isize ) ) ,
84
- ty:: IntTy :: I8 => TyKind :: RigidTy ( RigidTy :: Int ( IntTy :: I8 ) ) ,
85
- ty:: IntTy :: I16 => TyKind :: RigidTy ( RigidTy :: Int ( IntTy :: I16 ) ) ,
86
- ty:: IntTy :: I32 => TyKind :: RigidTy ( RigidTy :: Int ( IntTy :: I32 ) ) ,
87
- ty:: IntTy :: I64 => TyKind :: RigidTy ( RigidTy :: Int ( IntTy :: I64 ) ) ,
88
- ty:: IntTy :: I128 => TyKind :: RigidTy ( RigidTy :: Int ( IntTy :: I128 ) ) ,
89
- } ,
90
- ty:: Uint ( uint_ty) => match uint_ty {
91
- ty:: UintTy :: Usize => TyKind :: RigidTy ( RigidTy :: Uint ( UintTy :: Usize ) ) ,
92
- ty:: UintTy :: U8 => TyKind :: RigidTy ( RigidTy :: Uint ( UintTy :: U8 ) ) ,
93
- ty:: UintTy :: U16 => TyKind :: RigidTy ( RigidTy :: Uint ( UintTy :: U16 ) ) ,
94
- ty:: UintTy :: U32 => TyKind :: RigidTy ( RigidTy :: Uint ( UintTy :: U32 ) ) ,
95
- ty:: UintTy :: U64 => TyKind :: RigidTy ( RigidTy :: Uint ( UintTy :: U64 ) ) ,
96
- ty:: UintTy :: U128 => TyKind :: RigidTy ( RigidTy :: Uint ( UintTy :: U128 ) ) ,
97
- } ,
98
- ty:: Float ( float_ty) => match float_ty {
99
- ty:: FloatTy :: F32 => TyKind :: RigidTy ( RigidTy :: Float ( FloatTy :: F32 ) ) ,
100
- ty:: FloatTy :: F64 => TyKind :: RigidTy ( RigidTy :: Float ( FloatTy :: F64 ) ) ,
101
- } ,
102
- ty:: Adt ( adt_def, generic_args) => TyKind :: RigidTy ( RigidTy :: Adt (
103
- rustc_internal:: adt_def ( adt_def. did ( ) ) ,
104
- generic_args. stable ( self ) ,
105
- ) ) ,
106
- ty:: Foreign ( def_id) => {
107
- TyKind :: RigidTy ( RigidTy :: Foreign ( rustc_internal:: foreign_def ( * def_id) ) )
108
- }
109
- ty:: Str => TyKind :: RigidTy ( RigidTy :: Str ) ,
110
- ty:: Array ( ty, constant) => {
111
- TyKind :: RigidTy ( RigidTy :: Array ( self . intern_ty ( * ty) , opaque ( constant) ) )
112
- }
113
- ty:: Slice ( ty) => TyKind :: RigidTy ( RigidTy :: Slice ( self . intern_ty ( * ty) ) ) ,
114
- ty:: RawPtr ( ty:: TypeAndMut { ty, mutbl } ) => {
115
- TyKind :: RigidTy ( RigidTy :: RawPtr ( self . intern_ty ( * ty) , mutbl. stable ( self ) ) )
116
- }
117
- ty:: Ref ( region, ty, mutbl) => TyKind :: RigidTy ( RigidTy :: Ref (
118
- opaque ( region) ,
119
- self . intern_ty ( * ty) ,
120
- mutbl. stable ( self ) ,
121
- ) ) ,
122
- ty:: FnDef ( def_id, generic_args) => TyKind :: RigidTy ( RigidTy :: FnDef (
123
- rustc_internal:: fn_def ( * def_id) ,
124
- generic_args. stable ( self ) ,
125
- ) ) ,
126
- ty:: FnPtr ( poly_fn_sig) => TyKind :: RigidTy ( RigidTy :: FnPtr ( poly_fn_sig. stable ( self ) ) ) ,
127
- ty:: Dynamic ( _, _, _) => todo ! ( ) ,
128
- ty:: Closure ( def_id, generic_args) => TyKind :: RigidTy ( RigidTy :: Closure (
129
- rustc_internal:: closure_def ( * def_id) ,
130
- generic_args. stable ( self ) ,
131
- ) ) ,
132
- ty:: Generator ( def_id, generic_args, movability) => TyKind :: RigidTy ( RigidTy :: Generator (
133
- rustc_internal:: generator_def ( * def_id) ,
134
- generic_args. stable ( self ) ,
135
- match movability {
136
- hir:: Movability :: Static => Movability :: Static ,
137
- hir:: Movability :: Movable => Movability :: Movable ,
138
- } ,
139
- ) ) ,
140
- ty:: Never => TyKind :: RigidTy ( RigidTy :: Never ) ,
141
- ty:: Tuple ( fields) => TyKind :: RigidTy ( RigidTy :: Tuple (
142
- fields. iter ( ) . map ( |ty| self . intern_ty ( ty) ) . collect ( ) ,
143
- ) ) ,
144
- ty:: Alias ( _, _) => todo ! ( ) ,
145
- ty:: Param ( _) => todo ! ( ) ,
146
- ty:: Bound ( _, _) => todo ! ( ) ,
147
- ty:: Placeholder ( ..)
148
- | ty:: GeneratorWitness ( _)
149
- | ty:: GeneratorWitnessMIR ( _, _)
150
- | ty:: Infer ( _)
151
- | ty:: Error ( _) => {
152
- unreachable ! ( ) ;
153
- }
154
- }
155
- }
156
-
157
79
fn intern_ty ( & mut self , ty : Ty < ' tcx > ) -> stable_mir:: ty:: Ty {
158
80
if let Some ( id) = self . types . iter ( ) . position ( |& t| t == ty) {
159
81
return stable_mir:: ty:: Ty ( id) ;
@@ -676,3 +598,85 @@ impl<'tcx> Stable<'tcx> for ty::BoundVariableKind {
676
598
}
677
599
}
678
600
}
601
+
602
+ impl < ' tcx > Stable < ' tcx > for Ty < ' tcx > {
603
+ type T = stable_mir:: ty:: TyKind ;
604
+ fn stable ( & self , tables : & mut Tables < ' tcx > ) -> Self :: T {
605
+ match self . kind ( ) {
606
+ ty:: Bool => TyKind :: RigidTy ( RigidTy :: Bool ) ,
607
+ ty:: Char => TyKind :: RigidTy ( RigidTy :: Char ) ,
608
+ ty:: Int ( int_ty) => match int_ty {
609
+ ty:: IntTy :: Isize => TyKind :: RigidTy ( RigidTy :: Int ( IntTy :: Isize ) ) ,
610
+ ty:: IntTy :: I8 => TyKind :: RigidTy ( RigidTy :: Int ( IntTy :: I8 ) ) ,
611
+ ty:: IntTy :: I16 => TyKind :: RigidTy ( RigidTy :: Int ( IntTy :: I16 ) ) ,
612
+ ty:: IntTy :: I32 => TyKind :: RigidTy ( RigidTy :: Int ( IntTy :: I32 ) ) ,
613
+ ty:: IntTy :: I64 => TyKind :: RigidTy ( RigidTy :: Int ( IntTy :: I64 ) ) ,
614
+ ty:: IntTy :: I128 => TyKind :: RigidTy ( RigidTy :: Int ( IntTy :: I128 ) ) ,
615
+ } ,
616
+ ty:: Uint ( uint_ty) => match uint_ty {
617
+ ty:: UintTy :: Usize => TyKind :: RigidTy ( RigidTy :: Uint ( UintTy :: Usize ) ) ,
618
+ ty:: UintTy :: U8 => TyKind :: RigidTy ( RigidTy :: Uint ( UintTy :: U8 ) ) ,
619
+ ty:: UintTy :: U16 => TyKind :: RigidTy ( RigidTy :: Uint ( UintTy :: U16 ) ) ,
620
+ ty:: UintTy :: U32 => TyKind :: RigidTy ( RigidTy :: Uint ( UintTy :: U32 ) ) ,
621
+ ty:: UintTy :: U64 => TyKind :: RigidTy ( RigidTy :: Uint ( UintTy :: U64 ) ) ,
622
+ ty:: UintTy :: U128 => TyKind :: RigidTy ( RigidTy :: Uint ( UintTy :: U128 ) ) ,
623
+ } ,
624
+ ty:: Float ( float_ty) => match float_ty {
625
+ ty:: FloatTy :: F32 => TyKind :: RigidTy ( RigidTy :: Float ( FloatTy :: F32 ) ) ,
626
+ ty:: FloatTy :: F64 => TyKind :: RigidTy ( RigidTy :: Float ( FloatTy :: F64 ) ) ,
627
+ } ,
628
+ ty:: Adt ( adt_def, generic_args) => TyKind :: RigidTy ( RigidTy :: Adt (
629
+ rustc_internal:: adt_def ( adt_def. did ( ) ) ,
630
+ generic_args. stable ( tables) ,
631
+ ) ) ,
632
+ ty:: Foreign ( def_id) => {
633
+ TyKind :: RigidTy ( RigidTy :: Foreign ( rustc_internal:: foreign_def ( * def_id) ) )
634
+ }
635
+ ty:: Str => TyKind :: RigidTy ( RigidTy :: Str ) ,
636
+ ty:: Array ( ty, constant) => {
637
+ TyKind :: RigidTy ( RigidTy :: Array ( tables. intern_ty ( * ty) , opaque ( constant) ) )
638
+ }
639
+ ty:: Slice ( ty) => TyKind :: RigidTy ( RigidTy :: Slice ( tables. intern_ty ( * ty) ) ) ,
640
+ ty:: RawPtr ( ty:: TypeAndMut { ty, mutbl } ) => {
641
+ TyKind :: RigidTy ( RigidTy :: RawPtr ( tables. intern_ty ( * ty) , mutbl. stable ( tables) ) )
642
+ }
643
+ ty:: Ref ( region, ty, mutbl) => TyKind :: RigidTy ( RigidTy :: Ref (
644
+ opaque ( region) ,
645
+ tables. intern_ty ( * ty) ,
646
+ mutbl. stable ( tables) ,
647
+ ) ) ,
648
+ ty:: FnDef ( def_id, generic_args) => TyKind :: RigidTy ( RigidTy :: FnDef (
649
+ rustc_internal:: fn_def ( * def_id) ,
650
+ generic_args. stable ( tables) ,
651
+ ) ) ,
652
+ ty:: FnPtr ( poly_fn_sig) => TyKind :: RigidTy ( RigidTy :: FnPtr ( poly_fn_sig. stable ( tables) ) ) ,
653
+ ty:: Dynamic ( _, _, _) => todo ! ( ) ,
654
+ ty:: Closure ( def_id, generic_args) => TyKind :: RigidTy ( RigidTy :: Closure (
655
+ rustc_internal:: closure_def ( * def_id) ,
656
+ generic_args. stable ( tables) ,
657
+ ) ) ,
658
+ ty:: Generator ( def_id, generic_args, movability) => TyKind :: RigidTy ( RigidTy :: Generator (
659
+ rustc_internal:: generator_def ( * def_id) ,
660
+ generic_args. stable ( tables) ,
661
+ match movability {
662
+ hir:: Movability :: Static => Movability :: Static ,
663
+ hir:: Movability :: Movable => Movability :: Movable ,
664
+ } ,
665
+ ) ) ,
666
+ ty:: Never => TyKind :: RigidTy ( RigidTy :: Never ) ,
667
+ ty:: Tuple ( fields) => TyKind :: RigidTy ( RigidTy :: Tuple (
668
+ fields. iter ( ) . map ( |ty| tables. intern_ty ( ty) ) . collect ( ) ,
669
+ ) ) ,
670
+ ty:: Alias ( _, _) => todo ! ( ) ,
671
+ ty:: Param ( _) => todo ! ( ) ,
672
+ ty:: Bound ( _, _) => todo ! ( ) ,
673
+ ty:: Placeholder ( ..)
674
+ | ty:: GeneratorWitness ( _)
675
+ | ty:: GeneratorWitnessMIR ( _, _)
676
+ | ty:: Infer ( _)
677
+ | ty:: Error ( _) => {
678
+ unreachable ! ( ) ;
679
+ }
680
+ }
681
+ }
682
+ }
0 commit comments