@@ -268,10 +268,28 @@ fn item_trait_ref<'tcx>(doc: rbml::Doc, tcx: &ty::ctxt<'tcx>, cdata: Cmd)
268268 doc_trait_ref ( tp, tcx, cdata)
269269}
270270
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+ }
275293}
276294
277295fn item_path ( item_doc : rbml:: Doc ) -> Vec < ast_map:: PathElem > {
@@ -719,11 +737,11 @@ pub fn get_enum_variant_defs(intr: &IdentInterner,
719737 let data = cdata. data ( ) ;
720738 let items = reader:: get_doc ( rbml:: Doc :: new ( data) , tag_items) ;
721739 let item = find_item ( id, items) ;
722- enum_variant_ids ( item, cdata) . iter ( ) . map ( |did| {
740+ enum_variant_ids ( item, cdata) . map ( |did| {
723741 let item = find_item ( did. node , items) ;
724742 let name = item_name ( intr, item) ;
725743 let visibility = item_visibility ( item) ;
726- match item_to_def_like ( cdata, item, * did) {
744+ match item_to_def_like ( cdata, item, did) {
727745 DlDef ( def @ def:: DefVariant ( ..) ) => ( def, name, visibility) ,
728746 _ => unreachable ! ( )
729747 }
@@ -736,7 +754,7 @@ pub fn get_enum_variants<'tcx>(intr: Rc<IdentInterner>, cdata: Cmd, id: ast::Nod
736754 let items = reader:: get_doc ( rbml:: Doc :: new ( data) , tag_items) ;
737755 let item = find_item ( id, items) ;
738756 let mut disr_val = 0 ;
739- enum_variant_ids ( item, cdata) . iter ( ) . map ( |did| {
757+ enum_variant_ids ( item, cdata) . map ( |did| {
740758 let item = find_item ( did. node , items) ;
741759 let ctor_ty = item_type ( ast:: DefId { krate : cdata. cnum , node : id} ,
742760 item, tcx, cdata) ;
@@ -771,7 +789,7 @@ pub fn get_enum_variants<'tcx>(intr: Rc<IdentInterner>, cdata: Cmd, id: ast::Nod
771789 name : name,
772790 // I'm not even sure if we encode visibility
773791 // for variants -- TEST -- tjc
774- id : * did,
792+ id : did,
775793 disr_val : old_disr_val,
776794 vis : ast:: Inherited
777795 } )
0 commit comments