@@ -552,16 +552,17 @@ impl tr for freevar_entry {
552552// Encoding and decoding of MethodCallee
553553
554554trait read_method_callee_helper {
555- fn read_method_callee ( & mut self , xcx : & ExtendedDecodeContext ) -> ( u32 , MethodCallee ) ;
555+ fn read_method_callee ( & mut self , xcx : & ExtendedDecodeContext )
556+ -> ( typeck:: ExprAdjustment , MethodCallee ) ;
556557}
557558
558559fn encode_method_callee ( ecx : & e:: EncodeContext ,
559560 ebml_w : & mut Encoder ,
560- autoderef : u32 ,
561+ adjustment : typeck :: ExprAdjustment ,
561562 method : & MethodCallee ) {
562563 ebml_w. emit_struct ( "MethodCallee" , 4 , |ebml_w| {
563- ebml_w. emit_struct_field ( "autoderef " , 0 u, |ebml_w| {
564- autoderef . encode ( ebml_w)
564+ ebml_w. emit_struct_field ( "adjustment " , 0 u, |ebml_w| {
565+ adjustment . encode ( ebml_w)
565566 } ) ;
566567 ebml_w. emit_struct_field ( "origin" , 1 u, |ebml_w| {
567568 method. origin . encode ( ebml_w)
@@ -576,12 +577,14 @@ fn encode_method_callee(ecx: &e::EncodeContext,
576577}
577578
578579impl < ' a > read_method_callee_helper for reader:: Decoder < ' a > {
579- fn read_method_callee ( & mut self , xcx : & ExtendedDecodeContext ) -> ( u32 , MethodCallee ) {
580+ fn read_method_callee ( & mut self , xcx : & ExtendedDecodeContext )
581+ -> ( typeck:: ExprAdjustment , MethodCallee ) {
582+
580583 self . read_struct ( "MethodCallee" , 4 , |this| {
581- let autoderef = this. read_struct_field ( "autoderef " , 0 , |this| {
584+ let adjustment = this. read_struct_field ( "adjustment " , 0 , |this| {
582585 Decodable :: decode ( this)
583586 } ) . unwrap ( ) ;
584- Ok ( ( autoderef , MethodCallee {
587+ Ok ( ( adjustment , MethodCallee {
585588 origin : this. read_struct_field ( "origin" , 1 , |this| {
586589 let method_origin: MethodOrigin =
587590 Decodable :: decode ( this) . unwrap ( ) ;
@@ -627,11 +630,11 @@ impl tr for MethodOrigin {
627630
628631fn encode_vtable_res_with_key ( ecx : & e:: EncodeContext ,
629632 ebml_w : & mut Encoder ,
630- autoderef : u32 ,
633+ adjustment : typeck :: ExprAdjustment ,
631634 dr : & typeck:: vtable_res ) {
632635 ebml_w. emit_struct ( "VtableWithKey" , 2 , |ebml_w| {
633- ebml_w. emit_struct_field ( "autoderef " , 0 u, |ebml_w| {
634- autoderef . encode ( ebml_w)
636+ ebml_w. emit_struct_field ( "adjustment " , 0 u, |ebml_w| {
637+ adjustment . encode ( ebml_w)
635638 } ) ;
636639 ebml_w. emit_struct_field ( "vtable_res" , 1 u, |ebml_w| {
637640 Ok ( encode_vtable_res ( ecx, ebml_w, dr) )
@@ -705,7 +708,7 @@ pub trait vtable_decoder_helpers {
705708 fn read_vtable_res_with_key ( & mut self ,
706709 tcx : & ty:: ctxt ,
707710 cdata : & cstore:: crate_metadata )
708- -> ( u32 , typeck:: vtable_res ) ;
711+ -> ( typeck :: ExprAdjustment , typeck:: vtable_res ) ;
709712 fn read_vtable_res ( & mut self ,
710713 tcx : & ty:: ctxt , cdata : & cstore:: crate_metadata )
711714 -> typeck:: vtable_res ;
@@ -731,12 +734,12 @@ impl<'a> vtable_decoder_helpers for reader::Decoder<'a> {
731734 fn read_vtable_res_with_key ( & mut self ,
732735 tcx : & ty:: ctxt ,
733736 cdata : & cstore:: crate_metadata )
734- -> ( u32 , typeck:: vtable_res ) {
737+ -> ( typeck :: ExprAdjustment , typeck:: vtable_res ) {
735738 self . read_struct ( "VtableWithKey" , 2 , |this| {
736- let autoderef = this. read_struct_field ( "autoderef " , 0 , |this| {
739+ let adjustment = this. read_struct_field ( "adjustment " , 0 , |this| {
737740 Decodable :: decode ( this)
738741 } ) . unwrap ( ) ;
739- Ok ( ( autoderef , this. read_struct_field ( "vtable_res" , 1 , |this| {
742+ Ok ( ( adjustment , this. read_struct_field ( "vtable_res" , 1 , |this| {
740743 Ok ( this. read_vtable_res ( tcx, cdata) )
741744 } ) . unwrap ( ) ) )
742745 } ) . unwrap ( )
@@ -1050,7 +1053,7 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
10501053 ebml_w. tag ( c:: tag_table_method_map, |ebml_w| {
10511054 ebml_w. id ( id) ;
10521055 ebml_w. tag ( c:: tag_table_val, |ebml_w| {
1053- encode_method_callee ( ecx, ebml_w, method_call. autoderef , method)
1056+ encode_method_callee ( ecx, ebml_w, method_call. adjustment , method)
10541057 } )
10551058 } )
10561059 }
@@ -1059,7 +1062,7 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
10591062 ebml_w. tag ( c:: tag_table_vtable_map, |ebml_w| {
10601063 ebml_w. id ( id) ;
10611064 ebml_w. tag ( c:: tag_table_val, |ebml_w| {
1062- encode_vtable_res_with_key ( ecx, ebml_w, method_call. autoderef , dr) ;
1065+ encode_vtable_res_with_key ( ecx, ebml_w, method_call. adjustment , dr) ;
10631066 } )
10641067 } )
10651068 }
@@ -1068,12 +1071,13 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
10681071 match * adj {
10691072 ty:: AutoDerefRef ( adj) => {
10701073 for autoderef in range ( 0 , adj. autoderefs ) {
1071- let method_call = MethodCall :: autoderef ( id, autoderef as u32 ) ;
1074+ let method_call = MethodCall :: autoderef ( id, autoderef) ;
10721075 for & method in tcx. method_map . borrow ( ) . find ( & method_call) . iter ( ) {
10731076 ebml_w. tag ( c:: tag_table_method_map, |ebml_w| {
10741077 ebml_w. id ( id) ;
10751078 ebml_w. tag ( c:: tag_table_val, |ebml_w| {
1076- encode_method_callee ( ecx, ebml_w, method_call. autoderef , method)
1079+ encode_method_callee ( ecx, ebml_w,
1080+ method_call. adjustment , method)
10771081 } )
10781082 } )
10791083 }
@@ -1083,12 +1087,32 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
10831087 ebml_w. id ( id) ;
10841088 ebml_w. tag ( c:: tag_table_val, |ebml_w| {
10851089 encode_vtable_res_with_key ( ecx, ebml_w,
1086- method_call. autoderef , dr) ;
1090+ method_call. adjustment , dr) ;
10871091 } )
10881092 } )
10891093 }
10901094 }
10911095 }
1096+ ty:: AutoObject ( ..) => {
1097+ let method_call = MethodCall :: autoobject ( id) ;
1098+ for & method in tcx. method_map . borrow ( ) . find ( & method_call) . iter ( ) {
1099+ ebml_w. tag ( c:: tag_table_method_map, |ebml_w| {
1100+ ebml_w. id ( id) ;
1101+ ebml_w. tag ( c:: tag_table_val, |ebml_w| {
1102+ encode_method_callee ( ecx, ebml_w, method_call. adjustment , method)
1103+ } )
1104+ } )
1105+ }
1106+
1107+ for & dr in tcx. vtable_map . borrow ( ) . find ( & method_call) . iter ( ) {
1108+ ebml_w. tag ( c:: tag_table_vtable_map, |ebml_w| {
1109+ ebml_w. id ( id) ;
1110+ ebml_w. tag ( c:: tag_table_val, |ebml_w| {
1111+ encode_vtable_res_with_key ( ecx, ebml_w, method_call. adjustment , dr) ;
1112+ } )
1113+ } )
1114+ }
1115+ }
10921116 _ => { }
10931117 }
10941118
@@ -1393,20 +1417,20 @@ fn decode_side_tables(xcx: &ExtendedDecodeContext,
13931417 dcx. tcx . ty_param_defs . borrow_mut ( ) . insert ( id, bounds) ;
13941418 }
13951419 c:: tag_table_method_map => {
1396- let ( autoderef , method) = val_dsr. read_method_callee ( xcx) ;
1420+ let ( adjustment , method) = val_dsr. read_method_callee ( xcx) ;
13971421 let method_call = MethodCall {
13981422 expr_id : id,
1399- autoderef : autoderef
1423+ adjustment : adjustment
14001424 } ;
14011425 dcx. tcx . method_map . borrow_mut ( ) . insert ( method_call, method) ;
14021426 }
14031427 c:: tag_table_vtable_map => {
1404- let ( autoderef , vtable_res) =
1428+ let ( adjustment , vtable_res) =
14051429 val_dsr. read_vtable_res_with_key ( xcx. dcx . tcx ,
14061430 xcx. dcx . cdata ) ;
14071431 let vtable_key = MethodCall {
14081432 expr_id : id,
1409- autoderef : autoderef
1433+ adjustment : adjustment
14101434 } ;
14111435 dcx. tcx . vtable_map . borrow_mut ( ) . insert ( vtable_key, vtable_res) ;
14121436 }
0 commit comments