@@ -552,16 +552,17 @@ impl tr for freevar_entry {
552
552
// Encoding and decoding of MethodCallee
553
553
554
554
trait 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 ) ;
556
557
}
557
558
558
559
fn encode_method_callee ( ecx : & e:: EncodeContext ,
559
560
ebml_w : & mut Encoder ,
560
- autoderef : u32 ,
561
+ adjustment : typeck :: ExprAdjustment ,
561
562
method : & MethodCallee ) {
562
563
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)
565
566
} ) ;
566
567
ebml_w. emit_struct_field ( "origin" , 1 u, |ebml_w| {
567
568
method. origin . encode ( ebml_w)
@@ -576,12 +577,14 @@ fn encode_method_callee(ecx: &e::EncodeContext,
576
577
}
577
578
578
579
impl < ' 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
+
580
583
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| {
582
585
Decodable :: decode ( this)
583
586
} ) . unwrap ( ) ;
584
- Ok ( ( autoderef , MethodCallee {
587
+ Ok ( ( adjustment , MethodCallee {
585
588
origin : this. read_struct_field ( "origin" , 1 , |this| {
586
589
let method_origin: MethodOrigin =
587
590
Decodable :: decode ( this) . unwrap ( ) ;
@@ -627,11 +630,11 @@ impl tr for MethodOrigin {
627
630
628
631
fn encode_vtable_res_with_key ( ecx : & e:: EncodeContext ,
629
632
ebml_w : & mut Encoder ,
630
- autoderef : u32 ,
633
+ adjustment : typeck :: ExprAdjustment ,
631
634
dr : & typeck:: vtable_res ) {
632
635
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)
635
638
} ) ;
636
639
ebml_w. emit_struct_field ( "vtable_res" , 1 u, |ebml_w| {
637
640
Ok ( encode_vtable_res ( ecx, ebml_w, dr) )
@@ -705,7 +708,7 @@ pub trait vtable_decoder_helpers {
705
708
fn read_vtable_res_with_key ( & mut self ,
706
709
tcx : & ty:: ctxt ,
707
710
cdata : & cstore:: crate_metadata )
708
- -> ( u32 , typeck:: vtable_res ) ;
711
+ -> ( typeck :: ExprAdjustment , typeck:: vtable_res ) ;
709
712
fn read_vtable_res ( & mut self ,
710
713
tcx : & ty:: ctxt , cdata : & cstore:: crate_metadata )
711
714
-> typeck:: vtable_res ;
@@ -731,12 +734,12 @@ impl<'a> vtable_decoder_helpers for reader::Decoder<'a> {
731
734
fn read_vtable_res_with_key ( & mut self ,
732
735
tcx : & ty:: ctxt ,
733
736
cdata : & cstore:: crate_metadata )
734
- -> ( u32 , typeck:: vtable_res ) {
737
+ -> ( typeck :: ExprAdjustment , typeck:: vtable_res ) {
735
738
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| {
737
740
Decodable :: decode ( this)
738
741
} ) . unwrap ( ) ;
739
- Ok ( ( autoderef , this. read_struct_field ( "vtable_res" , 1 , |this| {
742
+ Ok ( ( adjustment , this. read_struct_field ( "vtable_res" , 1 , |this| {
740
743
Ok ( this. read_vtable_res ( tcx, cdata) )
741
744
} ) . unwrap ( ) ) )
742
745
} ) . unwrap ( )
@@ -1050,7 +1053,7 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
1050
1053
ebml_w. tag ( c:: tag_table_method_map, |ebml_w| {
1051
1054
ebml_w. id ( id) ;
1052
1055
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)
1054
1057
} )
1055
1058
} )
1056
1059
}
@@ -1059,7 +1062,7 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
1059
1062
ebml_w. tag ( c:: tag_table_vtable_map, |ebml_w| {
1060
1063
ebml_w. id ( id) ;
1061
1064
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) ;
1063
1066
} )
1064
1067
} )
1065
1068
}
@@ -1068,12 +1071,13 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
1068
1071
match * adj {
1069
1072
ty:: AutoDerefRef ( adj) => {
1070
1073
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) ;
1072
1075
for & method in tcx. method_map . borrow ( ) . find ( & method_call) . iter ( ) {
1073
1076
ebml_w. tag ( c:: tag_table_method_map, |ebml_w| {
1074
1077
ebml_w. id ( id) ;
1075
1078
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)
1077
1081
} )
1078
1082
} )
1079
1083
}
@@ -1083,12 +1087,32 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
1083
1087
ebml_w. id ( id) ;
1084
1088
ebml_w. tag ( c:: tag_table_val, |ebml_w| {
1085
1089
encode_vtable_res_with_key ( ecx, ebml_w,
1086
- method_call. autoderef , dr) ;
1090
+ method_call. adjustment , dr) ;
1087
1091
} )
1088
1092
} )
1089
1093
}
1090
1094
}
1091
1095
}
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
+ }
1092
1116
_ => { }
1093
1117
}
1094
1118
@@ -1393,20 +1417,20 @@ fn decode_side_tables(xcx: &ExtendedDecodeContext,
1393
1417
dcx. tcx . ty_param_defs . borrow_mut ( ) . insert ( id, bounds) ;
1394
1418
}
1395
1419
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) ;
1397
1421
let method_call = MethodCall {
1398
1422
expr_id : id,
1399
- autoderef : autoderef
1423
+ adjustment : adjustment
1400
1424
} ;
1401
1425
dcx. tcx . method_map . borrow_mut ( ) . insert ( method_call, method) ;
1402
1426
}
1403
1427
c:: tag_table_vtable_map => {
1404
- let ( autoderef , vtable_res) =
1428
+ let ( adjustment , vtable_res) =
1405
1429
val_dsr. read_vtable_res_with_key ( xcx. dcx . tcx ,
1406
1430
xcx. dcx . cdata ) ;
1407
1431
let vtable_key = MethodCall {
1408
1432
expr_id : id,
1409
- autoderef : autoderef
1433
+ adjustment : adjustment
1410
1434
} ;
1411
1435
dcx. tcx . vtable_map . borrow_mut ( ) . insert ( vtable_key, vtable_res) ;
1412
1436
}
0 commit comments