aboutsummaryrefslogtreecommitdiff
path: root/src/comp/driver
diff options
context:
space:
mode:
authorPatrick Walton <[email protected]>2011-03-25 10:42:57 -0700
committerPatrick Walton <[email protected]>2011-03-25 10:44:24 -0700
commit77a3373d53e3b0d1b87135b21307f19922398af9 (patch)
tree7ab7d8f75daab48a2d94c042aa6f4ad6a0e73297 /src/comp/driver
parentAuto-reconfigure on Makefile.in or configure change. (diff)
downloadrust-77a3373d53e3b0d1b87135b21307f19922398af9.tar.xz
rust-77a3373d53e3b0d1b87135b21307f19922398af9.zip
rustc: Create a crate metadata cache
Diffstat (limited to 'src/comp/driver')
-rw-r--r--src/comp/driver/rustc.rs5
-rw-r--r--src/comp/driver/session.rs13
2 files changed, 16 insertions, 2 deletions
diff --git a/src/comp/driver/rustc.rs b/src/comp/driver/rustc.rs
index f0ce9a95..b91d0914 100644
--- a/src/comp/driver/rustc.rs
+++ b/src/comp/driver/rustc.rs
@@ -9,6 +9,7 @@ import middle.resolve;
import middle.typeck;
import util.common;
+import std.map.mk_hashmap;
import std.option;
import std.option.some;
import std.option.none;
@@ -112,7 +113,9 @@ impure fn main(vec[str] args) {
uint_type = common.ty_u32,
float_type = common.ty_f64 );
- auto sess = session.session(target_cfg);
+ auto crate_cache = common.new_int_hash[session.crate_metadata]();
+
+ auto sess = session.session(target_cfg, crate_cache);
let option.t[str] input_file = none[str];
let option.t[str] output_file = none[str];
let vec[str] library_search_paths = vec();
diff --git a/src/comp/driver/session.rs b/src/comp/driver/session.rs
index 95f7466d..7ad83dc1 100644
--- a/src/comp/driver/session.rs
+++ b/src/comp/driver/session.rs
@@ -1,6 +1,7 @@
import util.common.span;
import util.common.ty_mach;
import std._uint;
+import std.map;
tag os {
os_win32;
@@ -20,7 +21,9 @@ type cfg = rec(os os,
ty_mach uint_type,
ty_mach float_type);
-obj session(cfg targ) {
+type crate_metadata = vec[u8];
+
+obj session(cfg targ, map.hashmap[int, crate_metadata] crates) {
fn get_targ_cfg() -> cfg {
ret targ;
@@ -66,6 +69,14 @@ obj session(cfg targ) {
log #fmt("error: unimplemented %s", msg);
fail;
}
+
+ fn get_external_crate(int num) -> crate_metadata {
+ ret crates.get(num);
+ }
+
+ fn set_external_crate(int num, &crate_metadata metadata) {
+ crates.insert(num, metadata);
+ }
}