@@ -12,7 +12,8 @@ use rustc_middle::ty::layout::{
12
12
} ;
13
13
use rustc_middle:: ty:: print:: { with_forced_trimmed_paths, with_no_trimmed_paths} ;
14
14
use rustc_middle:: ty:: {
15
- GenericPredicates , Instance , List , ScalarInt , TyCtxt , TypeVisitableExt , ValTree ,
15
+ CoroutineArgsExt , GenericPredicates , Instance , List , ScalarInt , TyCtxt , TypeVisitableExt ,
16
+ ValTree ,
16
17
} ;
17
18
use rustc_middle:: { mir, ty} ;
18
19
use rustc_span:: def_id:: LOCAL_CRATE ;
@@ -22,9 +23,9 @@ use stable_mir::mir::mono::{InstanceDef, StaticDef};
22
23
use stable_mir:: mir:: { BinOp , Body , Place , UnOp } ;
23
24
use stable_mir:: target:: { MachineInfo , MachineSize } ;
24
25
use stable_mir:: ty:: {
25
- AdtDef , AdtKind , Allocation , ClosureDef , ClosureKind , Discr , FieldDef , FnDef , ForeignDef ,
26
- ForeignItemKind , GenericArgs , IntrinsicDef , LineInfo , MirConst , PolyFnSig , RigidTy , Span , Ty ,
27
- TyConst , TyKind , UintTy , VariantDef , VariantIdx ,
26
+ AdtDef , AdtKind , Allocation , ClosureDef , ClosureKind , CoroutineDef , Discr , FieldDef , FnDef ,
27
+ ForeignDef , ForeignItemKind , GenericArgs , IntrinsicDef , LineInfo , MirConst , PolyFnSig , RigidTy ,
28
+ Span , Ty , TyConst , TyKind , UintTy , VariantDef , VariantIdx ,
28
29
} ;
29
30
use stable_mir:: { Crate , CrateDef , CrateItem , CrateNum , DefId , Error , Filename , ItemKind , Symbol } ;
30
31
@@ -459,6 +460,25 @@ impl<'tcx> SmirCtxt<'tcx> {
459
460
Discr { val : discr. val , ty : discr. ty . stable ( & mut * tables) }
460
461
}
461
462
463
+ /// Discriminant for a given variand index and args of a coroutine
464
+ pub fn coroutine_discr_for_variant (
465
+ & self ,
466
+ coroutine : CoroutineDef ,
467
+ args : & GenericArgs ,
468
+ variant : VariantIdx ,
469
+ ) -> Discr {
470
+ let mut tables = self . 0 . borrow_mut ( ) ;
471
+ let tcx = tables. tcx ;
472
+
473
+ let discr = args. internal ( & mut * tables, tcx) . as_coroutine ( ) . discriminant_for_variant (
474
+ coroutine. def_id ( ) . internal ( & mut * tables, tcx) ,
475
+ tcx,
476
+ variant. internal ( & mut * tables, tcx) ,
477
+ ) ;
478
+
479
+ Discr { val : discr. val , ty : discr. ty . stable ( & mut * tables) }
480
+ }
481
+
462
482
/// The name of a variant.
463
483
pub fn variant_name ( & self , def : VariantDef ) -> Symbol {
464
484
let mut tables = self . 0 . borrow_mut ( ) ;
0 commit comments