diff options
author | 2021-02-18 19:30:59 +0100 | |
---|---|---|
committer | 2021-02-18 19:30:59 +0100 | |
commit | ebf2f058a4d2a1fcf118144b9893dc3038939bad (patch) | |
tree | 11c7b828cc380737de36e6ab77edbd63bf42a72e /macros/src/codegen.rs | |
parent | b57ef0bf9d836ad031e4a4f7930162003128dc74 (diff) | |
download | rtic-ebf2f058a4d2a1fcf118144b9893dc3038939bad.tar.gz rtic-ebf2f058a4d2a1fcf118144b9893dc3038939bad.tar.zst rtic-ebf2f058a4d2a1fcf118144b9893dc3038939bad.zip |
Now with new monotonic trait and crate
Diffstat (limited to 'macros/src/codegen.rs')
-rw-r--r-- | macros/src/codegen.rs | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/macros/src/codegen.rs b/macros/src/codegen.rs index bb8aa4e7..bdfcd36d 100644 --- a/macros/src/codegen.rs +++ b/macros/src/codegen.rs @@ -104,13 +104,35 @@ pub fn app(app: &App, analysis: &Analysis, extra: &Extra) -> TokenStream2 { )); } + let app_name = &app.name; + let app_path = quote! {crate::#app_name}; + let monotonic_imports: Vec<_> = app .monotonics .iter() .map(|(_, monotonic)| { let name = &monotonic.ident; let ty = &monotonic.ty; - quote!(pub type #name = #ty;) + let mangled_name = util::mangle_monotonic_type(&name.to_string()); + let ident = util::monotonic_ident(&name.to_string()); + quote! { + #[doc(hidden)] + pub type #mangled_name = #ty; + + pub mod #name { + pub fn now() -> rtic::time::Instant<#app_path::#mangled_name> { + rtic::export::interrupt::free(|_| { + use rtic::Monotonic as _; + use rtic::time::Clock as _; + if let Ok(v) = unsafe{ (&*#app_path::#ident.as_ptr()).try_now() } { + v + } else { + unreachable!("Your monotonic is not infallible!") + } + }) + } + } + } }) .collect(); |