Skip to content

Commit e9c12ab

Browse files
committed
Rewrite comp/middle/resolve.rs
* Cleans up the algorithm * Move first pass to walk (second still folds) * Support part of a type/value namespace split (crate metadata and module indices still need to be taught about this) * Remove a few blatant inefficiencies (import tables being recreated for every lookup, most importantly)
1 parent e4c3287 commit e9c12ab

File tree

12 files changed

+571
-658
lines changed

12 files changed

+571
-658
lines changed

src/comp/front/ast.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ type variant = spanned[variant_];
403403
type view_item = spanned[view_item_];
404404
tag view_item_ {
405405
view_item_use(ident, vec[@meta_item], def_id, Option.t[int]);
406-
view_item_import(ident, vec[ident], def_id, Option.t[def]);
406+
view_item_import(ident, vec[ident], def_id);
407407
view_item_export(ident);
408408
}
409409

@@ -432,7 +432,7 @@ fn index_view_item(mod_index index, @view_item it) {
432432
case(ast.view_item_use(?id, _, _, _)) {
433433
index.insert(id, ast.mie_view_item(it));
434434
}
435-
case(ast.view_item_import(?def_ident,_,_,_)) {
435+
case(ast.view_item_import(?def_ident,_,_)) {
436436
index.insert(def_ident, ast.mie_view_item(it));
437437
}
438438
case(ast.view_item_export(_)) {
@@ -488,7 +488,7 @@ fn index_native_item(native_mod_index index, @native_item it) {
488488

489489
fn index_native_view_item(native_mod_index index, @view_item it) {
490490
alt (it.node) {
491-
case(ast.view_item_import(?def_ident,_,_,_)) {
491+
case(ast.view_item_import(?def_ident,_,_)) {
492492
index.insert(def_ident, ast.nmie_view_item(it));
493493
}
494494
case(ast.view_item_export(_)) {

src/comp/front/creader.rs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -635,14 +635,8 @@ fn list_crate_metadata(vec[u8] bytes, IO.writer out) {
635635

636636
fn describe_def(&EBML.doc items, ast.def_id id) -> str {
637637
if (id._0 != 0) {ret "external";}
638-
alt (maybe_find_item(id._1 as int, items)) {
639-
case (Option.some[EBML.doc](?item)) {
640-
ret item_kind_to_str(item_kind(item));
641-
}
642-
case (Option.none[EBML.doc]) {
643-
ret "??"; // Native modules don't seem to get item entries.
644-
}
645-
}
638+
auto item = find_item(id._1, items);
639+
ret item_kind_to_str(item_kind(item));
646640
}
647641

648642
fn item_kind_to_str(u8 kind) -> str {

src/comp/front/parser.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2309,8 +2309,7 @@ fn parse_rest_import_name(parser p, ast.ident first,
23092309
}
23102310
}
23112311
auto import_decl = ast.view_item_import(defined_id, identifiers,
2312-
p.next_def_id(),
2313-
none[ast.def]);
2312+
p.next_def_id());
23142313
ret @spanned(lo, hi, import_decl);
23152314
}
23162315

src/comp/middle/fold.rs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -291,8 +291,7 @@ type ast_fold[ENV] =
291291

292292
(fn(&ENV e, &span sp, &ident i,
293293
&vec[ident] idents,
294-
&def_id id,
295-
&Option.t[def]) -> @view_item) fold_view_item_import,
294+
&def_id id) -> @view_item) fold_view_item_import,
296295

297296
(fn(&ENV e, &span sp,
298297
&ident i) -> @view_item) fold_view_item_export,
@@ -981,10 +980,9 @@ fn fold_view_item[ENV](&ENV env, &ast_fold[ENV] fld, &@view_item vi)
981980
ret fld.fold_view_item_use(env_, vi.span, ident, meta_items,
982981
def_id, cnum);
983982
}
984-
case (ast.view_item_import(?def_ident, ?idents, ?def_id,
985-
?target_def)) {
983+
case (ast.view_item_import(?def_ident, ?idents, ?def_id)) {
986984
ret fld.fold_view_item_import(env_, vi.span, def_ident, idents,
987-
def_id, target_def);
985+
def_id);
988986
}
989987

990988
case (ast.view_item_export(?def_ident)) {
@@ -1538,10 +1536,9 @@ fn identity_fold_view_item_use[ENV](&ENV e, &span sp, &ident i,
15381536
}
15391537

15401538
fn identity_fold_view_item_import[ENV](&ENV e, &span sp, &ident i,
1541-
&vec[ident] is, &def_id id,
1542-
&Option.t[def] target_def)
1539+
&vec[ident] is, &def_id id)
15431540
-> @view_item {
1544-
ret @respan(sp, ast.view_item_import(i, is, id, target_def));
1541+
ret @respan(sp, ast.view_item_import(i, is, id));
15451542
}
15461543

15471544
fn identity_fold_view_item_export[ENV](&ENV e, &span sp, &ident i)
@@ -1747,7 +1744,7 @@ fn new_identity_fold[ENV]() -> ast_fold[ENV] {
17471744
fold_view_item_use =
17481745
bind identity_fold_view_item_use[ENV](_,_,_,_,_,_),
17491746
fold_view_item_import =
1750-
bind identity_fold_view_item_import[ENV](_,_,_,_,_,_),
1747+
bind identity_fold_view_item_import[ENV](_,_,_,_,_),
17511748
fold_view_item_export =
17521749
bind identity_fold_view_item_export[ENV](_,_,_),
17531750

src/comp/middle/metadata.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,7 @@ fn encode_info_for_item(@trans.crate_ctxt cx, &EBML.writer ebml_w,
513513
encode_kind(ebml_w, 'm' as u8);
514514
EBML.end_tag(ebml_w);
515515
}
516-
case (ast.item_native_mod(_, _, ?did)) {
516+
case (ast.item_native_mod(?id, _, ?did)) {
517517
EBML.start_tag(ebml_w, tag_items_data_item);
518518
encode_def_id(ebml_w, did);
519519
encode_kind(ebml_w, 'n' as u8);

0 commit comments

Comments
 (0)