diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2012-03-22 20:06:01 -0700 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2012-03-23 21:47:28 -0700 |
| commit | 042c532a084fa3871a3a2d8955ff82c246db8015 (patch) | |
| tree | 9b69f961a78deae15a4f8544bec7a4f215a90a5e /src/rustc/metadata | |
| parent | 40443768b16747cb3ef90a2fb2fd9e7f317ff383 (diff) | |
| download | rust-042c532a084fa3871a3a2d8955ff82c246db8015.tar.gz rust-042c532a084fa3871a3a2d8955ff82c246db8015.zip | |
Implement new inference algorithm.
Diffstat (limited to 'src/rustc/metadata')
| -rw-r--r-- | src/rustc/metadata/astencode.rs | 1 | ||||
| -rw-r--r-- | src/rustc/metadata/encoder.rs | 7 | ||||
| -rw-r--r-- | src/rustc/metadata/tyencode.rs | 15 |
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('|'); + } } _ {} } |
