Skip to content

Commit 481f6b8

Browse files
bors[bot]burrbull
andauthored
Merge #654
654: Eq impl & add safety docs r=therealprof a=burrbull Fixes #655 Co-authored-by: Andrey Zgarbul <[email protected]>
2 parents b3457d7 + 4236021 commit 481f6b8

File tree

5 files changed

+19
-13
lines changed

5 files changed

+19
-13
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
77

88
## [Unreleased]
99

10+
- Add `Eq` autoimplementation for enums
1011
- Use `critical_section::with` instead of `interrupt::free` for `Peripherals::take`.
1112
- Bring documentation on how to generate MSP430 PACs up to date (in line with
1213
[msp430_svd](https://github.com/pftbest/msp430_svd)).

Cargo.toml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ json = ["dep:serde_json"]
4343
yaml = ["dep:serde_yaml"]
4444

4545
[dependencies]
46-
cast = "0.3"
47-
clap = { version = "2.33", optional = true }
46+
clap = { version = "2.34", optional = true }
4847
clap_conf = { version = "0.1.5", optional = true }
4948
env_logger = { version = "0.9", optional = true }
5049
inflections = "1.1"
@@ -53,8 +52,8 @@ quote = "1.0"
5352
proc-macro2 = "1.0"
5453
anyhow = "1.0"
5554
thiserror = "1.0"
56-
serde_json = { version = "1.0.79", optional = true }
57-
serde_yaml = { version = "0.8.23", optional = true }
55+
serde_json = { version = "1.0.85", optional = true }
56+
serde_yaml = { version = "0.9.11", optional = true }
5857

5958
[dependencies.svd-parser]
6059
features = ["expand"]

src/generate/generic.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,10 @@ where
130130
/// Writes 0 to a `Writable` register.
131131
///
132132
/// Similar to `write`, but unused bits will contain 0.
133+
///
134+
/// # Safety
135+
///
136+
/// Unsafe to use with registers which don't allow to write 0.
133137
#[inline(always)]
134138
pub unsafe fn write_with_zero<F>(&self, f: F)
135139
where
@@ -232,6 +236,10 @@ pub struct W<REG: RegisterSpec + ?Sized> {
232236

233237
impl<REG: RegisterSpec> W<REG> {
234238
/// Writes raw bits to the register.
239+
///
240+
/// # Safety
241+
///
242+
/// Read datasheet or reference manual to find what values are allowed to pass.
235243
#[inline(always)]
236244
pub unsafe fn bits(&mut self, bits: REG::Ux) -> &mut Self {
237245
self.bits = bits;

src/generate/interrupt.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use std::collections::HashMap;
22
use std::fmt::Write;
33

44
use crate::svd::Peripheral;
5-
use cast::u64;
65
use proc_macro2::{Span, TokenStream};
76
use quote::quote;
87

@@ -68,7 +67,7 @@ pub fn render(
6867
.unwrap_or_else(|| interrupt.0.name.clone())
6968
);
7069

71-
let value = util::unsuffixed(u64(interrupt.0.value));
70+
let value = util::unsuffixed(interrupt.0.value.into());
7271

7372
let mut feature_attribute_flag = false;
7473
let mut feature_attribute = TokenStream::new();
@@ -112,7 +111,7 @@ pub fn render(
112111
names_cfg_attr.push(feature_attribute);
113112
}
114113

115-
let n = util::unsuffixed(u64(pos));
114+
let n = util::unsuffixed(pos.into());
116115
match target {
117116
Target::CortexM => {
118117
for name in &names {

src/generate/register.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use crate::svd::{
22
Access, BitRange, EnumeratedValues, Field, ModifiedWriteValues, ReadAction, Register,
33
RegisterProperties, Usage, WriteConstraint,
44
};
5-
use cast::u64;
65
use core::u64;
76
use log::warn;
87
use proc_macro2::{Ident, Punct, Spacing, Span, TokenStream};
@@ -1006,9 +1005,9 @@ impl Variant {
10061005
// generate code for them
10071006
.filter(|field| field.name.to_lowercase() != "reserved" && field.is_default == None)
10081007
.map(|ev| {
1009-
let value = u64(ev.value.ok_or_else(|| {
1010-
anyhow!("EnumeratedValue {} has no `<value>` field", ev.name)
1011-
})?);
1008+
let value = ev
1009+
.value
1010+
.ok_or_else(|| anyhow!("EnumeratedValue {} has no `<value>` field", ev.name))?;
10121011

10131012
let nksc = ev.name.to_sanitized_not_keyword_snake_case();
10141013
let sc = util::sanitize_keyword(nksc.clone());
@@ -1052,7 +1051,7 @@ fn add_with_no_variants(
10521051

10531052
mod_items.extend(quote! {
10541053
#[doc = #desc]
1055-
#[derive(Clone, Copy, Debug, PartialEq)]
1054+
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
10561055
pub struct #pc(#fty);
10571056
impl From<#pc> for #fty {
10581057
#[inline(always)]
@@ -1098,7 +1097,7 @@ fn add_from_variants(
10981097

10991098
mod_items.extend(quote! {
11001099
#[doc = #desc]
1101-
#[derive(Clone, Copy, Debug, PartialEq)]
1100+
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
11021101
#repr
11031102
pub enum #pc {
11041103
#vars

0 commit comments

Comments
 (0)