Skip to content

Commit b6d2c9a

Browse files
author
James Munns
committed
Compiles with newest svd master
1 parent 128a308 commit b6d2c9a

File tree

5 files changed

+35
-32
lines changed

5 files changed

+35
-32
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,5 @@ either = "1.0.3"
3333
error-chain = "0.11.0"
3434
inflections = "1.1.0"
3535
quote = "0.3.15"
36-
svd-parser = { git = "https://github.com/japaric/svd" }
36+
svd-parser = { git = "https://github.com/japaric/svd", rev = "6aa4fdc138b91d7b9d2f0bd42fd1c85cb4fb5df9" }
3737
syn = "0.11.11"

src/generate/peripheral.rs

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@ use std::borrow::Cow;
22
use std::cmp::Ordering;
33
use std::collections::HashMap;
44

5-
use either::Either;
65
use quote::{ToTokens, Tokens};
7-
use svd::{Cluster, ClusterInfo, Defaults, Peripheral, Register, RegisterInfo};
6+
use svd::{Cluster, ClusterInfo, Defaults, Peripheral, Register, RegisterCluster, RegisterInfo};
87
use syn::{self, Ident};
98

109
use errors::*;
@@ -118,7 +117,7 @@ pub fn render(
118117
}
119118

120119
// Build up an alternate erc list by expanding any derived registers
121-
let mut alt_erc :Vec<Either<Register,Cluster>> = registers.iter().filter_map(|r| {
120+
let mut alt_erc :Vec<RegisterCluster> = registers.iter().filter_map(|r| {
122121
match r.derived_from {
123122
Some(ref derived) => {
124123
let ancestor = match reg_map.get(derived) {
@@ -131,27 +130,27 @@ pub fn render(
131130

132131
let d = match **ancestor {
133132
Register::Array(ref info, ref array_info) => {
134-
Some(Either::Left(Register::Array(derive_reg_info(*r, info), array_info.clone())))
133+
Some(Register::Array(derive_reg_info(*r, info), array_info.clone()).into())
135134
}
136135
Register::Single(ref info) => {
137-
Some(Either::Left(Register::Single(derive_reg_info(*r, info))))
136+
Some(Register::Single(derive_reg_info(*r, info)).into())
138137
}
139138
};
140139

141140
d
142141
}
143-
None => Some(Either::Left((*r).clone())),
142+
None => Some((*r).clone().into()),
144143
}
145144
}).collect();
146145

147146
// Now add the clusters to our alternate erc list
148147
let clusters = util::only_clusters(ercs);
149148
for cluster in &clusters {
150-
alt_erc.push(Either::Right((*cluster).clone()));
149+
alt_erc.push((*cluster).clone().into());
151150
}
152151

153152
// And revise registers, clusters and ercs to refer to our expanded versions
154-
let registers: &[&Register] = &util::only_registers(&alt_erc)[..];
153+
let registers: &[&Register] = &util::only_registers(alt_erc.as_slice())[..];
155154
let clusters = util::only_clusters(ercs);
156155
let ercs = &alt_erc;
157156

@@ -164,7 +163,7 @@ pub fn render(
164163

165164
// Push any register or cluster blocks into the output
166165
let mut mod_items = vec![];
167-
mod_items.push(register_or_cluster_block(ercs, defaults, None, nightly)?);
166+
mod_items.push(register_or_cluster_block(ercs.as_slice(), defaults, None, nightly)?);
168167

169168
// Push all cluster related information into the peripheral module
170169
for c in &clusters {
@@ -433,7 +432,7 @@ impl FieldRegions {
433432
}
434433

435434
fn register_or_cluster_block(
436-
ercs: &[Either<Register, Cluster>],
435+
ercs: &[RegisterCluster],
437436
defs: &Defaults,
438437
name: Option<&str>,
439438
nightly: bool,
@@ -446,7 +445,7 @@ fn register_or_cluster_block(
446445
}
447446

448447
fn register_or_cluster_block_stable(
449-
ercs: &[Either<Register, Cluster>],
448+
ercs: &[RegisterCluster],
450449
defs: &Defaults,
451450
name: Option<&str>,
452451
) -> Result<Tokens> {
@@ -511,7 +510,7 @@ fn register_or_cluster_block_stable(
511510
}
512511

513512
fn register_or_cluster_block_nightly(
514-
ercs: &[Either<Register, Cluster>],
513+
ercs: &[RegisterCluster],
515514
defs: &Defaults,
516515
name: Option<&str>,
517516
) -> Result<Tokens> {
@@ -631,16 +630,16 @@ fn register_or_cluster_block_nightly(
631630
/// Expand a list of parsed `Register`s or `Cluster`s, and render them to
632631
/// `RegisterBlockField`s containing `Field`s.
633632
fn expand(
634-
ercs: &[Either<Register, Cluster>],
633+
ercs: &[RegisterCluster],
635634
defs: &Defaults,
636635
name: Option<&str>,
637636
) -> Result<Vec<RegisterBlockField>> {
638637
let mut ercs_expanded = vec![];
639638

640639
for erc in ercs {
641640
ercs_expanded.extend(match erc {
642-
Either::Left(ref register) => expand_register(register, defs, name)?,
643-
Either::Right(ref cluster) => expand_cluster(cluster, defs)?,
641+
RegisterCluster::Register(ref register) => expand_register(register, defs, name)?,
642+
RegisterCluster::Cluster(ref cluster) => expand_cluster(cluster, defs)?,
644643
});
645644
}
646645

@@ -656,15 +655,15 @@ fn cluster_size_in_bits(info: &ClusterInfo, defs: &Defaults) -> Result<u32> {
656655

657656
for c in &info.children {
658657
let end = match *c {
659-
Either::Left(ref reg) => {
658+
RegisterCluster::Register(ref reg) => {
660659
let reg_size: u32 = expand_register(reg, defs, None)?
661660
.iter()
662661
.map(|rbf| rbf.size)
663662
.sum();
664663

665664
(reg.address_offset * BITS_PER_BYTE) + reg_size
666665
}
667-
Either::Right(ref clust) => {
666+
RegisterCluster::Cluster(ref clust) => {
668667
(clust.address_offset * BITS_PER_BYTE) + cluster_size_in_bits(clust, defs)?
669668
}
670669
};

src/generate/register.rs

Lines changed: 7 additions & 7 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 svd::{Access, BitRange, Cluster, Defaults, EnumeratedValues, Field, Peripheral, Register,
5-
Usage, WriteConstraint};
3+
use svd::{Access, BitRange, Defaults, EnumeratedValues, Field, Peripheral, Register,
4+
RegisterCluster, Usage, WriteConstraint};
65
use syn::Ident;
76

87
use errors::*;
@@ -230,7 +229,8 @@ pub fn fields(
230229

231230
impl<'a> F<'a> {
232231
fn from(f: &'a Field) -> Result<Self> {
233-
let BitRange { offset, width } = f.bit_range;
232+
// TODO(AJM) - do we need to do anything with this range type?
233+
let BitRange { offset, width, range_type: _ } = f.bit_range;
234234
let sc = f.name.to_sanitized_snake_case();
235235
let pc = f.name.to_sanitized_upper_case();
236236
let pc_r = Ident::new(&*format!("{}R", pc));
@@ -1027,7 +1027,7 @@ fn lookup_in_peripherals<'p>(
10271027

10281028
fn periph_all_registers<'a>(p: &'a Peripheral) -> Vec<&'a Register> {
10291029
let mut par: Vec<&Register> = Vec::new();
1030-
let mut rem: Vec<&Either<Register, Cluster>> = Vec::new();
1030+
let mut rem: Vec<&RegisterCluster> = Vec::new();
10311031
if p.registers.is_none() {
10321032
return par;
10331033
}
@@ -1046,10 +1046,10 @@ fn periph_all_registers<'a>(p: &'a Peripheral) -> Vec<&'a Register> {
10461046

10471047
let b = b.unwrap();
10481048
match *b {
1049-
Either::Left(ref reg) => {
1049+
RegisterCluster::Register(ref reg) => {
10501050
par.push(reg);
10511051
}
1052-
Either::Right(ref cluster) => for c in cluster.children.iter() {
1052+
RegisterCluster::Cluster(ref cluster) => for c in cluster.children.iter() {
10531053
rem.push(c);
10541054
},
10551055
}

src/main.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,12 @@ fn run() -> Result<()> {
101101
let nightly = matches.is_present("nightly_features");
102102

103103
let mut device_x = String::new();
104-
let items = generate::device::render(&device, &target, nightly, &mut device_x)?;
104+
let items = generate::device::render(
105+
&device.expect("//TODO(AJM)"),
106+
&target,
107+
nightly,
108+
&mut device_x
109+
)?;
105110

106111
if target == Target::CortexM {
107112
writeln!(File::create("lib.rs").unwrap(), "{}", quote!(#(#items)*)).unwrap();

src/util.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
use std::borrow::Cow;
22

33
use inflections::Inflect;
4-
use svd::{Access, Cluster, Register};
4+
use svd::{Access, Cluster, Register, RegisterCluster};
55
use syn::Ident;
66
use quote::Tokens;
7-
use either::Either;
87

98
use errors::*;
109

@@ -271,21 +270,21 @@ impl U32Ext for u32 {
271270
}
272271

273272
/// Return only the clusters from the slice of either register or clusters.
274-
pub fn only_clusters(ercs: &[Either<Register, Cluster>]) -> Vec<&Cluster> {
273+
pub fn only_clusters(ercs: &[RegisterCluster]) -> Vec<&Cluster> {
275274
let clusters: Vec<&Cluster> = ercs.iter()
276275
.filter_map(|x| match *x {
277-
Either::Right(ref x) => Some(x),
276+
RegisterCluster::Cluster(ref x) => Some(x),
278277
_ => None,
279278
})
280279
.collect();
281280
clusters
282281
}
283282

284283
/// Return only the registers the given slice of either register or clusters.
285-
pub fn only_registers(ercs: &[Either<Register, Cluster>]) -> Vec<&Register> {
284+
pub fn only_registers(ercs: &[RegisterCluster]) -> Vec<&Register> {
286285
let registers: Vec<&Register> = ercs.iter()
287286
.filter_map(|x| match *x {
288-
Either::Left(ref x) => Some(x),
287+
RegisterCluster::Register(ref x) => Some(x),
289288
_ => None,
290289
})
291290
.collect();

0 commit comments

Comments
 (0)