Auto merge of #26005 - Ms2ger:get_enum_variant_defs, r=Aatch
This commit is contained in:
@@ -13,7 +13,6 @@
|
|||||||
use metadata::common::*;
|
use metadata::common::*;
|
||||||
use metadata::cstore;
|
use metadata::cstore;
|
||||||
use metadata::decoder;
|
use metadata::decoder;
|
||||||
use middle::def;
|
|
||||||
use middle::lang_items;
|
use middle::lang_items;
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
|
|
||||||
@@ -114,12 +113,6 @@ pub fn maybe_get_item_ast<'tcx>(tcx: &ty::ctxt<'tcx>, def: ast::DefId,
|
|||||||
decoder::maybe_get_item_ast(&*cdata, tcx, def.node, decode_inlined_item)
|
decoder::maybe_get_item_ast(&*cdata, tcx, def.node, decode_inlined_item)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_enum_variant_defs(cstore: &cstore::CStore, enum_id: ast::DefId)
|
|
||||||
-> Vec<(def::Def, ast::Name, ast::Visibility)> {
|
|
||||||
let cdata = cstore.get_crate_data(enum_id.krate);
|
|
||||||
decoder::get_enum_variant_defs(&*cstore.intr, &*cdata, enum_id.node)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get_enum_variants<'tcx>(tcx: &ty::ctxt<'tcx>, def: ast::DefId)
|
pub fn get_enum_variants<'tcx>(tcx: &ty::ctxt<'tcx>, def: ast::DefId)
|
||||||
-> Vec<Rc<ty::VariantInfo<'tcx>>> {
|
-> Vec<Rc<ty::VariantInfo<'tcx>>> {
|
||||||
let cstore = &tcx.sess.cstore;
|
let cstore = &tcx.sess.cstore;
|
||||||
|
|||||||
@@ -268,30 +268,6 @@ fn item_trait_ref<'tcx>(doc: rbml::Doc, tcx: &ty::ctxt<'tcx>, cdata: Cmd)
|
|||||||
doc_trait_ref(tp, tcx, cdata)
|
doc_trait_ref(tp, tcx, cdata)
|
||||||
}
|
}
|
||||||
|
|
||||||
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> {
|
fn item_path(item_doc: rbml::Doc) -> Vec<ast_map::PathElem> {
|
||||||
let path_doc = reader::get_doc(item_doc, tag_path);
|
let path_doc = reader::get_doc(item_doc, tag_path);
|
||||||
reader::docs(path_doc).filter_map(|(tag, elt_doc)| {
|
reader::docs(path_doc).filter_map(|(tag, elt_doc)| {
|
||||||
@@ -730,31 +706,14 @@ pub fn maybe_get_item_ast<'tcx>(cdata: Cmd, tcx: &ty::ctxt<'tcx>, id: ast::NodeI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_enum_variant_defs(intr: &IdentInterner,
|
|
||||||
cdata: Cmd,
|
|
||||||
id: ast::NodeId)
|
|
||||||
-> Vec<(def::Def, ast::Name, ast::Visibility)> {
|
|
||||||
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).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) {
|
|
||||||
DlDef(def @ def::DefVariant(..)) => (def, name, visibility),
|
|
||||||
_ => unreachable!()
|
|
||||||
}
|
|
||||||
}).collect()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get_enum_variants<'tcx>(intr: Rc<IdentInterner>, cdata: Cmd, id: ast::NodeId,
|
pub fn get_enum_variants<'tcx>(intr: Rc<IdentInterner>, cdata: Cmd, id: ast::NodeId,
|
||||||
tcx: &ty::ctxt<'tcx>) -> Vec<Rc<ty::VariantInfo<'tcx>>> {
|
tcx: &ty::ctxt<'tcx>) -> Vec<Rc<ty::VariantInfo<'tcx>>> {
|
||||||
let data = cdata.data();
|
let data = cdata.data();
|
||||||
let items = reader::get_doc(rbml::Doc::new(data), tag_items);
|
let items = reader::get_doc(rbml::Doc::new(data), tag_items);
|
||||||
let item = find_item(id, items);
|
let item = find_item(id, items);
|
||||||
let mut disr_val = 0;
|
let mut disr_val = 0;
|
||||||
enum_variant_ids(item, cdata).map(|did| {
|
reader::tagged_docs(item, tag_items_data_item_variant).map(|p| {
|
||||||
|
let did = translated_def_id(cdata, p);
|
||||||
let item = find_item(did.node, items);
|
let item = find_item(did.node, items);
|
||||||
let ctor_ty = item_type(ast::DefId { krate: cdata.cnum, node: id},
|
let ctor_ty = item_type(ast::DefId { krate: cdata.cnum, node: id},
|
||||||
item, tcx, cdata);
|
item, tcx, cdata);
|
||||||
|
|||||||
Reference in New Issue
Block a user