@@ -84,7 +84,7 @@ pub struct EncodeContext<'a> {
84
84
pub non_inlineable_statics : & ' a RefCell < NodeSet > ,
85
85
pub link_meta : & ' a LinkMeta ,
86
86
pub cstore : & ' a cstore:: CStore ,
87
- pub encode_inlined_item : EncodeInlinedItem < ' a > ,
87
+ pub encode_inlined_item : RefCell < EncodeInlinedItem < ' a > > ,
88
88
pub type_abbrevs : tyencode:: abbrev_map ,
89
89
}
90
90
@@ -765,8 +765,8 @@ fn encode_info_for_method(ecx: &EncodeContext,
765
765
if num_params > 0 u ||
766
766
is_default_impl ||
767
767
should_inline ( ast_method. attrs . as_slice ( ) ) {
768
- ( ecx . encode_inlined_item ) (
769
- ecx , ebml_w , IIMethodRef ( local_def ( parent_id) , false , ast_method) ) ;
768
+ encode_inlined_item ( ecx , ebml_w ,
769
+ IIMethodRef ( local_def ( parent_id) , false , ast_method) ) ;
770
770
} else {
771
771
encode_symbol ( ecx, ebml_w, m. def_id . node ) ;
772
772
}
@@ -775,6 +775,14 @@ fn encode_info_for_method(ecx: &EncodeContext,
775
775
ebml_w. end_tag ( ) ;
776
776
}
777
777
778
+ fn encode_inlined_item ( ecx : & EncodeContext ,
779
+ ebml_w : & mut Encoder ,
780
+ ii : InlinedItemRef ) {
781
+ let mut eii = ecx. encode_inlined_item . borrow_mut ( ) ;
782
+ let eii: & mut EncodeInlinedItem = & mut * eii;
783
+ ( * eii) ( ecx, ebml_w, ii)
784
+ }
785
+
778
786
fn style_fn_family ( s : FnStyle ) -> char {
779
787
match s {
780
788
UnsafeFn => 'u' ,
@@ -880,7 +888,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
880
888
let inlineable = !ecx. non_inlineable_statics . borrow ( ) . contains ( & item. id ) ;
881
889
882
890
if inlineable {
883
- ( ecx . encode_inlined_item ) ( ecx, ebml_w, IIItemRef ( item) ) ;
891
+ encode_inlined_item ( ecx, ebml_w, IIItemRef ( item) ) ;
884
892
}
885
893
encode_visibility ( ebml_w, vis) ;
886
894
ebml_w. end_tag ( ) ;
@@ -896,7 +904,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
896
904
encode_path ( ebml_w, path) ;
897
905
encode_attributes ( ebml_w, item. attrs . as_slice ( ) ) ;
898
906
if tps_len > 0 u || should_inline ( item. attrs . as_slice ( ) ) {
899
- ( ecx . encode_inlined_item ) ( ecx, ebml_w, IIItemRef ( item) ) ;
907
+ encode_inlined_item ( ecx, ebml_w, IIItemRef ( item) ) ;
900
908
} else {
901
909
encode_symbol ( ecx, ebml_w, item. id ) ;
902
910
}
@@ -954,7 +962,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
954
962
for v in ( * enum_definition) . variants . iter ( ) {
955
963
encode_variant_id ( ebml_w, local_def ( v. node . id ) ) ;
956
964
}
957
- ( ecx . encode_inlined_item ) ( ecx, ebml_w, IIItemRef ( item) ) ;
965
+ encode_inlined_item ( ecx, ebml_w, IIItemRef ( item) ) ;
958
966
encode_path ( ebml_w, path) ;
959
967
960
968
// Encode inherent implementations for this enumeration.
@@ -1002,7 +1010,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
1002
1010
needs to know*/
1003
1011
encode_struct_fields ( ebml_w, fields. as_slice ( ) , def_id) ;
1004
1012
1005
- ( ecx . encode_inlined_item ) ( ecx, ebml_w, IIItemRef ( item) ) ;
1013
+ encode_inlined_item ( ecx, ebml_w, IIItemRef ( item) ) ;
1006
1014
1007
1015
// Encode inherent implementations for this structure.
1008
1016
encode_inherent_implementations ( ecx, ebml_w, def_id) ;
@@ -1175,8 +1183,8 @@ fn encode_info_for_item(ecx: &EncodeContext,
1175
1183
encode_bounds_and_type ( ebml_w, ecx, & tpt) ;
1176
1184
}
1177
1185
encode_method_sort ( ebml_w, 'p' ) ;
1178
- ( ecx . encode_inlined_item ) (
1179
- ecx , ebml_w , IIMethodRef ( def_id, true , m) ) ;
1186
+ encode_inlined_item ( ecx , ebml_w ,
1187
+ IIMethodRef ( def_id, true , m) ) ;
1180
1188
}
1181
1189
}
1182
1190
@@ -1212,7 +1220,7 @@ fn encode_info_for_foreign_item(ecx: &EncodeContext,
1212
1220
& lookup_item_type ( ecx. tcx , local_def ( nitem. id ) ) ) ;
1213
1221
encode_name ( ebml_w, nitem. ident . name ) ;
1214
1222
if abi == abi:: RustIntrinsic {
1215
- ( ecx . encode_inlined_item ) ( ecx, ebml_w, IIForeignRef ( nitem) ) ;
1223
+ encode_inlined_item ( ecx, ebml_w, IIForeignRef ( nitem) ) ;
1216
1224
} else {
1217
1225
encode_symbol ( ecx, ebml_w, nitem. id ) ;
1218
1226
}
@@ -1544,12 +1552,12 @@ fn encode_macro_registrar_fn(ecx: &EncodeContext, ebml_w: &mut Encoder) {
1544
1552
}
1545
1553
}
1546
1554
1547
- struct MacroDefVisitor < ' a , ' b > {
1548
- ecx : & ' a EncodeContext < ' a > ,
1549
- ebml_w : & ' a mut Encoder < ' b >
1555
+ struct MacroDefVisitor < ' a , ' b , ' c > {
1556
+ ecx : & ' a EncodeContext < ' b > ,
1557
+ ebml_w : & ' a mut Encoder < ' c >
1550
1558
}
1551
1559
1552
- impl < ' a , ' b > Visitor < ( ) > for MacroDefVisitor < ' a , ' b > {
1560
+ impl < ' a , ' b , ' c > Visitor < ( ) > for MacroDefVisitor < ' a , ' b , ' c > {
1553
1561
fn visit_item ( & mut self , item : & Item , _: ( ) ) {
1554
1562
match item. node {
1555
1563
ItemMac ( ..) => {
@@ -1565,9 +1573,9 @@ impl<'a, 'b> Visitor<()> for MacroDefVisitor<'a, 'b> {
1565
1573
}
1566
1574
}
1567
1575
1568
- fn encode_macro_defs ( ecx : & EncodeContext ,
1569
- krate : & Crate ,
1570
- ebml_w : & mut Encoder ) {
1576
+ fn encode_macro_defs < ' a > ( ecx : & ' a EncodeContext ,
1577
+ krate : & Crate ,
1578
+ ebml_w : & ' a mut Encoder ) {
1571
1579
ebml_w. start_tag ( tag_exported_macros) ;
1572
1580
{
1573
1581
let mut visitor = MacroDefVisitor {
@@ -1579,12 +1587,12 @@ fn encode_macro_defs(ecx: &EncodeContext,
1579
1587
ebml_w. end_tag ( ) ;
1580
1588
}
1581
1589
1582
- struct ImplVisitor < ' a , ' b > {
1583
- ecx : & ' a EncodeContext < ' a > ,
1584
- ebml_w : & ' a mut Encoder < ' b > ,
1590
+ struct ImplVisitor < ' a , ' b , ' c > {
1591
+ ecx : & ' a EncodeContext < ' b > ,
1592
+ ebml_w : & ' a mut Encoder < ' c > ,
1585
1593
}
1586
1594
1587
- impl < ' a , ' b > Visitor < ( ) > for ImplVisitor < ' a , ' b > {
1595
+ impl < ' a , ' b , ' c > Visitor < ( ) > for ImplVisitor < ' a , ' b , ' c > {
1588
1596
fn visit_item ( & mut self , item : & Item , _: ( ) ) {
1589
1597
match item. node {
1590
1598
ItemImpl ( _, Some ( ref trait_ref) , _, _) => {
@@ -1617,9 +1625,9 @@ impl<'a,'b> Visitor<()> for ImplVisitor<'a,'b> {
1617
1625
/// * Destructors (implementations of the Drop trait).
1618
1626
///
1619
1627
/// * Implementations of traits not defined in this crate.
1620
- fn encode_impls ( ecx : & EncodeContext ,
1621
- krate : & Crate ,
1622
- ebml_w : & mut Encoder ) {
1628
+ fn encode_impls < ' a > ( ecx : & ' a EncodeContext ,
1629
+ krate : & Crate ,
1630
+ ebml_w : & ' a mut Encoder ) {
1623
1631
ebml_w. start_tag ( tag_impls) ;
1624
1632
1625
1633
{
@@ -1744,7 +1752,7 @@ fn encode_metadata_inner(wr: &mut MemWriter, parms: EncodeParams, krate: &Crate)
1744
1752
non_inlineable_statics : non_inlineable_statics,
1745
1753
link_meta : link_meta,
1746
1754
cstore : cstore,
1747
- encode_inlined_item : encode_inlined_item,
1755
+ encode_inlined_item : RefCell :: new ( encode_inlined_item) ,
1748
1756
type_abbrevs : RefCell :: new ( HashMap :: new ( ) ) ,
1749
1757
} ;
1750
1758
0 commit comments