Skip to content

Commit

Permalink
resolve: Do not afraid to set current module to enums and traits
Browse files Browse the repository at this point in the history
  • Loading branch information
petrochenkov committed Sep 7, 2019
1 parent ef54f57 commit 0d08467
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 8 deletions.
11 changes: 4 additions & 7 deletions src/librustc_resolve/build_reduced_graph.rs
Original file line number Diff line number Diff line change
Expand Up @@ -728,9 +728,10 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
expansion,
item.span);
self.r.define(parent, ident, TypeNS, (module, vis, sp, expansion));
self.parent_scope.module = module;

for variant in &(*enum_definition).variants {
self.build_reduced_graph_for_variant(variant, module, vis);
self.build_reduced_graph_for_variant(variant, vis);
}
}

Expand Down Expand Up @@ -818,10 +819,8 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {

// Constructs the reduced graph for one variant. Variants exist in the
// type and value namespaces.
fn build_reduced_graph_for_variant(&mut self,
variant: &Variant,
parent: Module<'a>,
vis: ty::Visibility) {
fn build_reduced_graph_for_variant(&mut self, variant: &Variant, vis: ty::Visibility) {
let parent = self.parent_scope.module;
let expn_id = self.parent_scope.expansion;
let ident = variant.ident;

Expand Down Expand Up @@ -1253,9 +1252,7 @@ impl<'a, 'b> Visitor<'b> for BuildReducedGraphVisitor<'a, 'b> {
let expansion = self.parent_scope.expansion;
self.r.define(parent, item.ident, ns, (res, vis, item.span, expansion));

self.parent_scope.module = parent.parent.unwrap(); // nearest normal ancestor
visit::walk_trait_item(self, item);
self.parent_scope.module = parent;
}

fn visit_token(&mut self, t: Token) {
Expand Down
6 changes: 5 additions & 1 deletion src/librustc_resolve/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -538,7 +538,11 @@ impl<'a> ModuleData<'a> {
}

fn nearest_item_scope(&'a self) -> Module<'a> {
if self.is_trait() { self.parent.unwrap() } else { self }
match self.kind {
ModuleKind::Def(DefKind::Enum, ..) | ModuleKind::Def(DefKind::Trait, ..) =>
self.parent.expect("enum or trait module without a parent"),
_ => self,
}
}

fn is_ancestor_of(&self, mut other: &Self) -> bool {
Expand Down

0 comments on commit 0d08467

Please sign in to comment.