Skip to content

Commit b4a3d52

Browse files
committed
rustc: Eliminate trans dependency from metadata::tyencode
1 parent f764128 commit b4a3d52

File tree

3 files changed

+19
-12
lines changed

3 files changed

+19
-12
lines changed

src/rustc/metadata/astencode.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -659,7 +659,7 @@ impl helpers for @e::encode_ctxt {
659659
fn ty_str_ctxt() -> @tyencode::ctxt {
660660
@{ds: e::def_to_str,
661661
tcx: self.ccx.tcx,
662-
reachable: self.ccx.reachable,
662+
reachable: encoder::reachable(self, _),
663663
abbrevs: tyencode::ac_use_abbrevs(self.type_abbrevs)}
664664
}
665665
}

src/rustc/metadata/encoder.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import std::ebml::serializer;
2020

2121
export encode_metadata;
2222
export encoded_ty;
23+
export reachable;
2324

2425
// used by astencode:
2526
export def_to_str;
@@ -32,6 +33,10 @@ type abbrev_map = map::hashmap<ty::t, tyencode::ty_abbrev>;
3233
type encode_ctxt = {ccx: @crate_ctxt,
3334
type_abbrevs: abbrev_map};
3435

36+
fn reachable(ecx: @encode_ctxt, id: node_id) -> bool {
37+
ecx.ccx.reachable.contains_key(id)
38+
}
39+
3540
// Path table encoding
3641
fn encode_name(ebml_w: ebml::writer, name: str) {
3742
ebml_w.wr_tagged_str(tag_paths_data_name, name);
@@ -110,7 +115,7 @@ fn encode_module_item_paths(ebml_w: ebml::writer, ecx: @encode_ctxt,
110115
module: _mod, path: [str], &index: [entry<str>]) {
111116
// FIXME factor out add_to_index/start/encode_name/encode_def_id/end ops
112117
for module.items.each {|it|
113-
if !ecx.ccx.reachable.contains_key(it.id) ||
118+
if !reachable(ecx, it.id) ||
114119
!ast_util::is_exported(it.ident, module) { cont; }
115120
alt it.node {
116121
item_const(_, _) {
@@ -235,7 +240,7 @@ fn encode_type_param_bounds(ebml_w: ebml::writer, ecx: @encode_ctxt,
235240
params: [ty_param]) {
236241
let ty_str_ctxt = @{ds: def_to_str,
237242
tcx: ecx.ccx.tcx,
238-
reachable: ecx.ccx.reachable,
243+
reachable: reachable(ecx, _),
239244
abbrevs: tyencode::ac_use_abbrevs(ecx.type_abbrevs)};
240245
for params.each {|param|
241246
ebml_w.start_tag(tag_items_data_item_ty_param_bounds);
@@ -255,7 +260,7 @@ fn write_type(ecx: @encode_ctxt, ebml_w: ebml::writer, typ: ty::t) {
255260
let ty_str_ctxt =
256261
@{ds: def_to_str,
257262
tcx: ecx.ccx.tcx,
258-
reachable: ecx.ccx.reachable,
263+
reachable: reachable(ecx, _),
259264
abbrevs: tyencode::ac_use_abbrevs(ecx.type_abbrevs)};
260265
tyencode::enc_ty(ebml_w.writer, ty_str_ctxt, typ);
261266
}
@@ -489,7 +494,7 @@ fn encode_info_for_item(ecx: @encode_ctxt, ebml_w: ebml::writer, item: @item,
489494
let tcx = ecx.ccx.tcx;
490495
let must_write =
491496
alt item.node { item_enum(_, _, _) { true } _ { false } };
492-
if !must_write && !ecx.ccx.reachable.contains_key(item.id) { ret; }
497+
if !must_write && !reachable(ecx, item.id) { ret; }
493498

494499
fn add_to_index_(item: @item, ebml_w: ebml::writer,
495500
index: @mut [entry<int>]) {
@@ -704,7 +709,7 @@ fn encode_info_for_native_item(ecx: @encode_ctxt, ebml_w: ebml::writer,
704709
nitem: @native_item,
705710
index: @mut [entry<int>],
706711
path: ast_map::path, abi: native_abi) {
707-
if !ecx.ccx.reachable.contains_key(nitem.id) { ret; }
712+
if !reachable(ecx, nitem.id) { ret; }
708713
*index += [{val: nitem.id, pos: ebml_w.writer.tell()}];
709714

710715
ebml_w.start_tag(tag_items_data_item);
@@ -1019,7 +1024,7 @@ fn encode_metadata(cx: @crate_ctxt, crate: @crate) -> [u8] {
10191024
fn encoded_ty(tcx: ty::ctxt, t: ty::t) -> str {
10201025
let cx = @{ds: def_to_str,
10211026
tcx: tcx,
1022-
reachable: std::map::int_hash(),
1027+
reachable: {|_id| false},
10231028
abbrevs: tyencode::ac_no_abbrevs};
10241029
let buf = io::mem_buffer();
10251030
tyencode::enc_ty(io::mem_buffer_writer(buf), cx, t);

src/rustc/metadata/tyencode.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import driver::session::session;
77
import middle::ty;
88
import middle::ty::vid;
99
import syntax::print::pprust::*;
10-
import middle::trans::reachable;
1110

1211
export ctxt;
1312
export ty_abbrev;
@@ -17,11 +16,14 @@ export enc_ty;
1716
export enc_bounds;
1817
export enc_mode;
1918

20-
type ctxt =
19+
type ctxt = {
2120
// Def -> str Callback:
21+
ds: fn@(def_id) -> str,
2222
// The type context.
23-
{ds: fn@(def_id) -> str, tcx: ty::ctxt,
24-
reachable: reachable::map, abbrevs: abbrev_ctxt};
23+
tcx: ty::ctxt,
24+
reachable: fn@(node_id) -> bool,
25+
abbrevs: abbrev_ctxt
26+
};
2527

2628
// Compact string representation for ty.t values. API ty_str & parse_from_str.
2729
// Extra parameters are for converting to/from def_ids in the string rep.
@@ -61,7 +63,7 @@ fn enc_ty(w: io::writer, cx: @ctxt, t: ty::t) {
6163
// Do not emit node ids that map to unexported names. Those
6264
// are not helpful.
6365
if def_id.crate != local_crate ||
64-
cx.reachable.contains_key(def_id.node) {
66+
cx.reachable(def_id.node) {
6567
w.write_char('"');
6668
w.write_str(cx.ds(def_id));
6769
w.write_char('|');

0 commit comments

Comments
 (0)