finish: impl CodeGen for Register

This commit is contained in:
Wataru Otsubo 2025-02-01 20:13:48 +09:00
parent 48215049e8
commit 1ed3843508
2 changed files with 41 additions and 27 deletions

View file

@ -0,0 +1,36 @@
use proc_macro2::{Ident, TokenStream};
use quote::quote;
use crate::types::RwSpecifier;
pub(super) fn gen_registerspec_impl(
reg_name: Ident,
modf: RwSpecifier,
type_t: Ident,
type_ux: Ident,
) -> TokenStream {
let impl_rw = match modf {
RwSpecifier::R => quote! {
impl Readable for #reg_name<'_> {}
},
RwSpecifier::W => quote! {
impl Writable for #reg_name<'_> {}
},
RwSpecifier::RW => quote! {
impl Readable for #reg_name<'_> {}
impl Writable for #reg_name<'_> {}
impl Modifiable for #reg_name<'_> {}
},
};
quote! {
impl RegisterSpec for #reg_name<'_> {
type Ux = #type_ux;
type T = #type_t;
fn as_ptr(&self) -> *mut Self::Ux {
self.mem_ptr
}
}
#impl_rw
}
}