Skip to content

Commit 0426faa

Browse files
committed
Print scope data
1 parent c3ded22 commit 0426faa

File tree

1 file changed

+53
-39
lines changed

1 file changed

+53
-39
lines changed

src/librustc_mir/util/pretty.rs

+53-39
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,59 @@ fn write_scope_tree(
467467
) -> io::Result<()> {
468468
let indent = depth * INDENT.len();
469469

470+
let parent_data = &mir.source_scopes[parent];
471+
let parent_local_data = if let ClearCrossCrate::Set(data) = &mir.source_scope_local_data {
472+
data.get(parent)
473+
} else {
474+
None
475+
};
476+
477+
if tcx.sess.verbose() {
478+
writeln!(w, "{0:1$}span: {2:?}", "", indent, parent_data.span)?;
479+
if let Some(local_data) = parent_local_data {
480+
writeln!(w, "{0:1$}lint_root: {2:?}", "", indent, local_data.lint_root)?;
481+
writeln!(w, "{0:1$}safety: {2:?}", "", indent, local_data.safety)?;
482+
}
483+
}
484+
485+
// User variable types (including the user's name in a comment).
486+
for local in mir.vars_iter() {
487+
let var = &mir.local_decls[local];
488+
let (name, source_info) = if var.source_info.scope == parent {
489+
(var.name.unwrap(), var.source_info)
490+
} else {
491+
// Not a variable or not declared in this scope.
492+
continue;
493+
};
494+
495+
let mut_str = if var.mutability == Mutability::Mut {
496+
"mut "
497+
} else {
498+
""
499+
};
500+
501+
let mut indented_var = format!(
502+
"{0:1$}let {2}{3:?}: {4:?}",
503+
INDENT,
504+
indent,
505+
mut_str,
506+
local,
507+
var.ty
508+
);
509+
for user_ty in var.user_ty.projections() {
510+
write!(indented_var, " as {:?}", user_ty).unwrap();
511+
}
512+
indented_var.push_str(";");
513+
writeln!(
514+
w,
515+
"{0:1$} // \"{2}\" in {3}",
516+
indented_var,
517+
ALIGN,
518+
name,
519+
comment(tcx, source_info)
520+
)?;
521+
}
522+
470523
let children = match scope_tree.get(&parent) {
471524
Some(children) => children,
472525
None => return Ok(()),
@@ -477,45 +530,6 @@ fn write_scope_tree(
477530
assert_eq!(data.parent_scope, Some(parent));
478531
writeln!(w, "{0:1$}scope {2} {{", "", indent, child.index())?;
479532

480-
// User variable types (including the user's name in a comment).
481-
for local in mir.vars_iter() {
482-
let var = &mir.local_decls[local];
483-
let (name, source_info) = if var.source_info.scope == child {
484-
(var.name.unwrap(), var.source_info)
485-
} else {
486-
// Not a variable or not declared in this scope.
487-
continue;
488-
};
489-
490-
let mut_str = if var.mutability == Mutability::Mut {
491-
"mut "
492-
} else {
493-
""
494-
};
495-
496-
let indent = indent + INDENT.len();
497-
let mut indented_var = format!(
498-
"{0:1$}let {2}{3:?}: {4:?}",
499-
INDENT,
500-
indent,
501-
mut_str,
502-
local,
503-
var.ty
504-
);
505-
for user_ty in var.user_ty.projections() {
506-
write!(indented_var, " as {:?}", user_ty).unwrap();
507-
}
508-
indented_var.push_str(";");
509-
writeln!(
510-
w,
511-
"{0:1$} // \"{2}\" in {3}",
512-
indented_var,
513-
ALIGN,
514-
name,
515-
comment(tcx, source_info)
516-
)?;
517-
}
518-
519533
write_scope_tree(tcx, mir, scope_tree, w, child, depth + 1)?;
520534

521535
writeln!(w, "{0:1$}}}", "", depth * INDENT.len())?;

0 commit comments

Comments
 (0)