@@ -467,6 +467,59 @@ fn write_scope_tree(
467
467
) -> io:: Result < ( ) > {
468
468
let indent = depth * INDENT . len ( ) ;
469
469
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
+
470
523
let children = match scope_tree. get ( & parent) {
471
524
Some ( children) => children,
472
525
None => return Ok ( ( ) ) ,
@@ -477,45 +530,6 @@ fn write_scope_tree(
477
530
assert_eq ! ( data. parent_scope, Some ( parent) ) ;
478
531
writeln ! ( w, "{0:1$}scope {2} {{" , "" , indent, child. index( ) ) ?;
479
532
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
-
519
533
write_scope_tree ( tcx, mir, scope_tree, w, child, depth + 1 ) ?;
520
534
521
535
writeln ! ( w, "{0:1$}}}" , "" , depth * INDENT . len( ) ) ?;
0 commit comments