@@ -182,7 +182,10 @@ impl chalk_ir::interner::Interner for Interner {
182
182
Arc :: new ( goal)
183
183
}
184
184
185
- fn intern_goals ( & self , data : impl IntoIterator < Item = Goal < Self > > ) -> Self :: InternedGoals {
185
+ fn intern_goals < E > (
186
+ & self ,
187
+ data : impl IntoIterator < Item = Result < Goal < Self > , E > > ,
188
+ ) -> Result < Self :: InternedGoals , E > {
186
189
data. into_iter ( ) . collect ( )
187
190
}
188
191
@@ -222,10 +225,10 @@ impl chalk_ir::interner::Interner for Interner {
222
225
clause
223
226
}
224
227
225
- fn intern_program_clauses (
228
+ fn intern_program_clauses < E > (
226
229
& self ,
227
- data : impl IntoIterator < Item = chalk_ir:: ProgramClause < Self > > ,
228
- ) -> Arc < [ chalk_ir:: ProgramClause < Self > ] > {
230
+ data : impl IntoIterator < Item = Result < chalk_ir:: ProgramClause < Self > , E > > ,
231
+ ) -> Result < Arc < [ chalk_ir:: ProgramClause < Self > ] > , E > {
229
232
data. into_iter ( ) . collect ( )
230
233
}
231
234
@@ -236,10 +239,10 @@ impl chalk_ir::interner::Interner for Interner {
236
239
& clauses
237
240
}
238
241
239
- fn intern_quantified_where_clauses (
242
+ fn intern_quantified_where_clauses < E > (
240
243
& self ,
241
- data : impl IntoIterator < Item = chalk_ir:: QuantifiedWhereClause < Self > > ,
242
- ) -> Self :: InternedQuantifiedWhereClauses {
244
+ data : impl IntoIterator < Item = Result < chalk_ir:: QuantifiedWhereClause < Self > , E > > ,
245
+ ) -> Result < Self :: InternedQuantifiedWhereClauses , E > {
243
246
data. into_iter ( ) . collect ( )
244
247
}
245
248
@@ -250,10 +253,10 @@ impl chalk_ir::interner::Interner for Interner {
250
253
clauses
251
254
}
252
255
253
- fn intern_parameter_kinds (
256
+ fn intern_parameter_kinds < E > (
254
257
& self ,
255
- data : impl IntoIterator < Item = chalk_ir:: ParameterKind < ( ) > > ,
256
- ) -> Self :: InternedParameterKinds {
258
+ data : impl IntoIterator < Item = Result < chalk_ir:: ParameterKind < ( ) > , E > > ,
259
+ ) -> Result < Self :: InternedParameterKinds , E > {
257
260
data. into_iter ( ) . collect ( )
258
261
}
259
262
@@ -264,10 +267,10 @@ impl chalk_ir::interner::Interner for Interner {
264
267
& parameter_kinds
265
268
}
266
269
267
- fn intern_canonical_var_kinds (
270
+ fn intern_canonical_var_kinds < E > (
268
271
& self ,
269
- data : impl IntoIterator < Item = chalk_ir:: ParameterKind < UniverseIndex > > ,
270
- ) -> Self :: InternedCanonicalVarKinds {
272
+ data : impl IntoIterator < Item = Result < chalk_ir:: ParameterKind < UniverseIndex > , E > > ,
273
+ ) -> Result < Self :: InternedCanonicalVarKinds , E > {
271
274
data. into_iter ( ) . collect ( )
272
275
}
273
276
@@ -460,6 +463,14 @@ impl ToChalk for TypeCtor {
460
463
TypeName :: Struct ( struct_id) => db. lookup_intern_type_ctor ( struct_id. into ( ) ) ,
461
464
TypeName :: AssociatedType ( type_id) => TypeCtor :: AssociatedType ( from_chalk ( db, type_id) ) ,
462
465
TypeName :: OpaqueType ( _) => unreachable ! ( ) ,
466
+
467
+ TypeName :: Scalar ( _) => unreachable ! ( ) ,
468
+ TypeName :: Tuple ( _) => unreachable ! ( ) ,
469
+ TypeName :: Raw ( _) => unreachable ! ( ) ,
470
+ TypeName :: Slice => unreachable ! ( ) ,
471
+ TypeName :: Ref ( _) => unreachable ! ( ) ,
472
+ TypeName :: Str => unreachable ! ( ) ,
473
+
463
474
TypeName :: Error => {
464
475
// this should not be reached, since we don't represent TypeName::Error with TypeCtor
465
476
unreachable ! ( )
@@ -862,12 +873,6 @@ impl<'a> chalk_solve::RustIrDatabase<Interner> for ChalkContext<'a> {
862
873
// We don't do coherence checking (yet)
863
874
unimplemented ! ( )
864
875
}
865
- fn as_struct_id ( & self , id : & TypeName < Interner > ) -> Option < StructId > {
866
- match id {
867
- TypeName :: Struct ( struct_id) => Some ( * struct_id) ,
868
- _ => None ,
869
- }
870
- }
871
876
fn interner ( & self ) -> & Interner {
872
877
& Interner
873
878
}
@@ -892,6 +897,20 @@ impl<'a> chalk_solve::RustIrDatabase<Interner> for ChalkContext<'a> {
892
897
) -> Arc < chalk_rust_ir:: OpaqueTyDatum < Interner > > {
893
898
unimplemented ! ( )
894
899
}
900
+
901
+ fn force_impl_for (
902
+ & self ,
903
+ _well_known : chalk_rust_ir:: WellKnownTrait ,
904
+ _ty : & chalk_ir:: TyData < Interner > ,
905
+ ) -> Option < bool > {
906
+ // this method is mostly for rustc
907
+ None
908
+ }
909
+
910
+ fn is_object_safe ( & self , _trait_id : chalk_ir:: TraitId < Interner > ) -> bool {
911
+ // FIXME: implement actual object safety
912
+ true
913
+ }
895
914
}
896
915
897
916
pub ( crate ) fn program_clauses_for_chalk_env_query (
0 commit comments