From dd8ab24da2fb8fcf06f9af664177f404b9a2e7e6 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Fri, 8 Jul 2011 12:08:43 -0700 Subject: [PATCH] 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. --- src/comp/metadata/creader.rs | 7 +++++-- src/comp/metadata/cstore.rs | 10 +++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/comp/metadata/creader.rs b/src/comp/metadata/creader.rs index db4d99130e1..a0dd2687cb0 100644 --- a/src/comp/metadata/creader.rs +++ b/src/comp/metadata/creader.rs @@ -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; } diff --git a/src/comp/metadata/cstore.rs b/src/comp/metadata/cstore.rs index 1ddb378dab3..bf1bafc354c 100644 --- a/src/comp/metadata/cstore.rs +++ b/src/comp/metadata/cstore.rs @@ -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];