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 ,
5- QuantifiedWhereClauses , StructId , Substitution , TraitId ,
4+ self , AssocTypeId , BoundVar , ClausePriority , DebruijnIndex , ImplId , OpaqueTyId , ParameterKinds , QuantifiedWhereClauses ,
5+ StructId , Substitution , TraitId ,
66} ;
77use chalk_parse:: ast:: * ;
88use chalk_rust_ir as rust_ir;
@@ -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,14 +619,15 @@ 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 }
@@ -835,6 +845,7 @@ trait LowerTraitBound {
835845
836846impl LowerTraitBound for TraitBound {
837847 fn lower ( & self , env : & Env ) -> LowerResult < rust_ir:: TraitBound < ChalkIr > > {
848+ let interner = & ChalkIr ;
838849 let trait_id = env. lookup_trait ( self . trait_name ) ?;
839850
840851 let k = env. trait_kind ( trait_id) ;
@@ -848,15 +859,15 @@ impl LowerTraitBound for TraitBound {
848859 . map ( |a| Ok ( a. lower ( env) ?) )
849860 . collect :: < LowerResult < Vec < _ > > > ( ) ?;
850861
851- if parameters. len ( ) != k. binders . len ( ) {
862+ if parameters. len ( ) != k. binders . len ( interner ) {
852863 Err ( RustIrError :: IncorrectNumberOfTypeParameters {
853864 identifier : self . trait_name ,
854- expected : k. binders . len ( ) ,
865+ expected : k. binders . len ( interner ) ,
855866 actual : parameters. len ( ) ,
856867 } ) ?;
857868 }
858869
859- for ( binder, param) in k. binders . binders . iter ( ) . zip ( parameters. iter ( ) ) {
870+ for ( binder, param) in k. binders . binders . iter ( interner ) . zip ( parameters. iter ( ) ) {
860871 if binder. kind ( ) != param. kind ( ) {
861872 Err ( RustIrError :: IncorrectTraitParameterKind {
862873 identifier : self . trait_name ,
@@ -1062,10 +1073,10 @@ impl LowerTy for Ty {
10621073 Ty :: Id { name } => match env. lookup_type ( name) ? {
10631074 TypeLookup :: Struct ( id) => {
10641075 let k = env. struct_kind ( id) ;
1065- if k. binders . len ( ) > 0 {
1076+ if k. binders . len ( interner ) > 0 {
10661077 Err ( RustIrError :: IncorrectNumberOfTypeParameters {
10671078 identifier : name,
1068- expected : k. binders . len ( ) ,
1079+ expected : k. binders . len ( interner ) ,
10691080 actual : 0 ,
10701081 } )
10711082 } else {
@@ -1118,10 +1129,10 @@ impl LowerTy for Ty {
11181129 } ;
11191130
11201131 let k = env. struct_kind ( id) ;
1121- if k. binders . len ( ) != args. len ( ) {
1132+ if k. binders . len ( interner ) != args. len ( ) {
11221133 Err ( RustIrError :: IncorrectNumberOfTypeParameters {
11231134 identifier : name,
1124- expected : k. binders . len ( ) ,
1135+ expected : k. binders . len ( interner ) ,
11251136 actual : args. len ( ) ,
11261137 } ) ?;
11271138 }
@@ -1131,7 +1142,7 @@ impl LowerTy for Ty {
11311142 args. iter ( ) . map ( |t| Ok ( t. lower ( env) ?) ) ,
11321143 ) ?;
11331144
1134- for ( param, arg) in k. binders . binders . iter ( ) . zip ( args. iter ( ) ) {
1145+ for ( param, arg) in k. binders . binders . iter ( interner ) . zip ( args. iter ( ) ) {
11351146 if param. kind ( ) != arg. kind ( ) {
11361147 Err ( RustIrError :: IncorrectParameterKind {
11371148 identifier : name,
@@ -1362,14 +1373,16 @@ pub trait LowerGoal<A> {
13621373
13631374impl LowerGoal < LoweredProgram > for Goal {
13641375 fn lower ( & self , program : & LoweredProgram ) -> LowerResult < chalk_ir:: Goal < ChalkIr > > {
1376+ let interner = & ChalkIr ;
13651377 let associated_ty_lookups: BTreeMap < _ , _ > = program
13661378 . associated_ty_data
13671379 . iter ( )
13681380 . map ( |( & associated_ty_id, datum) | {
13691381 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 ( ) ;
1382+ let num_trait_params = trait_datum. binders . len ( interner) ;
1383+ let num_addl_params = datum. binders . len ( interner) - num_trait_params;
1384+ let addl_parameter_kinds =
1385+ datum. binders . binders . as_slice ( interner) [ ..num_addl_params] . to_owned ( ) ;
13731386 let lookup = AssociatedTyLookup {
13741387 id : associated_ty_id,
13751388 addl_parameter_kinds,
0 commit comments