@@ -64,7 +64,8 @@ impl<'tcx> Context for Tables<'tcx> {
6464 }
6565
6666 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 )
6869 }
6970}
7071
@@ -75,85 +76,6 @@ pub struct Tables<'tcx> {
7576}
7677
7778impl < ' 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-
15779 fn intern_ty ( & mut self , ty : Ty < ' tcx > ) -> stable_mir:: ty:: Ty {
15880 if let Some ( id) = self . types . iter ( ) . position ( |& t| t == ty) {
15981 return stable_mir:: ty:: Ty ( id) ;
@@ -676,3 +598,85 @@ impl<'tcx> Stable<'tcx> for ty::BoundVariableKind {
676598 }
677599 }
678600}
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