Skip to content

Commit 749c751

Browse files
bors[bot]Hugo van der Wijstburrbull
committed
Merge #322
322: Once r=therealprof a=burrbull r? @therealprof #264 was taken as base. ![изображение](https://user-images.githubusercontent.com/3072754/61576487-59a82280-aae3-11e9-9165-aefbf41b2925.png) Co-authored-by: Hugo van der Wijst <[email protected]> Co-authored-by: Andrey Zgarbul <[email protected]>
2 parents c020833 + 6afb064 commit 749c751

File tree

2 files changed

+16
-9
lines changed

2 files changed

+16
-9
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 == Access::WriteOnly || access == Access::ReadWrite {
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 == Access::WriteOnly || access == Access::ReadWrite {
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 == Access::WriteOnly || access == Access::ReadWrite {
562+
if access != Access::ReadOnly {
560563
for f in &fs {
561564
if f.access == Some(Access::ReadOnly) {
562565
continue;

src/util.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,11 @@ pub fn access_of(register: &Register) -> Access {
200200
if let Some(fields) = &register.fields {
201201
if fields.iter().all(|f| f.access == Some(Access::ReadOnly)) {
202202
Access::ReadOnly
203-
} else if fields.iter().all(|f| f.access == Some(Access::WriteOnly)) {
203+
} else if fields.iter().all(|f| f.access == Some(Access::WriteOnce)) {
204+
Access::WriteOnce
205+
} else if fields.iter().all(|f| f.access == Some(Access::ReadWriteOnce)) {
206+
Access::ReadWriteOnce
207+
} else if fields.iter().all(|f| f.access == Some(Access::WriteOnly) || f.access == Some(Access::WriteOnce)) {
204208
Access::WriteOnly
205209
} else {
206210
Access::ReadWrite

0 commit comments

Comments
 (0)