aboutsummaryrefslogtreecommitdiff
path: root/src/comp/front/creader.rs
blob: 4564ae2b42268a9263a996b3540c92ac6caf0b2f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// -*- rust -*-

import driver.session;
import front.ast;
import middle.fold;
import util.common;
import util.common.span;
import std.map.hashmap;

// TODO: map to a real type here.
type env = @hashmap[str, @ast.external_crate_info];

fn fold_view_item_use(&env e, &span sp, ast.ident ident,
        vec[@ast.meta_item] meta_items, ast.def_id id) -> @ast.view_item {
    // TODO: find the crate

    auto viu = ast.view_item_use(ident, meta_items, id);
    ret @fold.respan[ast.view_item_](sp, viu);
}

// Reads external crates referenced by "use" directives.
fn read_crates(session.session sess, @ast.crate crate) -> @ast.crate {
    auto external_crates = @common.new_str_hash[@ast.external_crate_info]();
    auto f = fold_view_item_use;
    auto fld = @rec(fold_view_item_use=f with *fold.new_identity_fold[env]());
    ret fold.fold_crate[env](external_crates, fld, crate);
}