aboutsummaryrefslogtreecommitdiff
path: root/macros/src/codegen/locals.rs
diff options
context:
space:
mode:
authorGravatar bors[bot] <26634292+bors[bot]@users.noreply.github.com> 2021-07-09 11:00:11 +0000
committerGravatar GitHub <noreply@github.com> 2021-07-09 11:00:11 +0000
commite1a4d001f8e724596cd9de3e90698ce7de473b3f (patch)
treef7aac5eae4cc2e19cc06bfd6fa8dab843dcfb276 /macros/src/codegen/locals.rs
parent13dc3992e616d817e38c167c4b47db816855f18b (diff)
parentf3d9fd9b638a25b497e1ca02e7ce5de86c9fc1c9 (diff)
downloadrtic-e1a4d001f8e724596cd9de3e90698ce7de473b3f.tar.gz
rtic-e1a4d001f8e724596cd9de3e90698ce7de473b3f.tar.zst
rtic-e1a4d001f8e724596cd9de3e90698ce7de473b3f.zip
Merge #494
494: Resoures take 2 r=korken89 a=korken89 Co-authored-by: Emil Fresk <emil.fresk@gmail.com>
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),
- )
-}