about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--compiler/rustc_smir/src/rustc_smir/mod.rs68
-rw-r--r--compiler/stable_mir/src/mir/visit.rs10
2 files changed, 45 insertions, 33 deletions
diff --git a/compiler/rustc_smir/src/rustc_smir/mod.rs b/compiler/rustc_smir/src/rustc_smir/mod.rs
index e83e301d83b..04986a6c02f 100644
--- a/compiler/rustc_smir/src/rustc_smir/mod.rs
+++ b/compiler/rustc_smir/src/rustc_smir/mod.rs
@@ -457,35 +457,9 @@ impl<'tcx> Stable<'tcx> for mir::VarDebugInfo<'tcx> {
     fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T {
         stable_mir::mir::VarDebugInfo {
             name: self.name.to_string(),
-            source_info: stable_mir::mir::SourceInfo {
-                span: self.source_info.span.stable(tables),
-                scope: self.source_info.scope.into(),
-            },
-            composite: {
-                if let Some(composite) = &self.composite {
-                    Some(VarDebugInfoFragment {
-                        ty: composite.ty.stable(tables),
-                        projection: composite.projection.iter().map(|e| e.stable(tables)).collect(),
-                    })
-                } else {
-                    None
-                }
-            },
-            value: {
-                match self.value {
-                    mir::VarDebugInfoContents::Place(place) => {
-                        stable_mir::mir::VarDebugInfoContents::Place(place.stable(tables))
-                    }
-                    mir::VarDebugInfoContents::Const(const_operand) => {
-                        let op = ConstOperand {
-                            span: const_operand.span.stable(tables),
-                            user_ty: const_operand.user_ty.map(|index| index.as_usize()),
-                            const_: const_operand.const_.stable(tables),
-                        };
-                        stable_mir::mir::VarDebugInfoContents::Const(op)
-                    }
-                }
-            },
+            source_info: self.source_info.stable(tables),
+            composite: self.composite.as_ref().map(|composite| composite.stable(tables)),
+            value: self.value.stable(tables),
             argument_index: self.argument_index,
         }
     }
@@ -498,6 +472,42 @@ impl<'tcx> Stable<'tcx> for mir::Statement<'tcx> {
     }
 }
 
+impl<'tcx> Stable<'tcx> for mir::SourceInfo {
+    type T = stable_mir::mir::SourceInfo;
+    fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T {
+        stable_mir::mir::SourceInfo { span: self.span.stable(tables), scope: self.scope.into() }
+    }
+}
+
+impl<'tcx> Stable<'tcx> for mir::VarDebugInfoFragment<'tcx> {
+    type T = stable_mir::mir::VarDebugInfoFragment;
+    fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T {
+        VarDebugInfoFragment {
+            ty: self.ty.stable(tables),
+            projection: self.projection.iter().map(|e| e.stable(tables)).collect(),
+        }
+    }
+}
+
+impl<'tcx> Stable<'tcx> for mir::VarDebugInfoContents<'tcx> {
+    type T = stable_mir::mir::VarDebugInfoContents;
+    fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T {
+        match self {
+            mir::VarDebugInfoContents::Place(place) => {
+                stable_mir::mir::VarDebugInfoContents::Place(place.stable(tables))
+            }
+            mir::VarDebugInfoContents::Const(const_operand) => {
+                let op = ConstOperand {
+                    span: const_operand.span.stable(tables),
+                    user_ty: const_operand.user_ty.map(|index| index.as_usize()),
+                    const_: const_operand.const_.stable(tables),
+                };
+                stable_mir::mir::VarDebugInfoContents::Const(op)
+            }
+        }
+    }
+}
+
 impl<'tcx> Stable<'tcx> for mir::StatementKind<'tcx> {
     type T = stable_mir::mir::StatementKind;
     fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T {
diff --git a/compiler/stable_mir/src/mir/visit.rs b/compiler/stable_mir/src/mir/visit.rs
index 488363d6a7f..d90808725ae 100644
--- a/compiler/stable_mir/src/mir/visit.rs
+++ b/compiler/stable_mir/src/mir/visit.rs
@@ -391,12 +391,14 @@ pub trait MirVisitor {
     }
 
     fn super_var_debug_info(&mut self, var_debug_info: &VarDebugInfo) {
-        self.visit_span(&var_debug_info.source_info.span);
-        let location = Location(var_debug_info.source_info.span);
-        if let Some(composite) = &var_debug_info.composite {
+        let VarDebugInfo { source_info, composite, value, name: _, argument_index: _ } =
+            var_debug_info;
+        self.visit_span(&source_info.span);
+        let location = Location(source_info.span);
+        if let Some(composite) = composite {
             self.visit_ty(&composite.ty, location);
         }
-        match &var_debug_info.value {
+        match value {
             VarDebugInfoContents::Place(place) => {
                 self.visit_place(place, PlaceContext::NON_USE, location);
             }