Implement references VarDebugInfo.
This commit is contained in:
parent
1c36f50b3e
commit
2ec0071913
20 changed files with 439 additions and 361 deletions
|
@ -1111,6 +1111,10 @@ pub struct VarDebugInfo<'tcx> {
|
|||
/// originated from (starting from 1). Note, if MIR inlining is enabled, then this is the
|
||||
/// argument number in the original function before it was inlined.
|
||||
pub argument_index: Option<u16>,
|
||||
|
||||
/// The data represents `name` dereferenced `references` times,
|
||||
/// and not the direct value.
|
||||
pub references: u8,
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
@ -1639,18 +1643,7 @@ impl<'tcx> Place<'tcx> {
|
|||
return self;
|
||||
}
|
||||
|
||||
let mut v: Vec<PlaceElem<'tcx>>;
|
||||
|
||||
let new_projections = if self.projection.is_empty() {
|
||||
more_projections
|
||||
} else {
|
||||
v = Vec::with_capacity(self.projection.len() + more_projections.len());
|
||||
v.extend(self.projection);
|
||||
v.extend(more_projections);
|
||||
&v
|
||||
};
|
||||
|
||||
Place { local: self.local, projection: tcx.mk_place_elems(new_projections) }
|
||||
self.as_ref().project_deeper(more_projections, tcx)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1721,6 +1714,27 @@ impl<'tcx> PlaceRef<'tcx> {
|
|||
(base, *proj)
|
||||
})
|
||||
}
|
||||
|
||||
/// Generates a new place by appending `more_projections` to the existing ones
|
||||
/// and interning the result.
|
||||
pub fn project_deeper(
|
||||
self,
|
||||
more_projections: &[PlaceElem<'tcx>],
|
||||
tcx: TyCtxt<'tcx>,
|
||||
) -> Place<'tcx> {
|
||||
let mut v: Vec<PlaceElem<'tcx>>;
|
||||
|
||||
let new_projections = if self.projection.is_empty() {
|
||||
more_projections
|
||||
} else {
|
||||
v = Vec::with_capacity(self.projection.len() + more_projections.len());
|
||||
v.extend(self.projection);
|
||||
v.extend(more_projections);
|
||||
&v
|
||||
};
|
||||
|
||||
Place { local: self.local, projection: tcx.mk_place_elems(new_projections) }
|
||||
}
|
||||
}
|
||||
|
||||
impl Debug for Place<'_> {
|
||||
|
|
|
@ -551,8 +551,13 @@ fn write_scope_tree(
|
|||
}
|
||||
|
||||
let indented_debug_info = format!(
|
||||
"{0:1$}debug {2} => {3:?};",
|
||||
INDENT, indent, var_debug_info.name, var_debug_info.value,
|
||||
"{0:1$}debug {2} => {3:&<4$}{5:?};",
|
||||
INDENT,
|
||||
indent,
|
||||
var_debug_info.name,
|
||||
"",
|
||||
var_debug_info.references as usize,
|
||||
var_debug_info.value,
|
||||
);
|
||||
|
||||
writeln!(
|
||||
|
|
|
@ -842,6 +842,7 @@ macro_rules! make_mir_visitor {
|
|||
source_info,
|
||||
value,
|
||||
argument_index: _,
|
||||
references: _,
|
||||
} = var_debug_info;
|
||||
|
||||
self.visit_source_info(source_info);
|
||||
|
|
|
@ -204,6 +204,7 @@ CloneLiftImpls! {
|
|||
(),
|
||||
bool,
|
||||
usize,
|
||||
u8,
|
||||
u16,
|
||||
u32,
|
||||
u64,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue