Skip to content

Commit 2a87ddf

Browse files
committed
---
yaml --- r: 2793 b: refs/heads/master c: 2561b01 h: refs/heads/master i: 2791: eb0dbb3 v: v3
1 parent 107d7fe commit 2a87ddf

File tree

11 files changed

+63
-1937
lines changed

11 files changed

+63
-1937
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: 8e945dcd817a07d2d952acf431a6bc12a4246061
2+
refs/heads/master: 2561b01211569c376b05f4c8d1434a0e527ac950

trunk/src/comp/driver/rustc.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,6 @@ fn compile_input(session::session sess,
9090
bind parse_input(sess, p, input));
9191
if (sess.get_opts().output_type == link::output_type_none) {ret;}
9292

93-
crate = time(time_passes, "external crate reading",
94-
bind creader::read_crates(sess, crate));
9593
auto def_map = time(time_passes, "resolution",
9694
bind resolve::resolve_crate(sess, crate));
9795

@@ -121,7 +119,6 @@ fn pretty_print_input(session::session sess, eval::env env, str input,
121119

122120
auto mode;
123121
if (typed) {
124-
crate = creader::read_crates(sess, crate);
125122
auto def_map = resolve::resolve_crate(sess, crate);
126123
auto ty_cx = ty::mk_ctxt(sess, def_map);
127124
typeck::check_crate(ty_cx, crate);

trunk/src/comp/front/ast.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ type variant = spanned[variant_];
402402

403403
type view_item = spanned[view_item_];
404404
tag view_item_ {
405-
view_item_use(ident, vec[@meta_item], def_id, option::t[int]);
405+
view_item_use(ident, vec[@meta_item], def_id, ann);
406406
view_item_import(ident, vec[ident], def_id);
407407
view_item_export(ident);
408408
}

trunk/src/comp/front/creader.rs

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ import lib::llvm::False;
66
import lib::llvm::llvm;
77
import lib::llvm::mk_object_file;
88
import lib::llvm::mk_section_iter;
9-
import middle::fold;
9+
import middle::resolve;
10+
import middle::walk;
1011
import middle::metadata;
1112
import middle::trans;
1213
import middle::ty;
@@ -28,13 +29,6 @@ import std::option::some;
2829
import std::os;
2930
import std::map::hashmap;
3031

31-
// TODO: map to a real type here.
32-
type env = @rec(
33-
session::session sess,
34-
@hashmap[str, int] crate_cache,
35-
vec[str] library_search_paths,
36-
mutable int next_crate_num
37-
);
3832

3933
// Type decoding
4034

@@ -453,38 +447,49 @@ fn load_crate(session::session sess,
453447
fail;
454448
}
455449

456-
fn fold_view_item_use(&env e, &span sp, &ast::ident ident,
457-
&vec[@ast::meta_item] meta_items,
458-
&ast::def_id id, &option::t[int] cnum_opt)
459-
-> @ast::view_item {
460-
auto cnum;
461-
if (!e.crate_cache.contains_key(ident)) {
462-
cnum = e.next_crate_num;
463-
load_crate(e.sess, cnum, ident, e.library_search_paths);
464-
e.crate_cache.insert(ident, e.next_crate_num);
465-
e.next_crate_num += 1;
466-
} else {
467-
cnum = e.crate_cache.get(ident);
468-
}
450+
type env = @rec(
451+
session::session sess,
452+
resolve::crate_map crate_map,
453+
@hashmap[str, int] crate_cache,
454+
vec[str] library_search_paths,
455+
mutable int next_crate_num
456+
);
469457

470-
auto viu = ast::view_item_use(ident, meta_items, id, some[int](cnum));
471-
ret @fold::respan[ast::view_item_](sp, viu);
458+
fn visit_view_item(env e, &@ast::view_item i) {
459+
alt (i.node) {
460+
case (ast::view_item_use(?ident, ?meta_items, ?id, ?ann)) {
461+
auto cnum;
462+
if (!e.crate_cache.contains_key(ident)) {
463+
cnum = e.next_crate_num;
464+
load_crate(e.sess, cnum, ident,
465+
e.library_search_paths);
466+
e.crate_cache.insert(ident, e.next_crate_num);
467+
e.next_crate_num += 1;
468+
} else {
469+
cnum = e.crate_cache.get(ident);
470+
}
471+
e.crate_map.insert(ann.id, cnum);
472+
}
473+
case (_) { }
474+
}
472475
}
473476

477+
474478
// Reads external crates referenced by "use" directives.
475479
fn read_crates(session::session sess,
476-
@ast::crate crate) -> @ast::crate {
480+
resolve::crate_map crate_map,
481+
&ast::crate crate) {
477482
auto e = @rec(
478483
sess=sess,
484+
crate_map=crate_map,
479485
crate_cache=@common::new_str_hash[int](),
480486
library_search_paths=sess.get_opts().library_search_paths,
481487
mutable next_crate_num=1
482488
);
483489

484-
auto f = fold_view_item_use;
485-
auto fld = @rec(fold_view_item_use=f
486-
with *fold::new_identity_fold[env]());
487-
ret fold::fold_crate[env](e, fld, crate);
490+
auto v = rec(visit_view_item_pre=bind visit_view_item(e, _)
491+
with walk::default_visitor());
492+
walk::walk_crate(v, crate);
488493
}
489494

490495

trunk/src/comp/front/parser.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2181,7 +2181,7 @@ fn parse_use(&parser p) -> @ast::view_item {
21812181
auto hi = p.get_hi_pos();
21822182
expect(p, token::SEMI);
21832183
auto use_decl = ast::view_item_use(ident, metadata, p.next_def_id(),
2184-
none[int]);
2184+
p.get_ann());
21852185
ret @spanned(lo, hi, use_decl);
21862186
}
21872187

0 commit comments

Comments
 (0)