diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-30 03:57:19 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-30 03:57:19 +0000 |
commit | a0b8f38ab54ac451646aa00cd5e91b6c76f22a84 (patch) | |
tree | fc451898ccaf445814e26b46664d78702178101d /vendor/rustversion/src | |
parent | Adding debian version 1.71.1+dfsg1-2. (diff) | |
download | rustc-a0b8f38ab54ac451646aa00cd5e91b6c76f22a84.tar.xz rustc-a0b8f38ab54ac451646aa00cd5e91b6c76f22a84.zip |
Merging upstream version 1.72.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/rustversion/src')
-rw-r--r-- | vendor/rustversion/src/expand.rs | 72 | ||||
-rw-r--r-- | vendor/rustversion/src/lib.rs | 111 |
2 files changed, 103 insertions, 80 deletions
diff --git a/vendor/rustversion/src/expand.rs b/vendor/rustversion/src/expand.rs new file mode 100644 index 000000000..813ba85d7 --- /dev/null +++ b/vendor/rustversion/src/expand.rs @@ -0,0 +1,72 @@ +use crate::attr::{self, Then}; +use crate::error::{Error, Result}; +use crate::{constfn, expr, iter, token}; +use proc_macro::{Delimiter, Group, Ident, Punct, Spacing, Span, TokenStream, TokenTree}; +use std::iter::FromIterator; + +pub fn cfg(introducer: &str, args: TokenStream, input: TokenStream) -> TokenStream { + try_cfg(introducer, args, input).unwrap_or_else(Error::into_compile_error) +} + +fn try_cfg(introducer: &str, args: TokenStream, input: TokenStream) -> Result<TokenStream> { + let introducer = Ident::new(introducer, Span::call_site()); + + let mut full_args = TokenStream::from(TokenTree::Ident(introducer)); + if !args.is_empty() { + full_args.extend(std::iter::once(TokenTree::Group(Group::new( + Delimiter::Parenthesis, + args, + )))); + } + + let ref mut full_args = iter::new(full_args); + let expr = expr::parse(full_args)?; + token::parse_end(full_args)?; + + if expr.eval(crate::RUSTVERSION) { + Ok(input) + } else { + Ok(TokenStream::new()) + } +} + +pub fn try_attr(args: attr::Args, input: TokenStream) -> Result<TokenStream> { + if !args.condition.eval(crate::RUSTVERSION) { + return Ok(input); + } + + match args.then { + Then::Const(const_token) => constfn::insert_const(input, const_token), + Then::Attribute(then) => { + // #[cfg_attr(all(), #then)] + Ok(TokenStream::from_iter( + vec![ + TokenTree::Punct(Punct::new('#', Spacing::Alone)), + TokenTree::Group(Group::new( + Delimiter::Bracket, + TokenStream::from_iter(vec![ + TokenTree::Ident(Ident::new("cfg_attr", Span::call_site())), + TokenTree::Group(Group::new( + Delimiter::Parenthesis, + TokenStream::from_iter( + vec![ + TokenTree::Ident(Ident::new("all", Span::call_site())), + TokenTree::Group(Group::new( + Delimiter::Parenthesis, + TokenStream::new(), + )), + TokenTree::Punct(Punct::new(',', Spacing::Alone)), + ] + .into_iter() + .chain(then), + ), + )), + ]), + )), + ] + .into_iter() + .chain(input), + )) + } + } +} diff --git a/vendor/rustversion/src/lib.rs b/vendor/rustversion/src/lib.rs index 172eb8938..a632f4055 100644 --- a/vendor/rustversion/src/lib.rs +++ b/vendor/rustversion/src/lib.rs @@ -2,7 +2,7 @@ //! //! [github]: https://img.shields.io/badge/github-8da0cb?style=for-the-badge&labelColor=555555&logo=github //! [crates-io]: https://img.shields.io/badge/crates.io-fc8d62?style=for-the-badge&labelColor=555555&logo=rust -//! [docs-rs]: https://img.shields.io/badge/docs.rs-66c2a5?style=for-the-badge&labelColor=555555&logoColor=white&logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGZpbGw9IiNmNWY1ZjUiIGQ9Ik00ODguNiAyNTAuMkwzOTIgMjE0VjEwNS41YzAtMTUtOS4zLTI4LjQtMjMuNC0zMy43bC0xMDAtMzcuNWMtOC4xLTMuMS0xNy4xLTMuMS0yNS4zIDBsLTEwMCAzNy41Yy0xNC4xIDUuMy0yMy40IDE4LjctMjMuNCAzMy43VjIxNGwtOTYuNiAzNi4yQzkuMyAyNTUuNSAwIDI2OC45IDAgMjgzLjlWMzk0YzAgMTMuNiA3LjcgMjYuMSAxOS45IDMyLjJsMTAwIDUwYzEwLjEgNS4xIDIyLjEgNS4xIDMyLjIgMGwxMDMuOS01MiAxMDMuOSA1MmMxMC4xIDUuMSAyMi4xIDUuMSAzMi4yIDBsMTAwLTUwYzEyLjItNi4xIDE5LjktMTguNiAxOS45LTMyLjJWMjgzLjljMC0xNS05LjMtMjguNC0yMy40LTMzLjd6TTM1OCAyMTQuOGwtODUgMzEuOXYtNjguMmw4NS0zN3Y3My4zek0xNTQgMTA0LjFsMTAyLTM4LjIgMTAyIDM4LjJ2LjZsLTEwMiA0MS40LTEwMi00MS40di0uNnptODQgMjkxLjFsLTg1IDQyLjV2LTc5LjFsODUtMzguOHY3NS40em0wLTExMmwtMTAyIDQxLjQtMTAyLTQxLjR2LS42bDEwMi0zOC4yIDEwMiAzOC4ydi42em0yNDAgMTEybC04NSA0Mi41di03OS4xbDg1LTM4Ljh2NzUuNHptMC0xMTJsLTEwMiA0MS40LTEwMi00MS40di0uNmwxMDItMzguMiAxMDIgMzguMnYuNnoiPjwvcGF0aD48L3N2Zz4K +//! [docs-rs]: https://img.shields.io/badge/docs.rs-66c2a5?style=for-the-badge&labelColor=555555&logo=docs.rs //! //! <br> //! @@ -145,12 +145,16 @@ //! //! <br> +#![doc(html_root_url = "https://docs.rs/rustversion/1.0.12")] #![allow( clippy::cast_lossless, clippy::cast_possible_truncation, + clippy::derive_partial_eq_without_eq, clippy::doc_markdown, clippy::enum_glob_use, clippy::from_iter_instead_of_collect, + // https://github.com/rust-lang/rust-clippy/issues/8539 + clippy::iter_with_drain, clippy::module_name_repetitions, clippy::must_use_candidate, clippy::needless_doctest_main, @@ -167,6 +171,7 @@ mod bound; mod constfn; mod date; mod error; +mod expand; mod expr; mod iter; mod release; @@ -174,124 +179,70 @@ mod time; mod token; mod version; -use crate::attr::Then; -use crate::error::{Error, Result}; +use crate::error::Error; use crate::version::Version; -use proc_macro::{Delimiter, Group, Ident, Punct, Spacing, Span, TokenStream, TokenTree}; -use std::iter::FromIterator; +use proc_macro::TokenStream; -const RUSTVERSION: Version = include!(concat!(env!("OUT_DIR"), "/version.rs")); +const RUSTVERSION: Version = include!(concat!(env!("OUT_DIR"), "/version.expr")); #[proc_macro_attribute] pub fn stable(args: TokenStream, input: TokenStream) -> TokenStream { - cfg("stable", args, input) + expand::cfg("stable", args, input) } #[proc_macro_attribute] pub fn beta(args: TokenStream, input: TokenStream) -> TokenStream { - cfg("beta", args, input) + expand::cfg("beta", args, input) } #[proc_macro_attribute] pub fn nightly(args: TokenStream, input: TokenStream) -> TokenStream { - cfg("nightly", args, input) + expand::cfg("nightly", args, input) } #[proc_macro_attribute] pub fn since(args: TokenStream, input: TokenStream) -> TokenStream { - cfg("since", args, input) + expand::cfg("since", args, input) } #[proc_macro_attribute] pub fn before(args: TokenStream, input: TokenStream) -> TokenStream { - cfg("before", args, input) + expand::cfg("before", args, input) } #[proc_macro_attribute] pub fn not(args: TokenStream, input: TokenStream) -> TokenStream { - cfg("not", args, input) + expand::cfg("not", args, input) } #[proc_macro_attribute] pub fn any(args: TokenStream, input: TokenStream) -> TokenStream { - cfg("any", args, input) + expand::cfg("any", args, input) } #[proc_macro_attribute] pub fn all(args: TokenStream, input: TokenStream) -> TokenStream { - cfg("all", args, input) -} - -fn cfg(introducer: &str, args: TokenStream, input: TokenStream) -> TokenStream { - try_cfg(introducer, args, input).unwrap_or_else(Error::into_compile_error) -} - -fn try_cfg(introducer: &str, args: TokenStream, input: TokenStream) -> Result<TokenStream> { - let introducer = Ident::new(introducer, Span::call_site()); - - let mut full_args = TokenStream::from(TokenTree::Ident(introducer)); - if !args.is_empty() { - full_args.extend(std::iter::once(TokenTree::Group(Group::new( - Delimiter::Parenthesis, - args, - )))); - } - - let ref mut full_args = iter::new(full_args); - let expr = expr::parse(full_args)?; - token::parse_end(full_args)?; - - if expr.eval(RUSTVERSION) { - Ok(input) - } else { - Ok(TokenStream::new()) - } + expand::cfg("all", args, input) } #[proc_macro_attribute] pub fn attr(args: TokenStream, input: TokenStream) -> TokenStream { attr::parse(args) - .and_then(|args| try_attr(args, input)) + .and_then(|args| expand::try_attr(args, input)) .unwrap_or_else(Error::into_compile_error) } -fn try_attr(args: attr::Args, input: TokenStream) -> Result<TokenStream> { - if !args.condition.eval(RUSTVERSION) { - return Ok(input); - } - - match args.then { - Then::Const(const_token) => constfn::insert_const(input, const_token), - Then::Attribute(then) => { - // #[cfg_attr(all(), #then)] - Ok(TokenStream::from_iter( - vec![ - TokenTree::Punct(Punct::new('#', Spacing::Alone)), - TokenTree::Group(Group::new( - Delimiter::Bracket, - TokenStream::from_iter(vec![ - TokenTree::Ident(Ident::new("cfg_attr", Span::call_site())), - TokenTree::Group(Group::new( - Delimiter::Parenthesis, - TokenStream::from_iter( - vec![ - TokenTree::Ident(Ident::new("all", Span::call_site())), - TokenTree::Group(Group::new( - Delimiter::Parenthesis, - TokenStream::new(), - )), - TokenTree::Punct(Punct::new(',', Spacing::Alone)), - ] - .into_iter() - .chain(then), - ), - )), - ]), - )), - ] - .into_iter() - .chain(input), - )) - } - } +#[cfg(not(cfg_macro_not_allowed))] +#[proc_macro] +pub fn cfg(input: TokenStream) -> TokenStream { + use proc_macro::{Ident, Span, TokenTree}; + (|| { + let ref mut args = iter::new(input); + let expr = expr::parse(args)?; + token::parse_end(args)?; + let boolean = expr.eval(RUSTVERSION); + let ident = Ident::new(&boolean.to_string(), Span::call_site()); + Ok(TokenStream::from(TokenTree::Ident(ident))) + })() + .unwrap_or_else(Error::into_compile_error) } |