Skip to content

Commit 8966fa1

Browse files
committed
Return an iterator from enum_variant_ids.
1 parent 243e85f commit 8966fa1

File tree

1 file changed

+22
-8
lines changed

1 file changed

+22
-8
lines changed

src/librustc/metadata/decoder.rs

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -268,10 +268,24 @@ 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+
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+
}
275289
}
276290

277291
fn item_path(item_doc: rbml::Doc) -> Vec<ast_map::PathElem> {
@@ -719,11 +733,11 @@ pub fn get_enum_variant_defs(intr: &IdentInterner,
719733
let data = cdata.data();
720734
let items = reader::get_doc(rbml::Doc::new(data), tag_items);
721735
let item = find_item(id, items);
722-
enum_variant_ids(item, cdata).iter().map(|did| {
736+
enum_variant_ids(item, cdata).map(|did| {
723737
let item = find_item(did.node, items);
724738
let name = item_name(intr, item);
725739
let visibility = item_visibility(item);
726-
match item_to_def_like(cdata, item, *did) {
740+
match item_to_def_like(cdata, item, did) {
727741
DlDef(def @ def::DefVariant(..)) => (def, name, visibility),
728742
_ => unreachable!()
729743
}
@@ -736,7 +750,7 @@ pub fn get_enum_variants<'tcx>(intr: Rc<IdentInterner>, cdata: Cmd, id: ast::Nod
736750
let items = reader::get_doc(rbml::Doc::new(data), tag_items);
737751
let item = find_item(id, items);
738752
let mut disr_val = 0;
739-
enum_variant_ids(item, cdata).iter().map(|did| {
753+
enum_variant_ids(item, cdata).map(|did| {
740754
let item = find_item(did.node, items);
741755
let ctor_ty = item_type(ast::DefId { krate: cdata.cnum, node: id},
742756
item, tcx, cdata);
@@ -771,7 +785,7 @@ pub fn get_enum_variants<'tcx>(intr: Rc<IdentInterner>, cdata: Cmd, id: ast::Nod
771785
name: name,
772786
// I'm not even sure if we encode visibility
773787
// for variants -- TEST -- tjc
774-
id: *did,
788+
id: did,
775789
disr_val: old_disr_val,
776790
vis: ast::Inherited
777791
})

0 commit comments

Comments
 (0)