@@ -21,8 +21,7 @@ use middle::typeck::infer::{force_all, resolve_all, resolve_region};
2121use  middle:: typeck:: infer:: resolve_type; 
2222use  middle:: typeck:: infer; 
2323use  middle:: typeck:: { MethodCall ,  MethodCallee } ; 
24- use  middle:: typeck:: { vtable_res,  vtable_origin} ; 
25- use  middle:: typeck:: { vtable_static,  vtable_param} ; 
24+ use  middle:: typeck:: { vtable_res,  vtable_static,  vtable_param} ; 
2625use  middle:: typeck:: write_substs_to_tcx; 
2726use  middle:: typeck:: write_ty_to_tcx; 
2827use  util:: ppaux; 
@@ -100,38 +99,34 @@ fn resolve_method_map_entry(wbcx: &mut WbCtxt, sp: Span, method_call: MethodCall
10099    } 
101100} 
102101
103- fn  resolve_vtable_map_entry ( fcx :  & FnCtxt ,  sp :  Span ,  id :  ast :: NodeId )  { 
102+ fn  resolve_vtable_map_entry ( fcx :  & FnCtxt ,  sp :  Span ,  vtable_key :   MethodCall )  { 
104103    // Resolve any vtable map entry 
105-     match  fcx. inh . vtable_map . borrow ( ) . find_copy ( & id )  { 
104+     match  fcx. inh . vtable_map . borrow ( ) . find_copy ( & vtable_key )  { 
106105        Some ( origins)  => { 
107106            let  r_origins = resolve_origins ( fcx,  sp,  origins) ; 
108-             fcx. ccx . vtable_map . borrow_mut ( ) . insert ( id ,  r_origins) ; 
109-             debug ! ( "writeback::resolve_vtable_map_entry(id ={}, vtables={:?})" , 
110-                     id ,  r_origins. repr( fcx. tcx( ) ) ) ; 
107+             fcx. ccx . vtable_map . borrow_mut ( ) . insert ( vtable_key ,  r_origins) ; 
108+             debug ! ( "writeback::resolve_vtable_map_entry(vtable_key ={}, vtables={:?})" , 
109+                     vtable_key ,  r_origins. repr( fcx. tcx( ) ) ) ; 
111110        } 
112111        None  => { } 
113112    } 
114113
115114    fn  resolve_origins ( fcx :  & FnCtxt ,  sp :  Span , 
116115                       vtbls :  vtable_res )  -> vtable_res  { 
117-         @vtbls. map ( |os| @os. map ( |o| resolve_origin ( fcx,  sp,  o) ) ) 
118-     } 
119- 
120-     fn  resolve_origin ( fcx :  & FnCtxt , 
121-                       sp :  Span , 
122-                       origin :  & vtable_origin )  -> vtable_origin  { 
123-         match  origin { 
124-             & vtable_static( def_id,  ref  tys,  origins)  => { 
125-                 let  r_tys = resolve_type_vars_in_types ( fcx, 
126-                                                        sp, 
127-                                                        tys. as_slice ( ) ) ; 
128-                 let  r_origins = resolve_origins ( fcx,  sp,  origins) ; 
129-                 vtable_static ( def_id,  r_tys,  r_origins) 
130-             } 
131-             & vtable_param( n,  b)  => { 
132-                 vtable_param ( n,  b) 
116+         @vtbls. map ( |os| @os. map ( |origin| { 
117+             match  origin { 
118+                 & vtable_static( def_id,  ref  tys,  origins)  => { 
119+                     let  r_tys = resolve_type_vars_in_types ( fcx, 
120+                                                            sp, 
121+                                                            tys. as_slice ( ) ) ; 
122+                     let  r_origins = resolve_origins ( fcx,  sp,  origins) ; 
123+                     vtable_static ( def_id,  r_tys,  r_origins) 
124+                 } 
125+                 & vtable_param( n,  b)  => { 
126+                     vtable_param ( n,  b) 
127+                 } 
133128            } 
134-         } 
129+         } ) ) 
135130    } 
136131} 
137132
@@ -183,6 +178,7 @@ fn resolve_type_vars_for_node(wbcx: &mut WbCtxt, sp: Span, id: ast::NodeId)
183178                    for  autoderef in  range ( 0 ,  adj. autoderefs )  { 
184179                        let  method_call = MethodCall :: autoderef ( id,  autoderef as  u32 ) ; 
185180                        resolve_method_map_entry ( wbcx,  sp,  method_call) ; 
181+                         resolve_vtable_map_entry ( wbcx. fcx ,  sp,  method_call) ; 
186182                    } 
187183
188184                    let  fixup_region = |r| { 
@@ -273,7 +269,7 @@ fn visit_expr(e: &ast::Expr, wbcx: &mut WbCtxt) {
273269
274270    resolve_type_vars_for_node ( wbcx,  e. span ,  e. id ) ; 
275271    resolve_method_map_entry ( wbcx,  e. span ,  MethodCall :: expr ( e. id ) ) ; 
276-     resolve_vtable_map_entry ( wbcx. fcx ,  e. span ,  e. id ) ; 
272+     resolve_vtable_map_entry ( wbcx. fcx ,  e. span ,  MethodCall :: expr ( e. id ) ) ; 
277273
278274    match  e. node  { 
279275        ast:: ExprFnBlock ( ref  decl,  _)  | ast:: ExprProc ( ref  decl,  _)  => { 
0 commit comments