@@ -84,7 +84,7 @@ pub struct EncodeContext<'a> {
8484 pub non_inlineable_statics : & ' a RefCell < NodeSet > ,
8585 pub link_meta : & ' a LinkMeta ,
8686 pub cstore : & ' a cstore:: CStore ,
87- pub encode_inlined_item : EncodeInlinedItem < ' a > ,
87+ pub encode_inlined_item : RefCell < EncodeInlinedItem < ' a > > ,
8888 pub type_abbrevs : tyencode:: abbrev_map ,
8989}
9090
@@ -765,8 +765,8 @@ fn encode_info_for_method(ecx: &EncodeContext,
765765 if num_params > 0 u ||
766766 is_default_impl ||
767767 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) ) ;
770770 } else {
771771 encode_symbol ( ecx, ebml_w, m. def_id . node ) ;
772772 }
@@ -775,6 +775,14 @@ fn encode_info_for_method(ecx: &EncodeContext,
775775 ebml_w. end_tag ( ) ;
776776}
777777
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+
778786fn style_fn_family ( s : FnStyle ) -> char {
779787 match s {
780788 UnsafeFn => 'u' ,
@@ -870,7 +878,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
870878 let inlineable = !ecx. non_inlineable_statics . borrow ( ) . contains ( & item. id ) ;
871879
872880 if inlineable {
873- ( ecx . encode_inlined_item ) ( ecx, ebml_w, IIItemRef ( item) ) ;
881+ encode_inlined_item ( ecx, ebml_w, IIItemRef ( item) ) ;
874882 }
875883 encode_visibility ( ebml_w, vis) ;
876884 ebml_w. end_tag ( ) ;
@@ -886,7 +894,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
886894 encode_path ( ebml_w, path) ;
887895 encode_attributes ( ebml_w, item. attrs . as_slice ( ) ) ;
888896 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) ) ;
890898 } else {
891899 encode_symbol ( ecx, ebml_w, item. id ) ;
892900 }
@@ -944,7 +952,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
944952 for v in ( * enum_definition) . variants . iter ( ) {
945953 encode_variant_id ( ebml_w, local_def ( v. node . id ) ) ;
946954 }
947- ( ecx . encode_inlined_item ) ( ecx, ebml_w, IIItemRef ( item) ) ;
955+ encode_inlined_item ( ecx, ebml_w, IIItemRef ( item) ) ;
948956 encode_path ( ebml_w, path) ;
949957
950958 // Encode inherent implementations for this enumeration.
@@ -992,7 +1000,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
9921000 needs to know*/
9931001 encode_struct_fields ( ebml_w, fields. as_slice ( ) , def_id) ;
9941002
995- ( ecx . encode_inlined_item ) ( ecx, ebml_w, IIItemRef ( item) ) ;
1003+ encode_inlined_item ( ecx, ebml_w, IIItemRef ( item) ) ;
9961004
9971005 // Encode inherent implementations for this structure.
9981006 encode_inherent_implementations ( ecx, ebml_w, def_id) ;
@@ -1162,8 +1170,8 @@ fn encode_info_for_item(ecx: &EncodeContext,
11621170 encode_bounds_and_type ( ebml_w, ecx, & tpt) ;
11631171 }
11641172 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) ) ;
11671175 }
11681176 }
11691177
@@ -1199,7 +1207,7 @@ fn encode_info_for_foreign_item(ecx: &EncodeContext,
11991207 & lookup_item_type ( ecx. tcx , local_def ( nitem. id ) ) ) ;
12001208 encode_name ( ebml_w, nitem. ident . name ) ;
12011209 if abi == abi:: RustIntrinsic {
1202- ( ecx . encode_inlined_item ) ( ecx, ebml_w, IIForeignRef ( nitem) ) ;
1210+ encode_inlined_item ( ecx, ebml_w, IIForeignRef ( nitem) ) ;
12031211 } else {
12041212 encode_symbol ( ecx, ebml_w, nitem. id ) ;
12051213 }
@@ -1531,12 +1539,12 @@ fn encode_macro_registrar_fn(ecx: &EncodeContext, ebml_w: &mut Encoder) {
15311539 }
15321540}
15331541
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 >
15371545}
15381546
1539- impl < ' a , ' b > Visitor < ( ) > for MacroDefVisitor < ' a , ' b > {
1547+ impl < ' a , ' b , ' c > Visitor < ( ) > for MacroDefVisitor < ' a , ' b , ' c > {
15401548 fn visit_item ( & mut self , item : & Item , _: ( ) ) {
15411549 match item. node {
15421550 ItemMac ( ..) => {
@@ -1552,9 +1560,9 @@ impl<'a, 'b> Visitor<()> for MacroDefVisitor<'a, 'b> {
15521560 }
15531561}
15541562
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 ) {
15581566 ebml_w. start_tag ( tag_exported_macros) ;
15591567 {
15601568 let mut visitor = MacroDefVisitor {
@@ -1566,12 +1574,12 @@ fn encode_macro_defs(ecx: &EncodeContext,
15661574 ebml_w. end_tag ( ) ;
15671575}
15681576
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 > ,
15721580}
15731581
1574- impl < ' a , ' b > Visitor < ( ) > for ImplVisitor < ' a , ' b > {
1582+ impl < ' a , ' b , ' c > Visitor < ( ) > for ImplVisitor < ' a , ' b , ' c > {
15751583 fn visit_item ( & mut self , item : & Item , _: ( ) ) {
15761584 match item. node {
15771585 ItemImpl ( _, Some ( ref trait_ref) , _, _) => {
@@ -1604,9 +1612,9 @@ impl<'a,'b> Visitor<()> for ImplVisitor<'a,'b> {
16041612/// * Destructors (implementations of the Drop trait).
16051613///
16061614/// * 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 ) {
16101618 ebml_w. start_tag ( tag_impls) ;
16111619
16121620 {
@@ -1731,7 +1739,7 @@ fn encode_metadata_inner(wr: &mut MemWriter, parms: EncodeParams, krate: &Crate)
17311739 non_inlineable_statics : non_inlineable_statics,
17321740 link_meta : link_meta,
17331741 cstore : cstore,
1734- encode_inlined_item : encode_inlined_item,
1742+ encode_inlined_item : RefCell :: new ( encode_inlined_item) ,
17351743 type_abbrevs : RefCell :: new ( HashMap :: new ( ) ) ,
17361744 } ;
17371745
0 commit comments