diff options
Diffstat (limited to 'macros/src/codegen/module.rs')
-rw-r--r-- | macros/src/codegen/module.rs | 77 |
1 files changed, 35 insertions, 42 deletions
diff --git a/macros/src/codegen/module.rs b/macros/src/codegen/module.rs index a3d3fab2..a59d6628 100644 --- a/macros/src/codegen/module.rs +++ b/macros/src/codegen/module.rs @@ -5,7 +5,8 @@ use rtic_syntax::{ast::App, Context}; pub fn codegen( ctxt: Context, - resources_tick: bool, + shared_resources_tick: bool, + local_resources_tick: bool, app: &App, analysis: &Analysis, extra: &Extra, @@ -56,18 +57,41 @@ pub fn codegen( Context::SoftwareTask(_) => {} } - if ctxt.has_locals(app) { - let ident = util::locals_ident(ctxt, app); + // if ctxt.has_locals(app) { + // let ident = util::locals_ident(ctxt, app); + // module_items.push(quote!( + // #[doc(inline)] + // pub use super::#ident as Locals; + // )); + // } + + if ctxt.has_local_resources(app) { + let ident = util::local_resources_ident(ctxt, app); + let ident = util::mark_internal_ident(&ident); + let lt = if local_resources_tick { + lt = Some(quote!('a)); + Some(quote!('a)) + } else { + None + }; + module_items.push(quote!( #[doc(inline)] - pub use super::#ident as Locals; + pub use super::#ident as LocalResources; + )); + + fields.push(quote!( + /// Local Resources this task has access to + pub local: #name::LocalResources<#lt> )); + + values.push(quote!(local: #name::LocalResources::new())); } - if ctxt.has_resources(app) { - let ident = util::resources_ident(ctxt, app); + if ctxt.has_shared_resources(app) { + let ident = util::shared_resources_ident(ctxt, app); let ident = util::mark_internal_ident(&ident); - let lt = if resources_tick { + let lt = if shared_resources_tick { lt = Some(quote!('a)); Some(quote!('a)) } else { @@ -76,12 +100,12 @@ pub fn codegen( module_items.push(quote!( #[doc(inline)] - pub use super::#ident as Resources; + pub use super::#ident as SharedResources; )); fields.push(quote!( - /// Resources this task has access to - pub resources: #name::Resources<#lt> + /// Shared Resources this task has access to + pub shared: #name::SharedResources<#lt> )); let priority = if ctxt.is_init() { @@ -89,38 +113,10 @@ pub fn codegen( } else { Some(quote!(priority)) }; - values.push(quote!(resources: #name::Resources::new(#priority))); + values.push(quote!(shared: #name::SharedResources::new(#priority))); } if let Context::Init = ctxt { - 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<_>>(); - - let internal_late_ident = util::mark_internal_name("LateResources"); - items.push(quote!( - /// Resources initialized at runtime - #[allow(non_snake_case)] - pub struct #internal_late_ident { - #(#late_fields),* - } - )); - module_items.push(quote!( - pub use super::#internal_late_ident as LateResources; - )); - let monotonic_types: Vec<_> = app .monotonics .iter() @@ -202,9 +198,6 @@ pub fn codegen( pub use super::#internal_context_name as Context; )); - // not sure if this is the right way, maybe its backwards, - // that spawn_module should put in in root - if let Context::SoftwareTask(..) = ctxt { let spawnee = &app.software_tasks[name]; let priority = spawnee.args.priority; |