1
Fork 0

de-structure variable and add stables

This commit is contained in:
ouz-a 2023-11-17 23:41:34 +03:00
parent 018b85986d
commit d0dd19a6c9
2 changed files with 45 additions and 33 deletions

View file

@ -457,35 +457,9 @@ impl<'tcx> Stable<'tcx> for mir::VarDebugInfo<'tcx> {
fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T { fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T {
stable_mir::mir::VarDebugInfo { stable_mir::mir::VarDebugInfo {
name: self.name.to_string(), name: self.name.to_string(),
source_info: stable_mir::mir::SourceInfo { source_info: self.source_info.stable(tables),
span: self.source_info.span.stable(tables), composite: self.composite.as_ref().map(|composite| composite.stable(tables)),
scope: self.source_info.scope.into(), value: self.value.stable(tables),
},
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)
}
}
},
argument_index: self.argument_index, 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> { impl<'tcx> Stable<'tcx> for mir::StatementKind<'tcx> {
type T = stable_mir::mir::StatementKind; type T = stable_mir::mir::StatementKind;
fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T { fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T {

View file

@ -391,12 +391,14 @@ pub trait MirVisitor {
} }
fn super_var_debug_info(&mut self, var_debug_info: &VarDebugInfo) { fn super_var_debug_info(&mut self, var_debug_info: &VarDebugInfo) {
self.visit_span(&var_debug_info.source_info.span); let VarDebugInfo { source_info, composite, value, name: _, argument_index: _ } =
let location = Location(var_debug_info.source_info.span); var_debug_info;
if let Some(composite) = &var_debug_info.composite { self.visit_span(&source_info.span);
let location = Location(source_info.span);
if let Some(composite) = composite {
self.visit_ty(&composite.ty, location); self.visit_ty(&composite.ty, location);
} }
match &var_debug_info.value { match value {
VarDebugInfoContents::Place(place) => { VarDebugInfoContents::Place(place) => {
self.visit_place(place, PlaceContext::NON_USE, location); self.visit_place(place, PlaceContext::NON_USE, location);
} }