diff options
| author | Dario Nieuwenhuis <[email protected]> | 2020-10-31 16:36:09 +0100 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2020-10-31 16:36:09 +0100 |
| commit | 57abd7064dcf04029e814f3e769b0ad0b2111118 (patch) | |
| tree | 9ec4ce97f31039d7f67deeffa0ed02c4c11b964c | |
| parent | 53eb594878d08ae4087d9491b85445fda94c5ea1 (diff) | |
task codegen: use local items instead of non-locals with prefixed names.
| -rw-r--r-- | embassy-macros/src/lib.rs | 24 |
1 files changed, 5 insertions, 19 deletions
diff --git a/embassy-macros/src/lib.rs b/embassy-macros/src/lib.rs index 1745311ba..db4afcb9b 100644 --- a/embassy-macros/src/lib.rs +++ b/embassy-macros/src/lib.rs | |||
| @@ -85,29 +85,15 @@ pub fn task(args: TokenStream, item: TokenStream) -> TokenStream { | |||
| 85 | 85 | ||
| 86 | let name = task_fn.sig.ident.clone(); | 86 | let name = task_fn.sig.ident.clone(); |
| 87 | 87 | ||
| 88 | let type_name = format_ident!("__embassy_executor_type_{}", name); | ||
| 89 | let pool_name = format_ident!("__embassy_executor_pool_{}", name); | ||
| 90 | let task_fn_name = format_ident!("__embassy_executor_task_{}", name); | ||
| 91 | let create_fn_name = format_ident!("__embassy_executor_create_{}", name); | ||
| 92 | |||
| 93 | let visibility = &task_fn.vis; | 88 | let visibility = &task_fn.vis; |
| 94 | 89 | task_fn.sig.ident = format_ident!("task"); | |
| 95 | task_fn.sig.ident = task_fn_name.clone(); | ||
| 96 | 90 | ||
| 97 | let result = quote! { | 91 | let result = quote! { |
| 98 | #task_fn | ||
| 99 | #[allow(non_camel_case_types)] | ||
| 100 | type #type_name = impl ::core::future::Future + 'static; | ||
| 101 | |||
| 102 | fn #create_fn_name(#args) -> #type_name { | ||
| 103 | #task_fn_name(#arg_names) | ||
| 104 | } | ||
| 105 | |||
| 106 | #[allow(non_upper_case_globals)] | ||
| 107 | static #pool_name: [::embassy::executor::Task<#type_name>; #pool_size] = [::embassy::executor::Task::new(); #pool_size]; | ||
| 108 | |||
| 109 | #visibility fn #name(#args) -> ::embassy::executor::SpawnToken { | 92 | #visibility fn #name(#args) -> ::embassy::executor::SpawnToken { |
| 110 | unsafe { ::embassy::executor::Task::spawn(&#pool_name, || #create_fn_name(#arg_names)) } | 93 | #task_fn |
| 94 | type F = impl ::core::future::Future + 'static; | ||
| 95 | static POOL: [::embassy::executor::Task<F>; #pool_size] = [::embassy::executor::Task::new(); #pool_size]; | ||
| 96 | unsafe { ::embassy::executor::Task::spawn(&POOL, || task(#arg_names)) } | ||
| 111 | } | 97 | } |
| 112 | }; | 98 | }; |
| 113 | result.into() | 99 | result.into() |
