diff options
| author | Brian Anderson <banderson@mozilla.com> | 2011-07-07 18:00:16 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2011-07-08 09:37:00 -0700 |
| commit | b23ecd47ceb7468d5132b9bf81d1d9c4e3fd1084 (patch) | |
| tree | 79491342bc8070b2f54a8e43173c4ea5d4edd95d /src/comp | |
| parent | c7bfef43c8c9eed4ff39f2e68b5a224d19876439 (diff) | |
| download | rust-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.rs | 3 | ||||
| -rw-r--r-- | src/comp/driver/session.rs | 2 | ||||
| -rw-r--r-- | src/comp/metadata/cstore.rs | 37 | ||||
| -rw-r--r-- | src/comp/rustc.rc | 2 |
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 { |
