Encode meta tags in the crate and start sketching enhanced logic for resolving crate "use" directives.
This commit is contained in:
parent
c9c1d860f1
commit
ab3635eebe
6 changed files with 148 additions and 37 deletions
|
|
@ -14,6 +14,7 @@ import middle::trans;
|
|||
import middle::ty;
|
||||
import middle::ty::path_to_str;
|
||||
import back::x86;
|
||||
import back::link;
|
||||
import util::common;
|
||||
import pretty::ppaux::lit_to_str;
|
||||
|
||||
|
|
@ -46,6 +47,12 @@ const uint tag_index_buckets_bucket = 0x13u;
|
|||
const uint tag_index_buckets_bucket_elt = 0x14u;
|
||||
const uint tag_index_table = 0x15u;
|
||||
|
||||
const uint tag_meta_export = 0x16u;
|
||||
const uint tag_meta_local = 0x17u;
|
||||
const uint tag_meta_item = 0x18u;
|
||||
const uint tag_meta_item_key = 0x19u;
|
||||
const uint tag_meta_item_value = 0x20u;
|
||||
|
||||
// Type encoding
|
||||
|
||||
// Compact string representation for ty.t values. API ty_str & parse_from_str.
|
||||
|
|
@ -709,12 +716,41 @@ fn write_int(&io::writer writer, &int n) {
|
|||
}
|
||||
|
||||
|
||||
fn encode_meta_items(&ebml::writer ebml_w, &ast::crate crate) {
|
||||
|
||||
fn encode_meta_item(&ebml::writer ebml_w, &ast::meta_item mi) {
|
||||
ebml::start_tag(ebml_w, tag_meta_item);
|
||||
ebml::start_tag(ebml_w, tag_meta_item_key);
|
||||
ebml_w.writer.write(str::bytes(mi.node.key));
|
||||
ebml::end_tag(ebml_w);
|
||||
ebml::start_tag(ebml_w, tag_meta_item_value);
|
||||
ebml_w.writer.write(str::bytes(mi.node.value));
|
||||
ebml::end_tag(ebml_w);
|
||||
ebml::end_tag(ebml_w);
|
||||
}
|
||||
|
||||
ebml::start_tag(ebml_w, tag_meta_export);
|
||||
for each (@ast::meta_item mi in link::crate_export_metas(crate)) {
|
||||
encode_meta_item(ebml_w, *mi);
|
||||
}
|
||||
ebml::end_tag(ebml_w);
|
||||
|
||||
ebml::start_tag(ebml_w, tag_meta_local);
|
||||
for each (@ast::meta_item mi in link::crate_local_metas(crate)) {
|
||||
encode_meta_item(ebml_w, *mi);
|
||||
}
|
||||
ebml::end_tag(ebml_w);
|
||||
}
|
||||
|
||||
fn encode_metadata(&@trans::crate_ctxt cx, &@ast::crate crate)
|
||||
-> ValueRef {
|
||||
auto string_w = io::string_writer();
|
||||
auto buf_w = string_w.get_writer().get_buf_writer();
|
||||
auto ebml_w = ebml::create_writer(buf_w);
|
||||
|
||||
// Encode the meta items
|
||||
encode_meta_items(ebml_w, *crate);
|
||||
|
||||
// Encode and index the paths.
|
||||
ebml::start_tag(ebml_w, tag_paths);
|
||||
auto paths_index = encode_item_paths(ebml_w, crate);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue