use middle::cstore::{NativeLibraryKind, LinkMeta, LinkagePreference};
use middle::def;
use middle::lang_items;
-use middle::ty::{self, Ty};
+use middle::ty::{self, Ty, VariantKind};
use middle::def_id::{DefId, DefIndex};
use rustc::front::map as hir_map;
+use rustc::mir::repr::Mir;
use rustc::util::nodemap::{FnvHashMap, NodeMap, NodeSet};
use std::cell::RefCell;
decoder::get_stability(&*cdata, def.index)
}
+ fn deprecation(&self, def: DefId) -> Option<attr::Deprecation>
+ {
+ let cdata = self.get_crate_data(def.krate);
+ decoder::get_deprecation(&*cdata, def.index)
+ }
+
fn closure_kind(&self, _tcx: &ty::ctxt<'tcx>, def_id: DefId) -> ty::ClosureKind
{
assert!(!def_id.is_local());
cdata.with_local_path(|cpath| {
let mut r = Vec::with_capacity(cpath.len() + path.len());
- r.push_all(cpath);
- r.push_all(&path);
+ r.extend_from_slice(cpath);
+ r.extend_from_slice(&path);
r
})
}
let mut r = Vec::with_capacity(path.len() + 1);
let crate_name = hir_map::PathMod(token::intern(&cdata.name));
r.push(crate_name);
- r.push_all(&path);
+ r.extend_from_slice(&path);
r
}
local_path.into_iter().chain(path).collect()
}
+ fn variant_kind(&self, def_id: DefId) -> Option<VariantKind> {
+ let cdata = self.get_crate_data(def_id.krate);
+ decoder::get_variant_kind(&cdata, def_id.index)
+ }
+
+ fn struct_ctor_def_id(&self, struct_def_id: DefId) -> Option<DefId>
+ {
+ let cdata = self.get_crate_data(struct_def_id.krate);
+ decoder::get_struct_ctor_def_id(&cdata, struct_def_id.index)
+ }
+
fn tuple_struct_definition_if_ctor(&self, did: DefId) -> Option<DefId>
{
let cdata = self.get_crate_data(did.krate);
decoder::maybe_get_item_ast(&*cdata, tcx, def.index, decode_inlined_item)
}
+ fn maybe_get_item_mir(&self, tcx: &ty::ctxt<'tcx>, def: DefId)
+ -> Option<Mir<'tcx>> {
+ let cdata = self.get_crate_data(def.krate);
+ decoder::maybe_get_item_mir(&*cdata, tcx, def.index)
+ }
+
fn crates(&self) -> Vec<ast::CrateNum>
{
let mut result = vec![];
item_symbols: &RefCell<NodeMap<String>>,
link_meta: &LinkMeta,
reachable: &NodeSet,
+ mir_map: &NodeMap<Mir<'tcx>>,
krate: &hir::Crate) -> Vec<u8>
{
let encode_inlined_item: encoder::EncodeInlinedItem =
link_meta: link_meta,
cstore: self,
encode_inlined_item: encode_inlined_item,
- reachable: reachable
+ reachable: reachable,
+ mir_map: mir_map,
};
encoder::encode_metadata(encode_params, krate)