diff options
| author | Camille GILLOT <gillot.camille@gmail.com> | 2019-11-09 18:06:57 +0100 |
|---|---|---|
| committer | Camille GILLOT <gillot.camille@gmail.com> | 2019-11-10 12:31:41 +0100 |
| commit | 5b30da10b64cf9b3567554e651bb6a9d62ad554b (patch) | |
| tree | f762556911f4d6a102d225138f47789ebc8157b7 | |
| parent | f03cbc313ddc16d7aba6c21c197a52ee4d2e85e9 (diff) | |
Merge hir::GeneratorMovability into ast::Movability.
| -rw-r--r-- | src/librustc/hir/lowering/expr.rs | 9 | ||||
| -rw-r--r-- | src/librustc/hir/mod.rs | 17 | ||||
| -rw-r--r-- | src/librustc/ich/impls_syntax.rs | 1 | ||||
| -rw-r--r-- | src/librustc/mir/mod.rs | 2 | ||||
| -rw-r--r-- | src/librustc/traits/select.rs | 4 | ||||
| -rw-r--r-- | src/librustc/ty/context.rs | 2 | ||||
| -rw-r--r-- | src/librustc/ty/print/pretty.rs | 7 | ||||
| -rw-r--r-- | src/librustc/ty/sty.rs | 2 | ||||
| -rw-r--r-- | src/librustc_mir/borrow_check/mod.rs | 2 | ||||
| -rw-r--r-- | src/librustc_mir/borrow_check/nll/universal_regions.rs | 2 | ||||
| -rw-r--r-- | src/librustc_mir/hair/mod.rs | 2 | ||||
| -rw-r--r-- | src/librustc_mir/transform/generator.rs | 2 | ||||
| -rw-r--r-- | src/librustc_passes/loops.rs | 4 | ||||
| -rw-r--r-- | src/librustc_traits/generic_types.rs | 2 | ||||
| -rw-r--r-- | src/librustc_typeck/check/closure.rs | 4 | ||||
| -rw-r--r-- | src/librustc_typeck/check/mod.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/ast.rs | 8 |
17 files changed, 32 insertions, 42 deletions
diff --git a/src/librustc/hir/lowering/expr.rs b/src/librustc/hir/lowering/expr.rs index 74a2be8cf56..6c92a997b1f 100644 --- a/src/librustc/hir/lowering/expr.rs +++ b/src/librustc/hir/lowering/expr.rs @@ -494,7 +494,7 @@ impl LoweringContext<'_> { decl, body_id, span, - Some(hir::GeneratorMovability::Static) + Some(hir::Movability::Static) ); let generator = hir::Expr { hir_id: self.lower_node_id(closure_node_id), @@ -725,7 +725,7 @@ impl LoweringContext<'_> { fn_decl_span: Span, generator_kind: Option<hir::GeneratorKind>, movability: Movability, - ) -> Option<hir::GeneratorMovability> { + ) -> Option<hir::Movability> { match generator_kind { Some(hir::GeneratorKind::Gen) => { if !decl.inputs.is_empty() { @@ -736,10 +736,7 @@ impl LoweringContext<'_> { "generators cannot have explicit parameters" ); } - Some(match movability { - Movability::Movable => hir::GeneratorMovability::Movable, - Movability::Static => hir::GeneratorMovability::Static, - }) + Some(movability) }, Some(hir::GeneratorKind::Async(_)) => { bug!("non-`async` closure body turned `async` during lowering"); diff --git a/src/librustc/hir/mod.rs b/src/librustc/hir/mod.rs index 645d7b5fdb0..297022600f9 100644 --- a/src/librustc/hir/mod.rs +++ b/src/librustc/hir/mod.rs @@ -22,7 +22,7 @@ use syntax_pos::{Span, DUMMY_SP, MultiSpan}; use syntax::source_map::Spanned; use syntax::ast::{self, CrateSugar, Ident, Name, NodeId, AsmDialect}; use syntax::ast::{Attribute, Label, LitKind, StrStyle, FloatTy, IntTy, UintTy}; -pub use syntax::ast::{Mutability, Constness, Unsafety}; +pub use syntax::ast::{Mutability, Constness, Unsafety, Movability}; use syntax::attr::{InlineAttr, OptimizeAttr}; use syntax::symbol::{Symbol, kw}; use syntax::tokenstream::TokenStream; @@ -1628,8 +1628,8 @@ pub enum ExprKind { /// The `Span` is the argument block `|...|`. /// /// This may also be a generator literal or an `async block` as indicated by the - /// `Option<GeneratorMovability>`. - Closure(CaptureClause, P<FnDecl>, BodyId, Span, Option<GeneratorMovability>), + /// `Option<Movability>`. + Closure(CaptureClause, P<FnDecl>, BodyId, Span, Option<Movability>), /// A block (e.g., `'label: { ... }`). Block(P<Block>, Option<Label>), @@ -1802,17 +1802,6 @@ pub struct Destination { pub target_id: Result<HirId, LoopIdError>, } -/// Whether a generator contains self-references, causing it to be `!Unpin`. -#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, HashStable, - RustcEncodable, RustcDecodable, Hash, Debug)] -pub enum GeneratorMovability { - /// May contain self-references, `!Unpin`. - Static, - - /// Must not contain self-references, `Unpin`. - Movable, -} - /// The yield kind that caused an `ExprKind::Yield`. #[derive(Copy, Clone, PartialEq, Eq, Debug, RustcEncodable, RustcDecodable, HashStable)] pub enum YieldSource { diff --git a/src/librustc/ich/impls_syntax.rs b/src/librustc/ich/impls_syntax.rs index e8ef46d7abe..92970afe988 100644 --- a/src/librustc/ich/impls_syntax.rs +++ b/src/librustc/ich/impls_syntax.rs @@ -168,6 +168,7 @@ impl_stable_hash_for!(enum ::syntax::ast::Defaultness { Default, Final }); impl_stable_hash_for!(struct ::syntax::ast::Lifetime { id, ident }); impl_stable_hash_for!(enum ::syntax::ast::StrStyle { Cooked, Raw(pounds) }); impl_stable_hash_for!(enum ::syntax::ast::AttrStyle { Outer, Inner }); +impl_stable_hash_for!(enum ::syntax::ast::Movability { Static, Movable }); impl<'a> HashStable<StableHashingContext<'a>> for [ast::Attribute] { fn hash_stable(&self, hcx: &mut StableHashingContext<'a>, hasher: &mut StableHasher) { diff --git a/src/librustc/mir/mod.rs b/src/librustc/mir/mod.rs index 220362868ab..a3ddfec765f 100644 --- a/src/librustc/mir/mod.rs +++ b/src/librustc/mir/mod.rs @@ -2161,7 +2161,7 @@ pub enum AggregateKind<'tcx> { Adt(&'tcx AdtDef, VariantIdx, SubstsRef<'tcx>, Option<UserTypeAnnotationIndex>, Option<usize>), Closure(DefId, SubstsRef<'tcx>), - Generator(DefId, SubstsRef<'tcx>, hir::GeneratorMovability), + Generator(DefId, SubstsRef<'tcx>, hir::Movability), } #[derive(Copy, Clone, Debug, PartialEq, Eq, RustcEncodable, RustcDecodable, HashStable)] diff --git a/src/librustc/traits/select.rs b/src/librustc/traits/select.rs index f5ac1533d06..04b2597af22 100644 --- a/src/librustc/traits/select.rs +++ b/src/librustc/traits/select.rs @@ -2195,11 +2195,11 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { if self.tcx().lang_items().unpin_trait() == Some(def_id) => { match movability { - hir::GeneratorMovability::Static => { + hir::Movability::Static => { // Immovable generators are never `Unpin`, so // suppress the normal auto-impl candidate for it. } - hir::GeneratorMovability::Movable => { + hir::Movability::Movable => { // Movable generators are always `Unpin`, so add an // unconditional builtin candidate. candidates.vec.push(BuiltinCandidate { diff --git a/src/librustc/ty/context.rs b/src/librustc/ty/context.rs index 55f85809a40..04e0f6f4b56 100644 --- a/src/librustc/ty/context.rs +++ b/src/librustc/ty/context.rs @@ -2516,7 +2516,7 @@ impl<'tcx> TyCtxt<'tcx> { pub fn mk_generator(self, id: DefId, generator_substs: SubstsRef<'tcx>, - movability: hir::GeneratorMovability) + movability: hir::Movability) -> Ty<'tcx> { self.mk_ty(Generator(id, generator_substs, movability)) } diff --git a/src/librustc/ty/print/pretty.rs b/src/librustc/ty/print/pretty.rs index 568f18f48be..fdd3a1faaa9 100644 --- a/src/librustc/ty/print/pretty.rs +++ b/src/librustc/ty/print/pretty.rs @@ -607,10 +607,9 @@ pub trait PrettyPrinter<'tcx>: ty::Generator(did, substs, movability) => { let upvar_tys = substs.as_generator().upvar_tys(did, self.tcx()); let witness = substs.as_generator().witness(did, self.tcx()); - if movability == hir::GeneratorMovability::Movable { - p!(write("[generator")); - } else { - p!(write("[static generator")); + match movability { + hir::Movability::Movable => p!(write("[generator")), + hir::Movability::Static => p!(write("[static generator")), } // FIXME(eddyb) should use `def_span`. diff --git a/src/librustc/ty/sty.rs b/src/librustc/ty/sty.rs index 422e48f34de..51cf7550c30 100644 --- a/src/librustc/ty/sty.rs +++ b/src/librustc/ty/sty.rs @@ -162,7 +162,7 @@ pub enum TyKind<'tcx> { /// The anonymous type of a generator. Used to represent the type of /// `|a| yield a`. - Generator(DefId, SubstsRef<'tcx>, hir::GeneratorMovability), + Generator(DefId, SubstsRef<'tcx>, hir::Movability), /// A type representin the types stored inside a generator. /// This should only appear in GeneratorInteriors. diff --git a/src/librustc_mir/borrow_check/mod.rs b/src/librustc_mir/borrow_check/mod.rs index 0d3b35a228c..f932a6bf155 100644 --- a/src/librustc_mir/borrow_check/mod.rs +++ b/src/librustc_mir/borrow_check/mod.rs @@ -235,7 +235,7 @@ fn do_mir_borrowck<'a, 'tcx>( let movable_generator = match tcx.hir().get(id) { Node::Expr(&hir::Expr { - kind: hir::ExprKind::Closure(.., Some(hir::GeneratorMovability::Static)), + kind: hir::ExprKind::Closure(.., Some(hir::Movability::Static)), .. }) => false, _ => true, diff --git a/src/librustc_mir/borrow_check/nll/universal_regions.rs b/src/librustc_mir/borrow_check/nll/universal_regions.rs index b876fd83ec9..fbedac45ddf 100644 --- a/src/librustc_mir/borrow_check/nll/universal_regions.rs +++ b/src/librustc_mir/borrow_check/nll/universal_regions.rs @@ -90,7 +90,7 @@ pub enum DefiningTy<'tcx> { /// The MIR is a generator. The signature is that generators take /// no parameters and return the result of /// `ClosureSubsts::generator_return_ty`. - Generator(DefId, SubstsRef<'tcx>, hir::GeneratorMovability), + Generator(DefId, SubstsRef<'tcx>, hir::Movability), /// The MIR is a fn item with the given `DefId` and substs. The signature /// of the function can be bound then with the `fn_sig` query. diff --git a/src/librustc_mir/hair/mod.rs b/src/librustc_mir/hair/mod.rs index a76377d24bd..b43042f2b17 100644 --- a/src/librustc_mir/hair/mod.rs +++ b/src/librustc_mir/hair/mod.rs @@ -257,7 +257,7 @@ pub enum ExprKind<'tcx> { closure_id: DefId, substs: UpvarSubsts<'tcx>, upvars: Vec<ExprRef<'tcx>>, - movability: Option<hir::GeneratorMovability>, + movability: Option<hir::Movability>, }, Literal { literal: &'tcx Const<'tcx>, diff --git a/src/librustc_mir/transform/generator.rs b/src/librustc_mir/transform/generator.rs index 1170e7cc2d8..37c239001a5 100644 --- a/src/librustc_mir/transform/generator.rs +++ b/src/librustc_mir/transform/generator.rs @@ -1192,7 +1192,7 @@ impl<'tcx> MirPass<'tcx> for StateTransform { (substs.upvar_tys(def_id, tcx).collect(), substs.witness(def_id, tcx), substs.discr_ty(tcx), - movability == hir::GeneratorMovability::Movable) + movability == hir::Movability::Movable) } _ => bug!(), }; diff --git a/src/librustc_passes/loops.rs b/src/librustc_passes/loops.rs index 6c9e018fafc..60525ba6b39 100644 --- a/src/librustc_passes/loops.rs +++ b/src/librustc_passes/loops.rs @@ -7,7 +7,7 @@ use rustc::ty::TyCtxt; use rustc::hir::def_id::DefId; use rustc::hir::map::Map; use rustc::hir::intravisit::{self, Visitor, NestedVisitorMap}; -use rustc::hir::{self, Node, Destination, GeneratorMovability}; +use rustc::hir::{self, Node, Destination, Movability}; use syntax::struct_span_err; use syntax_pos::Span; use errors::Applicability; @@ -59,7 +59,7 @@ impl<'a, 'hir> Visitor<'hir> for CheckLoopVisitor<'a, 'hir> { self.with_context(Loop(source), |v| v.visit_block(&b)); } hir::ExprKind::Closure(_, ref function_decl, b, span, movability) => { - let cx = if let Some(GeneratorMovability::Static) = movability { + let cx = if let Some(Movability::Static) = movability { AsyncClosure(span) } else { Closure(span) diff --git a/src/librustc_traits/generic_types.rs b/src/librustc_traits/generic_types.rs index cc5348623fa..96ba4d497cb 100644 --- a/src/librustc_traits/generic_types.rs +++ b/src/librustc_traits/generic_types.rs @@ -76,6 +76,6 @@ crate fn generator(tcx: TyCtxt<'tcx>, def_id: DefId) -> Ty<'tcx> { tcx.mk_generator( def_id, InternalSubsts::bound_vars_for_item(tcx, def_id), - hir::GeneratorMovability::Movable + hir::Movability::Movable ) } diff --git a/src/librustc_typeck/check/closure.rs b/src/librustc_typeck/check/closure.rs index 4f4133954cf..7ab2e1f528b 100644 --- a/src/librustc_typeck/check/closure.rs +++ b/src/librustc_typeck/check/closure.rs @@ -39,7 +39,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { _capture: hir::CaptureClause, decl: &'tcx hir::FnDecl, body_id: hir::BodyId, - gen: Option<hir::GeneratorMovability>, + gen: Option<hir::Movability>, expected: Expectation<'tcx>, ) -> Ty<'tcx> { debug!( @@ -64,7 +64,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { opt_kind: Option<ty::ClosureKind>, decl: &'tcx hir::FnDecl, body: &'tcx hir::Body, - gen: Option<hir::GeneratorMovability>, + gen: Option<hir::Movability>, expected_sig: Option<ExpectedSig<'tcx>>, ) -> Ty<'tcx> { debug!( diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs index 098300f1740..72b5018589c 100644 --- a/src/librustc_typeck/check/mod.rs +++ b/src/librustc_typeck/check/mod.rs @@ -1090,7 +1090,7 @@ struct GeneratorTypes<'tcx> { interior: Ty<'tcx>, /// Indicates if the generator is movable or static (immovable). - movability: hir::GeneratorMovability, + movability: hir::Movability, } /// Helper used for fns and closures. Does the grungy work of checking a function @@ -1106,7 +1106,7 @@ fn check_fn<'a, 'tcx>( decl: &'tcx hir::FnDecl, fn_id: hir::HirId, body: &'tcx hir::Body, - can_be_generator: Option<hir::GeneratorMovability>, + can_be_generator: Option<hir::Movability>, ) -> (FnCtxt<'a, 'tcx>, Option<GeneratorTypes<'tcx>>) { let mut fn_sig = fn_sig.clone(); diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 887d7beed6d..2ef3603271e 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -1339,10 +1339,14 @@ pub enum CaptureBy { Ref, } -/// The movability of a generator / closure literal. -#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Debug, Copy)] +/// The movability of a generator / closure literal: +/// whether a generator contains self-references, causing it to be `!Unpin`. +#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, + RustcEncodable, RustcDecodable, Debug, Copy)] pub enum Movability { + /// May contain self-references, `!Unpin`. Static, + /// Must not contain self-references, `Unpin`. Movable, } |
