From cc6c4540766d595a3720e39346b4500f2e2d982c Mon Sep 17 00:00:00 2001 From: Illia Bobyr Date: Mon, 24 Apr 2023 22:18:51 -0700 Subject: [PATCH] Bump syn from 1.0.109 to 2.0.5 (#31263) Update users based on the new syn ABI. Short API update summary can be found here: https://github.com/dtolnay/syn/releases/tag/2.0.0 --- Cargo.lock | 4 +- Cargo.toml | 2 +- frozen-abi/macro/src/lib.rs | 75 +++++++++++++++++++++------------- frozen-abi/src/abi_digester.rs | 4 +- programs/sbf/Cargo.lock | 4 +- sdk/macro/src/lib.rs | 2 +- 6 files changed, 55 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 46ff8ad05..0f0322909 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5751,7 +5751,7 @@ dependencies = [ "proc-macro2 1.0.53", "quote 1.0.26", "rustc_version 0.4.0", - "syn 1.0.109", + "syn 2.0.5", ] [[package]] @@ -6860,7 +6860,7 @@ dependencies = [ "proc-macro2 1.0.53", "quote 1.0.26", "rustversion", - "syn 1.0.109", + "syn 2.0.5", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index c93fed979..b0aedf9a3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -370,7 +370,7 @@ strum = "0.24" strum_macros = "0.24" subtle = "2.4.1" symlink = "0.1.0" -syn = "1.0.109" +syn = "2.0" sys-info = "0.9.1" sysctl = "0.4.4" systemstat = "0.2.3" diff --git a/frozen-abi/macro/src/lib.rs b/frozen-abi/macro/src/lib.rs index 8132a06dd..8a1358b39 100644 --- a/frozen-abi/macro/src/lib.rs +++ b/frozen-abi/macro/src/lib.rs @@ -28,41 +28,54 @@ pub fn derive_abi_enum_visitor(_item: TokenStream) -> TokenStream { } #[cfg(RUSTC_WITH_SPECIALIZATION)] -use proc_macro2::{Span, TokenStream as TokenStream2, TokenTree::Group}; +use proc_macro2::{Span, TokenStream as TokenStream2, TokenTree}; #[cfg(RUSTC_WITH_SPECIALIZATION)] -use quote::quote; +use quote::{quote, ToTokens}; #[cfg(RUSTC_WITH_SPECIALIZATION)] use syn::{ - parse_macro_input, Attribute, AttributeArgs, Error, Fields, Ident, Item, ItemEnum, ItemStruct, - ItemType, Lit, Meta, NestedMeta, Variant, + parse_macro_input, Attribute, Error, Fields, Ident, Item, ItemEnum, ItemStruct, ItemType, + LitStr, Variant, }; #[cfg(RUSTC_WITH_SPECIALIZATION)] fn filter_serde_attrs(attrs: &[Attribute]) -> bool { - let mut skip = false; - - for attr in attrs { - let ss = &attr.path.segments.first().unwrap().ident.to_string(); - if ss.starts_with("serde") { - for token in attr.tokens.clone() { - if let Group(token) = token { - for ident in token.stream() { - if ident.to_string() == "skip" { - skip = true; - } + fn contains_skip(tokens: TokenStream2) -> bool { + for token in tokens.into_iter() { + match token { + TokenTree::Group(group) => { + if contains_skip(group.stream()) { + return true; } } + TokenTree::Ident(ident) => { + if ident == "skip" { + return true; + } + } + TokenTree::Punct(_) | TokenTree::Literal(_) => (), } } + + false + } + + for attr in attrs { + if !attr.path().is_ident("serde") { + continue; + } + + if contains_skip(attr.to_token_stream()) { + return true; + } } - skip + false } #[cfg(RUSTC_WITH_SPECIALIZATION)] fn filter_allow_attrs(attrs: &mut Vec) { attrs.retain(|attr| { - let ss = &attr.path.segments.first().unwrap().ident.to_string(); + let ss = &attr.path().segments.first().unwrap().ident.to_string(); ss.starts_with("allow") }); } @@ -395,19 +408,25 @@ fn frozen_abi_enum_type(input: ItemEnum, expected_digest: &str) -> TokenStream { #[cfg(RUSTC_WITH_SPECIALIZATION)] #[proc_macro_attribute] pub fn frozen_abi(attrs: TokenStream, item: TokenStream) -> TokenStream { - let args = parse_macro_input!(attrs as AttributeArgs); let mut expected_digest: Option = None; - for arg in args { - match arg { - NestedMeta::Meta(Meta::NameValue(nv)) if nv.path.is_ident("digest") => { - if let Lit::Str(lit) = nv.lit { - expected_digest = Some(lit.value()); - } - } - _ => {} + let attrs_parser = syn::meta::parser(|meta| { + if meta.path.is_ident("digest") { + expected_digest = Some(meta.value()?.parse::()?.value()); + Ok(()) + } else { + Err(meta.error("unsupported \"frozen_abi\" property")) } - } - let expected_digest = expected_digest.expect("the required \"digest\" = ... is missing."); + }); + parse_macro_input!(attrs with attrs_parser); + + let Some(expected_digest) = expected_digest else { + return Error::new_spanned( + TokenStream2::from(item), + "the required \"digest\" = ... attribute is missing.", + ) + .to_compile_error() + .into() + }; let item = parse_macro_input!(item as Item); match item { diff --git a/frozen-abi/src/abi_digester.rs b/frozen-abi/src/abi_digester.rs index 263bf60ee..0d0886daa 100644 --- a/frozen-abi/src/abi_digester.rs +++ b/frozen-abi/src/abi_digester.rs @@ -36,8 +36,8 @@ pub enum DigestError { } impl SerdeError for DigestError { - fn custom(_msg: T) -> DigestError { - unreachable!("This error should never be used"); + fn custom(msg: T) -> DigestError { + panic!("Unexpected SerdeError: {msg}"); } } diff --git a/programs/sbf/Cargo.lock b/programs/sbf/Cargo.lock index b829b34ea..d2abddadd 100644 --- a/programs/sbf/Cargo.lock +++ b/programs/sbf/Cargo.lock @@ -4965,7 +4965,7 @@ dependencies = [ "proc-macro2 1.0.53", "quote 1.0.26", "rustc_version 0.4.0", - "syn 1.0.109", + "syn 2.0.5", ] [[package]] @@ -6143,7 +6143,7 @@ dependencies = [ "proc-macro2 1.0.53", "quote 1.0.26", "rustversion", - "syn 1.0.109", + "syn 2.0.5", ] [[package]] diff --git a/sdk/macro/src/lib.rs b/sdk/macro/src/lib.rs index 80eb96928..d2f4bfb95 100644 --- a/sdk/macro/src/lib.rs +++ b/sdk/macro/src/lib.rs @@ -392,7 +392,7 @@ pub fn wasm_bindgen_stub(_attr: TokenStream, item: TokenStream) -> TokenStream { for field in fields.named.iter_mut() { field.attrs.retain(|attr| { !attr - .path + .path() .segments .iter() .any(|segment| segment.ident == "wasm_bindgen")