diff --git a/src/librustc_hir/def.rs b/src/librustc_hir/def.rs index b4b19b9795b..8e87ce60ffd 100644 --- a/src/librustc_hir/def.rs +++ b/src/librustc_hir/def.rs @@ -88,6 +88,7 @@ pub enum DefKind { GlobalAsm, Impl, Closure, + Generator, } impl DefKind { @@ -131,6 +132,7 @@ impl DefKind { DefKind::Field => "field", DefKind::Impl => "implementation", DefKind::Closure => "closure", + DefKind::Generator => "generator", DefKind::ExternCrate => "extern crate", DefKind::GlobalAsm => "global assembly block", } @@ -184,6 +186,7 @@ impl DefKind { | DefKind::LifetimeParam | DefKind::ExternCrate | DefKind::Closure + | DefKind::Generator | DefKind::Use | DefKind::ForeignMod | DefKind::GlobalAsm diff --git a/src/librustc_metadata/rmeta/decoder.rs b/src/librustc_metadata/rmeta/decoder.rs index bc6c30ccc4e..39d8213f262 100644 --- a/src/librustc_metadata/rmeta/decoder.rs +++ b/src/librustc_metadata/rmeta/decoder.rs @@ -592,7 +592,7 @@ impl EntryKind { EntryKind::ForeignMod => DefKind::ForeignMod, EntryKind::GlobalAsm => DefKind::GlobalAsm, EntryKind::Field => DefKind::Field, - EntryKind::Generator(_) => DefKind::Closure, + EntryKind::Generator(_) => DefKind::Generator, } } } diff --git a/src/librustc_middle/hir/map/mod.rs b/src/librustc_middle/hir/map/mod.rs index d52edbfa96d..bd383bde3b5 100644 --- a/src/librustc_middle/hir/map/mod.rs +++ b/src/librustc_middle/hir/map/mod.rs @@ -285,7 +285,8 @@ impl<'hir> Map<'hir> { Node::AnonConst(_) => DefKind::AnonConst, Node::Field(_) => DefKind::Field, Node::Expr(expr) => match expr.kind { - ExprKind::Closure { .. } => DefKind::Closure, + ExprKind::Closure(.., None) => DefKind::Closure, + ExprKind::Closure(.., Some(_)) => DefKind::Generator, _ => bug!("def_kind: unsupported node: {}", self.node_to_string(hir_id)), }, Node::MacroDef(_) => DefKind::Macro(MacroKind::Bang), diff --git a/src/librustc_privacy/lib.rs b/src/librustc_privacy/lib.rs index 86dc0bb3fdd..27bbf43bc85 100644 --- a/src/librustc_privacy/lib.rs +++ b/src/librustc_privacy/lib.rs @@ -613,8 +613,8 @@ impl EmbargoVisitor<'tcx> { } } - // These have type privacy or are not namespaced, so are not reachable unless they're - // public. + // These have type privacy, so are not reachable unless they're + // public, or are not namespaced at all. DefKind::AssocConst | DefKind::AssocTy | DefKind::AssocOpaqueTy @@ -636,7 +636,8 @@ impl EmbargoVisitor<'tcx> { | DefKind::Field | DefKind::GlobalAsm | DefKind::Impl - | DefKind::Closure => (), + | DefKind::Closure + | DefKind::Generator => (), } } diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs index 100c32fbc2a..8456a0304fe 100644 --- a/src/librustc_save_analysis/lib.rs +++ b/src/librustc_save_analysis/lib.rs @@ -771,7 +771,8 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { | HirDefKind::Field | HirDefKind::GlobalAsm | HirDefKind::Impl - | HirDefKind::Closure, + | HirDefKind::Closure + | HirDefKind::Generator, _, ) | Res::PrimTy(..)