Skip to content

Commit fb03ee9

Browse files
committed
---
yaml --- r: 274737 b: refs/heads/stable c: 2e24c74 h: refs/heads/master i: 274735: b852af0
1 parent e069433 commit fb03ee9

File tree

4 files changed

+46
-22
lines changed

4 files changed

+46
-22
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ refs/heads/tmp: e06d2ad9fcd5027bcaac5b08fc9aa39a49d0ecd3
2929
refs/tags/1.0.0-alpha.2: 4c705f6bc559886632d3871b04f58aab093bfa2f
3030
refs/tags/homu-tmp: c0221c8897db309a79990367476177b1230bb264
3131
refs/tags/1.0.0-beta: 8cbb92b53468ee2b0c2d3eeb8567005953d40828
32-
refs/heads/stable: 22e189ed57b27caa396da44ce4f273b9a0061dda
32+
refs/heads/stable: 2e24c7410f47d5a69ab9bd69b06e4999e0e6bea3
3333
refs/tags/1.0.0: 55bd4f8ff2b323f317ae89e254ce87162d52a375
3434
refs/tags/1.1.0: bc3c16f09287e5545c1d3f76b7abd54f2eca868b
3535
refs/tags/1.2.0: f557861f822c34f07270347b94b5280de20a597e

branches/stable/src/librustc_resolve/build_reduced_graph.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use resolve_imports::ImportDirectiveSubclass::{self, SingleImport, GlobImport};
1919
use resolve_imports::ImportResolution;
2020
use Module;
2121
use Namespace::{self, TypeNS, ValueNS};
22-
use {NameBinding, DefOrModule};
22+
use {NameBinding, NameBindingKind};
2323
use {names_to_string, module_to_string};
2424
use ParentLink::{ModuleParentLink, BlockParentLink};
2525
use Resolver;
@@ -82,8 +82,8 @@ impl<'a> ToNameBinding<'a> for (Module<'a>, Span) {
8282

8383
impl<'a> ToNameBinding<'a> for (Def, Span, DefModifiers) {
8484
fn to_name_binding(self) -> NameBinding<'a> {
85-
let def = DefOrModule::Def(self.0);
86-
NameBinding { modifiers: self.2, def_or_module: def, span: Some(self.1) }
85+
let kind = NameBindingKind::Def(self.0);
86+
NameBinding { modifiers: self.2, kind: kind, span: Some(self.1) }
8787
}
8888
}
8989

branches/stable/src/librustc_resolve/lib.rs

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -951,21 +951,26 @@ bitflags! {
951951
// We need to track them to prohibit reexports like `pub use PrivEnum::Variant`.
952952
const PRIVATE_VARIANT = 1 << 2,
953953
const PRELUDE = 1 << 3,
954+
const GLOB_IMPORTED = 1 << 4,
954955
}
955956
}
956957

957958
// Records a possibly-private value, type, or module definition.
958-
#[derive(Clone, Debug)]
959+
#[derive(Debug)]
959960
pub struct NameBinding<'a> {
960-
modifiers: DefModifiers, // see note in ImportResolution about how to use this
961-
def_or_module: DefOrModule<'a>,
961+
modifiers: DefModifiers,
962+
kind: NameBindingKind<'a>,
962963
span: Option<Span>,
963964
}
964965

965-
#[derive(Clone, Debug)]
966-
enum DefOrModule<'a> {
966+
#[derive(Debug)]
967+
enum NameBindingKind<'a> {
967968
Def(Def),
968969
Module(Module<'a>),
970+
Import {
971+
binding: &'a NameBinding<'a>,
972+
id: NodeId,
973+
},
969974
}
970975

971976
impl<'a> NameBinding<'a> {
@@ -976,20 +981,22 @@ impl<'a> NameBinding<'a> {
976981
DefModifiers::empty()
977982
} | DefModifiers::IMPORTABLE;
978983

979-
NameBinding { modifiers: modifiers, def_or_module: DefOrModule::Module(module), span: span }
984+
NameBinding { modifiers: modifiers, kind: NameBindingKind::Module(module), span: span }
980985
}
981986

982987
fn module(&self) -> Option<Module<'a>> {
983-
match self.def_or_module {
984-
DefOrModule::Module(ref module) => Some(module),
985-
DefOrModule::Def(_) => None,
988+
match self.kind {
989+
NameBindingKind::Module(module) => Some(module),
990+
NameBindingKind::Def(_) => None,
991+
NameBindingKind::Import { binding, .. } => binding.module(),
986992
}
987993
}
988994

989995
fn def(&self) -> Option<Def> {
990-
match self.def_or_module {
991-
DefOrModule::Def(def) => Some(def),
992-
DefOrModule::Module(ref module) => module.def,
996+
match self.kind {
997+
NameBindingKind::Def(def) => Some(def),
998+
NameBindingKind::Module(module) => module.def,
999+
NameBindingKind::Import { binding, .. } => binding.def(),
9931000
}
9941001
}
9951002

@@ -1009,6 +1016,13 @@ impl<'a> NameBinding<'a> {
10091016
fn is_extern_crate(&self) -> bool {
10101017
self.module().map(|module| module.is_extern_crate).unwrap_or(false)
10111018
}
1019+
1020+
fn is_import(&self) -> bool {
1021+
match self.kind {
1022+
NameBindingKind::Import { .. } => true,
1023+
_ => false,
1024+
}
1025+
}
10121026
}
10131027

10141028
/// Interns the names of the primitive types.

branches/stable/src/librustc_resolve/resolve_imports.rs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,9 @@
1111
use self::ImportDirectiveSubclass::*;
1212

1313
use DefModifiers;
14-
use DefOrModule;
1514
use Module;
1615
use Namespace::{self, TypeNS, ValueNS};
17-
use NameBinding;
16+
use {NameBinding, NameBindingKind};
1817
use ResolveResult;
1918
use ResolveResult::*;
2019
use Resolver;
@@ -82,11 +81,22 @@ impl ImportDirective {
8281
// Given the binding to which this directive resolves in a particular namespace,
8382
// this returns the binding for the name this directive defines in that namespace.
8483
fn import<'a>(&self, binding: &'a NameBinding<'a>) -> NameBinding<'a> {
85-
let mut binding = binding.clone();
84+
let mut modifiers = match self.is_public {
85+
true => DefModifiers::PUBLIC | DefModifiers::IMPORTABLE,
86+
false => DefModifiers::empty(),
87+
};
88+
if let GlobImport = self.subclass {
89+
modifiers = modifiers | DefModifiers::GLOB_IMPORTED;
90+
}
8691
if self.shadowable == Shadowable::Always {
87-
binding.modifiers = binding.modifiers | DefModifiers::PRELUDE;
92+
modifiers = modifiers | DefModifiers::PRELUDE;
93+
}
94+
95+
NameBinding {
96+
kind: NameBindingKind::Import { binding: binding, id: self.id },
97+
span: Some(self.span),
98+
modifiers: modifiers,
8899
}
89-
binding
90100
}
91101
}
92102

@@ -216,7 +226,7 @@ impl<'a, 'b:'a, 'tcx:'b> ImportResolver<'a, 'b, 'tcx> {
216226

217227
let dummy_binding = self.resolver.new_name_binding(NameBinding {
218228
modifiers: DefModifiers::IMPORTABLE,
219-
def_or_module: DefOrModule::Def(Def::Err),
229+
kind: NameBindingKind::Def(Def::Err),
220230
span: None,
221231
});
222232

0 commit comments

Comments
 (0)