diff options
author | 2020-10-08 17:33:42 +0200 | |
---|---|---|
committer | 2020-10-08 17:33:42 +0200 | |
commit | c83b15b643346c54f09ef130b5abd5ca31abfcd5 (patch) | |
tree | b1b350b834c243e05f4328d1b4922f1d9e0f373c /macros | |
parent | e8b4fa7b32cf044428971f22e01428ff9cccff3c (diff) | |
parent | 36781cdd890752d6876623d8802b860e950b24eb (diff) | |
download | rtic-c83b15b643346c54f09ef130b5abd5ca31abfcd5.tar.gz rtic-c83b15b643346c54f09ef130b5abd5ca31abfcd5.tar.zst rtic-c83b15b643346c54f09ef130b5abd5ca31abfcd5.zip |
Merge branch 'master' into spawn_experiment
Diffstat (limited to 'macros')
-rw-r--r-- | macros/src/codegen/init.rs | 63 | ||||
-rw-r--r-- | macros/src/codegen/module.rs | 12 | ||||
-rw-r--r-- | macros/src/lib.rs | 3 |
3 files changed, 33 insertions, 45 deletions
diff --git a/macros/src/codegen/init.rs b/macros/src/codegen/init.rs index 5f95f217..465a927d 100644 --- a/macros/src/codegen/init.rs +++ b/macros/src/codegen/init.rs @@ -36,47 +36,38 @@ pub fn codegen( let mut root_init = vec![]; - let mut user_init_imports = vec![]; - - let ret = { - let late_fields = analysis - .late_resources - .iter() - .flat_map(|resources| { - resources.iter().map(|name| { - let ty = &app.late_resources[name].ty; - let cfgs = &app.late_resources[name].cfgs; - - quote!( + let late_fields = analysis + .late_resources + .iter() + .flat_map(|resources| { + resources.iter().map(|name| { + let ty = &app.late_resources[name].ty; + let cfgs = &app.late_resources[name].cfgs; + + quote!( #(#cfgs)* pub #name: #ty - ) - }) + ) }) - .collect::<Vec<_>>(); + }) + .collect::<Vec<_>>(); - if !late_fields.is_empty() { - let late_resources = util::late_resources_ident(&name); + let mut user_init_imports = vec![]; + let late_resources = util::late_resources_ident(&name); - root_init.push(quote!( - /// Resources initialized at runtime - #[allow(non_snake_case)] - pub struct #late_resources { - #(#late_fields),* - } - )); - - let name_late = format_ident!("{}LateResources", name); - user_init_imports.push(quote!( - #[allow(non_snake_case)] - use super::#name_late; - )); - - Some(quote!(-> #name::LateResources)) - } else { - None + root_init.push(quote!( + /// Resources initialized at runtime + #[allow(non_snake_case)] + pub struct #late_resources { + #(#late_fields),* } - }; + )); + + let name_late = format_ident!("{}LateResources", name); + user_init_imports.push(quote!( + #[allow(non_snake_case)] + use super::#name_late; + )); let mut locals_pat = None; let mut locals_new = None; @@ -95,7 +86,7 @@ pub fn codegen( let user_init = Some(quote!( #(#attrs)* #[allow(non_snake_case)] - fn #name(#(#locals_pat,)* #context: #name::Context) #ret { + fn #name(#(#locals_pat,)* #context: #name::Context) -> #name::LateResources { #(#stmts)* } )); diff --git a/macros/src/codegen/module.rs b/macros/src/codegen/module.rs index 1fd3cd42..526bf491 100644 --- a/macros/src/codegen/module.rs +++ b/macros/src/codegen/module.rs @@ -267,14 +267,12 @@ pub fn codegen( if let Context::Init = ctxt { let init = &app.inits.first().unwrap(); - if init.returns_late_resources { - let late_resources = util::late_resources_ident(&init.name); + let late_resources = util::late_resources_ident(&init.name); - items.push(quote!( - #[doc(inline)] - pub use super::#late_resources as LateResources; - )); - } + items.push(quote!( + #[doc(inline)] + pub use super::#late_resources as LateResources; + )); } let doc = match ctxt { diff --git a/macros/src/lib.rs b/macros/src/lib.rs index 94e7eec6..e659559e 100644 --- a/macros/src/lib.rs +++ b/macros/src/lib.rs @@ -35,8 +35,7 @@ mod tests; /// /// The items allowed in the module block are specified below: /// -/// # 1. `#[resources] -/// struct <resource-name>` +/// # 1. `#[resources] struct <resource-name>` /// /// This structure contains the declaration of all the resources used by the application. Each field /// in this structure corresponds to a different resource. Each resource may optionally be given an |