Skip to content

Commit 8640f19

Browse files
committed
Merge branch 'master' of github.com:graydon/rust
2 parents 99106e4 + a2081de commit 8640f19

File tree

1 file changed

+10
-19
lines changed

1 file changed

+10
-19
lines changed

src/comp/middle/resolve.rs

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ tag def_wrap {
3535
def_wrap_import(@ast.view_item);
3636
def_wrap_mod(@ast.item);
3737
def_wrap_other(def);
38-
def_wrap_expr_field(uint);
38+
def_wrap_expr_field(uint, def);
3939
def_wrap_resolving;
4040
}
4141

@@ -72,6 +72,9 @@ fn unwrap_def(def_wrap d) -> def {
7272
case (def_wrap_other(?d)) {
7373
ret d;
7474
}
75+
case (def_wrap_expr_field(_, ?d)) {
76+
ret d;
77+
}
7578
}
7679
}
7780

@@ -140,9 +143,9 @@ fn find_final_def(&env e, import_map index,
140143
case (def_wrap_use(?c)) {
141144
e.sess.span_err(sp, "Crate access is not implemented");
142145
}
143-
case (_) {
146+
case (def_wrap_other(?d)) {
144147
let uint l = _vec.len[ident](idents);
145-
ret def_wrap_expr_field(l);
148+
ret def_wrap_expr_field(l, d);
146149
}
147150
}
148151
fail;
@@ -419,26 +422,13 @@ fn fold_pat_tag(&env e, &span sp, ast.path p, vec[@ast.pat] args,
419422
fn fold_expr_path(&env e, &span sp, &ast.path p, &option.t[def] d,
420423
ann a) -> @ast.expr {
421424
auto n_idents = _vec.len[ast.ident](p.node.idents);
422-
423425
check (n_idents != 0u);
424-
auto id0 = p.node.idents.(0);
425-
426-
auto d_ = lookup_name(e, id0);
427-
428-
alt (d_) {
429-
case (some[def](_)) {
430-
// log "resolved name " + n.node.ident;
431-
}
432-
case (none[def]) {
433-
e.sess.span_err(sp, "unresolved name: " + id0);
434-
}
435-
}
436426

437427
auto index = new_def_hash[def_wrap]();
438428
auto d = find_final_def(e, index, sp, p.node.idents, none[ast.def_id]);
439429
let uint path_len = 0u;
440430
alt (d) {
441-
case (def_wrap_expr_field(?remaining)) {
431+
case (def_wrap_expr_field(?remaining, _)) {
442432
path_len = n_idents - remaining + 1u;
443433
}
444434
case (def_wrap_other(_)) {
@@ -453,7 +443,8 @@ fn fold_expr_path(&env e, &span sp, &ast.path p, &option.t[def] d,
453443
}
454444
auto path_elems =
455445
_vec.slice[ident](p.node.idents, 0u, path_len);
456-
auto p_ = rec(node=rec(idents = vec(id0) with p.node) with p);
446+
auto p_ = rec(node=rec(idents = path_elems with p.node) with p);
447+
auto d_ = some(unwrap_def(d));
457448
auto ex = @fold.respan[ast.expr_](sp, ast.expr_path(p_, d_, a));
458449
auto i = path_len;
459450
while (i < n_idents) {
@@ -473,7 +464,7 @@ fn fold_view_item_import(&env e, &span sp,
473464
auto last_id = is.(len - 1u);
474465
auto d = find_final_def(e, index, sp, is, some(id));
475466
alt (d) {
476-
case (def_wrap_expr_field(?remain)) {
467+
case (def_wrap_expr_field(?remain, _)) {
477468
auto ident = is.(len - remain);
478469
e.sess.span_err(sp, ident + " is not a module or crate");
479470
}

0 commit comments

Comments
 (0)