Make CrateStore::crate_name() return an InternedString to avoid unnecessary allocations.
This commit is contained in:
parent
5027a79279
commit
606c985a50
|
@ -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>>
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
});
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue