Make CrateStore::crate_name() return an InternedString to avoid unnecessary allocations.

This commit is contained in:
Michael Woerister 2016-02-12 12:43:13 -05:00 committed by Niko Matsakis
parent 5027a79279
commit 606c985a50
5 changed files with 10 additions and 8 deletions

View File

@ -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<ast::Attribute>;
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<DefId, Vec<ast::Attribute>>;
@ -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<ast::Attribute>
{ 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<DefId, Vec<ast::Attribute>>

View File

@ -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<Span, String> {
pub fn span_of_impl(&self, impl_did: DefId) -> Result<Span, InternedString> {
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))
}
}
}

View File

@ -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

View File

@ -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,
});
}

View File

@ -241,7 +241,7 @@ impl Clean<ExternalCrate> 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,
}