diff options
author | 2020-05-26 10:52:10 +0000 | |
---|---|---|
committer | 2020-09-25 14:29:34 +0000 | |
commit | 9fd052b876581e5aef3442b17c17b0b597f84a47 (patch) | |
tree | 037d08e2b4162b69baa86e989981e87051d2a18d /macros/src/codegen/init.rs | |
parent | dcc31fb8843d228165b28af1c10d92266847ce90 (diff) | |
download | rtic-9fd052b876581e5aef3442b17c17b0b597f84a47.tar.gz rtic-9fd052b876581e5aef3442b17c17b0b597f84a47.tar.zst rtic-9fd052b876581e5aef3442b17c17b0b597f84a47.zip |
Collect and generate required use-statements
Diffstat (limited to 'macros/src/codegen/init.rs')
-rw-r--r-- | macros/src/codegen/init.rs | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/macros/src/codegen/init.rs b/macros/src/codegen/init.rs index e0b7d699..88a7a23b 100644 --- a/macros/src/codegen/init.rs +++ b/macros/src/codegen/init.rs @@ -1,5 +1,5 @@ use proc_macro2::TokenStream as TokenStream2; -use quote::quote; +use quote::{quote, format_ident}; use rtic_syntax::{ast::App, Context}; use crate::{ @@ -24,6 +24,8 @@ pub fn codegen( Vec<TokenStream2>, // user_init -- the `#[init]` function written by the user Option<TokenStream2>, + // user_init_imports -- the imports for `#[init]` functio written by the user + Vec<TokenStream2>, // call_init -- the call to the user `#[init]` if there's one Option<TokenStream2>, ) { @@ -34,6 +36,8 @@ pub fn codegen( let mut root_init = vec![]; + let mut user_init_imports = vec![]; + let ret = { let late_fields = analysis .late_resources @@ -62,6 +66,12 @@ pub fn codegen( } )); + 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 @@ -89,6 +99,12 @@ pub fn codegen( #(#stmts)* } )); + user_init_imports.push(quote!( + #(#attrs)* + #cfg_core + #[allow(non_snake_case)] + use super::#name; + )); let mut const_app = None; if !init.args.resources.is_empty() { @@ -97,6 +113,12 @@ pub fn codegen( root_init.push(item); const_app = Some(constructor); + + let name_late = format_ident!("{}Resources", name); + user_init_imports.push(quote!( + #[allow(non_snake_case)] + use super::#name_late; + )); } let locals_new = locals_new.iter(); @@ -106,8 +128,8 @@ pub fn codegen( root_init.push(module::codegen(Context::Init, needs_lt, app, extra)); - (const_app, root_init, user_init, call_init) + (const_app, root_init, user_init, user_init_imports, call_init) } else { - (None, vec![], None, None) + (None, vec![], None, vec![], None) } } |