diff options
| author | NotLebedev <notlebedev@gmail.com> | 2025-03-27 22:20:42 +0300 |
|---|---|---|
| committer | NotLebedev <notlebedev@gmail.com> | 2025-06-16 10:51:58 +0300 |
| commit | 7ce7fc56b894dbb727a7873b0af8137b573efaa6 (patch) | |
| tree | f8d82eee46df04ab190be656eb4e998072465f5d | |
| parent | d4de03208badaf3f5d4944fc0173ca34dab1acd5 (diff) | |
| download | rust-7ce7fc56b894dbb727a7873b0af8137b573efaa6.tar.gz rust-7ce7fc56b894dbb727a7873b0af8137b573efaa6.zip | |
Implement Stable for Discr
| -rw-r--r-- | compiler/rustc_smir/src/rustc_smir/context.rs | 21 | ||||
| -rw-r--r-- | compiler/rustc_smir/src/rustc_smir/convert/ty.rs | 8 |
2 files changed, 15 insertions, 14 deletions
diff --git a/compiler/rustc_smir/src/rustc_smir/context.rs b/compiler/rustc_smir/src/rustc_smir/context.rs index 6639b3bc42a..baa4c0681e8 100644 --- a/compiler/rustc_smir/src/rustc_smir/context.rs +++ b/compiler/rustc_smir/src/rustc_smir/context.rs @@ -452,12 +452,9 @@ impl<'tcx> SmirCtxt<'tcx> { pub fn adt_discr_for_variant(&self, adt: AdtDef, variant: VariantIdx) -> Discr { let mut tables = self.0.borrow_mut(); let tcx = tables.tcx; - - let discr = adt - .internal(&mut *tables, tcx) - .discriminant_for_variant(tcx, variant.internal(&mut *tables, tcx)); - - Discr { val: discr.val, ty: discr.ty.stable(&mut *tables) } + let adt = adt.internal(&mut *tables, tcx); + let variant = variant.internal(&mut *tables, tcx); + adt.discriminant_for_variant(tcx, variant).stable(&mut *tables) } /// Discriminant for a given variand index and args of a coroutine @@ -469,14 +466,10 @@ impl<'tcx> SmirCtxt<'tcx> { ) -> Discr { let mut tables = self.0.borrow_mut(); let tcx = tables.tcx; - - let discr = args.internal(&mut *tables, tcx).as_coroutine().discriminant_for_variant( - coroutine.def_id().internal(&mut *tables, tcx), - tcx, - variant.internal(&mut *tables, tcx), - ); - - Discr { val: discr.val, ty: discr.ty.stable(&mut *tables) } + let coroutine = coroutine.def_id().internal(&mut *tables, tcx); + let args = args.internal(&mut *tables, tcx); + let variant = variant.internal(&mut *tables, tcx); + args.as_coroutine().discriminant_for_variant(coroutine, tcx, variant).stable(&mut *tables) } /// The name of a variant. diff --git a/compiler/rustc_smir/src/rustc_smir/convert/ty.rs b/compiler/rustc_smir/src/rustc_smir/convert/ty.rs index 6a26f5f7997..b4239ddd896 100644 --- a/compiler/rustc_smir/src/rustc_smir/convert/ty.rs +++ b/compiler/rustc_smir/src/rustc_smir/convert/ty.rs @@ -960,3 +960,11 @@ impl<'tcx> Stable<'tcx> for ty::ImplTraitInTraitData { } } } + +impl<'tcx> Stable<'tcx> for rustc_middle::ty::util::Discr<'tcx> { + type T = stable_mir::ty::Discr; + + fn stable(&self, tables: &mut Tables<'_>) -> Self::T { + stable_mir::ty::Discr { val: self.val, ty: self.ty.stable(tables) } + } +} |
