about summary refs log tree commit diff
path: root/src/rustc/metadata/encoder.rs
diff options
context:
space:
mode:
authorMarijn Haverbeke <marijnh@gmail.com>2012-03-06 13:57:07 +0100
committerMarijn Haverbeke <marijnh@gmail.com>2012-03-06 17:11:30 +0100
commit4e4bd585cd59caeb3a2fb107f1f5ba272149b3ee (patch)
tree2935b3fd86619bcbd189b6eb7e07067a161dfebd /src/rustc/metadata/encoder.rs
parent19508c7d531910c309cd63e9ade2fe1be80ff71b (diff)
downloadrust-4e4bd585cd59caeb3a2fb107f1f5ba272149b3ee.tar.gz
rust-4e4bd585cd59caeb3a2fb107f1f5ba272149b3ee.zip
Track all exports in exp_map
This is needed because the reachability checker needs to be able to
follow exports.

Issue #1934
Diffstat (limited to 'src/rustc/metadata/encoder.rs')
-rw-r--r--src/rustc/metadata/encoder.rs11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/rustc/metadata/encoder.rs b/src/rustc/metadata/encoder.rs
index cee46b2b054..8ae7b6e3592 100644
--- a/src/rustc/metadata/encoder.rs
+++ b/src/rustc/metadata/encoder.rs
@@ -159,12 +159,17 @@ fn encode_item_paths(ebml_w: ebml::writer, ecx: @encode_ctxt, crate: @crate)
 
 fn encode_reexport_paths(ebml_w: ebml::writer,
                          ecx: @encode_ctxt, &index: [entry<str>]) {
-    ecx.ccx.exp_map.items {|path, defs|
-        for def in *defs {
+    let tcx = ecx.ccx.tcx;
+    ecx.ccx.exp_map.items {|exp_id, defs|
+        for def in defs {
+            if !def.reexp { cont; }
+            let path = alt check tcx.items.get(exp_id) {
+              ast_map::node_export(_, path) { ast_map::path_to_str(*path) }
+            };
             index += [{val: path, pos: ebml_w.writer.tell()}];
             ebml_w.start_tag(tag_paths_data_item);
             encode_name(ebml_w, path);
-            encode_def_id(ebml_w, ast_util::def_id_of_def(def));
+            encode_def_id(ebml_w, def.id);
             ebml_w.end_tag();
         }
     }