Auto merge of #25926 - Ms2ger:enum_variant_ids, r=alexcrichton

This commit is contained in:
bors 2015-06-02 20:05:49 +00:00
commit dc1e79b3c2

View File

@ -268,10 +268,28 @@ fn item_trait_ref<'tcx>(doc: rbml::Doc, tcx: &ty::ctxt<'tcx>, cdata: Cmd)
doc_trait_ref(tp, tcx, cdata)
}
fn enum_variant_ids(item: rbml::Doc, cdata: Cmd) -> Vec<ast::DefId> {
reader::tagged_docs(item, tag_items_data_item_variant)
.map(|p| translated_def_id(cdata, p))
.collect()
struct EnumVariantIds<'a> {
iter: reader::TaggedDocsIterator<'a>,
cdata: Cmd<'a>,
}
impl<'a> Iterator for EnumVariantIds<'a> {
type Item = ast::DefId;
fn next(&mut self) -> Option<ast::DefId> {
self.iter.next().map(|p| translated_def_id(self.cdata, p))
}
fn size_hint(&self) -> (usize, Option<usize>) {
self.iter.size_hint()
}
}
fn enum_variant_ids<'a>(item: rbml::Doc<'a>, cdata: Cmd<'a>) -> EnumVariantIds<'a> {
EnumVariantIds {
iter: reader::tagged_docs(item, tag_items_data_item_variant),
cdata: cdata,
}
}
fn item_path(item_doc: rbml::Doc) -> Vec<ast_map::PathElem> {
@ -719,11 +737,11 @@ pub fn get_enum_variant_defs(intr: &IdentInterner,
let data = cdata.data();
let items = reader::get_doc(rbml::Doc::new(data), tag_items);
let item = find_item(id, items);
enum_variant_ids(item, cdata).iter().map(|did| {
enum_variant_ids(item, cdata).map(|did| {
let item = find_item(did.node, items);
let name = item_name(intr, item);
let visibility = item_visibility(item);
match item_to_def_like(cdata, item, *did) {
match item_to_def_like(cdata, item, did) {
DlDef(def @ def::DefVariant(..)) => (def, name, visibility),
_ => unreachable!()
}
@ -736,7 +754,7 @@ pub fn get_enum_variants<'tcx>(intr: Rc<IdentInterner>, cdata: Cmd, id: ast::Nod
let items = reader::get_doc(rbml::Doc::new(data), tag_items);
let item = find_item(id, items);
let mut disr_val = 0;
enum_variant_ids(item, cdata).iter().map(|did| {
enum_variant_ids(item, cdata).map(|did| {
let item = find_item(did.node, items);
let ctor_ty = item_type(ast::DefId { krate: cdata.cnum, node: id},
item, tcx, cdata);
@ -771,7 +789,7 @@ pub fn get_enum_variants<'tcx>(intr: Rc<IdentInterner>, cdata: Cmd, id: ast::Nod
name: name,
// I'm not even sure if we encode visibility
// for variants -- TEST -- tjc
id: *did,
id: did,
disr_val: old_disr_val,
vis: ast::Inherited
})