mirror of
https://gitlab.cern.ch/wotsubo/endcap-sl-software-ri-generator.git
synced 2025-02-23 00:57:08 +09:00
fix(generator): mask (u32) should be Literal, not Identifier
This commit is contained in:
parent
859d9c0fa3
commit
80ce358aee
2 changed files with 11 additions and 6 deletions
|
@ -228,7 +228,12 @@ impl CodeGen for Register {
|
|||
) = codegen_register::reg_type_def(&self, &upper_camel_name)?;
|
||||
|
||||
let code_reg_def: proc_macro2::TokenStream =
|
||||
codegen_registerspec_impl::gen_registerspec_impl(reg_name.clone(), self.modf, type_t, type_ux);
|
||||
codegen_registerspec_impl::gen_registerspec_impl(
|
||||
reg_name.clone(),
|
||||
self.modf,
|
||||
type_t,
|
||||
type_ux,
|
||||
);
|
||||
|
||||
Ok(quote! {
|
||||
pub mod #snake_case_name {
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
use heck::{ToShoutySnekCase, ToSnakeCase};
|
||||
use itertools::Itertools;
|
||||
use proc_macro2::{Ident, TokenStream};
|
||||
use proc_macro2::{Ident, Literal, TokenStream};
|
||||
use quote::quote;
|
||||
|
||||
use crate::types::{DataType, Field, MultipleParams, Register};
|
||||
|
@ -298,12 +298,12 @@ fn generate_multiple_field(
|
|||
multiple_params: &MultipleParams,
|
||||
) -> (TokenStream, TokenStream, TokenStream) {
|
||||
let num_multiple = multiple_params.multiple;
|
||||
let id_num_multiple = util::parse_to_ident(&num_multiple.to_string()).unwrap();
|
||||
let id_num_multiple = util::parse_to_literal(&num_multiple.to_string()).unwrap();
|
||||
let id_field_type = single_field_type.to_rust_type_token();
|
||||
let masks: Vec<_> = (0..multiple_params.multiple)
|
||||
.map(|x| x * multiple_params.offset)
|
||||
.map(|offset| single_mask_val << offset)
|
||||
.map(|mask| util::parse_to_ident(&format!("0x{mask:x}")).unwrap())
|
||||
.map(|mask| util::parse_to_literal(&format!("0x{mask:x}")).unwrap())
|
||||
.collect();
|
||||
debug_assert_eq!(masks.len(), num_multiple.try_into().unwrap());
|
||||
let code_mask = quote! {
|
||||
|
@ -331,7 +331,7 @@ fn generate_multiple_bool_field(
|
|||
mask_name: Ident,
|
||||
base_type: Ident,
|
||||
snake_case_name: Ident,
|
||||
masks: Vec<Ident>,
|
||||
masks: Vec<Literal>,
|
||||
) -> (TokenStream, TokenStream) {
|
||||
let num_multiple = masks.len();
|
||||
let elem_getter = masks.iter().enumerate().map(|(i, _mask)| {
|
||||
|
@ -372,7 +372,7 @@ fn generate_multiple_ux_field(
|
|||
base_type: Ident,
|
||||
snake_case_name: Ident,
|
||||
single_field_type: RustUxTypes,
|
||||
masks: Vec<Ident>,
|
||||
masks: Vec<Literal>,
|
||||
) -> (TokenStream, TokenStream) {
|
||||
let field_type = single_field_type.to_rust_type_token();
|
||||
let num_multiple = masks.len();
|
||||
|
|
Loading…
Reference in a new issue