diff options
| author | Dániel Buga <[email protected]> | 2023-06-25 22:24:48 +0200 |
|---|---|---|
| committer | Dániel Buga <[email protected]> | 2023-06-25 22:24:48 +0200 |
| commit | aa0ab06645446bcb4b99a9407dc9c6c58030d8de (patch) | |
| tree | 7310d739416bf19acbff90a128a40c445363034a | |
| parent | 03e0116a56d7bc4b8eb639fd590eaa186d039b2b (diff) | |
Update darling
| -rw-r--r-- | embassy-macros/Cargo.toml | 4 | ||||
| -rw-r--r-- | embassy-macros/src/lib.rs | 37 | ||||
| -rw-r--r-- | embassy-macros/src/macros/main.rs | 9 | ||||
| -rw-r--r-- | embassy-macros/src/macros/task.rs | 5 |
4 files changed, 37 insertions, 18 deletions
diff --git a/embassy-macros/Cargo.toml b/embassy-macros/Cargo.toml index 781026b99..3b8fe8b44 100644 --- a/embassy-macros/Cargo.toml +++ b/embassy-macros/Cargo.toml | |||
| @@ -12,9 +12,9 @@ categories = [ | |||
| 12 | ] | 12 | ] |
| 13 | 13 | ||
| 14 | [dependencies] | 14 | [dependencies] |
| 15 | syn = { version = "1.0.76", features = ["full", "extra-traits"] } | 15 | syn = { version = "2.0.15", features = ["full", "extra-traits"] } |
| 16 | quote = "1.0.9" | 16 | quote = "1.0.9" |
| 17 | darling = "0.13.0" | 17 | darling = "0.20.1" |
| 18 | proc-macro2 = "1.0.29" | 18 | proc-macro2 = "1.0.29" |
| 19 | 19 | ||
| 20 | [lib] | 20 | [lib] |
diff --git a/embassy-macros/src/lib.rs b/embassy-macros/src/lib.rs index ba4f13b77..c9d58746a 100644 --- a/embassy-macros/src/lib.rs +++ b/embassy-macros/src/lib.rs | |||
| @@ -1,11 +1,28 @@ | |||
| 1 | #![doc = include_str!("../README.md")] | 1 | #![doc = include_str!("../README.md")] |
| 2 | extern crate proc_macro; | 2 | extern crate proc_macro; |
| 3 | 3 | ||
| 4 | use darling::ast::NestedMeta; | ||
| 4 | use proc_macro::TokenStream; | 5 | use proc_macro::TokenStream; |
| 5 | 6 | ||
| 6 | mod macros; | 7 | mod macros; |
| 7 | mod util; | 8 | mod util; |
| 8 | use macros::*; | 9 | use macros::*; |
| 10 | use syn::parse::{Parse, ParseBuffer}; | ||
| 11 | use syn::punctuated::Punctuated; | ||
| 12 | use syn::Token; | ||
| 13 | |||
| 14 | struct Args { | ||
| 15 | meta: Vec<NestedMeta>, | ||
| 16 | } | ||
| 17 | |||
| 18 | impl Parse for Args { | ||
| 19 | fn parse(input: &ParseBuffer) -> syn::Result<Self> { | ||
| 20 | let meta = Punctuated::<NestedMeta, Token![,]>::parse_terminated(input)?; | ||
| 21 | Ok(Args { | ||
| 22 | meta: meta.into_iter().collect(), | ||
| 23 | }) | ||
| 24 | } | ||
| 25 | } | ||
| 9 | 26 | ||
| 10 | /// Declares an async task that can be run by `embassy-executor`. The optional `pool_size` parameter can be used to specify how | 27 | /// Declares an async task that can be run by `embassy-executor`. The optional `pool_size` parameter can be used to specify how |
| 11 | /// many concurrent tasks can be spawned (default is 1) for the function. | 28 | /// many concurrent tasks can be spawned (default is 1) for the function. |
| @@ -39,10 +56,10 @@ use macros::*; | |||
| 39 | /// ``` | 56 | /// ``` |
| 40 | #[proc_macro_attribute] | 57 | #[proc_macro_attribute] |
| 41 | pub fn task(args: TokenStream, item: TokenStream) -> TokenStream { | 58 | pub fn task(args: TokenStream, item: TokenStream) -> TokenStream { |
| 42 | let args = syn::parse_macro_input!(args as syn::AttributeArgs); | 59 | let args = syn::parse_macro_input!(args as Args); |
| 43 | let f = syn::parse_macro_input!(item as syn::ItemFn); | 60 | let f = syn::parse_macro_input!(item as syn::ItemFn); |
| 44 | 61 | ||
| 45 | task::run(args, f).unwrap_or_else(|x| x).into() | 62 | task::run(&args.meta, f).unwrap_or_else(|x| x).into() |
| 46 | } | 63 | } |
| 47 | 64 | ||
| 48 | /// Creates a new `executor` instance and declares an application entry point for Cortex-M spawning the corresponding function body as an async task. | 65 | /// Creates a new `executor` instance and declares an application entry point for Cortex-M spawning the corresponding function body as an async task. |
| @@ -65,9 +82,9 @@ pub fn task(args: TokenStream, item: TokenStream) -> TokenStream { | |||
| 65 | /// ``` | 82 | /// ``` |
| 66 | #[proc_macro_attribute] | 83 | #[proc_macro_attribute] |
| 67 | pub fn main_cortex_m(args: TokenStream, item: TokenStream) -> TokenStream { | 84 | pub fn main_cortex_m(args: TokenStream, item: TokenStream) -> TokenStream { |
| 68 | let args = syn::parse_macro_input!(args as syn::AttributeArgs); | 85 | let args = syn::parse_macro_input!(args as Args); |
| 69 | let f = syn::parse_macro_input!(item as syn::ItemFn); | 86 | let f = syn::parse_macro_input!(item as syn::ItemFn); |
| 70 | main::run(args, f, main::cortex_m()).unwrap_or_else(|x| x).into() | 87 | main::run(&args.meta, f, main::cortex_m()).unwrap_or_else(|x| x).into() |
| 71 | } | 88 | } |
| 72 | 89 | ||
| 73 | /// Creates a new `executor` instance and declares an application entry point for RISC-V spawning the corresponding function body as an async task. | 90 | /// Creates a new `executor` instance and declares an application entry point for RISC-V spawning the corresponding function body as an async task. |
| @@ -100,9 +117,9 @@ pub fn main_cortex_m(args: TokenStream, item: TokenStream) -> TokenStream { | |||
| 100 | /// ``` | 117 | /// ``` |
| 101 | #[proc_macro_attribute] | 118 | #[proc_macro_attribute] |
| 102 | pub fn main_riscv(args: TokenStream, item: TokenStream) -> TokenStream { | 119 | pub fn main_riscv(args: TokenStream, item: TokenStream) -> TokenStream { |
| 103 | let args = syn::parse_macro_input!(args as syn::AttributeArgs); | 120 | let args = syn::parse_macro_input!(args as Args); |
| 104 | let f = syn::parse_macro_input!(item as syn::ItemFn); | 121 | let f = syn::parse_macro_input!(item as syn::ItemFn); |
| 105 | main::run(args.clone(), f, main::riscv(args)) | 122 | main::run(&args.meta, f, main::riscv(&args.meta)) |
| 106 | .unwrap_or_else(|x| x) | 123 | .unwrap_or_else(|x| x) |
| 107 | .into() | 124 | .into() |
| 108 | } | 125 | } |
| @@ -127,9 +144,9 @@ pub fn main_riscv(args: TokenStream, item: TokenStream) -> TokenStream { | |||
| 127 | /// ``` | 144 | /// ``` |
| 128 | #[proc_macro_attribute] | 145 | #[proc_macro_attribute] |
| 129 | pub fn main_std(args: TokenStream, item: TokenStream) -> TokenStream { | 146 | pub fn main_std(args: TokenStream, item: TokenStream) -> TokenStream { |
| 130 | let args = syn::parse_macro_input!(args as syn::AttributeArgs); | 147 | let args = syn::parse_macro_input!(args as Args); |
| 131 | let f = syn::parse_macro_input!(item as syn::ItemFn); | 148 | let f = syn::parse_macro_input!(item as syn::ItemFn); |
| 132 | main::run(args, f, main::std()).unwrap_or_else(|x| x).into() | 149 | main::run(&args.meta, f, main::std()).unwrap_or_else(|x| x).into() |
| 133 | } | 150 | } |
| 134 | 151 | ||
| 135 | /// Creates a new `executor` instance and declares an application entry point for WASM spawning the corresponding function body as an async task. | 152 | /// Creates a new `executor` instance and declares an application entry point for WASM spawning the corresponding function body as an async task. |
| @@ -152,7 +169,7 @@ pub fn main_std(args: TokenStream, item: TokenStream) -> TokenStream { | |||
| 152 | /// ``` | 169 | /// ``` |
| 153 | #[proc_macro_attribute] | 170 | #[proc_macro_attribute] |
| 154 | pub fn main_wasm(args: TokenStream, item: TokenStream) -> TokenStream { | 171 | pub fn main_wasm(args: TokenStream, item: TokenStream) -> TokenStream { |
| 155 | let args = syn::parse_macro_input!(args as syn::AttributeArgs); | 172 | let args = syn::parse_macro_input!(args as Args); |
| 156 | let f = syn::parse_macro_input!(item as syn::ItemFn); | 173 | let f = syn::parse_macro_input!(item as syn::ItemFn); |
| 157 | main::run(args, f, main::wasm()).unwrap_or_else(|x| x).into() | 174 | main::run(&args.meta, f, main::wasm()).unwrap_or_else(|x| x).into() |
| 158 | } | 175 | } |
diff --git a/embassy-macros/src/macros/main.rs b/embassy-macros/src/macros/main.rs index 5c099f68a..7c4d55163 100644 --- a/embassy-macros/src/macros/main.rs +++ b/embassy-macros/src/macros/main.rs | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | use darling::export::NestedMeta; | ||
| 1 | use darling::FromMeta; | 2 | use darling::FromMeta; |
| 2 | use proc_macro2::TokenStream; | 3 | use proc_macro2::TokenStream; |
| 3 | use quote::quote; | 4 | use quote::quote; |
| @@ -11,8 +12,8 @@ struct Args { | |||
| 11 | entry: Option<String>, | 12 | entry: Option<String>, |
| 12 | } | 13 | } |
| 13 | 14 | ||
| 14 | pub fn riscv(args: syn::AttributeArgs) -> TokenStream { | 15 | pub fn riscv(args: &[NestedMeta]) -> TokenStream { |
| 15 | let maybe_entry = match Args::from_list(&args) { | 16 | let maybe_entry = match Args::from_list(args) { |
| 16 | Ok(args) => args.entry, | 17 | Ok(args) => args.entry, |
| 17 | Err(e) => return e.write_errors(), | 18 | Err(e) => return e.write_errors(), |
| 18 | }; | 19 | }; |
| @@ -77,9 +78,9 @@ pub fn std() -> TokenStream { | |||
| 77 | } | 78 | } |
| 78 | } | 79 | } |
| 79 | 80 | ||
| 80 | pub fn run(args: syn::AttributeArgs, f: syn::ItemFn, main: TokenStream) -> Result<TokenStream, TokenStream> { | 81 | pub fn run(args: &[NestedMeta], f: syn::ItemFn, main: TokenStream) -> Result<TokenStream, TokenStream> { |
| 81 | #[allow(unused_variables)] | 82 | #[allow(unused_variables)] |
| 82 | let args = Args::from_list(&args).map_err(|e| e.write_errors())?; | 83 | let args = Args::from_list(args).map_err(|e| e.write_errors())?; |
| 83 | 84 | ||
| 84 | let fargs = f.sig.inputs.clone(); | 85 | let fargs = f.sig.inputs.clone(); |
| 85 | 86 | ||
diff --git a/embassy-macros/src/macros/task.rs b/embassy-macros/src/macros/task.rs index 9f30cf43e..8c4bf7265 100644 --- a/embassy-macros/src/macros/task.rs +++ b/embassy-macros/src/macros/task.rs | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | use darling::export::NestedMeta; | ||
| 1 | use darling::FromMeta; | 2 | use darling::FromMeta; |
| 2 | use proc_macro2::TokenStream; | 3 | use proc_macro2::TokenStream; |
| 3 | use quote::{format_ident, quote}; | 4 | use quote::{format_ident, quote}; |
| @@ -11,8 +12,8 @@ struct Args { | |||
| 11 | pool_size: Option<usize>, | 12 | pool_size: Option<usize>, |
| 12 | } | 13 | } |
| 13 | 14 | ||
| 14 | pub fn run(args: syn::AttributeArgs, f: syn::ItemFn) -> Result<TokenStream, TokenStream> { | 15 | pub fn run(args: &[NestedMeta], f: syn::ItemFn) -> Result<TokenStream, TokenStream> { |
| 15 | let args = Args::from_list(&args).map_err(|e| e.write_errors())?; | 16 | let args = Args::from_list(args).map_err(|e| e.write_errors())?; |
| 16 | 17 | ||
| 17 | let pool_size: usize = args.pool_size.unwrap_or(1); | 18 | let pool_size: usize = args.pool_size.unwrap_or(1); |
| 18 | 19 | ||
