about summary refs log tree commit diff
path: root/src/comp
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2011-07-07 18:00:16 -0700
committerBrian Anderson <banderson@mozilla.com>2011-07-08 09:37:00 -0700
commitb23ecd47ceb7468d5132b9bf81d1d9c4e3fd1084 (patch)
tree79491342bc8070b2f54a8e43173c4ea5d4edd95d /src/comp
parentc7bfef43c8c9eed4ff39f2e68b5a224d19876439 (diff)
downloadrust-b23ecd47ceb7468d5132b9bf81d1d9c4e3fd1084.tar.gz
rust-b23ecd47ceb7468d5132b9bf81d1d9c4e3fd1084.zip
Introduce metadata::cstore
I intend for this to be the location for storing all the data retrieved by
creader, most of which is currently in the session.
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/driver/rustc.rs3
-rw-r--r--src/comp/driver/session.rs2
-rw-r--r--src/comp/metadata/cstore.rs37
-rw-r--r--src/comp/rustc.rc2
4 files changed, 43 insertions, 1 deletions
diff --git a/src/comp/driver/rustc.rs b/src/comp/driver/rustc.rs
index db9d858db04..4c6615f11b3 100644
--- a/src/comp/driver/rustc.rs
+++ b/src/comp/driver/rustc.rs
@@ -352,8 +352,9 @@ fn build_session_options(str binary, getopts::match match, str binary_dir) ->
 
 fn build_session(@session::options sopts) -> session::session {
     auto target_cfg = build_target_config();
+    auto cstore = metadata::cstore::mk_cstore();
     auto crate_cache = std::map::new_int_hash[session::crate_metadata]();
-    ret session::session(target_cfg, sopts, crate_cache, [],
+    ret session::session(target_cfg, sopts, cstore, crate_cache, [],
                          [], [], codemap::new_codemap(), 0u);
 }
 
diff --git a/src/comp/driver/session.rs b/src/comp/driver/session.rs
index f4022d4de6a..d0112704e24 100644
--- a/src/comp/driver/session.rs
+++ b/src/comp/driver/session.rs
@@ -45,6 +45,7 @@ type crate_metadata = rec(str name, vec[u8] data);
 
 obj session(@config targ_cfg,
             @options opts,
+            metadata::cstore::cstore cstore,
             map::hashmap[int, crate_metadata] crates,
             mutable vec[str] used_crate_files,
             mutable vec[str] used_libraries,
@@ -53,6 +54,7 @@ obj session(@config targ_cfg,
             mutable uint err_count) {
     fn get_targ_cfg() -> @config { ret targ_cfg; }
     fn get_opts() -> @options { ret opts; }
+    fn get_cstore() -> metadata::cstore::cstore { cstore }
     fn span_fatal(span sp, str msg) -> ! {
         // FIXME: Use constants, but rustboot doesn't know how to export them.
         codemap::emit_error(some(sp), msg, cm);
diff --git a/src/comp/metadata/cstore.rs b/src/comp/metadata/cstore.rs
new file mode 100644
index 00000000000..553a9cded57
--- /dev/null
+++ b/src/comp/metadata/cstore.rs
@@ -0,0 +1,37 @@
+import std::map;
+
+type crate_metadata = rec(str name, vec[u8] data);
+
+type cstore = @rec(map::hashmap[int, crate_metadata] metas,
+                   vec[str] used_crate_files,
+                   vec[str] used_libraries,
+                   vec[str] used_link_args);
+
+fn mk_cstore() -> cstore {
+    auto meta_cache = map::new_int_hash[crate_metadata]();
+    ret @rec(metas = meta_cache,
+             used_crate_files = [],
+             used_libraries = [],
+             used_link_args = []);
+}
+
+fn get_crate_data(&cstore cstore, int cnum) -> crate_metadata {
+    ret cstore.metas.get(cnum);
+}
+
+fn set_crate_data(&cstore cstore, int cnum, &crate_metadata data) {
+    cstore.metas.insert(cnum, data);
+}
+
+fn have_crate_data(&cstore cstore, int cnum) -> bool {
+    ret cstore.metas.contains_key(cnum);
+}
+
+// Local Variables:
+// mode: rust
+// fill-column: 78;
+// indent-tabs-mode: nil
+// c-basic-offset: 4
+// buffer-file-coding-system: utf-8-unix
+// compile-command: "make -k -C $RBUILD 2>&1 | sed -e 's/\\/x\\//x:\\//g'";
+// End:
diff --git a/src/comp/rustc.rc b/src/comp/rustc.rc
index b5f104745c4..62e9a959857 100644
--- a/src/comp/rustc.rc
+++ b/src/comp/rustc.rc
@@ -81,6 +81,7 @@ mod metadata {
     export encoder;
     export decoder;
     export creader;
+    export cstore;
 
     mod common;
     mod tyencode;
@@ -88,6 +89,7 @@ mod metadata {
     mod encoder;
     mod decoder;
     mod creader;
+    mod cstore;
 }
 
 mod driver {