Even more cleanup

This commit is contained in:
Emil Fresk 2023-01-04 21:08:44 +01:00 committed by Henrik Tjäder
parent 5c3cedf69a
commit 858320cbfc
6 changed files with 7 additions and 123 deletions

View file

@ -6,20 +6,17 @@ use crate::syntax::ast::App;
mod assertions;
mod async_dispatchers;
// mod dispatchers;
mod hardware_tasks;
mod idle;
mod init;
mod local_resources;
mod local_resources_struct;
mod module;
// mod monotonic;
mod post_init;
mod pre_init;
mod shared_resources;
mod shared_resources_struct;
mod software_tasks;
// mod timer_queue;
mod util;
#[allow(clippy::too_many_lines)]

View file

@ -76,7 +76,7 @@ pub fn codegen(app: &App, analysis: &Analysis) -> CodegenResult {
// let locals_pat = locals_pat.iter();
let user_init_return = quote! {#shared, #local, #name::Monotonics};
let user_init_return = quote! {#shared, #local};
let user_init = quote!(
#(#attrs)*
@ -99,9 +99,8 @@ pub fn codegen(app: &App, analysis: &Analysis) -> CodegenResult {
mod_app = Some(constructor);
}
// let locals_new = locals_new.iter();
let call_init = quote! {
let (shared_resources, local_resources, mut monotonics) = #name(#name::Context::new(core.into()));
let (shared_resources, local_resources) = #name(#name::Context::new(core.into()));
};
root_init.push(module::codegen(

View file

@ -23,7 +23,7 @@ impl Init {
if valid_signature {
if let Ok((user_shared_struct, user_local_struct)) =
util::type_is_init_return(&item.sig.output, &name)
util::type_is_init_return(&item.sig.output)
{
if let Some(context) = util::parse_inputs(item.sig.inputs, &name) {
return Ok(Init {
@ -42,7 +42,7 @@ impl Init {
Err(parse::Error::new(
span,
&format!(
"the `#[init]` function must have signature `fn({}::Context) -> (Shared resources struct, Local resources struct, {0}::Monotonics)`",
"the `#[init]` function must have signature `fn({}::Context) -> (Shared resources struct, Local resources struct)`",
name
),
))

View file

@ -1,42 +0,0 @@
use proc_macro2::Span;
use syn::Attribute;
use syn::{parse, spanned::Spanned, ItemType, Visibility};
use crate::syntax::parse::util::FilterAttrs;
use crate::syntax::{
ast::{Monotonic, MonotonicArgs},
parse::util,
};
impl MonotonicArgs {
pub(crate) fn parse(attr: Attribute) -> parse::Result<Self> {
crate::syntax::parse::monotonic_args(attr.path, attr.tokens)
}
}
impl Monotonic {
pub(crate) fn parse(args: MonotonicArgs, item: &ItemType, span: Span) -> parse::Result<Self> {
if item.vis != Visibility::Inherited {
return Err(parse::Error::new(
span,
"this field must have inherited / private visibility",
));
}
let FilterAttrs { cfgs, attrs, .. } = util::filter_attributes(item.attrs.clone());
if !attrs.is_empty() {
return Err(parse::Error::new(
attrs[0].path.span(),
"Monotonic does not support attributes other than `#[cfg]`",
));
}
Ok(Monotonic {
cfgs,
ident: item.ident.clone(),
ty: item.ty.clone(),
args,
})
}
}

View file

@ -277,18 +277,18 @@ fn extract_init_resource_name_ident(ty: Type) -> Result<Ident, ()> {
}
/// Checks Init's return type, return the user provided types for analysis
pub fn type_is_init_return(ty: &ReturnType, name: &str) -> Result<(Ident, Ident), ()> {
pub fn type_is_init_return(ty: &ReturnType) -> Result<(Ident, Ident), ()> {
match ty {
ReturnType::Default => Err(()),
ReturnType::Type(_, ty) => match &**ty {
Type::Tuple(t) => {
// return should be:
// fn -> (User's #[shared] struct, User's #[local] struct, {name}::Monotonics)
// fn -> (User's #[shared] struct, User's #[local] struct)
//
// We check the length and the last one here, analysis checks that the user
// provided structs are correct.
if t.elems.len() == 3 && type_is_path(&t.elems[2], &[name, "Monotonics"]) {
if t.elems.len() == 2 {
return Ok((
extract_init_resource_name_ident(t.elems[0].clone())?,
extract_init_resource_name_ident(t.elems[1].clone())?,