summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHaibo Huang <hhb@google.com>2021-02-09 17:44:30 -0800
committerIvan Lozano <ivanlozano@google.com>2021-02-19 09:32:47 -0500
commit48e23c5fa2e1a0719ff36bf8150ea1b723576bfa (patch)
tree3b108f0fc8966ce237c53fd1c18facdfe745fea1 /src
parent12f47a078909b9c46f5b3e1c94ab5d3c4f63b129 (diff)
downloadpin-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.rs39
-rw-r--r--src/pin_project/derive.rs20
-rw-r--r--src/pin_project/mod.rs5
-rw-r--r--src/utils.rs3
4 files changed, 36 insertions, 31 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 05c2b49..3e908b6 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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,