Skip to content

Commit 6afb064

Browse files
committed
ReadWriteOnce + fixes
1 parent fc33d62 commit 6afb064

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

src/generate/register.rs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ pub fn render(
3939
let mut r_impl_items = vec![];
4040
let mut w_impl_items = vec![];
4141

42-
if access == Access::ReadWrite {
42+
let can_read = [Access::ReadOnly, Access::ReadWriteOnce, Access::ReadWrite].contains(&access);
43+
let can_write = access != Access::ReadOnly;
44+
45+
if access == Access::ReadWrite || access == Access::ReadWriteOnce {
4346
reg_impl_items.push(quote! {
4447
/// Modifies the contents of the register
4548
#[inline]
@@ -53,7 +56,7 @@ pub fn render(
5356
});
5457
}
5558

56-
if access == Access::ReadOnly || access == Access::ReadWrite {
59+
if can_read {
5760
reg_impl_items.push(quote! {
5861
/// Reads the contents of the register
5962
#[inline]
@@ -78,7 +81,7 @@ pub fn render(
7881
});
7982
}
8083

81-
if [Access::WriteOnly, Access::WriteOnce, Access::ReadWrite].contains(&access) {
84+
if can_write {
8285
reg_impl_items.push(quote! {
8386
/// Writes to the register
8487
#[inline]
@@ -157,15 +160,15 @@ pub fn render(
157160
}
158161
}
159162

160-
if access == Access::ReadOnly || access == Access::ReadWrite {
163+
if can_read {
161164
mod_items.push(quote! {
162165
impl R {
163166
#(#r_impl_items)*
164167
}
165168
});
166169
}
167170

168-
if [Access::WriteOnly, Access::WriteOnce, Access::ReadWrite].contains(&access) {
171+
if can_write {
169172
mod_items.push(quote! {
170173
impl W {
171174
#(#w_impl_items)*
@@ -266,9 +269,9 @@ pub fn fields(
266269
let fs = fields.iter().map(F::from).collect::<Result<Vec<_>>>()?;
267270

268271
// TODO enumeratedValues
269-
if access == Access::ReadOnly || access == Access::ReadWrite {
272+
if [Access::ReadOnly, Access::ReadWriteOnce, Access::ReadWrite].contains(&access) {
270273
for f in &fs {
271-
if f.access == Some(Access::WriteOnly) {
274+
if f.access == Some(Access::WriteOnly) || f.access == Some(Access::WriteOnce) {
272275
continue;
273276
}
274277

@@ -556,7 +559,7 @@ pub fn fields(
556559
}
557560
}
558561

559-
if [Access::WriteOnly, Access::WriteOnce, Access::ReadWrite].contains(&access) {
562+
if access != Access::ReadOnly {
560563
for f in &fs {
561564
if f.access == Some(Access::ReadOnly) {
562565
continue;

src/util.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,8 @@ pub fn access_of(register: &Register) -> Access {
202202
Access::ReadOnly
203203
} else if fields.iter().all(|f| f.access == Some(Access::WriteOnce)) {
204204
Access::WriteOnce
205+
} else if fields.iter().all(|f| f.access == Some(Access::ReadWriteOnce)) {
206+
Access::ReadWriteOnce
205207
} else if fields.iter().all(|f| f.access == Some(Access::WriteOnly) || f.access == Some(Access::WriteOnce)) {
206208
Access::WriteOnly
207209
} else {

0 commit comments

Comments
 (0)