From 606c985a50c588a320efb1441471589211744f56 Mon Sep 17 00:00:00 2001 From: Michael Woerister Date: Fri, 12 Feb 2016 12:43:13 -0500 Subject: [PATCH] Make CrateStore::crate_name() return an InternedString to avoid unnecessary allocations. --- src/librustc/middle/cstore.rs | 5 +++-- src/librustc/middle/ty/mod.rs | 5 +++-- src/librustc_metadata/csearch.rs | 4 ++-- src/librustc_trans/save/mod.rs | 2 +- src/librustdoc/clean/mod.rs | 2 +- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/librustc/middle/cstore.rs b/src/librustc/middle/cstore.rs index 08b87e83a6c4..b89fd92e3c59 100644 --- a/src/librustc/middle/cstore.rs +++ b/src/librustc/middle/cstore.rs @@ -42,6 +42,7 @@ use syntax::ast_util::{IdVisitingOperation}; use syntax::attr; use syntax::codemap::Span; use syntax::ptr::P; +use syntax::parse::token::InternedString; use rustc_back::target::Target; use rustc_front::hir; use rustc_front::intravisit::Visitor; @@ -203,7 +204,7 @@ pub trait CrateStore<'tcx> : Any { fn is_explicitly_linked(&self, cnum: ast::CrateNum) -> bool; fn is_allocator(&self, cnum: ast::CrateNum) -> bool; fn crate_attrs(&self, cnum: ast::CrateNum) -> Vec; - fn crate_name(&self, cnum: ast::CrateNum) -> String; + fn crate_name(&self, cnum: ast::CrateNum) -> InternedString; fn crate_hash(&self, cnum: ast::CrateNum) -> Svh; fn crate_struct_field_attrs(&self, cnum: ast::CrateNum) -> FnvHashMap>; @@ -382,7 +383,7 @@ impl<'tcx> CrateStore<'tcx> for DummyCrateStore { fn is_allocator(&self, cnum: ast::CrateNum) -> bool { unimplemented!() } fn crate_attrs(&self, cnum: ast::CrateNum) -> Vec { unimplemented!() } - fn crate_name(&self, cnum: ast::CrateNum) -> String { unimplemented!() } + fn crate_name(&self, cnum: ast::CrateNum) -> InternedString { unimplemented!() } fn crate_hash(&self, cnum: ast::CrateNum) -> Svh { unimplemented!() } fn crate_struct_field_attrs(&self, cnum: ast::CrateNum) -> FnvHashMap> diff --git a/src/librustc/middle/ty/mod.rs b/src/librustc/middle/ty/mod.rs index 050024d0e94e..d36112daa032 100644 --- a/src/librustc/middle/ty/mod.rs +++ b/src/librustc/middle/ty/mod.rs @@ -2680,14 +2680,15 @@ impl<'tcx> TyCtxt<'tcx> { { dep_graph::visit_all_items_in_krate(self, dep_node_fn, visitor); } + /// Looks up the span of `impl_did` if the impl is local; otherwise returns `Err` /// with the name of the crate containing the impl. - pub fn span_of_impl(&self, impl_did: DefId) -> Result { + pub fn span_of_impl(&self, impl_did: DefId) -> Result { if impl_did.is_local() { let node_id = self.map.as_local_node_id(impl_did).unwrap(); Ok(self.map.span(node_id)) } else { - Err(self.sess.cstore.crate_name(impl_did.krate)) + Err(self.crate_name(impl_did.krate)) } } } diff --git a/src/librustc_metadata/csearch.rs b/src/librustc_metadata/csearch.rs index 62318f13a8aa..9514317056ab 100644 --- a/src/librustc_metadata/csearch.rs +++ b/src/librustc_metadata/csearch.rs @@ -334,9 +334,9 @@ impl<'tcx> CrateStore<'tcx> for cstore::CStore { decoder::get_crate_attributes(self.get_crate_data(cnum).data()) } - fn crate_name(&self, cnum: ast::CrateNum) -> String + fn crate_name(&self, cnum: ast::CrateNum) -> token::InternedString { - self.get_crate_data(cnum).name.clone() + token::intern_and_get_ident(&self.get_crate_data(cnum).name[..]) } fn crate_hash(&self, cnum: ast::CrateNum) -> Svh diff --git a/src/librustc_trans/save/mod.rs b/src/librustc_trans/save/mod.rs index 78e91e00baa7..4bbb76246937 100644 --- a/src/librustc_trans/save/mod.rs +++ b/src/librustc_trans/save/mod.rs @@ -90,7 +90,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> { for n in self.tcx.sess.cstore.crates() { result.push(CrateData { - name: self.tcx.sess.cstore.crate_name(n), + name: (&self.tcx.sess.cstore.crate_name(n)[..]).to_owned(), number: n, }); } diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 15aeca9204a6..aab5c960df35 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -241,7 +241,7 @@ impl Clean for CrateNum { } }); ExternalCrate { - name: cx.sess().cstore.crate_name(self.0), + name: (&cx.sess().cstore.crate_name(self.0)[..]).to_owned(), attrs: cx.sess().cstore.crate_attrs(self.0).clean(cx), primitives: primitives, }