diff options
| author | Isaac Whitfield <iw@whitfin.io> | 2018-05-08 01:23:02 -0700 |
|---|---|---|
| committer | Isaac Whitfield <iw@whitfin.io> | 2018-05-18 09:36:45 -0700 |
| commit | f418f1dd7889a5896df43ce1ef5be0eb57bf341c (patch) | |
| tree | fcd6ee6b110ab29a8af56c105e30b7958cff9511 | |
| parent | df40e61382a2cba0be621fdabb9971ce3475e9a7 (diff) | |
| download | rust-f418f1dd7889a5896df43ce1ef5be0eb57bf341c.tar.gz rust-f418f1dd7889a5896df43ce1ef5be0eb57bf341c.zip | |
Remove attribute_cache from CrateMetadata
| -rw-r--r-- | src/librustc_metadata/creader.rs | 1 | ||||
| -rw-r--r-- | src/librustc_metadata/cstore.rs | 1 | ||||
| -rw-r--r-- | src/librustc_metadata/decoder.rs | 28 |
3 files changed, 8 insertions, 22 deletions
diff --git a/src/librustc_metadata/creader.rs b/src/librustc_metadata/creader.rs index 6c1f72f5f9c..4197d34c0e8 100644 --- a/src/librustc_metadata/creader.rs +++ b/src/librustc_metadata/creader.rs @@ -243,7 +243,6 @@ impl<'a> CrateLoader<'a> { cnum, dependencies: Lock::new(dependencies), codemap_import_info: RwLock::new(vec![]), - attribute_cache: Lock::new([Vec::new(), Vec::new()]), dep_kind: Lock::new(dep_kind), source: cstore::CrateSource { dylib, diff --git a/src/librustc_metadata/cstore.rs b/src/librustc_metadata/cstore.rs index f2d2d090e0a..97f0a01c00c 100644 --- a/src/librustc_metadata/cstore.rs +++ b/src/librustc_metadata/cstore.rs @@ -69,7 +69,6 @@ pub struct CrateMetadata { pub cnum: CrateNum, pub dependencies: Lock<Vec<CrateNum>>, pub codemap_import_info: RwLock<Vec<ImportedFileMap>>, - pub attribute_cache: Lock<[Vec<Option<Lrc<[ast::Attribute]>>>; 2]>, pub root: schema::CrateRoot, diff --git a/src/librustc_metadata/decoder.rs b/src/librustc_metadata/decoder.rs index 53d1ff15627..9a15b2dce04 100644 --- a/src/librustc_metadata/decoder.rs +++ b/src/librustc_metadata/decoder.rs @@ -880,34 +880,22 @@ impl<'a, 'tcx> CrateMetadata { } pub fn get_item_attrs(&self, node_id: DefIndex, sess: &Session) -> Lrc<[ast::Attribute]> { - let (node_as, node_index) = - (node_id.address_space().index(), node_id.as_array_index()); if self.is_proc_macro(node_id) { return Lrc::new([]); } - if let Some(&Some(ref val)) = - self.attribute_cache.borrow()[node_as].get(node_index) { - return val.clone(); - } - // The attributes for a tuple struct are attached to the definition, not the ctor; // we assume that someone passing in a tuple struct ctor is actually wanting to // look at the definition - let mut item = self.entry(node_id); let def_key = self.def_key(node_id); - if def_key.disambiguated_data.data == DefPathData::StructCtor { - item = self.entry(def_key.parent.unwrap()); - } - let result: Lrc<[ast::Attribute]> = Lrc::from(self.get_attributes(&item, sess)); - let vec_ = &mut self.attribute_cache.borrow_mut()[node_as]; - if vec_.len() < node_index + 1 { - vec_.resize(node_index + 1, None); - } - // This can overwrite the result produced by another thread, but the value - // written should be the same - vec_[node_index] = Some(result.clone()); - result + let item_id = if def_key.disambiguated_data.data == DefPathData::StructCtor { + def_key.parent.unwrap() + } else { + node_id + }; + + let item = self.entry(item_id); + Lrc::from(self.get_attributes(&item, sess)) } pub fn get_struct_field_names(&self, id: DefIndex) -> Vec<ast::Name> { |
