diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2012-10-02 18:13:56 -0700 | 
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2012-10-02 18:15:19 -0700 | 
| commit | 2f451a7bd7d856daad1e487f7bc7a14c40840c2d (patch) | |
| tree | 939578793823dcef8262a839d5dc3992a513b02f /src/rustc/middle/resolve.rs | |
| parent | 8a5545e9cd3f9fa82e8003c2e71eee595492ad64 (diff) | |
| download | rust-2f451a7bd7d856daad1e487f7bc7a14c40840c2d.tar.gz rust-2f451a7bd7d856daad1e487f7bc7a14c40840c2d.zip  | |
rustc: Only allow imports marked with "pub" to be imported from other modules
Diffstat (limited to 'src/rustc/middle/resolve.rs')
| -rw-r--r-- | src/rustc/middle/resolve.rs | 23 | 
1 files changed, 19 insertions, 4 deletions
diff --git a/src/rustc/middle/resolve.rs b/src/rustc/middle/resolve.rs index fc66b5dc7a1..eca0687f2fd 100644 --- a/src/rustc/middle/resolve.rs +++ b/src/rustc/middle/resolve.rs @@ -367,8 +367,7 @@ struct ImportResolution { mut used: bool, } -fn ImportResolution(privacy: Privacy, - span: span) -> ImportResolution { +fn ImportResolution(privacy: Privacy, span: span) -> ImportResolution { ImportResolution { privacy: privacy, span: span, @@ -1639,11 +1638,20 @@ impl Resolver { match *subclass { SingleImport(target, _, _) => { + debug!("(building import directive) building import \ + directive: privacy %? %s::%s", + privacy, + self.idents_to_str(module_path.get()), + self.session.str_of(target)); + match module_.import_resolutions.find(target) { Some(resolution) => { + debug!("(building import directive) bumping \ + reference"); resolution.outstanding_references += 1u; } None => { + debug!("(building import directive) creating new"); let resolution = @ImportResolution(privacy, span); resolution.outstanding_references = 1u; module_.import_resolutions.insert(target, resolution); @@ -1967,6 +1975,12 @@ impl Resolver { namespace: Namespace) -> NamespaceResult { + // Import resolutions must be declared with "pub" + // in order to be exported. + if import_resolution.privacy == Private { + return UnboundResult; + } + match (*import_resolution). target_for_namespace(namespace) { None => { @@ -4229,7 +4243,8 @@ impl Resolver { // Next, search import resolutions. match containing_module.import_resolutions.find(name) { - Some(import_resolution) => { + Some(import_resolution) if import_resolution.privacy == Public || + xray == Xray => { match (*import_resolution).target_for_namespace(namespace) { Some(target) => { match (*target.bindings) @@ -4252,7 +4267,7 @@ impl Resolver { } } } - None => { + Some(_) | None => { return NoNameDefinition; } }  | 
