diff options
author | 2020-10-05 18:25:15 +0200 | |
---|---|---|
committer | 2020-10-05 18:25:15 +0200 | |
commit | eec0908024d9b4127ed496b4781adc08000cc2c2 (patch) | |
tree | f128b3d91ea4ac0f171ab334d4517552a6803d01 /macros/src/codegen/init.rs | |
parent | 9d2598dc071882a94b813ab1d9ddf49092546257 (diff) | |
parent | f493f21359ccb3ab4643d9470f3581532f47593a (diff) | |
download | rtic-eec0908024d9b4127ed496b4781adc08000cc2c2.tar.gz rtic-eec0908024d9b4127ed496b4781adc08000cc2c2.tar.zst rtic-eec0908024d9b4127ed496b4781adc08000cc2c2.zip |
Merge branch 'master' into always_late_resources
Diffstat (limited to 'macros/src/codegen/init.rs')
-rw-r--r-- | macros/src/codegen/init.rs | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/macros/src/codegen/init.rs b/macros/src/codegen/init.rs index b41c3894..1ced68bc 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::{format_ident, quote}; use rtic_syntax::{ast::App, Context}; use crate::{ @@ -14,7 +14,7 @@ pub fn codegen( analysis: &Analysis, extra: &Extra, ) -> ( - // const_app_idle -- the `${init}Resources` constructor + // mod_app_idle -- the `${init}Resources` constructor Option<TokenStream2>, // root_init -- items that must be placed in the root of the crate: // - the `${init}Locals` struct @@ -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>, ) { @@ -43,13 +45,14 @@ pub fn codegen( let cfgs = &app.late_resources[name].cfgs; quote!( - #(#cfgs)* - pub #name: #ty + #(#cfgs)* + pub #name: #ty ) }) }) .collect::<Vec<_>>(); + let mut user_init_imports = vec![]; let late_resources = util::late_resources_ident(&name); root_init.push(quote!( @@ -81,14 +84,25 @@ pub fn codegen( #(#stmts)* } )); + user_init_imports.push(quote!( + #(#attrs)* + #[allow(non_snake_case)] + use super::#name; + )); - let mut const_app = None; + let mut mod_app = None; if !init.args.resources.is_empty() { let (item, constructor) = resources_struct::codegen(Context::Init, 0, &mut needs_lt, app, analysis); root_init.push(item); - const_app = Some(constructor); + mod_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(); @@ -98,8 +112,8 @@ pub fn codegen( root_init.push(module::codegen(Context::Init, needs_lt, app, extra)); - (const_app, root_init, user_init, call_init) + (mod_app, root_init, user_init, user_init_imports, call_init) } else { - (None, vec![], None, None) + (None, vec![], None, vec![], None) } } |