@@ -26,7 +26,7 @@ type TraitKinds = BTreeMap<chalk_ir::TraitId<ChalkIr>, TypeKind>;
26
26
type AssociatedTyLookups = BTreeMap < ( chalk_ir:: TraitId < ChalkIr > , Ident ) , AssociatedTyLookup > ;
27
27
type AssociatedTyValueIds =
28
28
BTreeMap < ( chalk_ir:: ImplId < ChalkIr > , Ident ) , AssociatedTyValueId < ChalkIr > > ;
29
- type ParameterMap = BTreeMap < Ident , chalk_ir:: ParameterKind < BoundVar > > ;
29
+ type ParameterMap = BTreeMap < Ident , chalk_ir:: ParameterKind < ChalkIr , BoundVar > > ;
30
30
31
31
pub type LowerResult < T > = Result < T , RustIrError > ;
32
32
@@ -65,7 +65,7 @@ impl<'k> Env<'k> {
65
65
#[ derive( Debug , PartialEq , Eq ) ]
66
66
struct AssociatedTyLookup {
67
67
id : chalk_ir:: AssocTypeId < ChalkIr > ,
68
- addl_parameter_kinds : Vec < chalk_ir:: ParameterKind < ( ) > > ,
68
+ addl_parameter_kinds : Vec < chalk_ir:: ParameterKind < ChalkIr , ( ) > > ,
69
69
}
70
70
71
71
enum ApplyTypeLookup {
@@ -80,16 +80,16 @@ impl<'k> Env<'k> {
80
80
let interner = self . interner ( ) ;
81
81
82
82
if let Some ( p) = self . parameter_map . get ( & name. str ) {
83
- return match * p {
84
- chalk_ir:: ParameterKind :: Ty ( b) => Ok ( chalk_ir:: TyData :: BoundVar ( b)
83
+ return match p {
84
+ chalk_ir:: ParameterKind :: Ty ( b) => Ok ( chalk_ir:: TyData :: BoundVar ( * b)
85
85
. intern ( interner)
86
86
. cast ( interner) ) ,
87
- chalk_ir:: ParameterKind :: Lifetime ( b) => Ok ( chalk_ir:: LifetimeData :: BoundVar ( b)
88
- . intern ( interner)
89
- . cast ( interner) ) ,
90
- chalk_ir:: ParameterKind :: Const ( b) => Ok ( chalk_ir:: ConstData :: BoundVar ( b)
87
+ chalk_ir:: ParameterKind :: Lifetime ( b) => Ok ( chalk_ir:: LifetimeData :: BoundVar ( * b)
91
88
. intern ( interner)
92
89
. cast ( interner) ) ,
90
+ chalk_ir:: ParameterKind :: Const { ty, value : b } => {
91
+ Ok ( b. to_const ( interner, ty. clone ( ) ) . cast ( interner) )
92
+ }
93
93
} ;
94
94
}
95
95
@@ -173,7 +173,7 @@ impl<'k> Env<'k> {
173
173
/// will be assigned in order as they are iterated.
174
174
fn introduce < I > ( & self , binders : I ) -> LowerResult < Self >
175
175
where
176
- I : IntoIterator < Item = chalk_ir:: ParameterKind < Ident > > ,
176
+ I : IntoIterator < Item = chalk_ir:: ParameterKind < ChalkIr , Ident > > ,
177
177
I :: IntoIter : ExactSizeIterator ,
178
178
{
179
179
// As binders to introduce we recieve `ParameterKind<Ident>`,
@@ -192,7 +192,7 @@ impl<'k> Env<'k> {
192
192
let parameter_map: ParameterMap = self
193
193
. parameter_map
194
194
. iter ( )
195
- . map ( |( & k, & v) | ( k, v. map ( |b| b. shifted_in ( ) ) ) )
195
+ . map ( |( k, v) | ( * k, v. map_ref ( |b| b. shifted_in ( ) ) ) )
196
196
. chain ( binders)
197
197
. collect ( ) ;
198
198
if parameter_map. len ( ) != self . parameter_map . len ( ) + len {
@@ -206,7 +206,7 @@ impl<'k> Env<'k> {
206
206
207
207
fn in_binders < I , T , OP > ( & self , binders : I , op : OP ) -> LowerResult < chalk_ir:: Binders < T > >
208
208
where
209
- I : IntoIterator < Item = chalk_ir:: ParameterKind < Ident > > ,
209
+ I : IntoIterator < Item = chalk_ir:: ParameterKind < ChalkIr , Ident > > ,
210
210
I :: IntoIter : ExactSizeIterator ,
211
211
T : HasInterner < Interner = ChalkIr > ,
212
212
OP : FnOnce ( & Self ) -> LowerResult < T > ,
@@ -499,9 +499,9 @@ trait LowerTypeKind {
499
499
}
500
500
501
501
trait LowerParameterMap {
502
- fn synthetic_parameters ( & self ) -> Option < chalk_ir:: ParameterKind < Ident > > ;
502
+ fn synthetic_parameters ( & self ) -> Option < chalk_ir:: ParameterKind < ChalkIr , Ident > > ;
503
503
fn declared_parameters ( & self ) -> & [ ParameterKind ] ;
504
- fn all_parameters ( & self ) -> Vec < chalk_ir:: ParameterKind < Ident > > {
504
+ fn all_parameters ( & self ) -> Vec < chalk_ir:: ParameterKind < ChalkIr , Ident > > {
505
505
self . synthetic_parameters ( )
506
506
. into_iter ( )
507
507
. chain ( self . declared_parameters ( ) . iter ( ) . map ( |id| id. lower ( ) ) )
@@ -550,7 +550,7 @@ trait LowerParameterMap {
550
550
}
551
551
552
552
impl LowerParameterMap for StructDefn {
553
- fn synthetic_parameters ( & self ) -> Option < chalk_ir:: ParameterKind < Ident > > {
553
+ fn synthetic_parameters ( & self ) -> Option < chalk_ir:: ParameterKind < ChalkIr , Ident > > {
554
554
None
555
555
}
556
556
@@ -560,7 +560,7 @@ impl LowerParameterMap for StructDefn {
560
560
}
561
561
562
562
impl LowerParameterMap for Impl {
563
- fn synthetic_parameters ( & self ) -> Option < chalk_ir:: ParameterKind < Ident > > {
563
+ fn synthetic_parameters ( & self ) -> Option < chalk_ir:: ParameterKind < ChalkIr , Ident > > {
564
564
None
565
565
}
566
566
@@ -570,7 +570,7 @@ impl LowerParameterMap for Impl {
570
570
}
571
571
572
572
impl LowerParameterMap for AssocTyDefn {
573
- fn synthetic_parameters ( & self ) -> Option < chalk_ir:: ParameterKind < Ident > > {
573
+ fn synthetic_parameters ( & self ) -> Option < chalk_ir:: ParameterKind < ChalkIr , Ident > > {
574
574
None
575
575
}
576
576
@@ -580,7 +580,7 @@ impl LowerParameterMap for AssocTyDefn {
580
580
}
581
581
582
582
impl LowerParameterMap for AssocTyValue {
583
- fn synthetic_parameters ( & self ) -> Option < chalk_ir:: ParameterKind < Ident > > {
583
+ fn synthetic_parameters ( & self ) -> Option < chalk_ir:: ParameterKind < ChalkIr , Ident > > {
584
584
None
585
585
}
586
586
@@ -590,7 +590,7 @@ impl LowerParameterMap for AssocTyValue {
590
590
}
591
591
592
592
impl LowerParameterMap for TraitDefn {
593
- fn synthetic_parameters ( & self ) -> Option < chalk_ir:: ParameterKind < Ident > > {
593
+ fn synthetic_parameters ( & self ) -> Option < chalk_ir:: ParameterKind < ChalkIr , Ident > > {
594
594
Some ( chalk_ir:: ParameterKind :: Ty ( intern ( SELF ) ) )
595
595
}
596
596
@@ -600,7 +600,7 @@ impl LowerParameterMap for TraitDefn {
600
600
}
601
601
602
602
impl LowerParameterMap for Clause {
603
- fn synthetic_parameters ( & self ) -> Option < chalk_ir:: ParameterKind < Ident > > {
603
+ fn synthetic_parameters ( & self ) -> Option < chalk_ir:: ParameterKind < ChalkIr , Ident > > {
604
604
None
605
605
}
606
606
@@ -609,16 +609,28 @@ impl LowerParameterMap for Clause {
609
609
}
610
610
}
611
611
612
+ fn get_type_of_u32 ( ) -> chalk_ir:: Ty < ChalkIr > {
613
+ chalk_ir:: ApplicationTy {
614
+ name : chalk_ir:: TypeName :: Scalar ( chalk_ir:: Scalar :: Uint ( chalk_ir:: UintTy :: U32 ) ) ,
615
+ substitution : Substitution :: empty ( & ChalkIr ) ,
616
+ }
617
+ . cast ( & ChalkIr )
618
+ . intern ( & ChalkIr )
619
+ }
620
+
612
621
trait LowerParameterKind {
613
- fn lower ( & self ) -> chalk_ir:: ParameterKind < Ident > ;
622
+ fn lower ( & self ) -> chalk_ir:: ParameterKind < ChalkIr , Ident > ;
614
623
}
615
624
616
625
impl LowerParameterKind for ParameterKind {
617
- fn lower ( & self ) -> chalk_ir:: ParameterKind < Ident > {
626
+ fn lower ( & self ) -> chalk_ir:: ParameterKind < ChalkIr , Ident > {
618
627
match * self {
619
628
ParameterKind :: Ty ( ref n) => chalk_ir:: ParameterKind :: Ty ( n. str ) ,
620
629
ParameterKind :: Lifetime ( ref n) => chalk_ir:: ParameterKind :: Lifetime ( n. str ) ,
621
- ParameterKind :: Const ( ref n) => chalk_ir:: ParameterKind :: Const ( n. str ) ,
630
+ ParameterKind :: Const ( ref n) => chalk_ir:: ParameterKind :: Const {
631
+ ty : get_type_of_u32 ( ) ,
632
+ value : n. str ,
633
+ } ,
622
634
}
623
635
}
624
636
}
@@ -1233,9 +1245,10 @@ impl LowerParameter for Parameter {
1233
1245
Parameter :: Ty ( ref t) => Ok ( t. lower ( env) ?. cast ( interner) ) ,
1234
1246
Parameter :: Lifetime ( ref l) => Ok ( l. lower ( env) ?. cast ( interner) ) ,
1235
1247
Parameter :: Id ( name) => env. lookup_parameter ( name) ,
1236
- Parameter :: ConstValue ( value) => Ok ( chalk_ir:: ConstData :: Concrete (
1237
- chalk_ir:: ConcreteConst { interned : value } ,
1238
- )
1248
+ Parameter :: ConstValue ( value) => Ok ( chalk_ir:: ConstData {
1249
+ ty : get_type_of_u32 ( ) ,
1250
+ value : chalk_ir:: ConstValue :: Concrete ( chalk_ir:: ConcreteConst { interned : value } ) ,
1251
+ }
1239
1252
. intern ( interner)
1240
1253
. cast ( interner) ) ,
1241
1254
}
@@ -1560,12 +1573,12 @@ impl Kinded for ParameterKind {
1560
1573
}
1561
1574
}
1562
1575
1563
- impl < T , L , C > Kinded for chalk_ir:: ParameterKind < T , L , C > {
1576
+ impl < I : chalk_ir :: interner :: Interner , T , L , C > Kinded for chalk_ir:: ParameterKind < I , T , L , C > {
1564
1577
fn kind ( & self ) -> Kind {
1565
1578
match * self {
1566
1579
chalk_ir:: ParameterKind :: Ty ( _) => Kind :: Ty ,
1567
1580
chalk_ir:: ParameterKind :: Lifetime ( _) => Kind :: Lifetime ,
1568
- chalk_ir:: ParameterKind :: Const ( _ ) => Kind :: Const ,
1581
+ chalk_ir:: ParameterKind :: Const { .. } => Kind :: Const ,
1569
1582
}
1570
1583
}
1571
1584
}
0 commit comments