Hash only on def_num when storing def_ids that are local
This commit is contained in:
parent
7f222423b7
commit
9cb20153a8
@ -6,6 +6,7 @@ import front.ast.ann;
|
||||
import front.creader;
|
||||
import driver.session.session;
|
||||
import util.common.new_def_hash;
|
||||
import util.common.new_int_hash;
|
||||
import util.common.span;
|
||||
import util.typestate_ann.ts_ann;
|
||||
import std.Map.hashmap;
|
||||
@ -56,8 +57,8 @@ fn new_ext_hash() -> ext_hash {
|
||||
ret std.Map.mk_hashmap[tup(def_id,str),def](hash, eq);
|
||||
}
|
||||
|
||||
type env = rec(hashmap[def_id,import_state] imports,
|
||||
hashmap[def_id,@wrap_mod] mod_map,
|
||||
type env = rec(hashmap[ast.def_num,import_state] imports,
|
||||
hashmap[ast.def_num,@wrap_mod] mod_map,
|
||||
hashmap[def_id,vec[ident]] ext_map,
|
||||
ext_hash ext_cache,
|
||||
session sess);
|
||||
@ -72,8 +73,8 @@ tag namespace {
|
||||
}
|
||||
|
||||
fn resolve_crate(session sess, @ast.crate crate) -> @ast.crate {
|
||||
auto e = @rec(imports = new_def_hash[import_state](),
|
||||
mod_map = new_def_hash[@wrap_mod](),
|
||||
auto e = @rec(imports = new_int_hash[import_state](),
|
||||
mod_map = new_int_hash[@wrap_mod](),
|
||||
ext_map = new_def_hash[vec[ident]](),
|
||||
ext_cache = new_ext_hash(),
|
||||
sess = sess);
|
||||
@ -107,10 +108,10 @@ fn map_crate(&@env e, &ast.crate c) {
|
||||
*sc = cons[scope](scope_item(i), @*sc);
|
||||
alt (i.node) {
|
||||
case (ast.item_mod(_, ?md, ?defid)) {
|
||||
e.mod_map.insert(defid, @wmod(md));
|
||||
e.mod_map.insert(defid._1, @wmod(md));
|
||||
}
|
||||
case (ast.item_native_mod(_, ?nmd, ?defid)) {
|
||||
e.mod_map.insert(defid, @wnmod(nmd));
|
||||
e.mod_map.insert(defid._1, @wnmod(nmd));
|
||||
}
|
||||
case (_) {}
|
||||
}
|
||||
@ -121,7 +122,7 @@ fn map_crate(&@env e, &ast.crate c) {
|
||||
fn visit_view_item(@env e, @mutable list[scope] sc, &@ast.view_item i) {
|
||||
alt (i.node) {
|
||||
case (ast.view_item_import(_, ?ids, ?defid)) {
|
||||
e.imports.insert(defid, todo(i, *sc));
|
||||
e.imports.insert(defid._1, todo(i, *sc));
|
||||
}
|
||||
case (_) {}
|
||||
}
|
||||
@ -129,7 +130,7 @@ fn map_crate(&@env e, &ast.crate c) {
|
||||
}
|
||||
|
||||
fn resolve_imports(&env e) {
|
||||
for each (@tup(def_id, import_state) it in e.imports.items()) {
|
||||
for each (@tup(ast.def_num, import_state) it in e.imports.items()) {
|
||||
alt (it._1) {
|
||||
case (todo(?item, ?sc)) {
|
||||
resolve_import(e, item, sc);
|
||||
@ -185,7 +186,7 @@ fn resolve_names(&@env e, &ast.crate c) -> @ast.crate {
|
||||
}
|
||||
|
||||
fn lookup_import(&env e, def_id defid, namespace ns) -> Option.t[def] {
|
||||
alt (e.imports.get(defid)) {
|
||||
alt (e.imports.get(defid._1)) {
|
||||
case (todo(?item, ?sc)) {
|
||||
resolve_import(e, item, sc);
|
||||
ret lookup_import(e, defid, ns);
|
||||
@ -207,7 +208,7 @@ fn resolve_import(&env e, &@ast.view_item it, &list[scope] sc) {
|
||||
defid = _defid; ids = _ids;
|
||||
}
|
||||
}
|
||||
e.imports.insert(defid, resolving(it.span));
|
||||
e.imports.insert(defid._1, resolving(it.span));
|
||||
|
||||
auto n_idents = Vec.len(ids);
|
||||
auto end_id = ids.(n_idents - 1u);
|
||||
@ -242,7 +243,7 @@ fn resolve_import(&env e, &@ast.view_item it, &list[scope] sc) {
|
||||
if (val == none[def] && typ == none[def]) {
|
||||
unresolved(e, sp, id, "import");
|
||||
}
|
||||
e.imports.insert(defid, resolved(val, typ));
|
||||
e.imports.insert(defid._1, resolved(val, typ));
|
||||
}
|
||||
}
|
||||
|
||||
@ -610,14 +611,14 @@ fn lookup_in_mod(&env e, def m, ident id, namespace ns, dir dr)
|
||||
}
|
||||
alt (m) {
|
||||
case (ast.def_mod(?defid)) {
|
||||
alt (*e.mod_map.get(defid)) {
|
||||
alt (*e.mod_map.get(defid._1)) {
|
||||
case (wmod(?m)) {
|
||||
ret lookup_in_regular_mod(e, m, id, ns, dr);
|
||||
}
|
||||
}
|
||||
}
|
||||
case (ast.def_native_mod(?defid)) {
|
||||
alt (*e.mod_map.get(defid)) {
|
||||
alt (*e.mod_map.get(defid._1)) {
|
||||
case (wnmod(?m)) {
|
||||
ret lookup_in_native_mod(e, m, id, ns);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user