diff options
author | Haibo Huang <hhb@google.com> | 2021-02-09 17:44:30 -0800 |
---|---|---|
committer | Ivan Lozano <ivanlozano@google.com> | 2021-02-19 09:32:47 -0500 |
commit | 48e23c5fa2e1a0719ff36bf8150ea1b723576bfa (patch) | |
tree | 3b108f0fc8966ce237c53fd1c18facdfe745fea1 /src | |
parent | 12f47a078909b9c46f5b3e1c94ab5d3c4f63b129 (diff) | |
download | pin-project-internal-48e23c5fa2e1a0719ff36bf8150ea1b723576bfa.tar.gz |
Upgrade rust/crates/pin-project-internal to 1.0.5
Test: make
Change-Id: I5eaac496bb8f1e3c90cbc2a12b9c4915e6744549
Diffstat (limited to 'src')
-rw-r--r-- | src/lib.rs | 39 | ||||
-rw-r--r-- | src/pin_project/derive.rs | 20 | ||||
-rw-r--r-- | src/pin_project/mod.rs | 5 | ||||
-rw-r--r-- | src/utils.rs | 3 |
4 files changed, 36 insertions, 31 deletions
@@ -1,22 +1,15 @@ //! Implementation detail of the `pin-project` crate. - **do not use directly** -#![doc(html_root_url = "https://docs.rs/pin-project-internal/1.0.2")] #![doc(test( no_crate_inject, - attr(deny(warnings, rust_2018_idioms, single_use_lifetimes), allow(dead_code)) + attr( + deny(warnings, rust_2018_idioms, single_use_lifetimes), + allow(dead_code, unused_variables) + ) ))] #![warn(unsafe_code)] #![warn(future_incompatible, rust_2018_idioms, single_use_lifetimes, unreachable_pub)] #![warn(clippy::all, clippy::default_trait_access)] -// mem::take, #[non_exhaustive], and Option::{as_deref, as_deref_mut} require Rust 1.40, -// matches! requires Rust 1.42, str::{strip_prefix, strip_suffix} requires Rust 1.45 -#![allow( - clippy::mem_replace_with_default, - clippy::manual_non_exhaustive, - clippy::option_as_ref_deref, - clippy::match_like_matches_macro, - clippy::manual_strip -)] #![allow(clippy::needless_doctest_main)] // older compilers require explicit `extern crate`. @@ -168,9 +161,10 @@ use proc_macro::TokenStream; /// `#[pin_project]` can be used on structs and enums. /// /// ```rust -/// use pin_project::pin_project; /// use std::pin::Pin; /// +/// use pin_project::pin_project; +/// /// #[pin_project] /// struct Struct<T, U> { /// #[pin] @@ -188,9 +182,10 @@ use proc_macro::TokenStream; /// ``` /// /// ```rust -/// use pin_project::pin_project; /// use std::pin::Pin; /// +/// use pin_project::pin_project; +/// /// #[pin_project] /// struct TupleStruct<T, U>(#[pin] T, U); /// @@ -207,9 +202,10 @@ use proc_macro::TokenStream; /// returned from the method. /// /// ```rust -/// use pin_project::pin_project; /// use std::pin::Pin; /// +/// use pin_project::pin_project; +/// /// #[pin_project(project = EnumProj)] /// enum Enum<T, U> { /// Tuple(#[pin] T), @@ -263,9 +259,10 @@ use proc_macro::TokenStream; /// consuming the [`Pin`]. /// /// ```rust -/// use pin_project::pin_project; /// use std::pin::Pin; /// +/// use pin_project::pin_project; +/// /// #[pin_project] /// struct Struct<T> { /// #[pin] @@ -299,9 +296,10 @@ use proc_macro::TokenStream; /// field. /// /// ```rust -/// use pin_project::pin_project; /// use std::marker::PhantomPinned; /// +/// use pin_project::pin_project; +/// /// #[pin_project] /// struct Struct<T> { /// field: T, @@ -373,9 +371,10 @@ use proc_macro::TokenStream; /// For example: /// /// ```rust -/// use pin_project::{pin_project, pinned_drop}; /// use std::{fmt::Debug, pin::Pin}; /// +/// use pin_project::{pin_project, pinned_drop}; +/// /// #[pin_project(PinnedDrop)] /// struct PrintOnDrop<T: Debug, U: Debug> { /// #[pin] @@ -425,9 +424,10 @@ use proc_macro::TokenStream; /// For example: /// /// ```rust -/// use pin_project::pin_project; /// use std::{marker::PhantomData, pin::Pin}; /// +/// use pin_project::pin_project; +/// /// #[pin_project(project_replace)] /// struct Struct<T, U> { /// #[pin] @@ -515,9 +515,10 @@ pub fn pin_project(args: TokenStream, input: TokenStream) -> TokenStream { /// # Examples /// /// ```rust -/// use pin_project::{pin_project, pinned_drop}; /// use std::pin::Pin; /// +/// use pin_project::{pin_project, pinned_drop}; +/// /// #[pin_project(PinnedDrop)] /// struct PrintOnDrop { /// #[pin] diff --git a/src/pin_project/derive.rs b/src/pin_project/derive.rs index 63cd142..4d7d7d8 100644 --- a/src/pin_project/derive.rs +++ b/src/pin_project/derive.rs @@ -102,6 +102,7 @@ impl GenerateTokens { fn global_allowed_lints() -> TokenStream { quote! { #[allow(box_pointers)] // This lint warns use of the `Box` type. + #[allow(deprecated)] #[allow(explicit_outlives_requirements)] // https://github.com/rust-lang/rust/issues/60993 #[allow(single_use_lifetimes)] // https://github.com/rust-lang/rust/issues/55058 #[allow(unreachable_pub)] // This lint warns `pub` field in private struct. @@ -133,6 +134,7 @@ fn proj_allowed_lints(kind: TypeKind) -> (TokenStream, TokenStream, TokenStream) let proj_ref = quote! { #global_allowed_lints #[allow(dead_code)] // This lint warns unused fields/variants. + #[allow(clippy::ref_option_ref)] // This lint warns `&Option<&<ty>>`. #[allow(clippy::type_repetition_in_bounds)] // https://github.com/rust-lang/rust-clippy/issues/4326 }; let proj_own = quote! { @@ -390,7 +392,6 @@ fn parse_struct( #proj_ref_ident #proj_body }; let proj_own_body = quote! { - let __self_ptr: *mut Self = self.get_unchecked_mut(); let Self #proj_pat = &mut *__self_ptr; #proj_own_body }; @@ -472,7 +473,6 @@ fn parse_enum( } }; let proj_own_body = quote! { - let __self_ptr: *mut Self = self.get_unchecked_mut(); match &mut *__self_ptr { #proj_own_arms } @@ -643,13 +643,6 @@ fn proj_own_body( // First, extract all the unpinned fields. let __result = #proj_own #proj_move; - // Destructors will run in reverse order, so next create a guard to overwrite - // `self` with the replacement value without calling destructors. - let __guard = ::pin_project::__private::UnsafeOverwriteGuard { - target: __self_ptr, - value: ::pin_project::__private::ManuallyDrop::new(__replacement), - }; - // Now create guards to drop all the pinned fields. // // Due to a compiler bug (https://github.com/rust-lang/rust/issues/47949) @@ -961,6 +954,15 @@ fn make_proj_impl( quote! { #sig { unsafe { + let __self_ptr: *mut Self = self.get_unchecked_mut(); + + // Destructors will run in reverse order, so next create a guard to overwrite + // `self` with the replacement value without calling destructors. + let __guard = ::pin_project::__private::UnsafeOverwriteGuard { + target: __self_ptr, + value: ::pin_project::__private::ManuallyDrop::new(__replacement), + }; + #proj_own_body } } diff --git a/src/pin_project/mod.rs b/src/pin_project/mod.rs index 380b586..2dce78f 100644 --- a/src/pin_project/mod.rs +++ b/src/pin_project/mod.rs @@ -3,14 +3,15 @@ mod attribute; mod derive; use proc_macro2::TokenStream; +use syn::Error; /// The annotation for pinned type. const PIN: &str = "pin"; pub(crate) fn attribute(args: &TokenStream, input: TokenStream) -> TokenStream { - attribute::parse_attribute(args, input).unwrap_or_else(|e| e.to_compile_error()) + attribute::parse_attribute(args, input).unwrap_or_else(Error::into_compile_error) } pub(crate) fn derive(input: TokenStream) -> TokenStream { - derive::parse_derive(input).unwrap_or_else(|e| e.to_compile_error()) + derive::parse_derive(input).unwrap_or_else(Error::into_compile_error) } diff --git a/src/utils.rs b/src/utils.rs index fe1bf35..37f35ba 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,6 +1,7 @@ +use std::{iter::FromIterator, mem}; + use proc_macro2::{Group, Spacing, Span, TokenStream, TokenTree}; use quote::{quote, quote_spanned, ToTokens}; -use std::{iter::FromIterator, mem}; use syn::{ parse::{Parse, ParseBuffer, ParseStream}, parse_quote, |