11use chalk_ir:: cast:: { Cast , Caster } ;
2- use chalk_ir:: interner:: ChalkIr ;
2+ use chalk_ir:: interner:: { ChalkIr , HasInterner } ;
33use chalk_ir:: {
4- self , AssocTypeId , BoundVar , ClausePriority , DebruijnIndex , ImplId , OpaqueTyId ,
4+ self , AssocTypeId , BoundVar , ClausePriority , DebruijnIndex , ImplId , OpaqueTyId , ParameterKinds ,
55 QuantifiedWhereClauses , StructId , Substitution , TraitId ,
66} ;
77use chalk_parse:: ast:: * ;
@@ -174,11 +174,16 @@ impl<'k> Env<'k> {
174174 where
175175 I : IntoIterator < Item = chalk_ir:: ParameterKind < Ident > > ,
176176 I :: IntoIter : ExactSizeIterator ,
177+ T : HasInterner < Interner = ChalkIr > ,
177178 OP : FnOnce ( & Self ) -> LowerResult < T > ,
178179 {
180+ let interner = & ChalkIr ;
179181 let binders: Vec < _ > = binders. into_iter ( ) . collect ( ) ;
180182 let env = self . introduce ( binders. iter ( ) . cloned ( ) ) ?;
181- Ok ( chalk_ir:: Binders :: new ( binders. anonymize ( ) , op ( & env) ?) )
183+ Ok ( chalk_ir:: Binders :: new (
184+ ParameterKinds :: from ( interner, binders. anonymize ( ) ) ,
185+ op ( & env) ?,
186+ ) )
182187 }
183188}
184189
@@ -594,10 +599,14 @@ trait LowerWhereClauses {
594599
595600impl LowerTypeKind for StructDefn {
596601 fn lower_type_kind ( & self ) -> LowerResult < TypeKind > {
602+ let interner = & ChalkIr ;
597603 Ok ( TypeKind {
598604 sort : TypeSort :: Struct ,
599605 name : self . name . str ,
600- binders : chalk_ir:: Binders :: new ( self . all_parameters ( ) . anonymize ( ) , ( ) ) ,
606+ binders : chalk_ir:: Binders :: new (
607+ ParameterKinds :: from ( interner, self . all_parameters ( ) . anonymize ( ) ) ,
608+ crate :: Unit ,
609+ ) ,
601610 } )
602611 }
603612}
@@ -610,26 +619,31 @@ impl LowerWhereClauses for StructDefn {
610619
611620impl LowerTypeKind for TraitDefn {
612621 fn lower_type_kind ( & self ) -> LowerResult < TypeKind > {
622+ let interner = & ChalkIr ;
613623 let binders: Vec < _ > = self . parameter_kinds . iter ( ) . map ( |p| p. lower ( ) ) . collect ( ) ;
614624 Ok ( TypeKind {
615625 sort : TypeSort :: Trait ,
616626 name : self . name . str ,
617627 binders : chalk_ir:: Binders :: new (
618628 // for the purposes of the *type*, ignore `Self`:
619- binders. anonymize ( ) ,
620- ( ) ,
629+ ParameterKinds :: from ( interner , binders. anonymize ( ) ) ,
630+ crate :: Unit ,
621631 ) ,
622632 } )
623633 }
624634}
625635
626636impl LowerTypeKind for OpaqueTyDefn {
627637 fn lower_type_kind ( & self ) -> LowerResult < TypeKind > {
638+ let interner = & ChalkIr ;
628639 let binders: Vec < _ > = self . parameter_kinds . iter ( ) . map ( |p| p. lower ( ) ) . collect ( ) ;
629640 Ok ( TypeKind {
630641 sort : TypeSort :: Opaque ,
631642 name : self . identifier . str ,
632- binders : chalk_ir:: Binders :: new ( binders. anonymize ( ) , ( ) ) ,
643+ binders : chalk_ir:: Binders :: new (
644+ ParameterKinds :: from ( interner, binders. anonymize ( ) ) ,
645+ crate :: Unit ,
646+ ) ,
633647 } )
634648 }
635649}
@@ -835,6 +849,7 @@ trait LowerTraitBound {
835849
836850impl LowerTraitBound for TraitBound {
837851 fn lower ( & self , env : & Env ) -> LowerResult < rust_ir:: TraitBound < ChalkIr > > {
852+ let interner = & ChalkIr ;
838853 let trait_id = env. lookup_trait ( self . trait_name ) ?;
839854
840855 let k = env. trait_kind ( trait_id) ;
@@ -848,15 +863,15 @@ impl LowerTraitBound for TraitBound {
848863 . map ( |a| Ok ( a. lower ( env) ?) )
849864 . collect :: < LowerResult < Vec < _ > > > ( ) ?;
850865
851- if parameters. len ( ) != k. binders . len ( ) {
866+ if parameters. len ( ) != k. binders . len ( interner ) {
852867 Err ( RustIrError :: IncorrectNumberOfTypeParameters {
853868 identifier : self . trait_name ,
854- expected : k. binders . len ( ) ,
869+ expected : k. binders . len ( interner ) ,
855870 actual : parameters. len ( ) ,
856871 } ) ?;
857872 }
858873
859- for ( binder, param) in k. binders . binders . iter ( ) . zip ( parameters. iter ( ) ) {
874+ for ( binder, param) in k. binders . binders . iter ( interner ) . zip ( parameters. iter ( ) ) {
860875 if binder. kind ( ) != param. kind ( ) {
861876 Err ( RustIrError :: IncorrectTraitParameterKind {
862877 identifier : self . trait_name ,
@@ -1062,10 +1077,10 @@ impl LowerTy for Ty {
10621077 Ty :: Id { name } => match env. lookup_type ( name) ? {
10631078 TypeLookup :: Struct ( id) => {
10641079 let k = env. struct_kind ( id) ;
1065- if k. binders . len ( ) > 0 {
1080+ if k. binders . len ( interner ) > 0 {
10661081 Err ( RustIrError :: IncorrectNumberOfTypeParameters {
10671082 identifier : name,
1068- expected : k. binders . len ( ) ,
1083+ expected : k. binders . len ( interner ) ,
10691084 actual : 0 ,
10701085 } )
10711086 } else {
@@ -1118,10 +1133,10 @@ impl LowerTy for Ty {
11181133 } ;
11191134
11201135 let k = env. struct_kind ( id) ;
1121- if k. binders . len ( ) != args. len ( ) {
1136+ if k. binders . len ( interner ) != args. len ( ) {
11221137 Err ( RustIrError :: IncorrectNumberOfTypeParameters {
11231138 identifier : name,
1124- expected : k. binders . len ( ) ,
1139+ expected : k. binders . len ( interner ) ,
11251140 actual : args. len ( ) ,
11261141 } ) ?;
11271142 }
@@ -1131,7 +1146,7 @@ impl LowerTy for Ty {
11311146 args. iter ( ) . map ( |t| Ok ( t. lower ( env) ?) ) ,
11321147 ) ?;
11331148
1134- for ( param, arg) in k. binders . binders . iter ( ) . zip ( args. iter ( ) ) {
1149+ for ( param, arg) in k. binders . binders . iter ( interner ) . zip ( args. iter ( ) ) {
11351150 if param. kind ( ) != arg. kind ( ) {
11361151 Err ( RustIrError :: IncorrectParameterKind {
11371152 identifier : name,
@@ -1362,14 +1377,16 @@ pub trait LowerGoal<A> {
13621377
13631378impl LowerGoal < LoweredProgram > for Goal {
13641379 fn lower ( & self , program : & LoweredProgram ) -> LowerResult < chalk_ir:: Goal < ChalkIr > > {
1380+ let interner = & ChalkIr ;
13651381 let associated_ty_lookups: BTreeMap < _ , _ > = program
13661382 . associated_ty_data
13671383 . iter ( )
13681384 . map ( |( & associated_ty_id, datum) | {
13691385 let trait_datum = & program. trait_data [ & datum. trait_id ] ;
1370- let num_trait_params = trait_datum. binders . len ( ) ;
1371- let num_addl_params = datum. binders . len ( ) - num_trait_params;
1372- let addl_parameter_kinds = datum. binders . binders [ ..num_addl_params] . to_owned ( ) ;
1386+ let num_trait_params = trait_datum. binders . len ( interner) ;
1387+ let num_addl_params = datum. binders . len ( interner) - num_trait_params;
1388+ let addl_parameter_kinds =
1389+ datum. binders . binders . as_slice ( interner) [ ..num_addl_params] . to_owned ( ) ;
13731390 let lookup = AssociatedTyLookup {
13741391 id : associated_ty_id,
13751392 addl_parameter_kinds,
0 commit comments