@@ -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' ,
@@ -870,7 +878,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
870
878
let inlineable = !ecx. non_inlineable_statics . borrow ( ) . contains ( & item. id ) ;
871
879
872
880
if inlineable {
873
- ( ecx . encode_inlined_item ) ( ecx, ebml_w, IIItemRef ( item) ) ;
881
+ encode_inlined_item ( ecx, ebml_w, IIItemRef ( item) ) ;
874
882
}
875
883
encode_visibility ( ebml_w, vis) ;
876
884
ebml_w. end_tag ( ) ;
@@ -886,7 +894,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
886
894
encode_path ( ebml_w, path) ;
887
895
encode_attributes ( ebml_w, item. attrs . as_slice ( ) ) ;
888
896
if tps_len > 0 u || should_inline ( item. attrs . as_slice ( ) ) {
889
- ( ecx . encode_inlined_item ) ( ecx, ebml_w, IIItemRef ( item) ) ;
897
+ encode_inlined_item ( ecx, ebml_w, IIItemRef ( item) ) ;
890
898
} else {
891
899
encode_symbol ( ecx, ebml_w, item. id ) ;
892
900
}
@@ -944,7 +952,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
944
952
for v in ( * enum_definition) . variants . iter ( ) {
945
953
encode_variant_id ( ebml_w, local_def ( v. node . id ) ) ;
946
954
}
947
- ( ecx . encode_inlined_item ) ( ecx, ebml_w, IIItemRef ( item) ) ;
955
+ encode_inlined_item ( ecx, ebml_w, IIItemRef ( item) ) ;
948
956
encode_path ( ebml_w, path) ;
949
957
950
958
// Encode inherent implementations for this enumeration.
@@ -992,7 +1000,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
992
1000
needs to know*/
993
1001
encode_struct_fields ( ebml_w, fields. as_slice ( ) , def_id) ;
994
1002
995
- ( ecx . encode_inlined_item ) ( ecx, ebml_w, IIItemRef ( item) ) ;
1003
+ encode_inlined_item ( ecx, ebml_w, IIItemRef ( item) ) ;
996
1004
997
1005
// Encode inherent implementations for this structure.
998
1006
encode_inherent_implementations ( ecx, ebml_w, def_id) ;
@@ -1162,8 +1170,8 @@ fn encode_info_for_item(ecx: &EncodeContext,
1162
1170
encode_bounds_and_type ( ebml_w, ecx, & tpt) ;
1163
1171
}
1164
1172
encode_method_sort ( ebml_w, 'p' ) ;
1165
- ( ecx . encode_inlined_item ) (
1166
- ecx , ebml_w , IIMethodRef ( def_id, true , m) ) ;
1173
+ encode_inlined_item ( ecx , ebml_w ,
1174
+ IIMethodRef ( def_id, true , m) ) ;
1167
1175
}
1168
1176
}
1169
1177
@@ -1199,7 +1207,7 @@ fn encode_info_for_foreign_item(ecx: &EncodeContext,
1199
1207
& lookup_item_type ( ecx. tcx , local_def ( nitem. id ) ) ) ;
1200
1208
encode_name ( ebml_w, nitem. ident . name ) ;
1201
1209
if abi == abi:: RustIntrinsic {
1202
- ( ecx . encode_inlined_item ) ( ecx, ebml_w, IIForeignRef ( nitem) ) ;
1210
+ encode_inlined_item ( ecx, ebml_w, IIForeignRef ( nitem) ) ;
1203
1211
} else {
1204
1212
encode_symbol ( ecx, ebml_w, nitem. id ) ;
1205
1213
}
@@ -1531,12 +1539,12 @@ fn encode_macro_registrar_fn(ecx: &EncodeContext, ebml_w: &mut Encoder) {
1531
1539
}
1532
1540
}
1533
1541
1534
- struct MacroDefVisitor < ' a , ' b > {
1535
- ecx : & ' a EncodeContext < ' a > ,
1536
- ebml_w : & ' a mut Encoder < ' b >
1542
+ struct MacroDefVisitor < ' a , ' b , ' c > {
1543
+ ecx : & ' a EncodeContext < ' b > ,
1544
+ ebml_w : & ' a mut Encoder < ' c >
1537
1545
}
1538
1546
1539
- impl < ' a , ' b > Visitor < ( ) > for MacroDefVisitor < ' a , ' b > {
1547
+ impl < ' a , ' b , ' c > Visitor < ( ) > for MacroDefVisitor < ' a , ' b , ' c > {
1540
1548
fn visit_item ( & mut self , item : & Item , _: ( ) ) {
1541
1549
match item. node {
1542
1550
ItemMac ( ..) => {
@@ -1552,9 +1560,9 @@ impl<'a, 'b> Visitor<()> for MacroDefVisitor<'a, 'b> {
1552
1560
}
1553
1561
}
1554
1562
1555
- fn encode_macro_defs ( ecx : & EncodeContext ,
1556
- krate : & Crate ,
1557
- ebml_w : & mut Encoder ) {
1563
+ fn encode_macro_defs < ' a > ( ecx : & ' a EncodeContext ,
1564
+ krate : & Crate ,
1565
+ ebml_w : & ' a mut Encoder ) {
1558
1566
ebml_w. start_tag ( tag_exported_macros) ;
1559
1567
{
1560
1568
let mut visitor = MacroDefVisitor {
@@ -1566,12 +1574,12 @@ fn encode_macro_defs(ecx: &EncodeContext,
1566
1574
ebml_w. end_tag ( ) ;
1567
1575
}
1568
1576
1569
- struct ImplVisitor < ' a , ' b > {
1570
- ecx : & ' a EncodeContext < ' a > ,
1571
- ebml_w : & ' a mut Encoder < ' b > ,
1577
+ struct ImplVisitor < ' a , ' b , ' c > {
1578
+ ecx : & ' a EncodeContext < ' b > ,
1579
+ ebml_w : & ' a mut Encoder < ' c > ,
1572
1580
}
1573
1581
1574
- impl < ' a , ' b > Visitor < ( ) > for ImplVisitor < ' a , ' b > {
1582
+ impl < ' a , ' b , ' c > Visitor < ( ) > for ImplVisitor < ' a , ' b , ' c > {
1575
1583
fn visit_item ( & mut self , item : & Item , _: ( ) ) {
1576
1584
match item. node {
1577
1585
ItemImpl ( _, Some ( ref trait_ref) , _, _) => {
@@ -1604,9 +1612,9 @@ impl<'a,'b> Visitor<()> for ImplVisitor<'a,'b> {
1604
1612
/// * Destructors (implementations of the Drop trait).
1605
1613
///
1606
1614
/// * Implementations of traits not defined in this crate.
1607
- fn encode_impls ( ecx : & EncodeContext ,
1608
- krate : & Crate ,
1609
- ebml_w : & mut Encoder ) {
1615
+ fn encode_impls < ' a > ( ecx : & ' a EncodeContext ,
1616
+ krate : & Crate ,
1617
+ ebml_w : & ' a mut Encoder ) {
1610
1618
ebml_w. start_tag ( tag_impls) ;
1611
1619
1612
1620
{
@@ -1731,7 +1739,7 @@ fn encode_metadata_inner(wr: &mut MemWriter, parms: EncodeParams, krate: &Crate)
1731
1739
non_inlineable_statics : non_inlineable_statics,
1732
1740
link_meta : link_meta,
1733
1741
cstore : cstore,
1734
- encode_inlined_item : encode_inlined_item,
1742
+ encode_inlined_item : RefCell :: new ( encode_inlined_item) ,
1735
1743
type_abbrevs : RefCell :: new ( HashMap :: new ( ) ) ,
1736
1744
} ;
1737
1745
0 commit comments