Skip to content

Commit ed712ed

Browse files
cixtorgraydon
authored andcommitted
---
yaml --- r: 1250 b: refs/heads/master c: 58490d7 h: refs/heads/master v: v3
1 parent ffdca06 commit ed712ed

File tree

4 files changed

+48
-13
lines changed

4 files changed

+48
-13
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: d1fdf0ab231eb60d4a388944a6a44adb818aa9fc
2+
refs/heads/master: 58490d7fa0a39188915f80e04ef3cf7d6eaf3c90

trunk/src/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,7 @@ TEST_XFAILS_RUSTC := $(filter-out \
448448
import4.rs \
449449
import5.rs \
450450
import6.rs \
451+
import7.rs \
451452
item-name-overload.rs \
452453
large-records.rs \
453454
lazy-init.rs \

trunk/src/comp/middle/resolve.rs

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@ fn lookup_name(&env e, import_map index,
4040
ast.ident i) -> option.t[def] {
4141
auto d_ = lookup_name_wrapped(e, i);
4242
alt (d_) {
43-
case (none[def_wrap]) {
43+
case (none[tup(@env, def_wrap)]) {
4444
ret none[def];
4545
}
46-
case (some[def_wrap](?d)) {
47-
alt (d) {
46+
case (some[tup(@env, def_wrap)](?d)) {
47+
alt (d._1) {
4848
case (def_wrap_use(?it)) {
4949
alt (it.node) {
5050
case (ast.view_item_use(_, _, ?id)) {
@@ -115,14 +115,14 @@ fn find_final_def(&env e, &span sp, vec[ident] idents) -> def_wrap {
115115
auto next_i = rest_idents.(0);
116116
auto next_ = lookup_name_wrapped(tmp_e, next_i);
117117
alt (next_) {
118-
case (none[def_wrap]) {
118+
case (none[tup(@env, def_wrap)]) {
119119
e.sess.span_err(sp, "unresolved name: " + next_i);
120120
fail;
121121
}
122-
case (some[def_wrap](?next)) {
122+
case (some[tup(@env, def_wrap)](?next)) {
123123
auto combined_e = update_env_for_item(e, i);
124124
ret found_something(combined_e, pending, sp,
125-
rest_idents, next);
125+
rest_idents, next._1);
126126
}
127127
}
128128
}
@@ -141,20 +141,20 @@ fn find_final_def(&env e, &span sp, vec[ident] idents) -> def_wrap {
141141
auto first = idents.(0);
142142
auto d_ = lookup_name_wrapped(e, first);
143143
alt (d_) {
144-
case (none[def_wrap]) {
144+
case (none[tup(@env, def_wrap)]) {
145145
e.sess.span_err(sp, "unresolved name: " + first);
146146
fail;
147147
}
148-
case (some[def_wrap](?d)) {
149-
ret found_something(e, pending, sp, idents, d);
148+
case (some[tup(@env, def_wrap)](?d)) {
149+
ret found_something(*d._0, pending, sp, idents, d._1);
150150
}
151151
}
152152
}
153153
auto pending = new_def_hash[bool]();
154154
ret inner(e, pending, sp, idents);
155155
}
156156

157-
fn lookup_name_wrapped(&env e, ast.ident i) -> option.t[def_wrap] {
157+
fn lookup_name_wrapped(&env e, ast.ident i) -> option.t[tup(@env, def_wrap)] {
158158

159159
// log "resolving name " + i;
160160

@@ -308,8 +308,23 @@ fn lookup_name_wrapped(&env e, ast.ident i) -> option.t[def_wrap] {
308308
ret none[def_wrap];
309309
}
310310

311-
ret std.list.find[scope,def_wrap](e.scopes,
312-
bind in_scope(i, _));
311+
alt (e.scopes) {
312+
case (nil[scope]) {
313+
ret none[tup(@env, def_wrap)];
314+
}
315+
case (cons[scope](?hd, ?tl)) {
316+
auto x = in_scope(i, hd);
317+
alt (x) {
318+
case (some[def_wrap](?x)) {
319+
ret some(tup(@e, x));
320+
}
321+
case (none[def_wrap]) {
322+
auto outer_env = rec(scopes = *tl with e);
323+
ret lookup_name_wrapped(outer_env, i);
324+
}
325+
}
326+
}
327+
}
313328
}
314329

315330
fn fold_pat_tag(&env e, &span sp, import_map index, ident i,

trunk/src/test/run-pass/import7.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import bar.baz;
2+
import foo.zed;
3+
mod foo {
4+
mod zed {
5+
fn baz() {
6+
log "baz";
7+
}
8+
}
9+
}
10+
mod bar {
11+
import zed.baz;
12+
mod foo {
13+
mod zed {
14+
}
15+
}
16+
}
17+
fn main(vec[str] args) {
18+
baz();
19+
}

0 commit comments

Comments
 (0)