about summary refs log tree commit diff
path: root/src/rustc/metadata
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2012-03-22 20:06:01 -0700
committerNiko Matsakis <niko@alum.mit.edu>2012-03-23 21:47:28 -0700
commit042c532a084fa3871a3a2d8955ff82c246db8015 (patch)
tree9b69f961a78deae15a4f8544bec7a4f215a90a5e /src/rustc/metadata
parent40443768b16747cb3ef90a2fb2fd9e7f317ff383 (diff)
downloadrust-042c532a084fa3871a3a2d8955ff82c246db8015.tar.gz
rust-042c532a084fa3871a3a2d8955ff82c246db8015.zip
Implement new inference algorithm.
Diffstat (limited to 'src/rustc/metadata')
-rw-r--r--src/rustc/metadata/astencode.rs1
-rw-r--r--src/rustc/metadata/encoder.rs7
-rw-r--r--src/rustc/metadata/tyencode.rs15
3 files changed, 18 insertions, 5 deletions
diff --git a/src/rustc/metadata/astencode.rs b/src/rustc/metadata/astencode.rs
index c2351b3a305..b5d2b18a39c 100644
--- a/src/rustc/metadata/astencode.rs
+++ b/src/rustc/metadata/astencode.rs
@@ -634,6 +634,7 @@ impl helpers for @e::encode_ctxt {
     fn ty_str_ctxt() -> @tyencode::ctxt {
         @{ds: e::def_to_str,
           tcx: self.ccx.tcx,
+          reachable: self.ccx.reachable,
           abbrevs: tyencode::ac_use_abbrevs(self.type_abbrevs)}
     }
 }
diff --git a/src/rustc/metadata/encoder.rs b/src/rustc/metadata/encoder.rs
index 3e9e5d842ab..d648cc168bd 100644
--- a/src/rustc/metadata/encoder.rs
+++ b/src/rustc/metadata/encoder.rs
@@ -221,6 +221,7 @@ fn encode_type_param_bounds(ebml_w: ebml::writer, ecx: @encode_ctxt,
                             params: [ty_param]) {
     let ty_str_ctxt = @{ds: def_to_str,
                         tcx: ecx.ccx.tcx,
+                        reachable: ecx.ccx.reachable,
                         abbrevs: tyencode::ac_use_abbrevs(ecx.type_abbrevs)};
     for param in params {
         ebml_w.start_tag(tag_items_data_item_ty_param_bounds);
@@ -240,6 +241,7 @@ fn write_type(ecx: @encode_ctxt, ebml_w: ebml::writer, typ: ty::t) {
     let ty_str_ctxt =
         @{ds: def_to_str,
           tcx: ecx.ccx.tcx,
+          reachable: ecx.ccx.reachable,
           abbrevs: tyencode::ac_use_abbrevs(ecx.type_abbrevs)};
     tyencode::enc_ty(ebml_w.writer, ty_str_ctxt, typ);
 }
@@ -966,7 +968,10 @@ fn encode_metadata(cx: @crate_ctxt, crate: @crate) -> [u8] {
 
 // Get the encoded string for a type
 fn encoded_ty(tcx: ty::ctxt, t: ty::t) -> str {
-    let cx = @{ds: def_to_str, tcx: tcx, abbrevs: tyencode::ac_no_abbrevs};
+    let cx = @{ds: def_to_str,
+               tcx: tcx,
+               reachable: std::map::int_hash(),
+               abbrevs: tyencode::ac_no_abbrevs};
     let buf = io::mem_buffer();
     tyencode::enc_ty(io::mem_buffer_writer(buf), cx, t);
     ret io::mem_buffer_str(buf);
diff --git a/src/rustc/metadata/tyencode.rs b/src/rustc/metadata/tyencode.rs
index 80f830ce88d..6e1e8b15f56 100644
--- a/src/rustc/metadata/tyencode.rs
+++ b/src/rustc/metadata/tyencode.rs
@@ -6,6 +6,7 @@ import syntax::ast::*;
 import driver::session::session;
 import middle::ty;
 import syntax::print::pprust::*;
+import middle::trans::reachable;
 
 export ctxt;
 export ty_abbrev;
@@ -18,7 +19,8 @@ export enc_mode;
 type ctxt =
     // Def -> str Callback:
     // The type context.
-    {ds: fn@(def_id) -> str, tcx: ty::ctxt, abbrevs: abbrev_ctxt};
+    {ds: fn@(def_id) -> str, tcx: ty::ctxt,
+     reachable: reachable::map, abbrevs: abbrev_ctxt};
 
 // Compact string representation for ty.t values. API ty_str & parse_from_str.
 // Extra parameters are for converting to/from def_ids in the string rep.
@@ -55,9 +57,14 @@ fn enc_ty(w: io::writer, cx: @ctxt, t: ty::t) {
             let pos = w.tell();
             alt ty::type_def_id(t) {
               some(def_id) {
-                w.write_char('"');
-                w.write_str(cx.ds(def_id));
-                w.write_char('|');
+                // Do not emit node ids that map to unexported names.  Those
+                // are not helpful.
+                if def_id.crate != local_crate ||
+                    cx.reachable.contains_key(def_id.node) {
+                    w.write_char('"');
+                    w.write_str(cx.ds(def_id));
+                    w.write_char('|');
+                }
               }
               _ {}
             }