@@ -1394,6 +1394,18 @@ impl LowerTy for Ty {
1394
1394
} )
1395
1395
. intern ( interner) ) ,
1396
1396
1397
+ Ty :: Array { ty, len } => Ok ( chalk_ir:: TyData :: Apply ( chalk_ir:: ApplicationTy {
1398
+ name : chalk_ir:: TypeName :: Array ,
1399
+ substitution : chalk_ir:: Substitution :: from (
1400
+ interner,
1401
+ & [
1402
+ ty. lower ( env) ?. cast ( interner) ,
1403
+ len. lower ( env) ?. cast ( interner) ,
1404
+ ] ,
1405
+ ) ,
1406
+ } )
1407
+ . intern ( interner) ) ,
1408
+
1397
1409
Ty :: Slice { ty } => Ok ( chalk_ir:: TyData :: Apply ( chalk_ir:: ApplicationTy {
1398
1410
name : chalk_ir:: TypeName :: Slice ,
1399
1411
substitution : chalk_ir:: Substitution :: from_fallible (
@@ -1447,6 +1459,36 @@ impl LowerTy for Ty {
1447
1459
}
1448
1460
}
1449
1461
1462
+ trait LowerConst {
1463
+ fn lower ( & self , env : & Env ) -> LowerResult < chalk_ir:: Const < ChalkIr > > ;
1464
+ }
1465
+
1466
+ impl LowerConst for Const {
1467
+ fn lower ( & self , env : & Env ) -> LowerResult < chalk_ir:: Const < ChalkIr > > {
1468
+ let interner = env. interner ( ) ;
1469
+ match self {
1470
+ Const :: Id ( name) => {
1471
+ let parameter = env. lookup_generic_arg ( name) ?;
1472
+ parameter
1473
+ . constant ( interner)
1474
+ . ok_or_else ( || RustIrError :: IncorrectParameterKind {
1475
+ identifier : name. clone ( ) ,
1476
+ expected : Kind :: Const ,
1477
+ actual : parameter. kind ( ) ,
1478
+ } )
1479
+ . map ( |c| c. clone ( ) )
1480
+ }
1481
+ Const :: Value ( value) => Ok ( chalk_ir:: ConstData {
1482
+ ty : get_type_of_u32 ( ) ,
1483
+ value : chalk_ir:: ConstValue :: Concrete ( chalk_ir:: ConcreteConst {
1484
+ interned : value. clone ( ) ,
1485
+ } ) ,
1486
+ }
1487
+ . intern ( interner) ) ,
1488
+ }
1489
+ }
1490
+ }
1491
+
1450
1492
trait LowerGenericArg {
1451
1493
fn lower ( & self , env : & Env ) -> LowerResult < chalk_ir:: GenericArg < ChalkIr > > ;
1452
1494
}
@@ -1458,14 +1500,7 @@ impl LowerGenericArg for GenericArg {
1458
1500
GenericArg :: Ty ( ref t) => Ok ( t. lower ( env) ?. cast ( interner) ) ,
1459
1501
GenericArg :: Lifetime ( ref l) => Ok ( l. lower ( env) ?. cast ( interner) ) ,
1460
1502
GenericArg :: Id ( name) => env. lookup_generic_arg ( & name) ,
1461
- GenericArg :: ConstValue ( value) => Ok ( chalk_ir:: ConstData {
1462
- ty : get_type_of_u32 ( ) ,
1463
- value : chalk_ir:: ConstValue :: Concrete ( chalk_ir:: ConcreteConst {
1464
- interned : value. clone ( ) ,
1465
- } ) ,
1466
- }
1467
- . intern ( interner)
1468
- . cast ( interner) ) ,
1503
+ GenericArg :: Const ( c) => Ok ( c. lower ( env) ?. cast ( interner) ) ,
1469
1504
}
1470
1505
}
1471
1506
}
0 commit comments