summary refs log tree commit diff
path: root/src/comp/metadata
diff options
context:
space:
mode:
authorHaitao Li <lihaitao@gmail.com>2011-12-11 23:42:32 +0800
committerGraydon Hoare <graydon@mozilla.com>2011-12-12 16:15:29 -0800
commitba0649cb41d90a2e866b9e90ebabd1a8e445d58c (patch)
tree2ef0369234123ed264dacc105679cf110bd3f671 /src/comp/metadata
parentf3c206c9f495180e5926a3e5d47f4e0f152d0cc6 (diff)
downloadrust-ba0649cb41d90a2e866b9e90ebabd1a8e445d58c.tar.gz
rust-ba0649cb41d90a2e866b9e90ebabd1a8e445d58c.zip
rustc: Hash includes direct dependent crates
Diffstat (limited to 'src/comp/metadata')
-rw-r--r--src/comp/metadata/cstore.rs25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/comp/metadata/cstore.rs b/src/comp/metadata/cstore.rs
index c0f8588c8a2..e7ca671fea8 100644
--- a/src/comp/metadata/cstore.rs
+++ b/src/comp/metadata/cstore.rs
@@ -20,6 +20,8 @@ export add_used_link_args;
 export get_used_link_args;
 export add_use_stmt_cnum;
 export get_use_stmt_cnum;
+export get_dep_hashes;
+
 
 // A map from external crate numbers (as decoded from some crate file) to
 // local crate numbers (as generated during this session). Each external
@@ -116,6 +118,29 @@ fn get_use_stmt_cnum(cstore: cstore, use_id: ast::node_id) -> ast::crate_num {
     ret p(cstore).use_crate_map.get(use_id);
 }
 
+// returns hashes of crates directly used by this crate. Hashes are
+// sorted by crate name.
+fn get_dep_hashes(cstore: cstore) -> [str] {
+    type crate_hash = {name: str, hash: str};
+    let result = [];
+
+    p(cstore).use_crate_map.values {|cnum|
+        let cdata = cstore::get_crate_data(cstore, cnum);
+        let hash = decoder::get_crate_hash(cdata.data);
+        log #fmt("Add hash[%s]: %s", cdata.name, hash);
+        result += [{name: cdata.name, hash: hash}];
+    };
+    fn lteq(a: crate_hash, b: crate_hash) -> bool {
+        ret a.name <= b.name;
+    }
+    let sorted = std::sort::merge_sort(lteq, result);
+    log "sorted:";
+    for x in sorted {
+        log #fmt("  hash[%s]: %s", x.name, x.hash);
+    }
+    fn mapper(ch: crate_hash) -> str { ret ch.hash; }
+    ret vec::map(mapper, sorted);
+}
 // Local Variables:
 // mode: rust
 // fill-column: 78;