Fix pretty printing named bound regions under -Zverbose
This commit is contained in:
@@ -2190,34 +2190,40 @@ impl<'tcx> FmtPrinter<'_, 'tcx> {
|
|||||||
// this is not *quite* right and changes the ordering of some output
|
// this is not *quite* right and changes the ordering of some output
|
||||||
// anyways.
|
// anyways.
|
||||||
let (new_value, map) = if self.tcx().sess.verbose() {
|
let (new_value, map) = if self.tcx().sess.verbose() {
|
||||||
// anon index + 1 (BrEnv takes 0) -> name
|
let regions: Vec<_> = value
|
||||||
let mut region_map: FxHashMap<_, _> = Default::default();
|
.bound_vars()
|
||||||
let bound_vars = value.bound_vars();
|
.into_iter()
|
||||||
for var in bound_vars {
|
.map(|var| {
|
||||||
let ty::BoundVariableKind::Region(var) = var else { continue };
|
let ty::BoundVariableKind::Region(var) = var else {
|
||||||
|
// This doesn't really matter because it doesn't get used,
|
||||||
|
// it's just an empty value
|
||||||
|
return ty::BrAnon(0);
|
||||||
|
};
|
||||||
match var {
|
match var {
|
||||||
ty::BrAnon(_) | ty::BrEnv => {
|
ty::BrAnon(_) | ty::BrEnv => {
|
||||||
start_or_continue(&mut self, "for<", ", ");
|
start_or_continue(&mut self, "for<", ", ");
|
||||||
let name = next_name(&self);
|
let name = next_name(&self);
|
||||||
do_continue(&mut self, name);
|
do_continue(&mut self, name);
|
||||||
region_map.insert(var, ty::BrNamed(CRATE_DEF_ID.to_def_id(), name));
|
ty::BrNamed(CRATE_DEF_ID.to_def_id(), name)
|
||||||
}
|
}
|
||||||
ty::BrNamed(def_id, kw::UnderscoreLifetime) => {
|
ty::BrNamed(def_id, kw::UnderscoreLifetime) => {
|
||||||
start_or_continue(&mut self, "for<", ", ");
|
start_or_continue(&mut self, "for<", ", ");
|
||||||
let name = next_name(&self);
|
let name = next_name(&self);
|
||||||
do_continue(&mut self, name);
|
do_continue(&mut self, name);
|
||||||
region_map.insert(var, ty::BrNamed(def_id, name));
|
ty::BrNamed(def_id, name)
|
||||||
}
|
}
|
||||||
ty::BrNamed(_, name) => {
|
ty::BrNamed(def_id, name) => {
|
||||||
start_or_continue(&mut self, "for<", ", ");
|
start_or_continue(&mut self, "for<", ", ");
|
||||||
do_continue(&mut self, name);
|
do_continue(&mut self, name);
|
||||||
|
ty::BrNamed(def_id, name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
|
.collect();
|
||||||
start_or_continue(&mut self, "", "> ");
|
start_or_continue(&mut self, "", "> ");
|
||||||
|
|
||||||
self.tcx.replace_late_bound_regions(value.clone(), |br| {
|
self.tcx.replace_late_bound_regions(value.clone(), |br| {
|
||||||
let kind = region_map[&br.kind];
|
let kind = regions[br.var.as_usize()];
|
||||||
self.tcx.mk_region(ty::ReLateBound(
|
self.tcx.mk_region(ty::ReLateBound(
|
||||||
ty::INNERMOST,
|
ty::INNERMOST,
|
||||||
ty::BoundRegion { var: br.var, kind },
|
ty::BoundRegion { var: br.var, kind },
|
||||||
|
|||||||
Reference in New Issue
Block a user