aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2020-10-31 16:36:09 +0100
committerDario Nieuwenhuis <[email protected]>2020-10-31 16:36:09 +0100
commit57abd7064dcf04029e814f3e769b0ad0b2111118 (patch)
tree9ec4ce97f31039d7f67deeffa0ed02c4c11b964c
parent53eb594878d08ae4087d9491b85445fda94c5ea1 (diff)
task codegen: use local items instead of non-locals with prefixed names.
-rw-r--r--embassy-macros/src/lib.rs24
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()