about summary refs log tree commit diff
path: root/src/rustc
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2012-09-20 13:08:45 -0700
committerGraydon Hoare <graydon@mozilla.com>2012-09-20 13:08:50 -0700
commit348d07f099561992d37d8e0107b9440cae021615 (patch)
treea9fcabf49685bf3dedf5dc71df0834eac28032e3 /src/rustc
parent69aaa410ca2ec499e79939aa44552192f443b44b (diff)
Remove export_map from resolve, just use export_map2.
Diffstat (limited to 'src/rustc')
-rw-r--r--src/rustc/driver/driver.rs3
-rw-r--r--src/rustc/metadata/encoder.rs3
-rw-r--r--src/rustc/middle/resolve.rs21
-rw-r--r--src/rustc/middle/trans/base.rs22
-rw-r--r--src/rustc/middle/trans/common.rs1
-rw-r--r--src/rustc/middle/trans/reachable.rs50
6 files changed, 21 insertions, 79 deletions
diff --git a/src/rustc/driver/driver.rs b/src/rustc/driver/driver.rs
index a2e65656cc0..93ab61e245a 100644
--- a/src/rustc/driver/driver.rs
+++ b/src/rustc/driver/driver.rs
@@ -201,7 +201,6 @@ fn compile_upto(sess: session, cfg: ast::crate_cfg,
          middle::lang_items::collect_language_items(crate, sess));
 
     let { def_map: def_map,
-          exp_map: exp_map,
           exp_map2: exp_map2,
           trait_map: trait_map } =
         time(time_passes, ~"resolution", ||
@@ -266,7 +265,7 @@ fn compile_upto(sess: session, cfg: ast::crate_cfg,
     let (llmod, link_meta) = time(time_passes, ~"translation", ||
         trans::base::trans_crate(sess, crate, ty_cx,
                                  &outputs.obj_filename,
-                                 exp_map, exp_map2, maps));
+                                 exp_map2, maps));
 
     time(time_passes, ~"LLVM passes", ||
         link::write::run_passes(sess, llmod,
diff --git a/src/rustc/metadata/encoder.rs b/src/rustc/metadata/encoder.rs
index a45f2580364..e0d33035022 100644
--- a/src/rustc/metadata/encoder.rs
+++ b/src/rustc/metadata/encoder.rs
@@ -47,7 +47,6 @@ type encode_parms = {
     diag: span_handler,
     tcx: ty::ctxt,
     reachable: HashMap<ast::node_id, ()>,
-    reexports: ~[(~str, def_id)],
     reexports2: middle::resolve::ExportMap2,
     item_symbols: HashMap<ast::node_id, ~str>,
     discrim_symbols: HashMap<ast::node_id, ~str>,
@@ -73,7 +72,6 @@ enum encode_ctxt = {
     tcx: ty::ctxt,
     stats: stats,
     reachable: HashMap<ast::node_id, ()>,
-    reexports: ~[(~str, def_id)],
     reexports2: middle::resolve::ExportMap2,
     item_symbols: HashMap<ast::node_id, ~str>,
     discrim_symbols: HashMap<ast::node_id, ~str>,
@@ -1108,7 +1106,6 @@ fn encode_metadata(parms: encode_parms, crate: @crate) -> ~[u8] {
         tcx: parms.tcx,
         stats: move stats,
         reachable: parms.reachable,
-        reexports: parms.reexports,
         reexports2: parms.reexports2,
         item_symbols: parms.item_symbols,
         discrim_symbols: parms.discrim_symbols,
diff --git a/src/rustc/middle/resolve.rs b/src/rustc/middle/resolve.rs
index ab143cca18b..18bea6338a4 100644
--- a/src/rustc/middle/resolve.rs
+++ b/src/rustc/middle/resolve.rs
@@ -91,10 +91,6 @@ type Impl = { did: def_id, ident: ident, methods: ~[@MethodInfo] };
 // Trait method resolution
 type TraitMap = @HashMap<node_id,@DVec<def_id>>;
 
-// Export mapping
-type Export = { reexp: bool, id: def_id };
-type ExportMap = HashMap<node_id, ~[Export]>;
-
 // This is the replacement export map. It maps a module to all of the exports
 // within.
 type ExportMap2 = HashMap<node_id, ~[Export2]>;
@@ -775,7 +771,6 @@ fn Resolver(session: session, lang_items: LanguageItems,
         namespaces: ~[ ModuleNS, TypeNS, ValueNS ],
 
         def_map: HashMap(),
-        export_map: HashMap(),
         export_map2: HashMap(),
         trait_map: @HashMap(),
 
@@ -833,7 +828,6 @@ struct Resolver {
     namespaces: ~[Namespace],
 
     def_map: DefMap,
-    export_map: ExportMap,
     export_map2: ExportMap2,
     trait_map: TraitMap,
 }
@@ -2880,8 +2874,7 @@ impl Resolver {
 
     fn record_exports_for_module(module_: @Module) {
         let mut exports2 = ~[];
-        for module_.exported_names.each |name, node_id| {
-            let mut exports = ~[];
+        for module_.exported_names.each |name, _exp_node_id| {
             for self.namespaces.each |namespace| {
                 match self.resolve_definition_of_name_in_module(module_,
                                                                 name,
@@ -2895,10 +2888,6 @@ impl Resolver {
                                 for %?",
                                self.session.str_of(name),
                                module_.def_id);
-                        vec::push(exports, {
-                            reexp: false,
-                            id: def_id_of_def(target_def)
-                        });
                         vec::push(exports2, Export2 {
                             reexport: false,
                             name: self.session.str_of(name),
@@ -2910,10 +2899,6 @@ impl Resolver {
                                 %?",
                                self.session.str_of(name),
                                module_.def_id);
-                        vec::push(exports, {
-                            reexp: true,
-                            id: def_id_of_def(target_def)
-                        });
                         vec::push(exports2, Export2 {
                             reexport: true,
                             name: self.session.str_of(name),
@@ -2922,8 +2907,6 @@ impl Resolver {
                     }
                 }
             }
-
-            self.export_map.insert(node_id, exports);
         }
 
         match copy module_.def_id {
@@ -4914,7 +4897,6 @@ impl Resolver {
 /// Entry point to crate resolution.
 fn resolve_crate(session: session, lang_items: LanguageItems, crate: @crate)
               -> { def_map: DefMap,
-                   exp_map: ExportMap,
                    exp_map2: ExportMap2,
                    trait_map: TraitMap } {
 
@@ -4922,7 +4904,6 @@ fn resolve_crate(session: session, lang_items: LanguageItems, crate: @crate)
     resolver.resolve(resolver);
     return {
         def_map: resolver.def_map,
-        exp_map: resolver.export_map,
         exp_map2: resolver.export_map2,
         trait_map: resolver.trait_map
     };
diff --git a/src/rustc/middle/trans/base.rs b/src/rustc/middle/trans/base.rs
index 2cd4b2c7ec8..8cf9be711a3 100644
--- a/src/rustc/middle/trans/base.rs
+++ b/src/rustc/middle/trans/base.rs
@@ -2504,7 +2504,6 @@ fn crate_ctxt_to_encode_parms(cx: @crate_ctxt)
         diag: cx.sess.diagnostic(),
         tcx: cx.tcx,
         reachable: cx.reachable,
-        reexports: reexports(cx),
         reexports2: cx.exp_map2,
         item_symbols: cx.item_symbols,
         discrim_symbols: cx.discrim_symbols,
@@ -2512,23 +2511,6 @@ fn crate_ctxt_to_encode_parms(cx: @crate_ctxt)
         cstore: cx.sess.cstore,
         encode_inlined_item: encode_inlined_item
     };
-
-    fn reexports(cx: @crate_ctxt) -> ~[(~str, ast::def_id)] {
-        let mut reexports = ~[];
-        for cx.exp_map.each |exp_id, defs| {
-            for defs.each |def| {
-                if !def.reexp { loop; }
-                let path = match cx.tcx.items.get(exp_id) {
-                  ast_map::node_export(_, path) => {
-                      ast_map::path_to_str(*path, cx.sess.parse_sess.interner)
-                  }
-                  _ => fail ~"reexports"
-                };
-                vec::push(reexports, (path, def.id));
-            }
-        }
-        return reexports;
-    }
 }
 
 fn write_metadata(cx: @crate_ctxt, crate: @ast::crate) {
@@ -2564,7 +2546,6 @@ fn trans_crate(sess: session::session,
                crate: @ast::crate,
                tcx: ty::ctxt,
                output: &Path,
-               emap: resolve::ExportMap,
                emap2: resolve::ExportMap2,
                maps: astencode::maps)
             -> (ModuleRef, link_meta) {
@@ -2572,7 +2553,7 @@ fn trans_crate(sess: session::session,
     let symbol_hasher = @hash::default_state();
     let link_meta =
         link::build_link_meta(sess, *crate, output, symbol_hasher);
-    let reachable = reachable::find_reachable(crate.node.module, emap, tcx,
+    let reachable = reachable::find_reachable(crate.node.module, emap2, tcx,
                                               maps.method_map);
 
     // Append ".rc" to crate name as LLVM module identifier.
@@ -2626,7 +2607,6 @@ fn trans_crate(sess: session::session,
           externs: HashMap::<~str,ValueRef>(),
           intrinsics: intrinsics,
           item_vals: HashMap::<int,ValueRef>(),
-          exp_map: emap,
           exp_map2: emap2,
           reachable: reachable,
           item_symbols: HashMap::<int,~str>(),
diff --git a/src/rustc/middle/trans/common.rs b/src/rustc/middle/trans/common.rs
index fbf6c7804c4..ae539f5ebc6 100644
--- a/src/rustc/middle/trans/common.rs
+++ b/src/rustc/middle/trans/common.rs
@@ -117,7 +117,6 @@ type crate_ctxt = {
      externs: HashMap<~str, ValueRef>,
      intrinsics: HashMap<~str, ValueRef>,
      item_vals: HashMap<ast::node_id, ValueRef>,
-     exp_map: resolve::ExportMap,
      exp_map2: resolve::ExportMap2,
      reachable: reachable::map,
      item_symbols: HashMap<ast::node_id, ~str>,
diff --git a/src/rustc/middle/trans/reachable.rs b/src/rustc/middle/trans/reachable.rs
index d7d7af3ed8c..7febec13add 100644
--- a/src/rustc/middle/trans/reachable.rs
+++ b/src/rustc/middle/trans/reachable.rs
@@ -17,47 +17,33 @@ export map, find_reachable;
 
 type map = std::map::HashMap<node_id, ()>;
 
-type ctx = {exp_map: resolve::ExportMap,
+type ctx = {exp_map2: resolve::ExportMap2,
             tcx: ty::ctxt,
             method_map: typeck::method_map,
             rmap: map};
 
-fn find_reachable(crate_mod: _mod, exp_map: resolve::ExportMap,
+fn find_reachable(crate_mod: _mod, exp_map2: resolve::ExportMap2,
                   tcx: ty::ctxt, method_map: typeck::method_map) -> map {
     let rmap = std::map::HashMap();
-    let cx = {exp_map: exp_map, tcx: tcx, method_map: method_map, rmap: rmap};
-    traverse_public_mod(cx, crate_mod);
+    let cx = {exp_map2: exp_map2, tcx: tcx,
+              method_map: method_map, rmap: rmap};
+    traverse_public_mod(cx, ast::crate_node_id, crate_mod);
     traverse_all_resources_and_impls(cx, crate_mod);
     rmap
 }
 
-fn traverse_exports(cx: ctx, vis: ~[@view_item]) -> bool {
+fn traverse_exports(cx: ctx, mod_id: node_id) -> bool {
     let mut found_export = false;
-    for vec::each(vis) |vi| {
-        match vi.node {
-          view_item_export(vps) => {
+    match cx.exp_map2.find(mod_id) {
+      Some(exp2s) => {
+        for exp2s.each |e2| {
             found_export = true;
-            for vec::each(vps) |vp| {
-                match vp.node {
-                  view_path_simple(_, _, _, id) | view_path_glob(_, id) |
-                  view_path_list(_, _, id) => {
-                    traverse_export(cx, id);
-                  }
-                }
-            }
-          }
-          _ => ()
-        }
-    }
-    found_export
-}
-
-fn traverse_export(cx: ctx, exp_id: node_id) {
-    do option::iter(cx.exp_map.find(exp_id)) |defs| {
-        for vec::each(defs) |def| {
-            traverse_def_id(cx, def.id);
-        }
+            traverse_def_id(cx, e2.def_id)
+        };
+      }
+      None => ()
     }
+    return found_export;
 }
 
 fn traverse_def_id(cx: ctx, did: def_id) {
@@ -81,8 +67,8 @@ fn traverse_def_id(cx: ctx, did: def_id) {
     }
 }
 
-fn traverse_public_mod(cx: ctx, m: _mod) {
-    if !traverse_exports(cx, m.view_items) {
+fn traverse_public_mod(cx: ctx, mod_id: node_id, m: _mod) {
+    if !traverse_exports(cx, mod_id) {
         // No exports, so every local item is exported
         for vec::each(m.items) |item| {
             traverse_public_item(cx, *item);
@@ -94,9 +80,9 @@ fn traverse_public_item(cx: ctx, item: @item) {
     if cx.rmap.contains_key(item.id) { return; }
     cx.rmap.insert(item.id, ());
     match item.node {
-      item_mod(m) => traverse_public_mod(cx, m),
+      item_mod(m) => traverse_public_mod(cx, item.id, m),
       item_foreign_mod(nm) => {
-          if !traverse_exports(cx, nm.view_items) {
+          if !traverse_exports(cx, item.id) {
               for vec::each(nm.items) |item| {
                   cx.rmap.insert(item.id, ());
               }