export list_crate_metadata;
export crate_dep;
export get_crate_deps;
+export get_crate_hash;
export external_resolver;
// A function that takes a def_id relative to the crate being searched and
}
}
-fn list_crate_attributes(md: ebml::doc, out: io::writer) {
- out.write_str("=Crate Attributes=\n");
+fn list_crate_attributes(md: ebml::doc, hash: str, out: io::writer) {
+ out.write_str(#fmt("=Crate Attributes (%s)=\n", hash));
for attr: ast::attribute in get_attributes(md) {
out.write_str(#fmt["%s\n", pprust::attribute_to_str(attr)]);
out.write_str("\n");
}
+fn get_crate_hash(data: @[u8]) -> str {
+ let cratedoc = ebml::new_doc(data);
+ let hashdoc = ebml::get_doc(cratedoc, tag_crate_hash);
+ ret str::unsafe_from_bytes(ebml::doc_data(hashdoc));
+}
+
fn list_crate_items(bytes: @[u8], md: ebml::doc, out: io::writer) {
out.write_str("=Items=\n");
let paths = ebml::get_doc(md, tag_paths);
}
fn list_crate_metadata(bytes: @[u8], out: io::writer) {
+ let hash = get_crate_hash(bytes);
let md = ebml::new_doc(bytes);
- list_crate_attributes(md, out);
+ list_crate_attributes(md, hash, out);
list_crate_deps(bytes, out);
list_crate_items(bytes, md, out);
}
ebml::end_tag(ebml_w);
}
+fn encode_hash(ebml_w: ebml::writer, hash: str) {
+ ebml::start_tag(ebml_w, tag_crate_hash);
+ ebml_w.writer.write(str::bytes(hash));
+ ebml::end_tag(ebml_w);
+}
+
fn encode_metadata(cx: @crate_ctxt, crate: @crate) -> str {
let abbrevs = map::mk_hashmap(ty::hash_ty, ty::eq_ty);
let buf_w = string_w.get_writer().get_buf_writer();
let ebml_w = ebml::create_writer(buf_w);
+ encode_hash(ebml_w, cx.link_meta.extras_hash);
+
let crate_attrs = synthesize_crate_attrs(ecx, crate);
encode_attributes(ebml_w, crate_attrs);