aboutsummaryrefslogtreecommitdiff
path: root/macros/src/codegen/init.rs
diff options
context:
space:
mode:
authorGravatar Emil Fresk <emil.fresk@gmail.com> 2021-07-07 21:03:56 +0200
committerGravatar Emil Fresk <emil.fresk@gmail.com> 2021-07-07 21:04:31 +0200
commitd7393c5b27fc95f3569d12137ee0c4d03ff7e2ba (patch)
treeb90e094920cb859bb9e401f3acdddcadf675c834 /macros/src/codegen/init.rs
parentef5307d83a1d62df0569d78db75d4006147c927d (diff)
downloadrtic-d7393c5b27fc95f3569d12137ee0c4d03ff7e2ba.tar.gz
rtic-d7393c5b27fc95f3569d12137ee0c4d03ff7e2ba.tar.zst
rtic-d7393c5b27fc95f3569d12137ee0c4d03ff7e2ba.zip
Full local resource syntax working
Diffstat (limited to 'macros/src/codegen/init.rs')
-rw-r--r--macros/src/codegen/init.rs15
1 files changed, 13 insertions, 2 deletions
diff --git a/macros/src/codegen/init.rs b/macros/src/codegen/init.rs
index e3f74086..1bea7b7e 100644
--- a/macros/src/codegen/init.rs
+++ b/macros/src/codegen/init.rs
@@ -26,7 +26,7 @@ type CodegenResult = (
/// Generates support code for `#[init]` functions
pub fn codegen(app: &App, analysis: &Analysis, extra: &Extra) -> CodegenResult {
let init = &app.init;
- let mut needs_lt = false;
+ let mut local_needs_lt = false;
let name = &init.name;
let mut root_init = vec![];
@@ -96,6 +96,16 @@ pub fn codegen(app: &App, analysis: &Analysis, extra: &Extra) -> CodegenResult {
let mut mod_app = None;
+ // `${task}Locals`
+ if !init.args.local_resources.is_empty() {
+ let (item, constructor) =
+ local_resources_struct::codegen(Context::Init, &mut local_needs_lt, app);
+
+ root_init.push(item);
+
+ mod_app = Some(constructor);
+ }
+
// let locals_new = locals_new.iter();
let call_init = quote! {
let (shared_resources, local_resources, mut monotonics) = #name(#name::Context::new(core.into()));
@@ -103,7 +113,8 @@ pub fn codegen(app: &App, analysis: &Analysis, extra: &Extra) -> CodegenResult {
root_init.push(module::codegen(
Context::Init,
- needs_lt,
+ false,
+ local_needs_lt,
app,
analysis,
extra,