librustc: Remove unused mod_path_map
. This was expensive to build. Saves another 15% or so. r=tjc
This commit is contained in:
parent
9f387926fc
commit
3a570075b1
@ -43,7 +43,6 @@ export get_used_link_args;
|
||||
export add_use_stmt_cnum;
|
||||
export find_use_stmt_cnum;
|
||||
export get_dep_hashes;
|
||||
export get_path;
|
||||
|
||||
|
||||
// A map from external crate numbers (as decoded from some crate file) to
|
||||
@ -52,11 +51,6 @@ export get_path;
|
||||
// own crate numbers.
|
||||
type cnum_map = map::HashMap<ast::crate_num, ast::crate_num>;
|
||||
|
||||
// Multiple items may have the same def_id in crate metadata. They may be
|
||||
// renamed imports or reexports. This map keeps the "real" module path
|
||||
// and def_id.
|
||||
type mod_path_map = map::HashMap<ast::def_id, @~str>;
|
||||
|
||||
type crate_metadata = @{name: ~str,
|
||||
data: @~[u8],
|
||||
cnum_map: cnum_map,
|
||||
@ -72,7 +66,6 @@ enum CStore { private(cstore_private), }
|
||||
type cstore_private =
|
||||
@{metas: map::HashMap<ast::crate_num, crate_metadata>,
|
||||
use_crate_map: use_crate_map,
|
||||
mod_path_map: mod_path_map,
|
||||
mut used_crate_files: ~[Path],
|
||||
mut used_libraries: ~[~str],
|
||||
mut used_link_args: ~[~str],
|
||||
@ -89,10 +82,8 @@ pure fn p(cstore: CStore) -> cstore_private {
|
||||
fn mk_cstore(intr: @ident_interner) -> CStore {
|
||||
let meta_cache = map::HashMap();
|
||||
let crate_map = map::HashMap();
|
||||
let mod_path_map = HashMap();
|
||||
return private(@{metas: meta_cache,
|
||||
use_crate_map: crate_map,
|
||||
mod_path_map: mod_path_map,
|
||||
mut used_crate_files: ~[],
|
||||
mut used_libraries: ~[],
|
||||
mut used_link_args: ~[],
|
||||
@ -113,18 +104,10 @@ fn get_crate_vers(cstore: CStore, cnum: ast::crate_num) -> ~str {
|
||||
return decoder::get_crate_vers(cdata.data);
|
||||
}
|
||||
|
||||
fn set_crate_data(cstore: CStore, cnum: ast::crate_num,
|
||||
fn set_crate_data(cstore: CStore,
|
||||
cnum: ast::crate_num,
|
||||
data: crate_metadata) {
|
||||
p(cstore).metas.insert(cnum, data);
|
||||
let get_crate_data: decoder::GetCrateDataCb = |cnum| {
|
||||
cstore::get_crate_data(cstore, cnum)
|
||||
};
|
||||
for vec::each(decoder::get_crate_module_paths(cstore.intr, data,
|
||||
get_crate_data)) |dp| {
|
||||
let (did, path) = *dp;
|
||||
let d = {crate: cnum, node: did.node};
|
||||
p(cstore).mod_path_map.insert(d, @path);
|
||||
}
|
||||
}
|
||||
|
||||
fn have_crate_data(cstore: CStore, cnum: ast::crate_num) -> bool {
|
||||
@ -197,10 +180,6 @@ fn get_dep_hashes(cstore: CStore) -> ~[~str] {
|
||||
return vec::map(sorted, mapper);
|
||||
}
|
||||
|
||||
fn get_path(cstore: CStore, d: ast::def_id) -> ~[~str] {
|
||||
option::map_default(&p(cstore).mod_path_map.find(d), ~[],
|
||||
|ds| str::split_str(**ds, ~"::"))
|
||||
}
|
||||
// Local Variables:
|
||||
// mode: rust
|
||||
// fill-column: 78;
|
||||
|
@ -68,7 +68,6 @@ export get_supertraits;
|
||||
export get_method_names_if_trait;
|
||||
export get_type_name_if_impl;
|
||||
export get_item_attrs;
|
||||
export get_crate_module_paths;
|
||||
export def_like;
|
||||
export dl_def;
|
||||
export dl_impl;
|
||||
@ -1121,34 +1120,6 @@ fn iter_crate_items(intr: @ident_interner, cdata: cmd,
|
||||
}
|
||||
}
|
||||
|
||||
fn get_crate_module_paths(intr: @ident_interner, cdata: cmd,
|
||||
get_crate_data: GetCrateDataCb)
|
||||
-> ~[(ast::def_id, ~str)] {
|
||||
fn mod_of_path(p: ~str) -> ~str {
|
||||
str::connect(vec::init(str::split_str(p, ~"::")), ~"::")
|
||||
}
|
||||
|
||||
// find all module (path, def_ids), which are not
|
||||
// fowarded path due to renamed import or reexport
|
||||
let mut res = ~[];
|
||||
let mods = map::HashMap();
|
||||
do iter_crate_items(intr, cdata, get_crate_data) |path, did| {
|
||||
let m = mod_of_path(path);
|
||||
if str::is_not_empty(m) {
|
||||
// if m has a sub-item, it must be a module
|
||||
mods.insert(m, true);
|
||||
}
|
||||
// Collect everything by now. There might be multiple
|
||||
// paths pointing to the same did. Those will be
|
||||
// unified later by using the mods map
|
||||
res.push((did, path));
|
||||
}
|
||||
return do vec::filter(res) |x| {
|
||||
let (_, xp) = *x;
|
||||
mods.contains_key(xp)
|
||||
}
|
||||
}
|
||||
|
||||
fn list_crate_metadata(intr: @ident_interner, bytes: @~[u8],
|
||||
out: io::Writer) {
|
||||
let hash = get_crate_hash(bytes);
|
||||
|
Loading…
Reference in New Issue
Block a user