diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:20:39 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:20:39 +0000 |
commit | 1376c5a617be5c25655d0d7cb63e3beaa5a6e026 (patch) | |
tree | 3bb8d61aee02bc7a15eab3f36e3b921afc2075d0 /vendor/quote/src | |
parent | Releasing progress-linux version 1.69.0+dfsg1-1~progress7.99u1. (diff) | |
download | rustc-1376c5a617be5c25655d0d7cb63e3beaa5a6e026.tar.xz rustc-1376c5a617be5c25655d0d7cb63e3beaa5a6e026.zip |
Merging upstream version 1.70.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/quote/src')
-rw-r--r-- | vendor/quote/src/lib.rs | 12 | ||||
-rw-r--r-- | vendor/quote/src/runtime.rs | 60 | ||||
-rw-r--r-- | vendor/quote/src/spanned.rs | 21 |
3 files changed, 85 insertions, 8 deletions
diff --git a/vendor/quote/src/lib.rs b/vendor/quote/src/lib.rs index adc14c573..ab8c1b156 100644 --- a/vendor/quote/src/lib.rs +++ b/vendor/quote/src/lib.rs @@ -81,7 +81,7 @@ //! ``` // Quote types in rustdoc of other crates get linked to here. -#![doc(html_root_url = "https://docs.rs/quote/1.0.23")] +#![doc(html_root_url = "https://docs.rs/quote/1.0.26")] #![allow( clippy::doc_markdown, clippy::missing_errors_doc, @@ -619,14 +619,14 @@ macro_rules! quote_spanned { #[macro_export] macro_rules! quote_spanned { ($span:expr=>) => {{ - let _: $crate::__private::Span = $span; + let _: $crate::__private::Span = $crate::__private::get_span($span).__into_span(); $crate::__private::TokenStream::new() }}; // Special case rule for a single tt, for performance. ($span:expr=> $tt:tt) => {{ let mut _s = $crate::__private::TokenStream::new(); - let _span: $crate::__private::Span = $span; + let _span: $crate::__private::Span = $crate::__private::get_span($span).__into_span(); $crate::quote_token_spanned!{$tt _s _span} _s }}; @@ -634,13 +634,13 @@ macro_rules! quote_spanned { // Special case rules for two tts, for performance. ($span:expr=> # $var:ident) => {{ let mut _s = $crate::__private::TokenStream::new(); - let _: $crate::__private::Span = $span; + let _: $crate::__private::Span = $crate::__private::get_span($span).__into_span(); $crate::ToTokens::to_tokens(&$var, &mut _s); _s }}; ($span:expr=> $tt1:tt $tt2:tt) => {{ let mut _s = $crate::__private::TokenStream::new(); - let _span: $crate::__private::Span = $span; + let _span: $crate::__private::Span = $crate::__private::get_span($span).__into_span(); $crate::quote_token_spanned!{$tt1 _s _span} $crate::quote_token_spanned!{$tt2 _s _span} _s @@ -649,7 +649,7 @@ macro_rules! quote_spanned { // Rule for any other number of tokens. ($span:expr=> $($tt:tt)*) => {{ let mut _s = $crate::__private::TokenStream::new(); - let _span: $crate::__private::Span = $span; + let _span: $crate::__private::Span = $crate::__private::get_span($span).__into_span(); $crate::quote_each_token_spanned!{_s _span $($tt)*} _s }}; diff --git a/vendor/quote/src/runtime.rs b/vendor/quote/src/runtime.rs index f3cdded3a..4e3d4fd03 100644 --- a/vendor/quote/src/runtime.rs +++ b/vendor/quote/src/runtime.rs @@ -1,10 +1,12 @@ +use self::get_span::{GetSpan, GetSpanBase, GetSpanInner}; use crate::{IdentFragment, ToTokens, TokenStreamExt}; use core::fmt; use core::iter; use core::ops::BitOr; +use proc_macro2::{Group, Ident, Punct, Spacing, TokenTree}; pub use core::option::Option; -pub use proc_macro2::*; +pub use proc_macro2::{Delimiter, Span, TokenStream}; pub use std::format; pub struct HasIterator; // True @@ -164,6 +166,62 @@ impl<T: ToTokens> ToTokens for RepInterp<T> { } } +#[inline] +pub fn get_span<T>(span: T) -> GetSpan<T> { + GetSpan(GetSpanInner(GetSpanBase(span))) +} + +mod get_span { + use core::ops::Deref; + use proc_macro2::extra::DelimSpan; + use proc_macro2::Span; + + pub struct GetSpan<T>(pub(crate) GetSpanInner<T>); + + pub struct GetSpanInner<T>(pub(crate) GetSpanBase<T>); + + pub struct GetSpanBase<T>(pub(crate) T); + + impl GetSpan<Span> { + #[inline] + pub fn __into_span(self) -> Span { + ((self.0).0).0 + } + } + + impl GetSpanInner<DelimSpan> { + #[inline] + pub fn __into_span(&self) -> Span { + (self.0).0.join() + } + } + + impl<T> GetSpanBase<T> { + #[allow(clippy::unused_self)] + pub fn __into_span(&self) -> T { + unreachable!() + } + } + + impl<T> Deref for GetSpan<T> { + type Target = GetSpanInner<T>; + + #[inline] + fn deref(&self) -> &Self::Target { + &self.0 + } + } + + impl<T> Deref for GetSpanInner<T> { + type Target = GetSpanBase<T>; + + #[inline] + fn deref(&self) -> &Self::Target { + &self.0 + } + } +} + pub fn push_group(tokens: &mut TokenStream, delimiter: Delimiter, inner: TokenStream) { tokens.append(Group::new(delimiter, inner)); } diff --git a/vendor/quote/src/spanned.rs b/vendor/quote/src/spanned.rs index f64c8f5df..efc2e8bce 100644 --- a/vendor/quote/src/spanned.rs +++ b/vendor/quote/src/spanned.rs @@ -1,7 +1,9 @@ use crate::ToTokens; +use proc_macro2::extra::DelimSpan; use proc_macro2::{Span, TokenStream}; -pub trait Spanned { +// Not public API other than via the syn crate. Use syn::spanned::Spanned. +pub trait Spanned: private::Sealed { fn __span(&self) -> Span; } @@ -11,6 +13,12 @@ impl Spanned for Span { } } +impl Spanned for DelimSpan { + fn __span(&self) -> Span { + self.join() + } +} + impl<T: ?Sized + ToTokens> Spanned for T { fn __span(&self) -> Span { join_spans(self.into_token_stream()) @@ -41,3 +49,14 @@ fn join_spans(tokens: TokenStream) -> Span { .and_then(|last| first.join(last)) .unwrap_or(first) } + +mod private { + use crate::ToTokens; + use proc_macro2::extra::DelimSpan; + use proc_macro2::Span; + + pub trait Sealed {} + impl Sealed for Span {} + impl Sealed for DelimSpan {} + impl<T: ?Sized + ToTokens> Sealed for T {} +} |