Auto merge of #25926 - Ms2ger:enum_variant_ids, r=alexcrichton
This commit is contained in:
commit
dc1e79b3c2
@ -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
|
||||
})
|
||||
|
Loading…
x
Reference in New Issue
Block a user