Skip to content

Commit 546c6c5

Browse files
cixtorgraydon
authored andcommitted
---
yaml --- r: 1233 b: refs/heads/master c: 359d72b h: refs/heads/master i: 1231: acdc02b v: v3
1 parent 0a13d9b commit 546c6c5

File tree

5 files changed

+67
-59
lines changed

5 files changed

+67
-59
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: 2aa36777f1da8383cd62be6f75ecdaed283b253d
2+
refs/heads/master: 359d72b4d047c3eb6fa13b0ae7b4a7432c0af785

trunk/src/comp/front/ast.rs

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
import std.map.hashmap;
33
import std.option;
4+
import std._vec;
45
import util.common.span;
56
import util.common.spanned;
67
import util.common.ty_mach;
@@ -213,9 +214,9 @@ type _obj = rec(vec[obj_field] fields,
213214

214215

215216
tag mod_index_entry {
216-
mie_view_item(uint);
217-
mie_item(uint);
218-
mie_tag_variant(uint /* tag item index */, uint /* variant index */);
217+
mie_view_item(@view_item);
218+
mie_item(@item);
219+
mie_tag_variant(@item /* tag item */, uint /* variant index */);
219220
}
220221

221222
type mod_index = hashmap[ident,mod_index_entry];
@@ -242,6 +243,47 @@ tag item_ {
242243
item_obj(ident, _obj, vec[ty_param], def_id, ann);
243244
}
244245

246+
fn index_view_item(mod_index index, @view_item it) {
247+
alt (it.node) {
248+
case(ast.view_item_use(?id, _, _)) {
249+
index.insert(id, ast.mie_view_item(it));
250+
}
251+
case(ast.view_item_import(?ids,_)) {
252+
auto len = _vec.len[ast.ident](ids);
253+
auto last_id = ids.(len - 1u);
254+
index.insert(last_id, ast.mie_view_item(it));
255+
}
256+
}
257+
}
258+
259+
fn index_item(mod_index index, @item it) {
260+
alt (it.node) {
261+
case (ast.item_const(?id, _, _, _, _)) {
262+
index.insert(id, ast.mie_item(it));
263+
}
264+
case (ast.item_fn(?id, _, _, _, _)) {
265+
index.insert(id, ast.mie_item(it));
266+
}
267+
case (ast.item_mod(?id, _, _)) {
268+
index.insert(id, ast.mie_item(it));
269+
}
270+
case (ast.item_ty(?id, _, _, _, _)) {
271+
index.insert(id, ast.mie_item(it));
272+
}
273+
case (ast.item_tag(?id, ?variants, _, _)) {
274+
index.insert(id, ast.mie_item(it));
275+
let uint variant_idx = 0u;
276+
for (ast.variant v in variants) {
277+
index.insert(v.name,
278+
ast.mie_tag_variant(it, variant_idx));
279+
variant_idx += 1u;
280+
}
281+
}
282+
case (ast.item_obj(?id, _, _, _, _)) {
283+
index.insert(id, ast.mie_item(it));
284+
}
285+
}
286+
}
245287

246288
//
247289
// Local Variables:

trunk/src/comp/front/parser.rs

Lines changed: 8 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1418,44 +1418,16 @@ impure fn parse_item_obj(parser p, ast.layer lyr) -> @ast.item {
14181418
ret @spanned(lo, meths.span, item);
14191419
}
14201420

1421-
fn index_mod_item(@ast.item item, ast.mod_index index, uint u) {
1422-
alt (item.node) {
1423-
case (ast.item_const(?id, _, _, _, _)) {
1424-
index.insert(id, ast.mie_item(u));
1425-
}
1426-
case (ast.item_fn(?id, _, _, _, _)) {
1427-
index.insert(id, ast.mie_item(u));
1428-
}
1429-
case (ast.item_mod(?id, _, _)) {
1430-
index.insert(id, ast.mie_item(u));
1431-
}
1432-
case (ast.item_ty(?id, _, _, _, _)) {
1433-
index.insert(id, ast.mie_item(u));
1434-
}
1435-
case (ast.item_tag(?id, ?variants, _, _)) {
1436-
index.insert(id, ast.mie_item(u));
1437-
let uint variant_idx = 0u;
1438-
for (ast.variant v in variants) {
1439-
index.insert(v.name, ast.mie_tag_variant(u, variant_idx));
1440-
variant_idx += 1u;
1441-
}
1442-
}
1443-
case (ast.item_obj(?id, _, _, _, _)) {
1444-
index.insert(id, ast.mie_item(u));
1445-
}
1446-
}
1447-
}
1448-
14491421
impure fn parse_mod_items(parser p, token.token term) -> ast._mod {
14501422
auto index = new_str_hash[ast.mod_index_entry]();
14511423
auto view_items = parse_view(p, index);
1452-
let uint u = 0u;
14531424
let vec[@ast.item] items = vec();
14541425
while (p.peek() != term) {
14551426
auto item = parse_item(p);
14561427
items += vec(item);
1457-
index_mod_item(item, index, u);
1458-
u += 1u;
1428+
1429+
// Index the item.
1430+
ast.index_item(index, item);
14591431
}
14601432
ret rec(view_items=view_items, items=items, index=index);
14611433
}
@@ -1760,21 +1732,11 @@ fn is_use_or_import(token.token t) -> bool {
17601732

17611733
impure fn parse_view(parser p, ast.mod_index index) -> vec[@ast.view_item] {
17621734
let vec[@ast.view_item] items = vec();
1763-
let uint u = 0u;
17641735
while (is_use_or_import(p.peek())) {
17651736
auto item = parse_use_or_import(p);
17661737
items += vec(item);
1767-
alt (item.node) {
1768-
case(ast.view_item_use(?id, _, _)) {
1769-
index.insert(id, ast.mie_view_item(u));
1770-
}
1771-
case(ast.view_item_import(?ids,_)) {
1772-
auto len = _vec.len[ast.ident](ids);
1773-
auto last_id = ids.(len - 1u);
1774-
index.insert(last_id, ast.mie_view_item(u));
1775-
}
1776-
}
1777-
u = u + 1u;
1738+
1739+
ast.index_view_item(index, item);
17781740
}
17791741
ret items;
17801742
}
@@ -1801,7 +1763,7 @@ impure fn parse_crate_directive(str prefix, parser p,
18011763
alt (p.peek()) {
18021764
case (token.CONST) {
18031765
auto c = parse_item_const(p);
1804-
index_mod_item(c, index, _vec.len[@ast.item](items));
1766+
ast.index_item(index, c);
18051767
append[@ast.item](items, c);
18061768
}
18071769
case (token.MOD) {
@@ -1834,7 +1796,7 @@ impure fn parse_crate_directive(str prefix, parser p,
18341796
auto m0 = parse_mod_items(p0, token.EOF);
18351797
auto im = ast.item_mod(id, m0, p.next_def_id());
18361798
auto i = @spanned(lo, hi, im);
1837-
index_mod_item(i, index, _vec.len[@ast.item](items));
1799+
ast.index_item(index, i);
18381800
append[@ast.item](items, i);
18391801
}
18401802

@@ -1848,7 +1810,7 @@ impure fn parse_crate_directive(str prefix, parser p,
18481810
expect(p, token.RBRACE);
18491811
auto im = ast.item_mod(id, m0, p.next_def_id());
18501812
auto i = @spanned(lo, hi, im);
1851-
index_mod_item(i, index, _vec.len[@ast.item](items));
1813+
ast.index_item(index, i);
18521814
append[@ast.item](items, i);
18531815
}
18541816

trunk/src/comp/middle/fold.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -779,14 +779,18 @@ fn fold_mod[ENV](&ENV e, ast_fold[ENV] fld, &ast._mod m) -> ast._mod {
779779

780780
let vec[@view_item] view_items = vec();
781781
let vec[@item] items = vec();
782-
auto index = m.index;
782+
auto index = new_str_hash[ast.mod_index_entry]();
783783

784784
for (@view_item vi in m.view_items) {
785-
append[@view_item](view_items, fold_view_item[ENV](e, fld, vi));
785+
auto new_vi = fold_view_item[ENV](e, fld, vi);
786+
append[@view_item](view_items, new_vi);
787+
ast.index_view_item(index, new_vi);
786788
}
787789

788790
for (@item i in m.items) {
789-
append[@item](items, fold_item[ENV](e, fld, i));
791+
auto new_item = fold_item[ENV](e, fld, i);
792+
append[@item](items, new_item);
793+
ast.index_item(index, new_item);
790794
}
791795

792796
ret fld.fold_mod(e, rec(view_items=view_items, items=items, index=index));

trunk/src/comp/middle/resolve.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -166,14 +166,14 @@ fn lookup_name(&env e, option.t[import_map] index,
166166
alt (m.index.find(i)) {
167167
case (some[ast.mod_index_entry](?ent)) {
168168
alt (ent) {
169-
case (ast.mie_view_item(?ix)) {
170-
ret found_def_view(e, index, m.view_items.(ix));
169+
case (ast.mie_view_item(?view_item)) {
170+
ret found_def_view(e, index, view_item);
171171
}
172-
case (ast.mie_item(?ix)) {
173-
ret found_def_item(m.items.(ix));
172+
case (ast.mie_item(?item)) {
173+
ret found_def_item(item);
174174
}
175-
case (ast.mie_tag_variant(?item_idx, ?variant_idx)) {
176-
alt (m.items.(item_idx).node) {
175+
case (ast.mie_tag_variant(?item, ?variant_idx)) {
176+
alt (item.node) {
177177
case (ast.item_tag(_, ?variants, _, ?tid)) {
178178
auto vid = variants.(variant_idx).id;
179179
auto t = ast.def_variant(tid, vid);

0 commit comments

Comments
 (0)