aboutsummaryrefslogtreecommitdiff
path: root/macros/src/codegen/locals.rs
diff options
context:
space:
mode:
Diffstat (limited to 'macros/src/codegen/locals.rs')
-rw-r--r--macros/src/codegen/locals.rs95
1 files changed, 0 insertions, 95 deletions
diff --git a/macros/src/codegen/locals.rs b/macros/src/codegen/locals.rs
deleted file mode 100644
index 0fb8c6d2..00000000
--- a/macros/src/codegen/locals.rs
+++ /dev/null
@@ -1,95 +0,0 @@
-use proc_macro2::TokenStream as TokenStream2;
-use quote::quote;
-use rtic_syntax::{
- ast::{App, Local},
- Context, Map,
-};
-
-use crate::codegen::util;
-
-pub fn codegen(
- ctxt: Context,
- locals: &Map<Local>,
- app: &App,
-) -> (
- // locals
- TokenStream2,
- // pat
- TokenStream2,
-) {
- assert!(!locals.is_empty());
-
- let runs_once = ctxt.runs_once();
- let ident = util::locals_ident(ctxt, app);
-
- let mut lt = None;
- let mut fields = vec![];
- let mut items = vec![];
- let mut names = vec![];
- let mut values = vec![];
- let mut pats = vec![];
- let mut has_cfgs = false;
-
- for (name, local) in locals {
- let lt = if runs_once {
- quote!('static)
- } else {
- lt = Some(quote!('a));
- quote!('a)
- };
-
- let cfgs = &local.cfgs;
- has_cfgs |= !cfgs.is_empty();
-
- let expr = &local.expr;
- let ty = &local.ty;
- fields.push(quote!(
- #(#cfgs)*
- #name: &#lt mut #ty
- ));
- items.push(quote!(
- #(#cfgs)*
- #[doc(hidden)]
- static #name: rtic::RacyCell<#ty> = rtic::RacyCell::new(#expr)
- ));
- values.push(quote!(
- #(#cfgs)*
- #name: #name.get_mut_unchecked()
- ));
- names.push(name);
- pats.push(quote!(
- #(#cfgs)*
- #name
- ));
- }
-
- if lt.is_some() && has_cfgs {
- fields.push(quote!(__marker__: core::marker::PhantomData<&'a ()>));
- values.push(quote!(__marker__: core::marker::PhantomData));
- }
-
- let locals = quote!(
- #[allow(non_snake_case)]
- #[doc(hidden)]
- pub struct #ident<#lt> {
- #(#fields),*
- }
-
- impl<#lt> #ident<#lt> {
- #[inline(always)]
- unsafe fn new() -> Self {
- #(#items;)*
-
- #ident {
- #(#values),*
- }
- }
- }
- );
-
- let ident = ctxt.ident(app);
- (
- locals,
- quote!(#ident::Locals { #(#pats,)* .. }: #ident::Locals),
- )
-}