Skip to content

Commit c8c43ee

Browse files
committed
---
yaml --- r: 1189 b: refs/heads/master c: e0fe271 h: refs/heads/master i: 1187: dfe5859 v: v3
1 parent f17b7de commit c8c43ee

File tree

4 files changed

+39
-12
lines changed

4 files changed

+39
-12
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: 5fd3d2ca5516cfe5087d802c1b207943a64653da
2+
refs/heads/master: e0fe271d3459d04af9e1580c396b4698063e1999

trunk/src/comp/front/ast.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ tag def {
3535
def_ty(def_id);
3636
def_ty_arg(def_id);
3737
def_binding(def_id);
38+
def_use(def_id);
3839
}
3940

4041
type crate = spanned[crate_];
@@ -212,20 +213,23 @@ type _obj = rec(vec[obj_field] fields,
212213

213214

214215
tag mod_index_entry {
216+
mie_use(uint);
215217
mie_item(uint);
216218
mie_tag_variant(uint /* tag item index */, uint /* variant index */);
217219
}
218220

219-
type _mod = rec(vec[@item] items,
220-
hashmap[ident,mod_index_entry] index);
221+
type mod_index = hashmap[ident,mod_index_entry];
222+
type _mod = rec(vec[@view_item] view_items,
223+
vec[@item] items,
224+
mod_index index);
221225

222226
type variant_arg = rec(@ty ty, def_id id);
223227
type variant = rec(str name, vec[variant_arg] args, def_id id, ann ann);
224228

225229
type view_item = spanned[view_item_];
226230
tag view_item_ {
227-
view_item_use(ident, vec[@meta_item]);
228-
view_item_import(vec[ident]);
231+
view_item_use(ident, vec[@meta_item], def_id);
232+
view_item_import(vec[ident], def_id);
229233
}
230234

231235
type item = spanned[item_];

trunk/src/comp/front/parser.rs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1405,11 +1405,10 @@ impure fn parse_item_obj(parser p, ast.layer lyr) -> @ast.item {
14051405
}
14061406

14071407
impure fn parse_mod_items(parser p, token.token term) -> ast._mod {
1408-
parse_view(p);
1409-
1410-
let vec[@ast.item] items = vec();
14111408
auto index = new_str_hash[ast.mod_index_entry]();
1409+
auto view_items = parse_view(p, index);
14121410
let uint u = 0u;
1411+
let vec[@ast.item] items = vec();
14131412
while (p.peek() != term) {
14141413
auto item = parse_item(p);
14151414
items += vec(item);
@@ -1443,7 +1442,7 @@ impure fn parse_mod_items(parser p, token.token term) -> ast._mod {
14431442

14441443
u += 1u;
14451444
}
1446-
ret rec(items=items, index=index);
1445+
ret rec(view_items=view_items, items=items, index=index);
14471446
}
14481447

14491448
impure fn parse_item_const(parser p) -> @ast.item {
@@ -1669,7 +1668,7 @@ impure fn parse_use(parser p) -> @ast.view_item {
16691668
auto ident = parse_ident(p);
16701669
auto metadata = parse_optional_meta(p);
16711670
expect(p, token.SEMI);
1672-
auto use_decl = ast.view_item_use(ident, metadata);
1671+
auto use_decl = ast.view_item_use(ident, metadata, p.next_def_id());
16731672
ret @spanned(lo, hi, use_decl);
16741673
}
16751674

@@ -1684,7 +1683,7 @@ impure fn parse_rest_import_name(parser p, ast.ident id) -> @ast.view_item {
16841683
identifiers += i;
16851684
}
16861685
p.bump();
1687-
auto import_decl = ast.view_item_import(identifiers);
1686+
auto import_decl = ast.view_item_import(identifiers, p.next_def_id());
16881687
ret @spanned(lo, hi, import_decl);
16891688
}
16901689

@@ -1744,11 +1743,21 @@ fn is_use_or_import(token.token t) -> bool {
17441743
ret false;
17451744
}
17461745

1747-
impure fn parse_view(parser p) -> vec[@ast.view_item] {
1746+
impure fn parse_view(parser p, ast.mod_index index) -> vec[@ast.view_item] {
17481747
let vec[@ast.view_item] items = vec();
1748+
let uint u = 0u;
17491749
while (is_use_or_import(p.peek())) {
17501750
auto item = parse_use_or_import(p);
17511751
items += vec(item);
1752+
alt (item.node) {
1753+
case(ast.view_item_use(?id, _, _)) {
1754+
index.insert(id, ast.mie_use(u));
1755+
}
1756+
case(ast.view_item_import(?ids,_)) {
1757+
// FIXME
1758+
}
1759+
}
1760+
u = u + 1u;
17521761
}
17531762
ret items;
17541763
}

trunk/src/comp/middle/resolve.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,24 @@ fn lookup_name(&env e, ast.ident i) -> option.t[def] {
6767
ret none[def];
6868
}
6969

70+
fn found_def_view(@ast.view_item i) -> option.t[def] {
71+
alt (i.node) {
72+
case (ast.view_item_use(_, _, ?id)) {
73+
ret some[def](ast.def_use(id));
74+
}
75+
case (ast.view_item_import(_,?id)) {
76+
fail;
77+
}
78+
}
79+
}
80+
7081
fn check_mod(ast.ident i, ast._mod m) -> option.t[def] {
7182
alt (m.index.find(i)) {
7283
case (some[ast.mod_index_entry](?ent)) {
7384
alt (ent) {
85+
case (ast.mie_use(?ix)) {
86+
ret found_def_view(m.view_items.(ix));
87+
}
7488
case (ast.mie_item(?ix)) {
7589
ret found_def_item(m.items.(ix));
7690
}

0 commit comments

Comments
 (0)