Skip to content

Commit 638c303

Browse files
committed
---
yaml --- r: 271621 b: refs/heads/auto c: bb09ae2 h: refs/heads/master i: 271619: 0a56cf3
1 parent f3efc9a commit 638c303

File tree

2 files changed

+43
-82
lines changed

2 files changed

+43
-82
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503
88
refs/tags/release-0.3.1: 495bae036dfe5ec6ceafd3312b4dca48741e845b
99
refs/tags/release-0.4: e828ea2080499553b97dfe33b3f4d472b4562ad7
1010
refs/tags/release-0.5: 7e3bcfbf21278251ee936ad53e92e9b719702d73
11-
refs/heads/auto: 73417853e40646406a82ea39e606fb6199fa6b5d
11+
refs/heads/auto: bb09ae28c03d7357f22dd1683e9c78393b5c1e43
1212
refs/tags/release-0.6: b4ebcfa1812664df5e142f0134a5faea3918544c
1313
refs/tags/0.1: b19db808c2793fe2976759b85a355c3ad8c8b336
1414
refs/tags/0.2: 1754d02027f2924bed83b0160ee340c7f41d5ea1

branches/auto/src/librustc_resolve/lib.rs

Lines changed: 42 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -789,6 +789,26 @@ enum LexicalScopeBinding<'a> {
789789
LocalDef(LocalDef),
790790
}
791791

792+
impl<'a> LexicalScopeBinding<'a> {
793+
fn local_def(self) -> LocalDef {
794+
match self {
795+
LexicalScopeBinding::LocalDef(local_def) => local_def,
796+
LexicalScopeBinding::Item(binding) => LocalDef::from_def(binding.def().unwrap()),
797+
}
798+
}
799+
800+
fn def(self) -> Def {
801+
self.local_def().def
802+
}
803+
804+
fn module(self) -> Option<Module<'a>> {
805+
match self {
806+
LexicalScopeBinding::Item(binding) => binding.module(),
807+
_ => None,
808+
}
809+
}
810+
}
811+
792812
/// The link from a module up to its nearest parent node.
793813
#[derive(Clone,Debug)]
794814
enum ParentLink<'a> {
@@ -1404,20 +1424,13 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
14041424
// This is not a crate-relative path. We resolve the
14051425
// first component of the path in the current lexical
14061426
// scope and then proceed to resolve below that.
1407-
match self.resolve_item_in_lexical_scope(module_path[0],
1408-
TypeNS,
1409-
true) {
1410-
Failed(err) => return Failed(err),
1411-
Indeterminate => {
1412-
debug!("(resolving module path for import) indeterminate; bailing");
1413-
return Indeterminate;
1414-
}
1415-
Success(binding) => match binding.module() {
1416-
Some(containing_module) => {
1417-
search_module = containing_module;
1418-
start_index = 1;
1419-
}
1420-
None => return Failed(None),
1427+
let ident = hir::Ident::from_name(module_path[0]);
1428+
match self.resolve_ident_in_lexical_scope(ident, TypeNS, true)
1429+
.and_then(LexicalScopeBinding::module) {
1430+
None => return Failed(None),
1431+
Some(containing_module) => {
1432+
search_module = containing_module;
1433+
start_index = 1;
14211434
}
14221435
}
14231436
}
@@ -1485,18 +1498,6 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
14851498
None
14861499
}
14871500

1488-
fn resolve_item_in_lexical_scope(&mut self,
1489-
name: Name,
1490-
namespace: Namespace,
1491-
record_used: bool)
1492-
-> ResolveResult<&'a NameBinding<'a>> {
1493-
let ident = hir::Ident::from_name(name);
1494-
match self.resolve_ident_in_lexical_scope(ident, namespace, record_used) {
1495-
Some(LexicalScopeBinding::Item(binding)) => Success(binding),
1496-
_ => Failed(None),
1497-
}
1498-
}
1499-
15001501
/// Returns the nearest normal module parent of the given module.
15011502
fn get_nearest_normal_module_parent(&mut self, module_: Module<'a>) -> Option<Module<'a>> {
15021503
let mut module_ = module_;
@@ -2288,8 +2289,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
22882289
let ident = path1.node;
22892290
let renamed = ident.name;
22902291

2291-
match self.resolve_bare_identifier_pattern(ident.unhygienic_name,
2292-
pattern.span) {
2292+
match self.resolve_bare_identifier_pattern(ident, pattern.span) {
22932293
FoundStructOrEnumVariant(def) if const_ok => {
22942294
debug!("(resolving pattern) resolving `{}` to struct or enum variant",
22952295
renamed);
@@ -2540,49 +2540,21 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
25402540
});
25412541
}
25422542

2543-
fn resolve_bare_identifier_pattern(&mut self,
2544-
name: Name,
2545-
span: Span)
2543+
fn resolve_bare_identifier_pattern(&mut self, ident: hir::Ident, span: Span)
25462544
-> BareIdentifierPatternResolution {
2547-
match self.resolve_item_in_lexical_scope(name, ValueNS, true) {
2548-
Success(binding) => {
2549-
debug!("(resolve bare identifier pattern) succeeded in finding {} at {:?}",
2550-
name,
2551-
binding);
2552-
match binding.def() {
2553-
None => {
2554-
panic!("resolved name in the value namespace to a set of name bindings \
2555-
with no def?!");
2556-
}
2557-
// For the two success cases, this lookup can be
2558-
// considered as not having a private component because
2559-
// the lookup happened only within the current module.
2560-
Some(def @ Def::Variant(..)) | Some(def @ Def::Struct(..)) => {
2561-
return FoundStructOrEnumVariant(def);
2562-
}
2563-
Some(def @ Def::Const(..)) | Some(def @ Def::AssociatedConst(..)) => {
2564-
return FoundConst(def, name);
2565-
}
2566-
Some(Def::Static(..)) => {
2567-
resolve_error(self, span, ResolutionError::StaticVariableReference);
2568-
return BareIdentifierPatternUnresolved;
2569-
}
2570-
_ => return BareIdentifierPatternUnresolved
2571-
}
2545+
match self.resolve_ident_in_lexical_scope(ident, ValueNS, true)
2546+
.map(LexicalScopeBinding::def) {
2547+
Some(def @ Def::Variant(..)) | Some(def @ Def::Struct(..)) => {
2548+
FoundStructOrEnumVariant(def)
25722549
}
2573-
2574-
Indeterminate => return BareIdentifierPatternUnresolved,
2575-
Failed(err) => {
2576-
match err {
2577-
Some((span, msg)) => {
2578-
resolve_error(self, span, ResolutionError::FailedToResolve(&msg));
2579-
}
2580-
None => (),
2581-
}
2582-
2583-
debug!("(resolve bare identifier pattern) failed to find {}", name);
2584-
return BareIdentifierPatternUnresolved;
2550+
Some(def @ Def::Const(..)) | Some(def @ Def::AssociatedConst(..)) => {
2551+
FoundConst(def, ident.unhygienic_name)
25852552
}
2553+
Some(Def::Static(..)) => {
2554+
resolve_error(self, span, ResolutionError::StaticVariableReference);
2555+
BareIdentifierPatternUnresolved
2556+
}
2557+
_ => BareIdentifierPatternUnresolved,
25862558
}
25872559
}
25882560

@@ -2703,7 +2675,8 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
27032675
return Some(LocalDef::from_def(Def::Err));
27042676
}
27052677

2706-
self.resolve_identifier_in_local_ribs(identifier, namespace, record_used)
2678+
self.resolve_ident_in_lexical_scope(identifier, namespace, record_used)
2679+
.map(LexicalScopeBinding::local_def)
27072680
}
27082681

27092682
// Resolve a local definition, potentially adjusting for closures.
@@ -2887,18 +2860,6 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
28872860
})
28882861
}
28892862

2890-
fn resolve_identifier_in_local_ribs(&mut self,
2891-
ident: hir::Ident,
2892-
namespace: Namespace,
2893-
record_used: bool)
2894-
-> Option<LocalDef> {
2895-
Some(match self.resolve_ident_in_lexical_scope(ident, namespace, record_used) {
2896-
Some(LexicalScopeBinding::LocalDef(local_def)) => local_def,
2897-
Some(LexicalScopeBinding::Item(binding)) => LocalDef::from_def(binding.def().unwrap()),
2898-
None => return None,
2899-
})
2900-
}
2901-
29022863
fn with_no_errors<T, F>(&mut self, f: F) -> T
29032864
where F: FnOnce(&mut Resolver) -> T
29042865
{

0 commit comments

Comments
 (0)