diff --git a/src/librustc/metadata/creader.rs b/src/librustc/metadata/creader.rs index f4561d68906f..bbb2d4fade1f 100644 --- a/src/librustc/metadata/creader.rs +++ b/src/librustc/metadata/creader.rs @@ -261,6 +261,7 @@ impl<'a> CrateReader<'a> { let loader::Library { dylib, rlib, metadata } = lib; let cnum_map = self.resolve_crate_deps(root, metadata.as_slice(), span); + let staged_api = self.is_staged_api(metadata.as_slice()); let cmeta = Rc::new( cstore::crate_metadata { name: name.to_string(), @@ -270,6 +271,7 @@ impl<'a> CrateReader<'a> { cnum: cnum, codemap_import_info: RefCell::new(vec![]), span: span, + staged_api: staged_api }); let source = cstore::CrateSource { @@ -283,6 +285,17 @@ impl<'a> CrateReader<'a> { (cnum, cmeta, source) } + fn is_staged_api(&self, data: &[u8]) -> bool { + let attrs = decoder::get_crate_attributes(data); + for attr in &attrs { + if &attr.name()[..] == "staged_api" { + match attr.node.value.node { ast::MetaWord(_) => return true, _ => (/*pass*/) } + } + } + + return false; + } + fn resolve_crate(&mut self, root: &Option, ident: &str, diff --git a/src/librustc/metadata/csearch.rs b/src/librustc/metadata/csearch.rs index 21d5dac7e5dd..9c45ffe35a8e 100644 --- a/src/librustc/metadata/csearch.rs +++ b/src/librustc/metadata/csearch.rs @@ -22,7 +22,6 @@ use rbml::reader; use std::rc::Rc; use syntax::ast; use syntax::attr; -use syntax::attr::AttrMetaMethods; use syntax::diagnostic::expect; use std::collections::hash_map::HashMap; @@ -386,15 +385,7 @@ pub fn get_stability(cstore: &cstore::CStore, } pub fn is_staged_api(cstore: &cstore::CStore, krate: ast::CrateNum) -> bool { - let cdata = cstore.get_crate_data(krate); - let attrs = decoder::get_crate_attributes(cdata.data()); - for attr in &attrs { - if &attr.name()[..] == "staged_api" { - match attr.node.value.node { ast::MetaWord(_) => return true, _ => (/*pass*/) } - } - } - - return false; + cstore.get_crate_data(krate).staged_api } pub fn get_repr_attrs(cstore: &cstore::CStore, def: ast::DefId) diff --git a/src/librustc/metadata/cstore.rs b/src/librustc/metadata/cstore.rs index 08c05b768625..19d494824cf3 100644 --- a/src/librustc/metadata/cstore.rs +++ b/src/librustc/metadata/cstore.rs @@ -63,6 +63,7 @@ pub struct crate_metadata { pub cnum: ast::CrateNum, pub codemap_import_info: RefCell>, pub span: codemap::Span, + pub staged_api: bool } #[derive(Copy, Debug, PartialEq, Clone)]