From e4319de3d526285381f5cc53e14f9a17d123a81a Mon Sep 17 00:00:00 2001 From: Andrey Zgarbul Date: Sat, 3 Apr 2021 20:30:34 +0300 Subject: const generics --- macros/src/codegen/dispatchers.rs | 6 ++---- macros/src/codegen/software_tasks.rs | 10 ++++------ macros/src/codegen/timer_queue.rs | 4 ++-- macros/src/codegen/util.rs | 15 +-------------- 4 files changed, 9 insertions(+), 26 deletions(-) (limited to 'macros/src/codegen') diff --git a/macros/src/codegen/dispatchers.rs b/macros/src/codegen/dispatchers.rs index ac55003..c239b0f 100644 --- a/macros/src/codegen/dispatchers.rs +++ b/macros/src/codegen/dispatchers.rs @@ -42,15 +42,13 @@ pub fn codegen(app: &App, analysis: &Analysis, _extra: &Extra) -> Vec), - quote!(rtic::export::Queue(unsafe { - rtic::export::iQueue::u8_sc() - })), + quote!(rtic::export::Queue::new()), ) }; diff --git a/macros/src/codegen/software_tasks.rs b/macros/src/codegen/software_tasks.rs index cfd21e4..0b07335 100644 --- a/macros/src/codegen/software_tasks.rs +++ b/macros/src/codegen/software_tasks.rs @@ -32,8 +32,8 @@ pub fn codegen( let (_, _, _, input_ty) = util::regroup_inputs(inputs); let cap = task.args.capacity; - let cap_lit = util::capacity_literal(cap); - let cap_ty = util::capacity_typenum(cap, true); + let cap_lit = util::capacity_literal(cap as usize); + let cap_lit_p1 = util::capacity_literal(cap as usize + 1); // Create free queues and inputs / instants buffers let fq = util::fq_ident(name); @@ -41,10 +41,8 @@ pub fn codegen( let (fq_ty, fq_expr, mk_uninit): (_, _, Box Option<_>>) = { ( - quote!(rtic::export::SCFQ<#cap_ty>), - quote!(rtic::export::Queue(unsafe { - rtic::export::iQueue::u8_sc() - })), + quote!(rtic::export::SCFQ<#cap_lit_p1>), + quote!(rtic::export::Queue::new()), Box::new(|| util::link_section_uninit()), ) }; diff --git a/macros/src/codegen/timer_queue.rs b/macros/src/codegen/timer_queue.rs index 9e30d10..abddbad 100644 --- a/macros/src/codegen/timer_queue.rs +++ b/macros/src/codegen/timer_queue.rs @@ -62,12 +62,12 @@ pub fn codegen(app: &App, analysis: &Analysis, _extra: &Extra) -> Vec>); diff --git a/macros/src/codegen/util.rs b/macros/src/codegen/util.rs index 86bd695..c2330d4 100644 --- a/macros/src/codegen/util.rs +++ b/macros/src/codegen/util.rs @@ -8,23 +8,10 @@ use syn::{Attribute, Ident, LitInt, PatType}; use crate::check::Extra; /// Turns `capacity` into an unsuffixed integer literal -pub fn capacity_literal(capacity: u8) -> LitInt { +pub fn capacity_literal(capacity: usize) -> LitInt { LitInt::new(&capacity.to_string(), Span::call_site()) } -/// Turns `capacity` into a type-level (`typenum`) integer -pub fn capacity_typenum(capacity: u8, round_up_to_power_of_two: bool) -> TokenStream2 { - let capacity = if round_up_to_power_of_two { - capacity.checked_next_power_of_two().expect("UNREACHABLE") - } else { - capacity - }; - - let ident = Ident::new(&format!("U{}", capacity), Span::call_site()); - - quote!(rtic::export::consts::#ident) -} - /// Identifier for the free queue pub fn fq_ident(task: &Ident) -> Ident { Ident::new(&format!("{}_FQ", task.to_string()), Span::call_site()) -- cgit v1.2.3