From 17d40c6057c88f4c432b0d7bac88e1b84cb7e67f Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:03:36 +0200 Subject: Adding upstream version 1.65.0+dfsg1. Signed-off-by: Daniel Baumann --- vendor/thiserror-impl/.cargo-checksum.json | 2 +- vendor/thiserror-impl/Cargo.toml | 4 +- vendor/thiserror-impl/src/expand.rs | 108 ++++++++++++++++++----------- vendor/thiserror-impl/src/generics.rs | 1 + vendor/thiserror-impl/src/lib.rs | 5 +- vendor/thiserror-impl/src/valid.rs | 6 +- 6 files changed, 80 insertions(+), 46 deletions(-) (limited to 'vendor/thiserror-impl') diff --git a/vendor/thiserror-impl/.cargo-checksum.json b/vendor/thiserror-impl/.cargo-checksum.json index a1c0ef900..002cf212c 100644 --- a/vendor/thiserror-impl/.cargo-checksum.json +++ b/vendor/thiserror-impl/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"Cargo.toml":"4089f6b56d562de455fa1c98d3122512e8289085508d055366059f00f14060e9","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","src/ast.rs":"c7601e8394f5ee304365c520181f0dbeaa807ddaa71ce4a8618ea1a70f81b3b2","src/attr.rs":"d1fe75dde04cb8df6da4e1aaec5b38c2b0f634fa3432877993b3fec4cc08b6b5","src/expand.rs":"cf6b969e8ecaaf3a6b31ffebce395e1882a9f263985970041c6e687f0ce5a6cd","src/fmt.rs":"d63d39120c18712596f9f2a1715821148c2becd4d8bad5bc1b307210a84dbe98","src/generics.rs":"ac493703c9955400d4fab22cbbdbbc4bf4f6f72c112b34be8b784142142ff74f","src/lib.rs":"57dce312458895d25c6fd0ef3111362b053edd2f5e0ee04d19edb33bd3c1afbd","src/prop.rs":"6709932aee8f9d217f40cd644629c0ecb2f46d333ae8a1398e8d745534f4e028","src/valid.rs":"93317a8342891dc4569cfdd5f64a8c64cdec8fff49911428427b0621974eec32"},"package":"aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b"} \ No newline at end of file +{"files":{"Cargo.toml":"3171e8d362ab2f3958292eb1862426b9206637c2941edbc482460f5e0b04c9d0","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","src/ast.rs":"c7601e8394f5ee304365c520181f0dbeaa807ddaa71ce4a8618ea1a70f81b3b2","src/attr.rs":"d1fe75dde04cb8df6da4e1aaec5b38c2b0f634fa3432877993b3fec4cc08b6b5","src/expand.rs":"791000b41cc09250c04dbf2f7adc06f1254922986c86633471e934621ce31940","src/fmt.rs":"d63d39120c18712596f9f2a1715821148c2becd4d8bad5bc1b307210a84dbe98","src/generics.rs":"2076cde22271be355a8131a77add4b93f83ab0af4317cd2df5471fffa4f95c66","src/lib.rs":"7d023310cd3db670554ce108a6afd94e1ae3c55c83661d4b9fcebdf1865b9e4b","src/prop.rs":"6709932aee8f9d217f40cd644629c0ecb2f46d333ae8a1398e8d745534f4e028","src/valid.rs":"ac95253944fd360d3578d0643a7baabb2cfa6bf9fbced7a6ce1f7b0529a3bb98"},"package":"c251e90f708e16c49a16f4917dc2131e75222b72edfa9cb7f7c58ae56aae0c09"} \ No newline at end of file diff --git a/vendor/thiserror-impl/Cargo.toml b/vendor/thiserror-impl/Cargo.toml index 97e0042c1..c377ae01b 100644 --- a/vendor/thiserror-impl/Cargo.toml +++ b/vendor/thiserror-impl/Cargo.toml @@ -13,16 +13,18 @@ edition = "2018" rust-version = "1.31" name = "thiserror-impl" -version = "1.0.30" +version = "1.0.33" authors = ["David Tolnay "] description = "Implementation detail of the `thiserror` crate" license = "MIT OR Apache-2.0" repository = "https://github.com/dtolnay/thiserror" + [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] [lib] proc-macro = true + [dependencies.proc-macro2] version = "1.0" diff --git a/vendor/thiserror-impl/src/expand.rs b/vendor/thiserror-impl/src/expand.rs index 435ad4847..f2f7116f2 100644 --- a/vendor/thiserror-impl/src/expand.rs +++ b/vendor/thiserror-impl/src/expand.rs @@ -53,51 +53,59 @@ fn impl_struct(input: Struct) -> TokenStream { let source_method = source_body.map(|body| { quote! { fn source(&self) -> std::option::Option<&(dyn std::error::Error + 'static)> { - use thiserror::private::AsDynError; + use thiserror::__private::AsDynError; #body } } }); - let backtrace_method = input.backtrace_field().map(|backtrace_field| { + let provide_method = input.backtrace_field().map(|backtrace_field| { + let demand = quote!(demand); let backtrace = &backtrace_field.member; let body = if let Some(source_field) = input.source_field() { let source = &source_field.member; - let source_backtrace = if type_is_option(source_field.ty) { + let source_provide = if type_is_option(source_field.ty) { quote_spanned! {source.span()=> - self.#source.as_ref().and_then(|source| source.as_dyn_error().backtrace()) + if let std::option::Option::Some(source) = &self.#source { + source.as_dyn_error().provide(#demand); + } } } else { quote_spanned! {source.span()=> - self.#source.as_dyn_error().backtrace() + self.#source.as_dyn_error().provide(#demand); } }; - let combinator = if source == backtrace { - source_backtrace + let self_provide = if source == backtrace { + None } else if type_is_option(backtrace_field.ty) { - quote! { - #source_backtrace.or(self.#backtrace.as_ref()) - } + Some(quote! { + if let std::option::Option::Some(backtrace) = &self.#backtrace { + #demand.provide_ref::(backtrace); + } + }) } else { - quote! { - std::option::Option::Some(#source_backtrace.unwrap_or(&self.#backtrace)) - } + Some(quote! { + #demand.provide_ref::(&self.#backtrace); + }) }; quote! { - use thiserror::private::AsDynError; - #combinator + use thiserror::__private::AsDynError; + #source_provide + #self_provide } } else if type_is_option(backtrace_field.ty) { quote! { - self.#backtrace.as_ref() + if let std::option::Option::Some(backtrace) = &self.#backtrace { + #demand.provide_ref::(backtrace); + } } } else { quote! { - std::option::Option::Some(&self.#backtrace) + #demand.provide_ref::(&self.#backtrace); } }; quote! { - fn backtrace(&self) -> std::option::Option<&std::backtrace::Backtrace> { + fn provide<'_demand>(&'_demand self, #demand: &mut std::any::Demand<'_demand>) { #body } } @@ -115,7 +123,7 @@ fn impl_struct(input: Struct) -> TokenStream { let use_as_display = if display.has_bonus_display { Some(quote! { #[allow(unused_imports)] - use thiserror::private::{DisplayAsDisplay, PathAsDisplay}; + use thiserror::__private::{DisplayAsDisplay, PathAsDisplay}; }) } else { None @@ -177,7 +185,7 @@ fn impl_struct(input: Struct) -> TokenStream { #[allow(unused_qualifications)] impl #impl_generics #error_trait for #ty #ty_generics #error_where_clause { #source_method - #backtrace_method + #provide_method } #display_impl #from_impl @@ -226,7 +234,7 @@ fn impl_enum(input: Enum) -> TokenStream { }); Some(quote! { fn source(&self) -> std::option::Option<&(dyn std::error::Error + 'static)> { - use thiserror::private::AsDynError; + use thiserror::__private::AsDynError; #[allow(deprecated)] match self { #(#arms)* @@ -237,7 +245,8 @@ fn impl_enum(input: Enum) -> TokenStream { None }; - let backtrace_method = if input.has_backtrace() { + let provide_method = if input.has_backtrace() { + let demand = quote!(demand); let arms = input.variants.iter().map(|variant| { let ident = &variant.ident; match (variant.backtrace_field(), variant.source_field()) { @@ -247,22 +256,26 @@ fn impl_enum(input: Enum) -> TokenStream { let backtrace = &backtrace_field.member; let source = &source_field.member; let varsource = quote!(source); - let source_backtrace = if type_is_option(source_field.ty) { + let source_provide = if type_is_option(source_field.ty) { quote_spanned! {source.span()=> - #varsource.as_ref().and_then(|source| source.as_dyn_error().backtrace()) + if let std::option::Option::Some(source) = #varsource { + source.as_dyn_error().provide(#demand); + } } } else { quote_spanned! {source.span()=> - #varsource.as_dyn_error().backtrace() + #varsource.as_dyn_error().provide(#demand); } }; - let combinator = if type_is_option(backtrace_field.ty) { + let self_provide = if type_is_option(backtrace_field.ty) { quote! { - #source_backtrace.or(backtrace.as_ref()) + if let std::option::Option::Some(backtrace) = backtrace { + #demand.provide_ref::(backtrace); + } } } else { quote! { - std::option::Option::Some(#source_backtrace.unwrap_or(backtrace)) + #demand.provide_ref::(backtrace); } }; quote! { @@ -271,8 +284,9 @@ fn impl_enum(input: Enum) -> TokenStream { #source: #varsource, .. } => { - use thiserror::private::AsDynError; - #combinator + use thiserror::__private::AsDynError; + #source_provide + #self_provide } } } @@ -281,40 +295,50 @@ fn impl_enum(input: Enum) -> TokenStream { { let backtrace = &backtrace_field.member; let varsource = quote!(source); - let source_backtrace = if type_is_option(source_field.ty) { + let source_provide = if type_is_option(source_field.ty) { quote_spanned! {backtrace.span()=> - #varsource.as_ref().and_then(|source| source.as_dyn_error().backtrace()) + if let std::option::Option::Some(source) = #varsource { + source.as_dyn_error().provide(#demand); + } } } else { quote_spanned! {backtrace.span()=> - #varsource.as_dyn_error().backtrace() + #varsource.as_dyn_error().provide(#demand); } }; quote! { #ty::#ident {#backtrace: #varsource, ..} => { - use thiserror::private::AsDynError; - #source_backtrace + use thiserror::__private::AsDynError; + #source_provide } } } (Some(backtrace_field), _) => { let backtrace = &backtrace_field.member; let body = if type_is_option(backtrace_field.ty) { - quote!(backtrace.as_ref()) + quote! { + if let std::option::Option::Some(backtrace) = backtrace { + #demand.provide_ref::(backtrace); + } + } } else { - quote!(std::option::Option::Some(backtrace)) + quote! { + #demand.provide_ref::(backtrace); + } }; quote! { - #ty::#ident {#backtrace: backtrace, ..} => #body, + #ty::#ident {#backtrace: backtrace, ..} => { + #body + } } } (None, _) => quote! { - #ty::#ident {..} => std::option::Option::None, + #ty::#ident {..} => {} }, } }); Some(quote! { - fn backtrace(&self) -> std::option::Option<&std::backtrace::Backtrace> { + fn provide<'_demand>(&'_demand self, #demand: &mut std::any::Demand<'_demand>) { #[allow(deprecated)] match self { #(#arms)* @@ -335,7 +359,7 @@ fn impl_enum(input: Enum) -> TokenStream { }) { Some(quote! { #[allow(unused_imports)] - use thiserror::private::{DisplayAsDisplay, PathAsDisplay}; + use thiserror::__private::{DisplayAsDisplay, PathAsDisplay}; }) } else { None @@ -420,7 +444,7 @@ fn impl_enum(input: Enum) -> TokenStream { #[allow(unused_qualifications)] impl #impl_generics #error_trait for #ty #ty_generics #error_where_clause { #source_method - #backtrace_method + #provide_method } #display_impl #(#from_impls)* diff --git a/vendor/thiserror-impl/src/generics.rs b/vendor/thiserror-impl/src/generics.rs index 254c2ed35..95592a737 100644 --- a/vendor/thiserror-impl/src/generics.rs +++ b/vendor/thiserror-impl/src/generics.rs @@ -57,6 +57,7 @@ impl InferredBounds { } } + #[allow(clippy::type_repetition_in_bounds, clippy::trait_duplication_in_bounds)] // clippy bug: https://github.com/rust-lang/rust-clippy/issues/8771 pub fn insert(&mut self, ty: impl ToTokens, bound: impl ToTokens) { let ty = ty.to_token_stream(); let bound = bound.to_token_stream(); diff --git a/vendor/thiserror-impl/src/lib.rs b/vendor/thiserror-impl/src/lib.rs index a4d5ae7d5..f0fc96917 100644 --- a/vendor/thiserror-impl/src/lib.rs +++ b/vendor/thiserror-impl/src/lib.rs @@ -1,13 +1,16 @@ #![allow( clippy::blocks_in_if_conditions, + clippy::cast_lossless, clippy::cast_possible_truncation, + clippy::manual_find, clippy::manual_map, clippy::map_unwrap_or, clippy::needless_pass_by_value, clippy::option_if_let_else, clippy::range_plus_one, clippy::single_match_else, - clippy::too_many_lines + clippy::too_many_lines, + clippy::wrong_self_convention )] extern crate proc_macro; diff --git a/vendor/thiserror-impl/src/valid.rs b/vendor/thiserror-impl/src/valid.rs index 7657265ef..cf5b8592c 100644 --- a/vendor/thiserror-impl/src/valid.rs +++ b/vendor/thiserror-impl/src/valid.rs @@ -180,7 +180,11 @@ fn check_field_attrs(fields: &[Field]) -> Result<()> { } } if let Some(from_field) = from_field { - if fields.len() > 1 + has_backtrace as usize { + let max_expected_fields = match backtrace_field { + Some(backtrace_field) => 1 + !same_member(from_field, backtrace_field) as usize, + None => 1 + has_backtrace as usize, + }; + if fields.len() > max_expected_fields { return Err(Error::new_spanned( from_field.attrs.from, "deriving From requires no fields other than source and backtrace", -- cgit v1.2.3