@@ -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' ,
@@ -880,7 +888,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
880888 let inlineable = !ecx. non_inlineable_statics . borrow ( ) . contains ( & item. id ) ;
881889
882890 if inlineable {
883- ( ecx . encode_inlined_item ) ( ecx, ebml_w, IIItemRef ( item) ) ;
891+ encode_inlined_item ( ecx, ebml_w, IIItemRef ( item) ) ;
884892 }
885893 encode_visibility ( ebml_w, vis) ;
886894 ebml_w. end_tag ( ) ;
@@ -896,7 +904,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
896904 encode_path ( ebml_w, path) ;
897905 encode_attributes ( ebml_w, item. attrs . as_slice ( ) ) ;
898906 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) ) ;
900908 } else {
901909 encode_symbol ( ecx, ebml_w, item. id ) ;
902910 }
@@ -954,7 +962,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
954962 for v in ( * enum_definition) . variants . iter ( ) {
955963 encode_variant_id ( ebml_w, local_def ( v. node . id ) ) ;
956964 }
957- ( ecx . encode_inlined_item ) ( ecx, ebml_w, IIItemRef ( item) ) ;
965+ encode_inlined_item ( ecx, ebml_w, IIItemRef ( item) ) ;
958966 encode_path ( ebml_w, path) ;
959967
960968 // Encode inherent implementations for this enumeration.
@@ -1002,7 +1010,7 @@ fn encode_info_for_item(ecx: &EncodeContext,
10021010 needs to know*/
10031011 encode_struct_fields ( ebml_w, fields. as_slice ( ) , def_id) ;
10041012
1005- ( ecx . encode_inlined_item ) ( ecx, ebml_w, IIItemRef ( item) ) ;
1013+ encode_inlined_item ( ecx, ebml_w, IIItemRef ( item) ) ;
10061014
10071015 // Encode inherent implementations for this structure.
10081016 encode_inherent_implementations ( ecx, ebml_w, def_id) ;
@@ -1175,8 +1183,8 @@ fn encode_info_for_item(ecx: &EncodeContext,
11751183 encode_bounds_and_type ( ebml_w, ecx, & tpt) ;
11761184 }
11771185 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) ) ;
11801188 }
11811189 }
11821190
@@ -1212,7 +1220,7 @@ fn encode_info_for_foreign_item(ecx: &EncodeContext,
12121220 & lookup_item_type ( ecx. tcx , local_def ( nitem. id ) ) ) ;
12131221 encode_name ( ebml_w, nitem. ident . name ) ;
12141222 if abi == abi:: RustIntrinsic {
1215- ( ecx . encode_inlined_item ) ( ecx, ebml_w, IIForeignRef ( nitem) ) ;
1223+ encode_inlined_item ( ecx, ebml_w, IIForeignRef ( nitem) ) ;
12161224 } else {
12171225 encode_symbol ( ecx, ebml_w, nitem. id ) ;
12181226 }
@@ -1544,12 +1552,12 @@ fn encode_macro_registrar_fn(ecx: &EncodeContext, ebml_w: &mut Encoder) {
15441552 }
15451553}
15461554
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 >
15501558}
15511559
1552- impl < ' a , ' b > Visitor < ( ) > for MacroDefVisitor < ' a , ' b > {
1560+ impl < ' a , ' b , ' c > Visitor < ( ) > for MacroDefVisitor < ' a , ' b , ' c > {
15531561 fn visit_item ( & mut self , item : & Item , _: ( ) ) {
15541562 match item. node {
15551563 ItemMac ( ..) => {
@@ -1565,9 +1573,9 @@ impl<'a, 'b> Visitor<()> for MacroDefVisitor<'a, 'b> {
15651573 }
15661574}
15671575
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 ) {
15711579 ebml_w. start_tag ( tag_exported_macros) ;
15721580 {
15731581 let mut visitor = MacroDefVisitor {
@@ -1579,12 +1587,12 @@ fn encode_macro_defs(ecx: &EncodeContext,
15791587 ebml_w. end_tag ( ) ;
15801588}
15811589
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 > ,
15851593}
15861594
1587- impl < ' a , ' b > Visitor < ( ) > for ImplVisitor < ' a , ' b > {
1595+ impl < ' a , ' b , ' c > Visitor < ( ) > for ImplVisitor < ' a , ' b , ' c > {
15881596 fn visit_item ( & mut self , item : & Item , _: ( ) ) {
15891597 match item. node {
15901598 ItemImpl ( _, Some ( ref trait_ref) , _, _) => {
@@ -1617,9 +1625,9 @@ impl<'a,'b> Visitor<()> for ImplVisitor<'a,'b> {
16171625/// * Destructors (implementations of the Drop trait).
16181626///
16191627/// * 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 ) {
16231631 ebml_w. start_tag ( tag_impls) ;
16241632
16251633 {
@@ -1744,7 +1752,7 @@ fn encode_metadata_inner(wr: &mut MemWriter, parms: EncodeParams, krate: &Crate)
17441752 non_inlineable_statics : non_inlineable_statics,
17451753 link_meta : link_meta,
17461754 cstore : cstore,
1747- encode_inlined_item : encode_inlined_item,
1755+ encode_inlined_item : RefCell :: new ( encode_inlined_item) ,
17481756 type_abbrevs : RefCell :: new ( HashMap :: new ( ) ) ,
17491757 } ;
17501758
0 commit comments