@@ -100,24 +100,26 @@ impl<'tcx> LowerInto<'tcx, chalk_ir::InEnvironment<chalk_ir::Goal<RustInterner<'
100
100
ty:: PredicateKind :: RegionOutlives ( predicate) => {
101
101
let ( predicate, binders, _named_regions) =
102
102
collect_bound_vars ( interner, interner. tcx , predicate) ;
103
-
103
+
104
104
Some (
105
105
chalk_ir:: ProgramClauseData :: ForAll ( chalk_ir:: Binders :: new (
106
106
binders,
107
107
chalk_ir:: ProgramClauseImplication {
108
108
consequence : chalk_ir:: DomainGoal :: Holds (
109
- chalk_ir:: WhereClause :: LifetimeOutlives ( chalk_ir:: LifetimeOutlives {
110
- a : predicate. 0 . lower_into ( interner) ,
111
- b : predicate. 1 . lower_into ( interner) ,
112
- } )
109
+ chalk_ir:: WhereClause :: LifetimeOutlives (
110
+ chalk_ir:: LifetimeOutlives {
111
+ a : predicate. 0 . lower_into ( interner) ,
112
+ b : predicate. 1 . lower_into ( interner) ,
113
+ } ,
114
+ ) ,
113
115
) ,
114
116
conditions : chalk_ir:: Goals :: new ( interner) ,
115
117
priority : chalk_ir:: ClausePriority :: High ,
116
118
} ,
117
119
) )
118
120
. intern ( interner) ,
119
121
)
120
- } ,
122
+ }
121
123
// FIXME(chalk): need to add TypeOutlives
122
124
ty:: PredicateKind :: TypeOutlives ( _) => None ,
123
125
ty:: PredicateKind :: Projection ( predicate) => {
@@ -188,9 +190,10 @@ impl<'tcx> LowerInto<'tcx, chalk_ir::GoalData<RustInterner<'tcx>>> for ty::Predi
188
190
chalk_ir:: WhereClause :: LifetimeOutlives ( chalk_ir:: LifetimeOutlives {
189
191
a : predicate. 0 . lower_into ( interner) ,
190
192
b : predicate. 1 . lower_into ( interner) ,
191
- } )
192
- ) ) . intern ( interner)
193
- )
193
+ } ) ,
194
+ ) )
195
+ . intern ( interner) ,
196
+ ) ,
194
197
)
195
198
}
196
199
// FIXME(chalk): TypeOutlives
@@ -216,9 +219,9 @@ impl<'tcx> LowerInto<'tcx, chalk_ir::GoalData<RustInterner<'tcx>>> for ty::Predi
216
219
GenericArgKind :: Lifetime ( lt) => bug ! ( "unexpect well formed predicate: {:?}" , lt) ,
217
220
} ,
218
221
219
- ty:: PredicateKind :: ObjectSafe ( t) => {
220
- chalk_ir:: GoalData :: DomainGoal ( chalk_ir :: DomainGoal :: ObjectSafe ( chalk_ir:: TraitId ( * t) ) )
221
- }
222
+ ty:: PredicateKind :: ObjectSafe ( t) => chalk_ir :: GoalData :: DomainGoal (
223
+ chalk_ir:: DomainGoal :: ObjectSafe ( chalk_ir:: TraitId ( * t) ) ,
224
+ ) ,
222
225
223
226
// FIXME(chalk): other predicates
224
227
//
@@ -335,25 +338,34 @@ impl<'tcx> LowerInto<'tcx, chalk_ir::Ty<RustInterner<'tcx>>> for Ty<'tcx> {
335
338
Adt ( def, substs) => apply ( struct_ty ( def. did ) , substs. lower_into ( interner) ) ,
336
339
Foreign ( _def_id) => unimplemented ! ( ) ,
337
340
Str => apply ( chalk_ir:: TypeName :: Str , empty ( ) ) ,
338
- Array ( ty, _) => apply (
339
- chalk_ir:: TypeName :: Array ,
340
- chalk_ir:: Substitution :: from (
341
- interner,
342
- & [
343
- chalk_ir:: GenericArgData :: Ty ( ty. lower_into ( interner) ) . intern ( interner) ,
344
- chalk_ir:: GenericArgData :: Const (
345
- chalk_ir:: ConstData {
346
- ty : apply ( chalk_ir:: TypeName :: Tuple ( 0 ) , empty ( ) ) ,
347
- value : chalk_ir:: ConstValue :: Concrete ( chalk_ir:: ConcreteConst {
348
- interned : 0 ,
349
- } ) ,
350
- }
341
+ Array ( ty, len) => {
342
+ let value = match len. val {
343
+ ty:: ConstKind :: Value ( val) => {
344
+ chalk_ir:: ConstValue :: Concrete ( chalk_ir:: ConcreteConst { interned : val } )
345
+ }
346
+ ty:: ConstKind :: Bound ( db, bound) => {
347
+ chalk_ir:: ConstValue :: BoundVar ( chalk_ir:: BoundVar :: new (
348
+ chalk_ir:: DebruijnIndex :: new ( db. as_u32 ( ) ) ,
349
+ bound. index ( ) ,
350
+ ) )
351
+ }
352
+ _ => unimplemented ! ( "Const not implemented. {:?}" , len. val) ,
353
+ } ;
354
+ apply (
355
+ chalk_ir:: TypeName :: Array ,
356
+ chalk_ir:: Substitution :: from (
357
+ interner,
358
+ & [
359
+ chalk_ir:: GenericArgData :: Ty ( ty. lower_into ( interner) ) . intern ( interner) ,
360
+ chalk_ir:: GenericArgData :: Const (
361
+ chalk_ir:: ConstData { ty : len. ty . lower_into ( interner) , value }
362
+ . intern ( interner) ,
363
+ )
351
364
. intern ( interner) ,
352
- )
353
- . intern ( interner) ,
354
- ] ,
355
- ) ,
356
- ) ,
365
+ ] ,
366
+ ) ,
367
+ )
368
+ }
357
369
Slice ( ty) => apply (
358
370
chalk_ir:: TypeName :: Slice ,
359
371
chalk_ir:: Substitution :: from1 (
@@ -532,8 +544,7 @@ impl<'tcx> LowerInto<'tcx, Option<chalk_ir::QuantifiedWhereClause<RustInterner<'
532
544
b : predicate. 1 . lower_into ( interner) ,
533
545
} ) ,
534
546
) )
535
-
536
- } ,
547
+ }
537
548
ty:: PredicateKind :: TypeOutlives ( _predicate) => None ,
538
549
ty:: PredicateKind :: Projection ( _predicate) => None ,
539
550
ty:: PredicateKind :: WellFormed ( _ty) => None ,
0 commit comments