Add a map from external cnums to local cnums in cstore::crate_metadata

Once populated, this will allow us to load type info for types defined in
external crates referenced by other external crates.
This commit is contained in:
Brian Anderson 2011-07-08 12:08:43 -07:00
parent 061bcb2e42
commit dd8ab24da2
2 changed files with 14 additions and 3 deletions

View File

@ -22,6 +22,7 @@ import std::option;
import std::option::none;
import std::option::some;
import std::map::hashmap;
import std::map::new_int_hash;
import syntax::print::pprust;
import common::*;
@ -225,8 +226,10 @@ fn load_library_crate(&session::session sess, span span, ast::crate_num cnum,
alt (find_library_crate(sess, ident, metas, library_search_paths)) {
case (some(?t)) {
auto cstore = sess.get_cstore();
cstore::set_crate_data(cstore, cnum,
rec(name=ident, data=t._1));
auto cmeta = rec(name=ident,
data=t._1,
cnum_map = new_int_hash[ast::crate_num]());
cstore::set_crate_data(cstore, cnum, cmeta);
cstore::add_used_crate_file(cstore, t._0);
ret;
}

View File

@ -6,7 +6,15 @@ import std::vec;
import std::str;
import syntax::ast;
type crate_metadata = rec(str name, vec[u8] data);
// A map from external crate numbers (as decoded from some crate file) to
// local crate numbers (as generated during this session). Each external
// crate may refer to types in other external crates, and each has their
// own crate numbers.
type cnum_map = map::hashmap[ast::crate_num, ast::crate_num];
type crate_metadata = rec(str name,
vec[u8] data,
cnum_map cnum_map);
// Map from node_id's of local use statements to crate numbers
type use_crate_map = map::hashmap[ast::node_id, ast::crate_num];