about summary refs log tree commit diff
path: root/src/rustc
diff options
context:
space:
mode:
Diffstat (limited to 'src/rustc')
-rw-r--r--src/rustc/back/link.rs3
-rw-r--r--src/rustc/back/rpath.rs1
-rw-r--r--src/rustc/driver/driver.rs1
-rw-r--r--src/rustc/driver/session.rs1
-rw-r--r--src/rustc/front/intrinsic.rs2
-rw-r--r--src/rustc/front/test.rs1
-rw-r--r--src/rustc/lib/llvm.rs1
-rw-r--r--src/rustc/metadata.rs6
-rw-r--r--src/rustc/middle/lang_items.rs1
-rw-r--r--src/rustc/middle/resolve.rs90
-rw-r--r--src/rustc/rustc.rc104
11 files changed, 190 insertions, 21 deletions
diff --git a/src/rustc/back/link.rs b/src/rustc/back/link.rs
index c52b2c661ab..1cfb322e39c 100644
--- a/src/rustc/back/link.rs
+++ b/src/rustc/back/link.rs
@@ -65,9 +65,11 @@ fn WriteOutputFile(sess:session,
 }
 
 mod jit {
+    #[legacy_exports];
     #[nolink]
     #[abi = "rust-intrinsic"]
     extern mod rusti {
+        #[legacy_exports];
         fn morestack_addr() -> *();
     }
 
@@ -99,6 +101,7 @@ mod jit {
 }
 
 mod write {
+    #[legacy_exports];
     fn is_object_or_assembly_or_exe(ot: output_type) -> bool {
         if ot == output_type_assembly || ot == output_type_object ||
                ot == output_type_exe {
diff --git a/src/rustc/back/rpath.rs b/src/rustc/back/rpath.rs
index f115827b136..207a8f3fc94 100644
--- a/src/rustc/back/rpath.rs
+++ b/src/rustc/back/rpath.rs
@@ -181,6 +181,7 @@ fn minimize_rpaths(rpaths: &[Path]) -> ~[Path] {
 
 #[cfg(unix)]
 mod test {
+    #[legacy_exports];
     #[test]
     fn test_rpaths_to_flags() {
         let flags = rpaths_to_flags(~[Path("path1"),
diff --git a/src/rustc/driver/driver.rs b/src/rustc/driver/driver.rs
index ebdc8bc848c..f08a067d0ef 100644
--- a/src/rustc/driver/driver.rs
+++ b/src/rustc/driver/driver.rs
@@ -745,6 +745,7 @@ fn list_metadata(sess: session, path: &Path, out: io::Writer) {
 
 #[cfg(test)]
 mod test {
+    #[legacy_exports];
 
     // When the user supplies --test we should implicitly supply --cfg test
     #[test]
diff --git a/src/rustc/driver/session.rs b/src/rustc/driver/session.rs
index 8c085e6391d..2e8cddf2095 100644
--- a/src/rustc/driver/session.rs
+++ b/src/rustc/driver/session.rs
@@ -338,6 +338,7 @@ fn sess_os_to_meta_os(os: os) -> metadata::loader::os {
 
 #[cfg(test)]
 mod test {
+    #[legacy_exports];
     use syntax::ast_util;
 
     fn make_crate_type_attr(t: ~str) -> ast::attribute {
diff --git a/src/rustc/front/intrinsic.rs b/src/rustc/front/intrinsic.rs
index 33de068fad0..7c9b1e690af 100644
--- a/src/rustc/front/intrinsic.rs
+++ b/src/rustc/front/intrinsic.rs
@@ -2,6 +2,7 @@
 // and injected into each crate the compiler builds. Keep it small.
 
 mod intrinsic {
+    #[legacy_exports];
 
     pub use rusti::visit_tydesc;
 
@@ -113,6 +114,7 @@ mod intrinsic {
 
     #[abi = "rust-intrinsic"]
     extern mod rusti {
+        #[legacy_exports];
         fn get_tydesc<T>() -> *();
         fn visit_tydesc(td: *TyDesc, &&tv: TyVisitor);
     }
diff --git a/src/rustc/front/test.rs b/src/rustc/front/test.rs
index 27c070cd201..e1441d9ee5e 100644
--- a/src/rustc/front/test.rs
+++ b/src/rustc/front/test.rs
@@ -174,6 +174,7 @@ fn add_test_module(cx: test_ctxt, m: ast::_mod) -> ast::_mod {
 We're going to be building a module that looks more or less like:
 
 mod __test {
+    #[legacy_exports];
 
   fn main(args: ~[str]) -> int {
     std::test::test_main(args, tests())
diff --git a/src/rustc/lib/llvm.rs b/src/rustc/lib/llvm.rs
index 10866a213fe..60c08dab716 100644
--- a/src/rustc/lib/llvm.rs
+++ b/src/rustc/lib/llvm.rs
@@ -274,6 +274,7 @@ type SectionIteratorRef = *SectionIterator_opaque;
 #[link_name = "rustllvm"]
 #[abi = "cdecl"]
 extern mod llvm {
+    #[legacy_exports];
     /* Create and destroy contexts. */
     fn LLVMContextCreate() -> ContextRef;
     fn LLVMGetGlobalContext() -> ContextRef;
diff --git a/src/rustc/metadata.rs b/src/rustc/metadata.rs
index 66e53cf4540..2d2d6a3f79e 100644
--- a/src/rustc/metadata.rs
+++ b/src/rustc/metadata.rs
@@ -3,23 +3,29 @@
 // no dependencies on rustc it can move into its own crate.
 
 mod middle {
+    #[legacy_exports];
     pub use middle_::ty;
     pub use middle_::resolve;
 }
 
 mod front {
+    #[legacy_exports];
 }
 
 mod back {
+    #[legacy_exports];
 }
 
 mod driver {
+    #[legacy_exports];
 }
 
 mod util {
+    #[legacy_exports];
     pub use util_::ppaux;
 }
 
 mod lib {
+    #[legacy_exports];
     pub use lib_::llvm;
 }
diff --git a/src/rustc/middle/lang_items.rs b/src/rustc/middle/lang_items.rs
index e33ff5dcf50..87201f5a4da 100644
--- a/src/rustc/middle/lang_items.rs
+++ b/src/rustc/middle/lang_items.rs
@@ -50,6 +50,7 @@ struct LanguageItems {
 }
 
 mod LanguageItems {
+    #[legacy_exports];
     fn make() -> LanguageItems {
         LanguageItems {
             const_trait: None,
diff --git a/src/rustc/middle/resolve.rs b/src/rustc/middle/resolve.rs
index 18bea6338a4..7158754429b 100644
--- a/src/rustc/middle/resolve.rs
+++ b/src/rustc/middle/resolve.rs
@@ -483,6 +483,13 @@ struct Module {
 
     exported_names: HashMap<Atom,node_id>,
 
+    // XXX: This is a transition measure to let us switch export-evaluation
+    // logic when compiling modules that have transitioned to listing their
+    // pub/priv qualifications on items, explicitly, rather than using the
+    // old export rule.
+
+    legacy_exports: bool,
+
     // The status of resolving each import in this module.
     import_resolutions: HashMap<Atom,@ImportResolution>,
 
@@ -493,7 +500,9 @@ struct Module {
     mut resolved_import_count: uint,
 }
 
-fn Module(parent_link: ParentLink, def_id: Option<def_id>) -> Module {
+fn Module(parent_link: ParentLink,
+          def_id: Option<def_id>,
+          legacy_exports: bool) -> Module {
     Module {
         parent_link: parent_link,
         def_id: def_id,
@@ -501,6 +510,7 @@ fn Module(parent_link: ParentLink, def_id: Option<def_id>) -> Module {
         imports: DVec(),
         anonymous_children: HashMap(),
         exported_names: atom_hashmap(),
+        legacy_exports: legacy_exports,
         import_resolutions: atom_hashmap(),
         glob_count: 0u,
         resolved_import_count: 0u
@@ -577,10 +587,12 @@ struct NameBindings {
 impl NameBindings {
 
     /// Creates a new module in this set of name bindings.
-    fn define_module(parent_link: ParentLink, def_id: Option<def_id>,
+    fn define_module(parent_link: ParentLink,
+                     def_id: Option<def_id>,
+                     legacy_exports: bool,
                      sp: span) {
         if self.module_def.is_none() {
-            let module_ = @Module(parent_link, def_id);
+            let module_ = @Module(parent_link, def_id, legacy_exports);
             self.module_def = ModuleDef(module_);
             self.module_span = Some(sp);
         }
@@ -728,6 +740,18 @@ fn namespace_to_str(ns: Namespace) -> ~str {
     }
 }
 
+fn has_legacy_export_attr(attrs: &[syntax::ast::attribute]) -> bool {
+    for attrs.each |attribute| {
+        match attribute.node.value.node {
+          syntax::ast::meta_word(w) if w == ~"legacy_exports" => {
+            return true;
+          }
+          _ => {}
+        }
+    }
+    return false;
+}
+
 fn Resolver(session: session, lang_items: LanguageItems,
             crate: @crate) -> Resolver {
 
@@ -735,6 +759,7 @@ fn Resolver(session: session, lang_items: LanguageItems,
 
     (*graph_root).define_module(NoParentLink,
                                 Some({ crate: 0, node: 0 }),
+                                has_legacy_export_attr(crate.node.attrs),
                                 crate.span);
 
     let current_module = (*graph_root).get_module();
@@ -885,10 +910,18 @@ impl Resolver {
         }));
     }
 
-    fn visibility_to_privacy(visibility: visibility) -> Privacy {
-        match visibility {
-            inherited | public => Public,
-            private => Private
+    fn visibility_to_privacy(visibility: visibility,
+                             legacy_exports: bool) -> Privacy {
+        if legacy_exports {
+            match visibility {
+              inherited | public => Public,
+              private => Private
+            }
+        } else {
+            match visibility {
+              public => Public,
+              inherited | private => Private
+            }
         }
     }
 
@@ -1009,16 +1042,20 @@ impl Resolver {
 
         let atom = item.ident;
         let sp = item.span;
+        let legacy = match parent {
+          ModuleReducedGraphParent(m) => m.legacy_exports
+        };
 
         match item.node {
             item_mod(module_) => {
+              let legacy = has_legacy_export_attr(item.attrs);
               let (name_bindings, new_parent) = self.add_child(atom, parent,
                                                        ~[ModuleNS], sp);
 
                 let parent_link = self.get_parent_link(new_parent, atom);
                 let def_id = { crate: 0, node: item.id };
               (*name_bindings).define_module(parent_link, Some(def_id),
-                                             sp);
+                                             legacy, sp);
 
                 let new_parent =
                     ModuleReducedGraphParent((*name_bindings).get_module());
@@ -1026,6 +1063,7 @@ impl Resolver {
                 visit_mod(module_, sp, item.id, new_parent, visitor);
             }
             item_foreign_mod(fm) => {
+              let legacy = has_legacy_export_attr(item.attrs);
               let new_parent = match fm.sort {
                 named => {
                   let (name_bindings, new_parent) = self.add_child(atom,
@@ -1034,7 +1072,7 @@ impl Resolver {
                   let parent_link = self.get_parent_link(new_parent, atom);
                   let def_id = { crate: 0, node: item.id };
                   (*name_bindings).define_module(parent_link, Some(def_id),
-                                                 sp);
+                                                 legacy, sp);
 
                   ModuleReducedGraphParent((*name_bindings).get_module())
                 }
@@ -1052,7 +1090,7 @@ impl Resolver {
                                                       ~[ValueNS], sp);
 
                 (*name_bindings).define_value
-                    (self.visibility_to_privacy(item.vis),
+                    (self.visibility_to_privacy(item.vis, legacy),
                      def_const(local_def(item.id)),
                      sp);
             }
@@ -1062,7 +1100,7 @@ impl Resolver {
 
                 let def = def_fn(local_def(item.id), purity);
                 (*name_bindings).define_value
-                    (self.visibility_to_privacy(item.vis), def, sp);
+                    (self.visibility_to_privacy(item.vis, legacy), def, sp);
                 visit_item(item, new_parent, visitor);
             }
 
@@ -1072,7 +1110,7 @@ impl Resolver {
                                                       ~[TypeNS], sp);
 
                 (*name_bindings).define_type
-                    (self.visibility_to_privacy(item.vis),
+                    (self.visibility_to_privacy(item.vis, legacy),
                      def_ty(local_def(item.id)),
                      sp);
             }
@@ -1083,7 +1121,7 @@ impl Resolver {
                                                                ~[TypeNS], sp);
 
                 (*name_bindings).define_type
-                    (self.visibility_to_privacy(item.vis),
+                    (self.visibility_to_privacy(item.vis, legacy),
                      def_ty(local_def(item.id)),
                      sp);
 
@@ -1104,7 +1142,7 @@ impl Resolver {
                             self.add_child(atom, parent, ~[TypeNS], sp);
 
                         (*name_bindings).define_type
-                            (self.visibility_to_privacy(item.vis),
+                            (self.visibility_to_privacy(item.vis, legacy),
                              def_ty(local_def(item.id)),
                              sp);
                         new_parent
@@ -1114,7 +1152,8 @@ impl Resolver {
                             self.add_child(atom, parent, ~[ValueNS, TypeNS],
                                            sp);
 
-                        let privacy = self.visibility_to_privacy(item.vis);
+                        let privacy = self.visibility_to_privacy(item.vis,
+                                                                 legacy);
 
                         (*name_bindings).define_type
                             (privacy, def_ty(local_def(item.id)), sp);
@@ -1171,7 +1210,7 @@ impl Resolver {
                 self.trait_info.insert(def_id, method_names);
 
                 (*name_bindings).define_type
-                    (self.visibility_to_privacy(item.vis),
+                    (self.visibility_to_privacy(item.vis, legacy),
                      def_ty(def_id),
                      sp);
                 visit_item(item, new_parent, visitor);
@@ -1190,10 +1229,14 @@ impl Resolver {
                                        parent: ReducedGraphParent,
                                        &&visitor: vt<ReducedGraphParent>) {
 
+        let legacy = match parent {
+          ModuleReducedGraphParent(m) => m.legacy_exports
+        };
+
         let atom = variant.node.name;
         let (child, _) = self.add_child(atom, parent, ~[ValueNS],
                                         variant.span);
-        let privacy = self.visibility_to_privacy(variant.node.vis);
+        let privacy = self.visibility_to_privacy(variant.node.vis, legacy);
 
         match variant.node.kind {
             tuple_variant_kind(_) => {
@@ -1228,6 +1271,7 @@ impl Resolver {
     fn build_reduced_graph_for_view_item(view_item: @view_item,
                                          parent: ReducedGraphParent,
                                          &&_visitor: vt<ReducedGraphParent>) {
+
         match view_item.node {
             view_item_import(view_paths) => {
                 for view_paths.each |view_path| {
@@ -1368,6 +1412,7 @@ impl Resolver {
 
                         (*child_name_bindings).define_module(parent_link,
                                                              Some(def_id),
+                                                             false,
                                                              view_item.span);
                         self.build_reduced_graph_for_external_crate
                             ((*child_name_bindings).get_module());
@@ -1424,7 +1469,7 @@ impl Resolver {
 
             let parent_module = self.get_module_from_parent(parent);
             let new_module = @Module(BlockParentLink(parent_module, block_id),
-                                     None);
+                                     None, false);
             parent_module.anonymous_children.insert(block_id, new_module);
             new_parent = ModuleReducedGraphParent(new_module);
         } else {
@@ -1451,6 +1496,7 @@ impl Resolver {
                   None => {
                     child_name_bindings.define_module(parent_link,
                                                       Some(def_id),
+                                                      false,
                                                       dummy_sp());
                     modules.insert(def_id,
                                    child_name_bindings.get_module());
@@ -1594,7 +1640,8 @@ impl Resolver {
                         let parent_link = self.get_parent_link(new_parent,
                                                                ident);
                         (*child_name_bindings).define_module(parent_link,
-                                                       None, dummy_sp());
+                                                       None, false,
+                                                             dummy_sp());
                     }
                     ModuleDef(_) => { /* Fall through. */ }
                 }
@@ -2554,8 +2601,9 @@ impl Resolver {
     }
 
     fn name_is_exported(module_: @Module, name: Atom) -> bool {
-        return module_.exported_names.size() == 0u ||
-                module_.exported_names.contains_key(name);
+        return !module_.legacy_exports ||
+            module_.exported_names.size() == 0u ||
+            module_.exported_names.contains_key(name);
     }
 
     /**
diff --git a/src/rustc/rustc.rc b/src/rustc/rustc.rc
index 67f36e3f249..d34ae4e35f3 100644
--- a/src/rustc/rustc.rc
+++ b/src/rustc/rustc.rc
@@ -37,102 +37,188 @@ use middle_ = middle;
 use back_ = back;
 
 mod middle {
+    #[legacy_exports];
     mod trans {
+        #[legacy_exports];
+        #[legacy_exports]
         mod inline;
+        #[legacy_exports]
         mod monomorphize;
+        #[legacy_exports]
         mod controlflow;
+        #[legacy_exports]
         mod glue;
+        #[legacy_exports]
         mod datum;
+        #[legacy_exports]
         mod callee;
+        #[legacy_exports]
         mod expr;
+        #[legacy_exports]
         mod common;
+        #[legacy_exports]
         mod consts;
+        #[legacy_exports]
         mod type_of;
+        #[legacy_exports]
         mod build;
+        #[legacy_exports]
         mod base;
+        #[legacy_exports]
         mod alt;
+        #[legacy_exports]
         mod uniq;
+        #[legacy_exports]
         mod closure;
+        #[legacy_exports]
         mod tvec;
+        #[legacy_exports]
         mod meth;
+        #[legacy_exports]
         mod foreign;
+        #[legacy_exports]
         mod reflect;
+        #[legacy_exports]
         mod shape;
+        #[legacy_exports]
         mod debuginfo;
+        #[legacy_exports]
         mod type_use;
+        #[legacy_exports]
         mod reachable;
     }
+    #[legacy_exports]
     mod ty;
+    #[legacy_exports]
     mod resolve;
     mod typeck {
+        #[legacy_exports];
         mod check {
+            #[legacy_exports];
+            #[legacy_exports]
             mod alt;
+            #[legacy_exports]
             mod vtable;
+            #[legacy_exports]
             mod writeback;
+            #[legacy_exports]
             mod regionmanip;
+            #[legacy_exports]
             mod regionck;
+            #[legacy_exports]
             mod demand;
+            #[legacy_exports]
             mod method;
         }
+        #[legacy_exports]
         mod rscope;
+        #[legacy_exports]
         mod astconv;
         mod infer {
+            #[legacy_exports];
+            #[legacy_exports]
             mod assignment;
+            #[legacy_exports]
             mod combine;
+            #[legacy_exports]
             mod glb;
+            #[legacy_exports]
             mod integral;
+            #[legacy_exports]
             mod lattice;
+            #[legacy_exports]
             mod lub;
+            #[legacy_exports]
             mod region_var_bindings;
+            #[legacy_exports]
             mod resolve;
+            #[legacy_exports]
             mod sub;
+            #[legacy_exports]
             mod to_str;
+            #[legacy_exports]
             mod unify;
         }
+        #[legacy_exports]
         mod collect;
+        #[legacy_exports]
         mod coherence;
     }
+    #[legacy_exports]
     mod check_loop;
+    #[legacy_exports]
     mod check_alt;
+    #[legacy_exports]
     mod check_const;
+    #[legacy_exports]
     mod lint;
     mod borrowck {
+        #[legacy_exports];
+        #[legacy_exports]
         mod check_loans;
+        #[legacy_exports]
         mod gather_loans;
+        #[legacy_exports]
         mod loan;
+        #[legacy_exports]
         mod preserve;
     }
+    #[legacy_exports]
     mod mem_categorization;
+    #[legacy_exports]
     mod liveness;
+    #[legacy_exports]
     mod kind;
+    #[legacy_exports]
     mod freevars;
+    #[legacy_exports]
     mod capture;
+    #[legacy_exports]
     mod pat_util;
+    #[legacy_exports]
     mod region;
+    #[legacy_exports]
     mod const_eval;
+    #[legacy_exports]
     mod astencode;
+    #[legacy_exports]
     mod lang_items;
+    #[legacy_exports]
     mod privacy;
 }
 
 mod front {
+    #[legacy_exports];
+    #[legacy_exports]
     mod config;
+    #[legacy_exports]
     mod test;
+    #[legacy_exports]
     mod core_inject;
+    #[legacy_exports]
     mod intrinsic_inject;
 }
 
 mod back {
+    #[legacy_exports];
+    #[legacy_exports]
     mod link;
+    #[legacy_exports]
     mod abi;
+    #[legacy_exports]
     mod upcall;
+    #[legacy_exports]
     mod x86;
+    #[legacy_exports]
     mod x86_64;
+    #[legacy_exports]
     mod rpath;
+    #[legacy_exports]
     mod target_strs;
 }
 
 mod metadata {
+    #[legacy_exports];
     export encoder;
     export creader;
     export cstore;
@@ -144,29 +230,47 @@ mod metadata {
     export loader;
     export filesearch;
 
+    #[legacy_exports]
     mod common;
+    #[legacy_exports]
     mod tyencode;
+    #[legacy_exports]
     mod tydecode;
+    #[legacy_exports]
     mod encoder;
+    #[legacy_exports]
     mod decoder;
+    #[legacy_exports]
     mod creader;
+    #[legacy_exports]
     mod cstore;
+    #[legacy_exports]
     mod csearch;
+    #[legacy_exports]
     mod loader;
+    #[legacy_exports]
     mod filesearch;
 }
 
 mod driver {
+    #[legacy_exports];
+    #[legacy_exports]
     mod driver;
+    #[legacy_exports]
     mod session;
 }
 
 mod util {
+    #[legacy_exports];
+    #[legacy_exports]
     mod common;
+    #[legacy_exports]
     mod ppaux;
 }
 
 mod lib {
+    #[legacy_exports];
+    #[legacy_exports]
     mod llvm;
 }