@@ -51,7 +51,7 @@ use rustc_ast_ir::Mutability;
5151use rustc_hash:: { FxHashMap , FxHashSet } ;
5252use rustc_type_ir:: {
5353 AliasTyKind , TypeFoldable ,
54- inherent:: { AdtDef , IntoKind , Region as _ , Ty as _} ,
54+ inherent:: { AdtDef , IntoKind , Ty as _} ,
5555} ;
5656use span:: Edition ;
5757use stdx:: never;
@@ -108,23 +108,23 @@ fn infer_query(db: &dyn HirDatabase, def: DefWithBodyId) -> InferenceResult {
108108 DefWithBodyId :: VariantId ( v) => {
109109 ctx. return_ty = match EnumSignature :: variant_body_type ( db, v. lookup ( db) . parent ) {
110110 hir_def:: layout:: IntegerType :: Pointer ( signed) => match signed {
111- true => ctx. types . isize ,
112- false => ctx. types . usize ,
111+ true => ctx. types . types . isize ,
112+ false => ctx. types . types . usize ,
113113 } ,
114114 hir_def:: layout:: IntegerType :: Fixed ( size, signed) => match signed {
115115 true => match size {
116- Integer :: I8 => ctx. types . i8 ,
117- Integer :: I16 => ctx. types . i16 ,
118- Integer :: I32 => ctx. types . i32 ,
119- Integer :: I64 => ctx. types . i64 ,
120- Integer :: I128 => ctx. types . i128 ,
116+ Integer :: I8 => ctx. types . types . i8 ,
117+ Integer :: I16 => ctx. types . types . i16 ,
118+ Integer :: I32 => ctx. types . types . i32 ,
119+ Integer :: I64 => ctx. types . types . i64 ,
120+ Integer :: I128 => ctx. types . types . i128 ,
121121 } ,
122122 false => match size {
123- Integer :: I8 => ctx. types . u8 ,
124- Integer :: I16 => ctx. types . u16 ,
125- Integer :: I32 => ctx. types . u32 ,
126- Integer :: I64 => ctx. types . u64 ,
127- Integer :: I128 => ctx. types . u128 ,
123+ Integer :: I8 => ctx. types . types . u8 ,
124+ Integer :: I16 => ctx. types . types . u16 ,
125+ Integer :: I32 => ctx. types . types . u32 ,
126+ Integer :: I64 => ctx. types . types . u64 ,
127+ Integer :: I128 => ctx. types . types . u128 ,
128128 } ,
129129 } ,
130130 } ;
@@ -738,75 +738,6 @@ impl InferenceResult {
738738 }
739739}
740740
741- #[ derive( Debug , Clone ) ]
742- struct InternedStandardTypes < ' db > {
743- unit : Ty < ' db > ,
744- never : Ty < ' db > ,
745- char : Ty < ' db > ,
746- bool : Ty < ' db > ,
747- i8 : Ty < ' db > ,
748- i16 : Ty < ' db > ,
749- i32 : Ty < ' db > ,
750- i64 : Ty < ' db > ,
751- i128 : Ty < ' db > ,
752- isize : Ty < ' db > ,
753- u8 : Ty < ' db > ,
754- u16 : Ty < ' db > ,
755- u32 : Ty < ' db > ,
756- u64 : Ty < ' db > ,
757- u128 : Ty < ' db > ,
758- usize : Ty < ' db > ,
759- f16 : Ty < ' db > ,
760- f32 : Ty < ' db > ,
761- f64 : Ty < ' db > ,
762- f128 : Ty < ' db > ,
763- static_str_ref : Ty < ' db > ,
764- error : Ty < ' db > ,
765-
766- re_static : Region < ' db > ,
767- re_error : Region < ' db > ,
768- re_erased : Region < ' db > ,
769-
770- empty_args : GenericArgs < ' db > ,
771- }
772-
773- impl < ' db > InternedStandardTypes < ' db > {
774- fn new ( interner : DbInterner < ' db > ) -> Self {
775- let str = Ty :: new ( interner, rustc_type_ir:: TyKind :: Str ) ;
776- let re_static = Region :: new_static ( interner) ;
777- Self {
778- unit : Ty :: new_unit ( interner) ,
779- never : Ty :: new ( interner, TyKind :: Never ) ,
780- char : Ty :: new ( interner, TyKind :: Char ) ,
781- bool : Ty :: new ( interner, TyKind :: Bool ) ,
782- i8 : Ty :: new_int ( interner, rustc_type_ir:: IntTy :: I8 ) ,
783- i16 : Ty :: new_int ( interner, rustc_type_ir:: IntTy :: I16 ) ,
784- i32 : Ty :: new_int ( interner, rustc_type_ir:: IntTy :: I32 ) ,
785- i64 : Ty :: new_int ( interner, rustc_type_ir:: IntTy :: I64 ) ,
786- i128 : Ty :: new_int ( interner, rustc_type_ir:: IntTy :: I128 ) ,
787- isize : Ty :: new_int ( interner, rustc_type_ir:: IntTy :: Isize ) ,
788- u8 : Ty :: new_uint ( interner, rustc_type_ir:: UintTy :: U8 ) ,
789- u16 : Ty :: new_uint ( interner, rustc_type_ir:: UintTy :: U16 ) ,
790- u32 : Ty :: new_uint ( interner, rustc_type_ir:: UintTy :: U32 ) ,
791- u64 : Ty :: new_uint ( interner, rustc_type_ir:: UintTy :: U64 ) ,
792- u128 : Ty :: new_uint ( interner, rustc_type_ir:: UintTy :: U128 ) ,
793- usize : Ty :: new_uint ( interner, rustc_type_ir:: UintTy :: Usize ) ,
794- f16 : Ty :: new_float ( interner, rustc_type_ir:: FloatTy :: F16 ) ,
795- f32 : Ty :: new_float ( interner, rustc_type_ir:: FloatTy :: F32 ) ,
796- f64 : Ty :: new_float ( interner, rustc_type_ir:: FloatTy :: F64 ) ,
797- f128 : Ty :: new_float ( interner, rustc_type_ir:: FloatTy :: F128 ) ,
798- static_str_ref : Ty :: new_ref ( interner, re_static, str, Mutability :: Not ) ,
799- error : Ty :: new_error ( interner, ErrorGuaranteed ) ,
800-
801- re_static,
802- re_error : Region :: error ( interner) ,
803- re_erased : Region :: new_erased ( interner) ,
804-
805- empty_args : GenericArgs :: empty ( interner) ,
806- }
807- }
808- }
809-
810741/// The inference context contains all information needed during type inference.
811742#[ derive( Clone , Debug ) ]
812743pub ( crate ) struct InferenceContext < ' body , ' db > {
@@ -841,7 +772,7 @@ pub(crate) struct InferenceContext<'body, 'db> {
841772 resume_yield_tys : Option < ( Ty < ' db > , Ty < ' db > ) > ,
842773 diverges : Diverges ,
843774 breakables : Vec < BreakableContext < ' db > > ,
844- types : InternedStandardTypes < ' db > ,
775+ types : & ' db crate :: next_solver :: DefaultAny < ' db > ,
845776
846777 /// Whether we are inside the pattern of a destructuring assignment.
847778 inside_assignment : bool ,
@@ -918,10 +849,10 @@ impl<'body, 'db> InferenceContext<'body, 'db> {
918849 ) -> Self {
919850 let trait_env = db. trait_environment_for_body ( owner) ;
920851 let table = unify:: InferenceTable :: new ( db, trait_env, resolver. krate ( ) , Some ( owner) ) ;
921- let types = InternedStandardTypes :: new ( table . interner ( ) ) ;
852+ let types = crate :: next_solver :: default_types ( db ) ;
922853 InferenceContext {
923- result : InferenceResult :: new ( types. error ) ,
924- return_ty : types. error , // set in collect_* calls
854+ result : InferenceResult :: new ( types. types . error ) ,
855+ return_ty : types. types . error , // set in collect_* calls
925856 types,
926857 target_features : OnceCell :: new ( ) ,
927858 unstable_features : MethodResolutionUnstableFeatures :: from_def_map (
@@ -1153,7 +1084,7 @@ impl<'body, 'db> InferenceContext<'body, 'db> {
11531084 data. type_ref ,
11541085 & data. store ,
11551086 InferenceTyDiagnosticSource :: Signature ,
1156- LifetimeElisionKind :: Elided ( self . types . re_static ) ,
1087+ LifetimeElisionKind :: Elided ( self . types . regions . statik ) ,
11571088 ) ;
11581089
11591090 self . return_ty = return_ty;
@@ -1211,7 +1142,7 @@ impl<'body, 'db> InferenceContext<'body, 'db> {
12111142 ) ;
12121143 self . process_user_written_ty ( return_ty)
12131144 }
1214- None => self . types . unit ,
1145+ None => self . types . types . unit ,
12151146 } ;
12161147
12171148 self . return_coercion = Some ( CoerceMany :: new ( self . return_ty ) ) ;
@@ -1408,7 +1339,7 @@ impl<'body, 'db> InferenceContext<'body, 'db> {
14081339 }
14091340
14101341 fn err_ty ( & self ) -> Ty < ' db > {
1411- self . types . error
1342+ self . types . types . error
14121343 }
14131344
14141345 pub ( crate ) fn make_body_lifetime ( & mut self , lifetime_ref : LifetimeRefId ) -> Region < ' db > {
@@ -1573,7 +1504,7 @@ impl<'body, 'db> InferenceContext<'body, 'db> {
15731504 if let Err ( _err) = result {
15741505 // FIXME: Emit diagnostic.
15751506 }
1576- result. unwrap_or ( self . types . error )
1507+ result. unwrap_or ( self . types . types . error )
15771508 }
15781509
15791510 fn expr_ty ( & self , expr : ExprId ) -> Ty < ' db > {
@@ -1805,7 +1736,7 @@ impl<'body, 'db> InferenceContext<'body, 'db> {
18051736 result
18061737 } else {
18071738 // FIXME diagnostic
1808- ( ctx. types . error , None )
1739+ ( ctx. types . types . error , None )
18091740 }
18101741 }
18111742 }
0 commit comments