@@ -27,7 +27,7 @@ use rustc::middle::dataflow::DataFlowContext;
2727use rustc:: middle:: dataflow:: BitwiseOperator ;
2828use rustc:: middle:: dataflow:: DataFlowOperator ;
2929use rustc:: middle:: dataflow:: KillFrom ;
30- use rustc:: hir:: def_id:: DefId ;
30+ use rustc:: hir:: def_id:: { DefId , DefIndex } ;
3131use rustc:: middle:: expr_use_visitor as euv;
3232use rustc:: middle:: mem_categorization as mc;
3333use rustc:: middle:: mem_categorization:: Categorization ;
@@ -323,8 +323,9 @@ pub enum LoanPathElem<'tcx> {
323323 LpInterior ( Option < DefId > , InteriorKind ) ,
324324}
325325
326- pub fn closure_to_block ( closure_id : ast:: NodeId ,
327- tcx : TyCtxt ) -> ast:: NodeId {
326+ fn closure_to_block ( closure_id : DefIndex ,
327+ tcx : TyCtxt ) -> ast:: NodeId {
328+ let closure_id = tcx. hir . def_index_to_node_id ( closure_id) ;
328329 match tcx. hir . get ( closure_id) {
329330 hir_map:: NodeExpr ( expr) => match expr. node {
330331 hir:: ExprClosure ( .., body_id, _) => {
@@ -845,7 +846,8 @@ impl<'a, 'tcx> BorrowckCtxt<'a, 'tcx> {
845846 } else {
846847 "consider changing this closure to take self by mutable reference"
847848 } ;
848- err. span_help ( self . tcx . hir . span ( id) , help) ;
849+ let node_id = self . tcx . hir . def_index_to_node_id ( id) ;
850+ err. span_help ( self . tcx . hir . span ( node_id) , help) ;
849851 err
850852 }
851853 _ => {
@@ -1181,7 +1183,9 @@ impl<'a, 'tcx> BorrowckCtxt<'a, 'tcx> {
11811183 _ => bug ! ( )
11821184 } ;
11831185 if kind == ty:: ClosureKind :: Fn {
1184- db. span_help ( self . tcx . hir . span ( upvar_id. closure_expr_id ) ,
1186+ let closure_node_id =
1187+ self . tcx . hir . def_index_to_node_id ( upvar_id. closure_expr_id ) ;
1188+ db. span_help ( self . tcx . hir . span ( closure_node_id) ,
11851189 "consider changing this closure to take \
11861190 self by mutable reference") ;
11871191 }
@@ -1214,7 +1218,9 @@ impl<'a, 'tcx> BorrowckCtxt<'a, 'tcx> {
12141218 loan_path : & LoanPath < ' tcx > ,
12151219 out : & mut String ) {
12161220 match loan_path. kind {
1217- LpUpvar ( ty:: UpvarId { var_id : id, closure_expr_id : _ } ) |
1221+ LpUpvar ( ty:: UpvarId { var_id : id, closure_expr_id : _ } ) => {
1222+ out. push_str ( & self . tcx . local_var_name_str_def_index ( id) ) ;
1223+ }
12181224 LpVar ( id) => {
12191225 out. push_str ( & self . tcx . local_var_name_str ( id) ) ;
12201226 }
@@ -1352,8 +1358,11 @@ impl<'tcx> fmt::Debug for LoanPath<'tcx> {
13521358 }
13531359
13541360 LpUpvar ( ty:: UpvarId { var_id, closure_expr_id } ) => {
1355- let s = ty:: tls:: with ( |tcx| tcx. hir . node_to_string ( var_id) ) ;
1356- write ! ( f, "$({} captured by id={})" , s, closure_expr_id)
1361+ let s = ty:: tls:: with ( |tcx| {
1362+ let var_node_id = tcx. hir . def_index_to_node_id ( var_id) ;
1363+ tcx. hir . node_to_string ( var_node_id)
1364+ } ) ;
1365+ write ! ( f, "$({} captured by id={:?})" , s, closure_expr_id)
13571366 }
13581367
13591368 LpDowncast ( ref lp, variant_def_id) => {
@@ -1384,7 +1393,10 @@ impl<'tcx> fmt::Display for LoanPath<'tcx> {
13841393 }
13851394
13861395 LpUpvar ( ty:: UpvarId { var_id, closure_expr_id : _ } ) => {
1387- let s = ty:: tls:: with ( |tcx| tcx. hir . node_to_user_string ( var_id) ) ;
1396+ let s = ty:: tls:: with ( |tcx| {
1397+ let var_node_id = tcx. hir . def_index_to_node_id ( var_id) ;
1398+ tcx. hir . node_to_string ( var_node_id)
1399+ } ) ;
13881400 write ! ( f, "$({} captured by closure)" , s)
13891401 }
13901402
0 commit comments