From ba0df30a6024e79a121c7ca540af68176e2a9f4f Mon Sep 17 00:00:00 2001 From: Rahix Date: Sat, 25 Jul 2020 17:36:20 +0200 Subject: [PATCH] Update proc-macro dependencies Update to syn 1.0 and fix the interrupt macro to work well with the new version. Signed-off-by: Rahix --- macros/Cargo.toml | 6 +++--- macros/src/lib.rs | 20 ++++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/macros/Cargo.toml b/macros/Cargo.toml index 4883aff..3f18c70 100644 --- a/macros/Cargo.toml +++ b/macros/Cargo.toml @@ -8,9 +8,9 @@ edition = "2018" proc-macro = true [dependencies] -quote = "0.6.12" -proc-macro2 = "0.4.30" +quote = "1.0.7" +proc-macro2 = "1.0.19" [dependencies.syn] -version = "0.15.39" +version = "1.0.35" features = ["extra-traits", "full"] diff --git a/macros/src/lib.rs b/macros/src/lib.rs index 39f002b..b0fccec 100644 --- a/macros/src/lib.rs +++ b/macros/src/lib.rs @@ -10,16 +10,16 @@ pub fn interrupt( input: proc_macro::TokenStream, ) -> proc_macro::TokenStream { // Adapted from https://github.com/rust-embedded/cortex-m-rt/blob/master/macros/src/lib.rs - let f: syn::ItemFn = syn::parse(input).expect("`#[interrupt]` must be applied to a function"); + let f = syn::parse_macro_input!(input as syn::ItemFn); let args: Vec<_> = args.into_iter().collect(); let fspan = f.span(); - let ident = f.ident; + let ident = f.sig.ident; let ident_s = ident.to_string(); let attrs = f.attrs; let block = f.block; let stmts = block.stmts; - let unsafety = f.unsafety; + let unsafety = f.sig.unsafety; let chip = if let Some(tree) = args.get(0) { if let proc_macro::TokenTree::Ident(ident) = tree { @@ -41,14 +41,14 @@ pub fn interrupt( .into(); }; - let valid_signature = f.constness.is_none() + let valid_signature = f.sig.constness.is_none() && f.vis == syn::Visibility::Inherited - && f.abi.is_none() - && f.decl.inputs.is_empty() - && f.decl.generics.params.is_empty() - && f.decl.generics.where_clause.is_none() - && f.decl.variadic.is_none() - && match f.decl.output { + && f.sig.abi.is_none() + && f.sig.inputs.is_empty() + && f.sig.generics.params.is_empty() + && f.sig.generics.where_clause.is_none() + && f.sig.variadic.is_none() + && match f.sig.output { syn::ReturnType::Default => true, syn::ReturnType::Type(_, ref ty) => match **ty { syn::Type::Tuple(ref tuple) => tuple.elems.is_empty(), -- 2.49.0