Skip to content

Commit bfbe887

Browse files
committed
Refactor import lookup in middle:resolve
Issue #817
1 parent cd54e77 commit bfbe887

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-10
lines changed

src/comp/middle/resolve.rs

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ fn new_ext_hash() -> ext_hash {
9292

9393
tag mod_index_entry {
9494
mie_view_item(@ast::view_item);
95-
mie_import_ident(node_id);
95+
mie_import_ident(node_id, syntax::codemap::span);
9696
mie_item(@ast::item);
9797
mie_native_item(@ast::native_item);
9898
mie_tag_variant(/* tag item */@ast::item, /* variant index */uint);
@@ -949,9 +949,6 @@ fn found_view_item(e: &env, vi: @ast::view_item, ns: namespace) ->
949949
let cnum = cstore::get_use_stmt_cnum(e.cstore, id);
950950
ret some(ast::def_mod({crate: cnum, node: -1}));
951951
}
952-
ast::view_item_import(_, _, id) {
953-
ret lookup_import(e, local_def(id), ns);
954-
}
955952
ast::view_item_import_glob(_, defid) {
956953
ret none::<def>; //will be handled in the fallback glob pass
957954

@@ -1073,7 +1070,7 @@ fn lookup_in_mie(e: &env, mie: &mod_index_entry, ns: namespace) ->
10731070
option::t<def> {
10741071
alt mie {
10751072
mie_view_item(view_item) { ret found_view_item(e, view_item, ns); }
1076-
mie_import_ident(id) { ret lookup_import(e, local_def(id), ns); }
1073+
mie_import_ident(id, _) { ret lookup_import(e, local_def(id), ns); }
10771074
mie_item(item) { ret found_def_item(item, ns); }
10781075
mie_tag_variant(item, variant_idx) {
10791076
alt item.node {
@@ -1118,15 +1115,19 @@ fn index_mod(md: &ast::_mod) -> mod_index {
11181115
let index = new_str_hash::<list<mod_index_entry>>();
11191116
for it: @ast::view_item in md.view_items {
11201117
alt it.node {
1121-
ast::view_item_import(ident, _, _) | ast::view_item_use(ident, _, _)
1118+
ast::view_item_use(ident, _, _)
11221119
{
11231120
add_to_index(index, ident, mie_view_item(it));
11241121
}
11251122

1123+
ast::view_item_import(ident, _, id) {
1124+
add_to_index(index, ident, mie_import_ident(id, it.span));
1125+
}
1126+
11261127
ast::view_item_import_from(_, idents, _) {
11271128
for ident in idents {
11281129
add_to_index(index, ident.node.name,
1129-
mie_import_ident(ident.node.id));
1130+
mie_import_ident(ident.node.id, ident.span));
11301131
}
11311132
}
11321133

@@ -1160,14 +1161,16 @@ fn index_nmod(md: &ast::native_mod) -> mod_index {
11601161
let index = new_str_hash::<list<mod_index_entry>>();
11611162
for it: @ast::view_item in md.view_items {
11621163
alt it.node {
1163-
ast::view_item_use(ident, _, _) | ast::view_item_import(ident, _, _)
1164-
{
1164+
ast::view_item_use(ident, _, _) {
11651165
add_to_index(index, ident, mie_view_item(it));
11661166
}
1167+
ast::view_item_import(ident, _, id) {
1168+
add_to_index(index, ident, mie_import_ident(id, it.span));
1169+
}
11671170
ast::view_item_import_from(_, idents, _) {
11681171
for ident in idents {
11691172
add_to_index(index, ident.node.name,
1170-
mie_import_ident(ident.node.id));
1173+
mie_import_ident(ident.node.id, ident.span));
11711174
}
11721175
}
11731176
ast::view_item_import_glob(_, _) | ast::view_item_export(_, _) { }
@@ -1265,6 +1268,7 @@ fn check_mod_name(e: &env, name: &ident, entries: list<mod_index_entry>) {
12651268
fn mie_span(mie: &mod_index_entry) -> span {
12661269
ret alt mie {
12671270
mie_view_item(item) { item.span }
1271+
mie_import_ident(_, span) { span }
12681272
mie_item(item) { item.span }
12691273
mie_tag_variant(item, _) { item.span }
12701274
mie_native_item(item) { item.span }
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// error-pattern:duplicate definition of f
2+
3+
import m1::{f};
4+
import m2::{f};
5+
6+
mod m1 {
7+
fn f() {}
8+
}
9+
10+
mod m2 {
11+
fn f() {}
12+
}
13+
14+
fn main() {}

0 commit comments

Comments
 (0)