diff options
| author | Marijn Haverbeke <[email protected]> | 2011-05-13 15:17:24 +0200 |
|---|---|---|
| committer | Marijn Haverbeke <[email protected]> | 2011-05-13 17:20:39 +0200 |
| commit | eb419fd8c78f907f1a5cd20f5e71009ba37ef7e9 (patch) | |
| tree | 924709adb23c244bb06f23bde47dff88b48eb20e /src/comp/middle/metadata.rs | |
| parent | Make module indices hold a list of items (diff) | |
| download | rust-eb419fd8c78f907f1a5cd20f5e71009ba37ef7e9.tar.xz rust-eb419fd8c78f907f1a5cd20f5e71009ba37ef7e9.zip | |
Extend crate format to allow multiple definitions for a single name
The type/value namespace distinction pretty much works now. Module
namespace is up next.
Diffstat (limited to 'src/comp/middle/metadata.rs')
| -rw-r--r-- | src/comp/middle/metadata.rs | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/comp/middle/metadata.rs b/src/comp/middle/metadata.rs index e10f2e73..b3078424 100644 --- a/src/comp/middle/metadata.rs +++ b/src/comp/middle/metadata.rs @@ -37,7 +37,6 @@ const uint tag_items_data_item_type = 0x0cu; const uint tag_items_data_item_symbol = 0x0du; const uint tag_items_data_item_variant = 0x0eu; const uint tag_items_data_item_tag_id = 0x0fu; -const uint tag_items_data_item_obj_type_id = 0x10u; const uint tag_index = 0x11u; const uint tag_index_buckets = 0x12u; @@ -165,7 +164,7 @@ mod Encode { } case (ty::ty_char) {w.write_char('c');} case (ty::ty_str) {w.write_char('s');} - case (ty::ty_tag(?def,?tys)) { // TODO restore def_id + case (ty::ty_tag(?def,?tys)) { w.write_str("t["); w.write_str(cx.ds(def)); w.write_char('|'); @@ -387,7 +386,12 @@ fn encode_module_item_paths(&ebml::writer ebml_w, ebml::start_tag(ebml_w, tag_paths_data_item); encode_name(ebml_w, id); encode_def_id(ebml_w, odid.ctor); - encode_obj_type_id(ebml_w, odid.ty); + ebml::end_tag(ebml_w); + + add_to_index(ebml_w, path, index, id); + ebml::start_tag(ebml_w, tag_paths_data_item); + encode_name(ebml_w, id); + encode_def_id(ebml_w, odid.ty); ebml::end_tag(ebml_w); } } @@ -459,11 +463,6 @@ fn encode_tag_id(&ebml::writer ebml_w, &ast::def_id id) { ebml::end_tag(ebml_w); } -fn encode_obj_type_id(&ebml::writer ebml_w, &ast::def_id id) { - ebml::start_tag(ebml_w, tag_items_data_item_obj_type_id); - ebml_w.writer.write(_str::bytes(def_to_str(id))); - ebml::end_tag(ebml_w); -} fn encode_tag_variant_info(&@trans::crate_ctxt cx, &ebml::writer ebml_w, @@ -550,6 +549,7 @@ fn encode_info_for_item(@trans::crate_ctxt cx, &ebml::writer ebml_w, encode_symbol(cx, ebml_w, odid.ctor); ebml::end_tag(ebml_w); + index += vec(tup(odid.ty._1, ebml_w.writer.tell())); ebml::start_tag(ebml_w, tag_items_data_item); encode_def_id(ebml_w, odid.ty); encode_kind(ebml_w, 'y' as u8); |