@@ -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