@@ -268,10 +268,24 @@ fn item_trait_ref<'tcx>(doc: rbml::Doc, tcx: &ty::ctxt<'tcx>, cdata: Cmd)
268
268
doc_trait_ref ( tp, tcx, cdata)
269
269
}
270
270
271
- fn enum_variant_ids ( item : rbml:: Doc , cdata : Cmd ) -> Vec < ast:: DefId > {
272
- reader:: tagged_docs ( item, tag_items_data_item_variant)
273
- . map ( |p| translated_def_id ( cdata, p) )
274
- . collect ( )
271
+ struct EnumVariantIds < ' a > {
272
+ iter : reader:: TaggedDocsIterator < ' a > ,
273
+ cdata : Cmd < ' a > ,
274
+ }
275
+
276
+ impl < ' a > Iterator for EnumVariantIds < ' a > {
277
+ type Item = ast:: DefId ;
278
+
279
+ fn next ( & mut self ) -> Option < ast:: DefId > {
280
+ self . iter . next ( ) . map ( |p| translated_def_id ( self . cdata , p) )
281
+ }
282
+ }
283
+
284
+ fn enum_variant_ids < ' a > ( item : rbml:: Doc < ' a > , cdata : Cmd < ' a > ) -> EnumVariantIds < ' a > {
285
+ EnumVariantIds {
286
+ iter : reader:: tagged_docs ( item, tag_items_data_item_variant) ,
287
+ cdata : cdata,
288
+ }
275
289
}
276
290
277
291
fn item_path ( item_doc : rbml:: Doc ) -> Vec < ast_map:: PathElem > {
@@ -719,11 +733,11 @@ pub fn get_enum_variant_defs(intr: &IdentInterner,
719
733
let data = cdata. data ( ) ;
720
734
let items = reader:: get_doc ( rbml:: Doc :: new ( data) , tag_items) ;
721
735
let item = find_item ( id, items) ;
722
- enum_variant_ids ( item, cdata) . iter ( ) . map ( |did| {
736
+ enum_variant_ids ( item, cdata) . map ( |did| {
723
737
let item = find_item ( did. node , items) ;
724
738
let name = item_name ( intr, item) ;
725
739
let visibility = item_visibility ( item) ;
726
- match item_to_def_like ( cdata, item, * did) {
740
+ match item_to_def_like ( cdata, item, did) {
727
741
DlDef ( def @ def:: DefVariant ( ..) ) => ( def, name, visibility) ,
728
742
_ => unreachable ! ( )
729
743
}
@@ -736,7 +750,7 @@ pub fn get_enum_variants<'tcx>(intr: Rc<IdentInterner>, cdata: Cmd, id: ast::Nod
736
750
let items = reader:: get_doc ( rbml:: Doc :: new ( data) , tag_items) ;
737
751
let item = find_item ( id, items) ;
738
752
let mut disr_val = 0 ;
739
- enum_variant_ids ( item, cdata) . iter ( ) . map ( |did| {
753
+ enum_variant_ids ( item, cdata) . map ( |did| {
740
754
let item = find_item ( did. node , items) ;
741
755
let ctor_ty = item_type ( ast:: DefId { krate : cdata. cnum , node : id} ,
742
756
item, tcx, cdata) ;
@@ -771,7 +785,7 @@ pub fn get_enum_variants<'tcx>(intr: Rc<IdentInterner>, cdata: Cmd, id: ast::Nod
771
785
name : name,
772
786
// I'm not even sure if we encode visibility
773
787
// for variants -- TEST -- tjc
774
- id : * did,
788
+ id : did,
775
789
disr_val : old_disr_val,
776
790
vis : ast:: Inherited
777
791
} )
0 commit comments