Fix pretty printing named bound regions under -Zverbose

This commit is contained in:
Jack Huey
2022-06-04 14:31:17 -04:00
parent c7b0452ece
commit dd38fecb78

View File

@@ -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 {
match var { // This doesn't really matter because it doesn't get used,
ty::BrAnon(_) | ty::BrEnv => { // it's just an empty value
start_or_continue(&mut self, "for<", ", "); return ty::BrAnon(0);
let name = next_name(&self); };
do_continue(&mut self, name); match var {
region_map.insert(var, ty::BrNamed(CRATE_DEF_ID.to_def_id(), name)); ty::BrAnon(_) | ty::BrEnv => {
start_or_continue(&mut self, "for<", ", ");
let name = next_name(&self);
do_continue(&mut self, name);
ty::BrNamed(CRATE_DEF_ID.to_def_id(), name)
}
ty::BrNamed(def_id, kw::UnderscoreLifetime) => {
start_or_continue(&mut self, "for<", ", ");
let name = next_name(&self);
do_continue(&mut self, name);
ty::BrNamed(def_id, name)
}
ty::BrNamed(def_id, name) => {
start_or_continue(&mut self, "for<", ", ");
do_continue(&mut self, name);
ty::BrNamed(def_id, name)
}
} }
ty::BrNamed(def_id, kw::UnderscoreLifetime) => { })
start_or_continue(&mut self, "for<", ", "); .collect();
let name = next_name(&self);
do_continue(&mut self, name);
region_map.insert(var, ty::BrNamed(def_id, name));
}
ty::BrNamed(_, name) => {
start_or_continue(&mut self, "for<", ", ");
do_continue(&mut self, name);
}
}
}
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 },