@@ -268,10 +268,28 @@ 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
+ fn size_hint ( & self ) -> ( usize , Option < usize > ) {
284
+ self . iter . size_hint ( )
285
+ }
286
+ }
287
+
288
+ fn enum_variant_ids < ' a > ( item : rbml:: Doc < ' a > , cdata : Cmd < ' a > ) -> EnumVariantIds < ' a > {
289
+ EnumVariantIds {
290
+ iter : reader:: tagged_docs ( item, tag_items_data_item_variant) ,
291
+ cdata : cdata,
292
+ }
275
293
}
276
294
277
295
fn item_path ( item_doc : rbml:: Doc ) -> Vec < ast_map:: PathElem > {
@@ -719,11 +737,11 @@ pub fn get_enum_variant_defs(intr: &IdentInterner,
719
737
let data = cdata. data ( ) ;
720
738
let items = reader:: get_doc ( rbml:: Doc :: new ( data) , tag_items) ;
721
739
let item = find_item ( id, items) ;
722
- enum_variant_ids ( item, cdata) . iter ( ) . map ( |did| {
740
+ enum_variant_ids ( item, cdata) . map ( |did| {
723
741
let item = find_item ( did. node , items) ;
724
742
let name = item_name ( intr, item) ;
725
743
let visibility = item_visibility ( item) ;
726
- match item_to_def_like ( cdata, item, * did) {
744
+ match item_to_def_like ( cdata, item, did) {
727
745
DlDef ( def @ def:: DefVariant ( ..) ) => ( def, name, visibility) ,
728
746
_ => unreachable ! ( )
729
747
}
@@ -736,7 +754,7 @@ pub fn get_enum_variants<'tcx>(intr: Rc<IdentInterner>, cdata: Cmd, id: ast::Nod
736
754
let items = reader:: get_doc ( rbml:: Doc :: new ( data) , tag_items) ;
737
755
let item = find_item ( id, items) ;
738
756
let mut disr_val = 0 ;
739
- enum_variant_ids ( item, cdata) . iter ( ) . map ( |did| {
757
+ enum_variant_ids ( item, cdata) . map ( |did| {
740
758
let item = find_item ( did. node , items) ;
741
759
let ctor_ty = item_type ( ast:: DefId { krate : cdata. cnum , node : id} ,
742
760
item, tcx, cdata) ;
@@ -771,7 +789,7 @@ pub fn get_enum_variants<'tcx>(intr: Rc<IdentInterner>, cdata: Cmd, id: ast::Nod
771
789
name : name,
772
790
// I'm not even sure if we encode visibility
773
791
// for variants -- TEST -- tjc
774
- id : * did,
792
+ id : did,
775
793
disr_val : old_disr_val,
776
794
vis : ast:: Inherited
777
795
} )
0 commit comments