rustc: Store cached crate metadata in the session

This commit is contained in:
Patrick Walton 2011-03-25 11:10:50 -07:00
parent 9ca7acb1f3
commit e2d6475308
6 changed files with 37 additions and 35 deletions

View file

@ -265,7 +265,7 @@ type ast_fold[ENV] =
// View Item folds.
(fn(&ENV e, &span sp, ident ident,
vec[@meta_item] meta_items,
def_id id, ann a) -> @view_item) fold_view_item_use,
def_id id, option.t[int]) -> @view_item) fold_view_item_use,
(fn(&ENV e, &span sp, ident i, vec[ident] idents,
def_id id, option.t[def]) -> @view_item) fold_view_item_import,
@ -883,9 +883,9 @@ fn fold_view_item[ENV](&ENV env, ast_fold[ENV] fld, @view_item vi)
}
alt (vi.node) {
case (ast.view_item_use(?ident, ?meta_items, ?def_id, ?ann)) {
case (ast.view_item_use(?ident, ?meta_items, ?def_id, ?cnum)) {
ret fld.fold_view_item_use(env_, vi.span, ident, meta_items,
def_id, ann);
def_id, cnum);
}
case (ast.view_item_import(?def_ident, ?idents, ?def_id,
?target_def)) {
@ -1400,8 +1400,9 @@ fn identity_fold_item_obj[ENV](&ENV e, &span sp, ident i,
fn identity_fold_view_item_use[ENV](&ENV e, &span sp, ident i,
vec[@meta_item] meta_items,
def_id id, ann a) -> @view_item {
ret @respan(sp, ast.view_item_use(i, meta_items, id, a));
def_id id, option.t[int] cnum)
-> @view_item {
ret @respan(sp, ast.view_item_use(i, meta_items, id, cnum));
}
fn identity_fold_view_item_import[ENV](&ENV e, &span sp, ident i,

View file

@ -137,11 +137,10 @@ fn find_final_def(&env e, import_map index,
}
fn found_crate(&env e, &import_map index, &span sp,
vec[ident] idents,
@ast.external_crate_info cinfo) -> def_wrap {
vec[ident] idents, int cnum) -> def_wrap {
auto len = _vec.len[ident](idents);
auto rest_idents = _vec.slice[ident](idents, 1u, len);
auto def = creader.lookup_def(sp, cinfo, rest_idents);
auto def = creader.lookup_def(e.sess, sp, cnum, rest_idents);
ret def_wrap_other(def);
}
@ -171,12 +170,9 @@ fn find_final_def(&env e, import_map index,
}
case (def_wrap_use(?vi)) {
alt (vi.node) {
case (ast.view_item_use(_, _, _, ?ann)) {
alt (ann) {
case (ast.ann_crate(?cinfo)) {
ret found_crate(e, index, sp, idents, cinfo);
}
}
case (ast.view_item_use(_, _, _, ?cnum_opt)) {
auto cnum = option.get[int](cnum_opt);
ret found_crate(e, index, sp, idents, cnum);
}
}
}