diff options
Diffstat (limited to 'src/rustc')
| -rw-r--r-- | src/rustc/back/link.rs | 3 | ||||
| -rw-r--r-- | src/rustc/back/rpath.rs | 1 | ||||
| -rw-r--r-- | src/rustc/driver/driver.rs | 1 | ||||
| -rw-r--r-- | src/rustc/driver/session.rs | 1 | ||||
| -rw-r--r-- | src/rustc/front/intrinsic.rs | 2 | ||||
| -rw-r--r-- | src/rustc/front/test.rs | 1 | ||||
| -rw-r--r-- | src/rustc/lib/llvm.rs | 1 | ||||
| -rw-r--r-- | src/rustc/metadata.rs | 6 | ||||
| -rw-r--r-- | src/rustc/middle/lang_items.rs | 1 | ||||
| -rw-r--r-- | src/rustc/middle/resolve.rs | 90 | ||||
| -rw-r--r-- | src/rustc/rustc.rc | 104 |
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; } |
