Skip to content

Commit 0bc1480

Browse files
bors[bot]James Munnsburrbull
committed
Merge #317
317: Use svd-parser 0.7 and Edition 2018 r=therealprof a=burrbull Use 2 last commits from #256 : b6d2c9a and b7965db cc @therealprof Co-authored-by: James Munns <[email protected]> Co-authored-by: Andrey Zgarbul <[email protected]>
2 parents ba3e22d + e74ecbd commit 0bc1480

File tree

6 files changed

+81
-95
lines changed

6 files changed

+81
-95
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,5 @@ error-chain = "0.11.0"
3636
inflections = "1.1.0"
3737
log = { version = "~0.4", features = ["std"] }
3838
quote = "0.3.15"
39-
svd-parser = "0.6"
39+
svd-parser = "0.7"
4040
syn = "0.11.11"

src/generate/peripheral.rs

Lines changed: 39 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
use std::borrow::Cow;
22
use std::cmp::Ordering;
33

4-
use either::Either;
54
use quote::{ToTokens, Tokens};
6-
use crate::svd::{Cluster, ClusterInfo, Defaults, Peripheral, Register};
5+
use crate::svd::{Cluster, ClusterInfo, Defaults, Peripheral, Register, RegisterCluster};
76
use syn::{self, Ident};
87
use log::warn;
98

@@ -131,9 +130,9 @@ impl Region {
131130
let mut idents: Vec<_> = self
132131
.fields
133132
.iter()
134-
.filter_map(|f| match f.field.ident {
133+
.filter_map(|f| match &f.field.ident {
135134
None => None,
136-
Some(ref ident) => Some(ident.as_ref()),
135+
Some(ident) => Some(ident.as_ref()),
137136
})
138137
.collect();
139138
if idents.is_empty() {
@@ -172,9 +171,9 @@ impl Region {
172171
let idents: Vec<_> = self
173172
.fields
174173
.iter()
175-
.filter_map(|f| match f.field.ident {
174+
.filter_map(|f| match &f.field.ident {
176175
None => None,
177-
Some(ref ident) => Some(ident.as_ref()),
176+
Some(ident) => Some(ident.as_ref()),
178177
})
179178
.collect();
180179

@@ -356,7 +355,7 @@ impl FieldRegions {
356355
}
357356

358357
fn register_or_cluster_block(
359-
ercs: &[Either<Register, Cluster>],
358+
ercs: &[RegisterCluster],
360359
defs: &Defaults,
361360
name: Option<&str>,
362361
nightly: bool,
@@ -369,7 +368,7 @@ fn register_or_cluster_block(
369368
}
370369

371370
fn register_or_cluster_block_stable(
372-
ercs: &[Either<Register, Cluster>],
371+
ercs: &[RegisterCluster],
373372
defs: &Defaults,
374373
name: Option<&str>,
375374
) -> Result<Tokens> {
@@ -433,7 +432,7 @@ fn register_or_cluster_block_stable(
433432
}
434433

435434
fn register_or_cluster_block_nightly(
436-
ercs: &[Either<Register, Cluster>],
435+
ercs: &[RegisterCluster],
437436
defs: &Defaults,
438437
name: Option<&str>,
439438
) -> Result<Tokens> {
@@ -552,16 +551,16 @@ fn register_or_cluster_block_nightly(
552551
/// Expand a list of parsed `Register`s or `Cluster`s, and render them to
553552
/// `RegisterBlockField`s containing `Field`s.
554553
fn expand(
555-
ercs: &[Either<Register, Cluster>],
554+
ercs: &[RegisterCluster],
556555
defs: &Defaults,
557556
name: Option<&str>,
558557
) -> Result<Vec<RegisterBlockField>> {
559558
let mut ercs_expanded = vec![];
560559

561560
for erc in ercs {
562-
ercs_expanded.extend(match erc {
563-
Either::Left(ref register) => expand_register(register, defs, name)?,
564-
Either::Right(ref cluster) => expand_cluster(cluster, defs)?,
561+
ercs_expanded.extend(match &erc {
562+
RegisterCluster::Register(register) => expand_register(register, defs, name)?,
563+
RegisterCluster::Cluster(cluster) => expand_cluster(cluster, defs)?,
565564
});
566565
}
567566

@@ -576,16 +575,16 @@ fn cluster_size_in_bits(info: &ClusterInfo, defs: &Defaults) -> Result<u32> {
576575
let mut size = 0;
577576

578577
for c in &info.children {
579-
let end = match *c {
580-
Either::Left(ref reg) => {
578+
let end = match c {
579+
RegisterCluster::Register(reg) => {
581580
let reg_size: u32 = expand_register(reg, defs, None)?
582581
.iter()
583582
.map(|rbf| rbf.size)
584583
.sum();
585584

586585
(reg.address_offset * BITS_PER_BYTE) + reg_size
587586
}
588-
Either::Right(ref clust) => {
587+
RegisterCluster::Cluster(clust) => {
589588
(clust.address_offset * BITS_PER_BYTE) + cluster_size_in_bits(clust, defs)?
590589
}
591590
};
@@ -605,14 +604,14 @@ fn expand_cluster(cluster: &Cluster, defs: &Defaults) -> Result<Vec<RegisterBloc
605604
.or_else(|_e| cluster_size_in_bits(cluster, defs))
606605
.chain_err(|| format!("Cluster {} has no determinable `size` field", cluster.name))?;
607606

608-
match *cluster {
609-
Cluster::Single(ref info) => cluster_expanded.push(RegisterBlockField {
607+
match cluster {
608+
Cluster::Single(info) => cluster_expanded.push(RegisterBlockField {
610609
field: convert_svd_cluster(cluster),
611610
description: info.description.clone(),
612611
offset: info.address_offset,
613612
size: cluster_size,
614613
}),
615-
Cluster::Array(ref info, ref array_info) => {
614+
Cluster::Array(info, array_info) => {
616615
let sequential_addresses = cluster_size == array_info.dim_increment * BITS_PER_BYTE;
617616

618617
// if dimIndex exists, test if it is a sequence of numbers from 0 to dim
@@ -662,14 +661,14 @@ fn expand_register(
662661
.or(defs.size)
663662
.ok_or_else(|| format!("Register {} has no `size` field", register.name))?;
664663

665-
match *register {
666-
Register::Single(ref info) => register_expanded.push(RegisterBlockField {
664+
match register {
665+
Register::Single(info) => register_expanded.push(RegisterBlockField {
667666
field: convert_svd_register(register, name),
668-
description: info.description.clone(),
667+
description: info.description.clone().unwrap(),
669668
offset: info.address_offset,
670669
size: register_size,
671670
}),
672-
Register::Array(ref info, ref array_info) => {
671+
Register::Array(info, array_info) => {
673672
let sequential_addresses = register_size == array_info.dim_increment * BITS_PER_BYTE;
674673

675674
// if dimIndex exists, test if it is a sequence of numbers from 0 to dim
@@ -685,15 +684,15 @@ fn expand_register(
685684
if array_convertible {
686685
register_expanded.push(RegisterBlockField {
687686
field: convert_svd_register(&register, name),
688-
description: info.description.clone(),
687+
description: info.description.clone().unwrap(),
689688
offset: info.address_offset,
690689
size: register_size * array_info.dim,
691690
});
692691
} else {
693692
for (field_num, field) in expand_svd_register(register, name).iter().enumerate() {
694693
register_expanded.push(RegisterBlockField {
695694
field: field.clone(),
696-
description: info.description.clone(),
695+
description: info.description.clone().unwrap(),
697696
offset: info.address_offset + field_num as u32 * array_info.dim_increment,
698697
size: register_size,
699698
});
@@ -719,9 +718,9 @@ fn cluster_block(
719718
let description = util::escape_brackets(util::respace(&c.description).as_ref());
720719

721720
// Generate the register block.
722-
let mod_name = match *c {
723-
Cluster::Single(ref info) => &info.name,
724-
Cluster::Array(ref info, ref _ai) => &info.name,
721+
let mod_name = match c {
722+
Cluster::Single(info) => &info.name,
723+
Cluster::Array(info, _ai) => &info.name,
725724
}
726725
.replace("[%s]", "")
727726
.replace("%s", "");
@@ -786,9 +785,9 @@ fn expand_svd_register(register: &Register, name: Option<&str>) -> Vec<syn::Fiel
786785

787786
let mut out = vec![];
788787

789-
match *register {
790-
Register::Single(ref _info) => out.push(convert_svd_register(register, name)),
791-
Register::Array(ref info, ref array_info) => {
788+
match register {
789+
Register::Single(_info) => out.push(convert_svd_register(register, name)),
790+
Register::Array(info, array_info) => {
792791
let has_brackets = info.name.contains("[%s]");
793792

794793
let indices = array_info
@@ -857,14 +856,14 @@ fn convert_svd_register(register: &Register, name: Option<&str>) -> syn::Field {
857856
)
858857
};
859858

860-
match *register {
861-
Register::Single(ref info) => syn::Field {
859+
match register {
860+
Register::Single(info) => syn::Field {
862861
ident: Some(Ident::new(info.name.to_sanitized_snake_case())),
863862
vis: syn::Visibility::Public,
864863
attrs: vec![],
865864
ty: name_to_ty(&info.name, name),
866865
},
867-
Register::Array(ref info, ref array_info) => {
866+
Register::Array(info, array_info) => {
868867
let has_brackets = info.name.contains("[%s]");
869868

870869
let nb_name = if has_brackets {
@@ -911,9 +910,9 @@ fn expand_svd_cluster(cluster: &Cluster) -> Vec<syn::Field> {
911910

912911
let mut out = vec![];
913912

914-
match *cluster {
915-
Cluster::Single(ref _info) => out.push(convert_svd_cluster(cluster)),
916-
Cluster::Array(ref info, ref array_info) => {
913+
match &cluster {
914+
Cluster::Single(_info) => out.push(convert_svd_cluster(cluster)),
915+
Cluster::Array(info, array_info) => {
917916
let has_brackets = info.name.contains("[%s]");
918917

919918
let indices = array_info
@@ -971,14 +970,14 @@ fn convert_svd_cluster(cluster: &Cluster) -> syn::Field {
971970
)
972971
};
973972

974-
match *cluster {
975-
Cluster::Single(ref info) => syn::Field {
973+
match cluster {
974+
Cluster::Single(info) => syn::Field {
976975
ident: Some(Ident::new(info.name.to_sanitized_snake_case())),
977976
vis: syn::Visibility::Public,
978977
attrs: vec![],
979978
ty: name_to_ty(&info.name),
980979
},
981-
Cluster::Array(ref info, ref array_info) => {
980+
Cluster::Array(info, array_info) => {
982981
let has_brackets = info.name.contains("[%s]");
983982

984983
let name = if has_brackets {

src/generate/register.rs

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
use cast::u64;
2-
use either::Either;
32
use quote::Tokens;
4-
use crate::svd::{Access, BitRange, Cluster, Defaults, EnumeratedValues, Field, Peripheral, Register,
5-
Usage, WriteConstraint};
3+
use crate::svd::{Access, BitRange, Defaults, EnumeratedValues, Field, Peripheral, Register,
4+
RegisterCluster, Usage, WriteConstraint};
65
use syn::Ident;
76

87
use crate::errors::*;
@@ -31,7 +30,7 @@ pub fn render(
3130
rsize.next_power_of_two()
3231
};
3332
let rty = rsize.to_ty()?;
34-
let description = util::escape_brackets(util::respace(&register.description).as_ref());
33+
let description = util::escape_brackets(util::respace(&register.description.clone().unwrap()).as_ref());
3534

3635
let unsafety = unsafety(register.write_constraint.as_ref(), rsize);
3736

@@ -222,7 +221,8 @@ pub fn fields(
222221

223222
impl<'a> F<'a> {
224223
fn from(f: &'a Field) -> Result<Self> {
225-
let BitRange { offset, width } = f.bit_range;
224+
// TODO(AJM) - do we need to do anything with this range type?
225+
let BitRange { offset, width, range_type: _ } = f.bit_range;
226226
let sc = f.name.to_sanitized_snake_case();
227227
let pc = f.name.to_sanitized_upper_case();
228228
let pc_r = Ident::new(&*format!("{}R", pc));
@@ -239,7 +239,7 @@ pub fn fields(
239239
} else {
240240
format!("Bits {}:{}", offset, offset + width - 1)
241241
};
242-
if let Some(ref d) = f.description {
242+
if let Some(d) = &f.description {
243243
description.push_str(" - ");
244244
description.push_str(&*util::respace(&util::escape_brackets(d)));
245245
}
@@ -330,14 +330,12 @@ pub fn fields(
330330
.collect::<Result<Vec<_>>>()?;
331331

332332
let pc_r = &f.pc_r;
333-
if let Some(ref base) = base {
333+
if let Some(base) = &base {
334334
let pc = base.field.to_sanitized_upper_case();
335335
let base_pc_r = Ident::new(&*format!("{}R", pc));
336336
let desc = format!("Possible values of the field `{}`", f.name,);
337337

338-
if let (Some(ref peripheral), Some(ref register)) =
339-
(base.peripheral, base.register)
340-
{
338+
if let (Some(peripheral), Some(register)) = (&base.peripheral, &base.register) {
341339
let pmod_ = peripheral.to_sanitized_snake_case();
342340
let rmod_ = register.to_sanitized_snake_case();
343341
let pmod_ = Ident::new(&*pmod_);
@@ -347,7 +345,7 @@ pub fn fields(
347345
#[doc = #desc]
348346
pub type #pc_r = ::#pmod_::#rmod_::#base_pc_r;
349347
});
350-
} else if let Some(ref register) = base.register {
348+
} else if let Some(register) = &base.register {
351349
let mod_ = register.to_sanitized_snake_case();
352350
let mod_ = Ident::new(&*mod_);
353351

@@ -596,9 +594,7 @@ pub fn fields(
596594
let pc = base.field.to_sanitized_upper_case();
597595
let base_pc_w = Ident::new(&*format!("{}W", pc));
598596

599-
if let (Some(ref peripheral), Some(ref register)) =
600-
(base.peripheral, base.register)
601-
{
597+
if let (Some(peripheral), Some(register)) = (&base.peripheral, &base.register) {
602598
let pmod_ = peripheral.to_sanitized_snake_case();
603599
let rmod_ = register.to_sanitized_snake_case();
604600
let pmod_ = Ident::new(&*pmod_);
@@ -613,7 +609,7 @@ pub fn fields(
613609
quote! {
614610
::#pmod_::#rmod_::#base_pc_w
615611
}
616-
} else if let Some(ref register) = base.register {
612+
} else if let Some(register) = &base.register {
617613
let mod_ = register.to_sanitized_snake_case();
618614
let mod_ = Ident::new(&*mod_);
619615

@@ -791,8 +787,8 @@ pub fn fields(
791787
}
792788

793789
fn unsafety(write_constraint: Option<&WriteConstraint>, width: u32) -> Option<Ident> {
794-
match write_constraint {
795-
Some(&WriteConstraint::Range(ref range))
790+
match &write_constraint {
791+
Some(&WriteConstraint::Range(range))
796792
if u64::from(range.min) == 0 && u64::from(range.max) == (1u64 << width) - 1 =>
797793
{
798794
// the SVD has acknowledged that it's safe to write
@@ -827,7 +823,7 @@ fn lookup<'a>(
827823
) -> Result<Option<(&'a EnumeratedValues, Option<Base<'a>>)>> {
828824
let evs = evs.iter()
829825
.map(|evs| {
830-
if let Some(ref base) = evs.derived_from {
826+
if let Some(base) = &evs.derived_from {
831827
let mut parts = base.split('.');
832828

833829
match (parts.next(), parts.next(), parts.next(), parts.next()) {
@@ -865,7 +861,7 @@ fn lookup<'a>(
865861
})
866862
.collect::<Result<Vec<_>>>()?;
867863

868-
for &(ref evs, ref base) in evs.iter() {
864+
for (evs, base) in evs.iter() {
869865
if evs.usage == Some(usage) {
870866
return Ok(Some((*evs, base.clone())));
871867
}
@@ -979,7 +975,7 @@ fn lookup_in_register<'r>(
979975
} else {
980976
let fields = matches
981977
.iter()
982-
.map(|&(ref f, _)| &f.name)
978+
.map(|(f, _)| &f.name)
983979
.collect::<Vec<_>>();
984980
Err(format!(
985981
"Fields {:?} have an \
@@ -1014,12 +1010,12 @@ fn lookup_in_peripherals<'p>(
10141010

10151011
fn periph_all_registers<'a>(p: &'a Peripheral) -> Vec<&'a Register> {
10161012
let mut par: Vec<&Register> = Vec::new();
1017-
let mut rem: Vec<&Either<Register, Cluster>> = Vec::new();
1013+
let mut rem: Vec<&RegisterCluster> = Vec::new();
10181014
if p.registers.is_none() {
10191015
return par;
10201016
}
10211017

1022-
if let Some(ref regs) = p.registers {
1018+
if let Some(regs) = &p.registers {
10231019
for r in regs.iter() {
10241020
rem.push(r);
10251021
}
@@ -1032,13 +1028,15 @@ fn periph_all_registers<'a>(p: &'a Peripheral) -> Vec<&'a Register> {
10321028
}
10331029

10341030
let b = b.unwrap();
1035-
match *b {
1036-
Either::Left(ref reg) => {
1031+
match b {
1032+
RegisterCluster::Register(reg) => {
10371033
par.push(reg);
10381034
}
1039-
Either::Right(ref cluster) => for c in cluster.children.iter() {
1040-
rem.push(c);
1041-
},
1035+
RegisterCluster::Cluster(cluster) => {
1036+
for c in cluster.children.iter() {
1037+
rem.push(c);
1038+
}
1039+
}
10421040
}
10431041
}
10441042
par

0 commit comments

Comments
 (0)