diff --git a/.gitignore b/.gitignore index 2448a645..c626e048 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,3 @@ [._]*.sw[a-p] Cargo.lock target -tests/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 68d726e8..a3856043 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Fix: produce error on 0-width fields - Fix: error instead of panic when an array/cluster name is missing the `%s` placeholder - [breaking-change] Add support for 64 addresses, register values, enum values and writeConstraints +- [breaking-change] Remove unproven flag ## [v0.9.0] - 2019-11-17 diff --git a/Cargo.toml b/Cargo.toml index 1f0e2bbb..04ca5c24 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,14 +15,13 @@ readme = "README.md" [features] derive-from = [] -unproven = [] [dependencies] xmltree = "0.8" anyhow = "1.0.19" thiserror = "1.0.5" -rayon = "1.3.0" -once_cell = "1.3.1" +rayon = "1.5.0" +once_cell = "1.5.2" regex = "1" [dependencies.serde] diff --git a/cmsis-svd b/cmsis-svd index 25cbf47c..e5db2387 160000 --- a/cmsis-svd +++ b/cmsis-svd @@ -1 +1 @@ -Subproject commit 25cbf47cc88bd3a5491dd42cf1edbe628e2a5ac8 +Subproject commit e5db2387d9c48359c9c5229a5bb436cf2ed5381f diff --git a/src/lib.rs b/src/lib.rs index d56d48f1..545a1785 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -24,9 +24,7 @@ #![deny(warnings)] -#[cfg(feature = "unproven")] use std::collections::HashMap; - use xmltree::Element; // ElementExt extends XML elements with useful methods @@ -41,9 +39,7 @@ use anyhow::Result; pub mod parse; use parse::Parse; // Encode defines encoding interfaces -#[cfg(feature = "unproven")] pub mod encode; -#[cfg(feature = "unproven")] use encode::Encode; // Types defines simple types and parse/encode implementations pub mod types; @@ -61,7 +57,6 @@ pub fn parse(xml: &str) -> Result { } /// Encodes a device object to an SVD (XML) string -#[cfg(feature = "unproven")] pub fn encode(d: &Device) -> Result { let root = d.encode()?; let mut wr = Vec::new(); @@ -79,7 +74,6 @@ fn trim_utf8_bom(s: &str) -> &str { } /// Helper to create new base xml elements -#[cfg(feature = "unproven")] pub(crate) fn new_element(name: &str, text: Option) -> Element { Element { prefix: None, @@ -96,7 +90,6 @@ pub(crate) fn new_element(name: &str, text: Option) -> Element { /// Takes an array of (item, xml) pairs where the item implements /// Parse and Encode and tests object encoding and decoding #[cfg(test)] -#[cfg(feature = "unproven")] pub fn run_test< T: Parse + Encode diff --git a/src/svd/access.rs b/src/svd/access.rs index 98b8f3b8..e91d05f8 100644 --- a/src/svd/access.rs +++ b/src/svd/access.rs @@ -1,10 +1,8 @@ use xmltree::Element; use crate::elementext::ElementExt; -#[cfg(feature = "unproven")] use crate::encode::Encode; use crate::error::*; -#[cfg(feature = "unproven")] use crate::new_element; use crate::types::Parse; @@ -36,7 +34,6 @@ impl Parse for Access { } } -#[cfg(feature = "unproven")] impl Encode for Access { type Error = anyhow::Error; @@ -54,7 +51,6 @@ impl Encode for Access { } #[cfg(test)] -#[cfg(feature = "unproven")] mod tests { use super::*; use crate::run_test; diff --git a/src/svd/addressblock.rs b/src/svd/addressblock.rs index e163fbfe..961d4aec 100644 --- a/src/svd/addressblock.rs +++ b/src/svd/addressblock.rs @@ -1,4 +1,3 @@ -#[cfg(feature = "unproven")] use std::collections::HashMap; use crate::elementext::ElementExt; @@ -6,10 +5,8 @@ use xmltree::Element; use crate::types::Parse; -#[cfg(feature = "unproven")] use crate::encode::Encode; use crate::error::*; -#[cfg(feature = "unproven")] use crate::new_element; #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] @@ -33,7 +30,6 @@ impl Parse for AddressBlock { } } -#[cfg(feature = "unproven")] impl Encode for AddressBlock { type Error = anyhow::Error; @@ -55,7 +51,6 @@ impl Encode for AddressBlock { } #[cfg(test)] -#[cfg(feature = "unproven")] mod tests { use super::*; use crate::run_test; diff --git a/src/svd/bitrange.rs b/src/svd/bitrange.rs index cac66e26..48b1b989 100644 --- a/src/svd/bitrange.rs +++ b/src/svd/bitrange.rs @@ -1,7 +1,6 @@ use xmltree::Element; use crate::error::*; -#[cfg(feature = "unproven")] use crate::new_element; use crate::types::Parse; @@ -120,7 +119,7 @@ impl Parse for BitRange { }) } } -#[cfg(feature = "unproven")] + impl BitRange { // TODO: Encode method differs from Encode trait as it acts on a set of possible children, create an interface or decide how to better do this pub fn encode(&self) -> Result> { @@ -142,7 +141,6 @@ impl BitRange { } #[cfg(test)] -#[cfg(feature = "unproven")] mod tests { use super::*; diff --git a/src/svd/cluster.rs b/src/svd/cluster.rs index 5f83cb31..b0e71b00 100644 --- a/src/svd/cluster.rs +++ b/src/svd/cluster.rs @@ -3,9 +3,7 @@ use xmltree::Element; use crate::types::Parse; -#[cfg(feature = "unproven")] use crate::elementext::ElementExt; -#[cfg(feature = "unproven")] use crate::encode::Encode; use crate::error::*; use crate::svd::{clusterinfo::ClusterInfo, dimelement::DimElement}; @@ -55,7 +53,6 @@ impl Parse for Cluster { } } -#[cfg(feature = "unproven")] impl Encode for Cluster { type Error = anyhow::Error; diff --git a/src/svd/clusterinfo.rs b/src/svd/clusterinfo.rs index 42f03c03..2c64356a 100644 --- a/src/svd/clusterinfo.rs +++ b/src/svd/clusterinfo.rs @@ -3,9 +3,7 @@ use xmltree::Element; use crate::types::Parse; -#[cfg(feature = "unproven")] use crate::encode::{Encode, EncodeChildren}; -#[cfg(feature = "unproven")] use crate::new_element; use crate::error::*; @@ -153,7 +151,6 @@ impl ClusterInfo { } } -#[cfg(feature = "unproven")] impl Encode for ClusterInfo { type Error = anyhow::Error; diff --git a/src/svd/cpu.rs b/src/svd/cpu.rs index 0e6a3cc2..fc0698a0 100644 --- a/src/svd/cpu.rs +++ b/src/svd/cpu.rs @@ -1,13 +1,11 @@ -#[cfg(feature = "unproven")] use std::collections::HashMap; use xmltree::Element; use crate::elementext::ElementExt; -#[cfg(feature = "unproven")] use crate::encode::Encode; use crate::error::*; -#[cfg(feature = "unproven")] + use crate::new_element; use crate::svd::endian::Endian; use crate::types::Parse; @@ -137,7 +135,6 @@ impl Parse for Cpu { } } -#[cfg(feature = "unproven")] impl Encode for Cpu { type Error = anyhow::Error; @@ -172,7 +169,6 @@ impl Cpu { } #[cfg(test)] -#[cfg(feature = "unproven")] mod tests { use super::*; use crate::run_test; diff --git a/src/svd/device.rs b/src/svd/device.rs index da6f1c00..ee68e6d6 100644 --- a/src/svd/device.rs +++ b/src/svd/device.rs @@ -1,5 +1,4 @@ use crate::elementext::ElementExt; -#[cfg(feature = "unproven")] use std::collections::HashMap; use xmltree::Element; @@ -8,10 +7,9 @@ use rayon::prelude::*; use crate::parse; use crate::types::Parse; -#[cfg(feature = "unproven")] use crate::encode::{Encode, EncodeChildren}; use crate::error::*; -#[cfg(feature = "unproven")] + use crate::new_element; use crate::svd::{cpu::Cpu, peripheral::Peripheral, registerproperties::RegisterProperties}; @@ -180,7 +178,6 @@ impl Device { } } -#[cfg(feature = "unproven")] impl Encode for Device { type Error = anyhow::Error; diff --git a/src/svd/dimelement.rs b/src/svd/dimelement.rs index a4530f4d..265d0f04 100644 --- a/src/svd/dimelement.rs +++ b/src/svd/dimelement.rs @@ -3,9 +3,7 @@ use xmltree::Element; use crate::types::{parse_optional, DimIndex, Parse}; use crate::elementext::ElementExt; -#[cfg(feature = "unproven")] use crate::encode::Encode; -#[cfg(feature = "unproven")] use crate::new_element; use crate::error::*; @@ -77,7 +75,6 @@ impl Parse for DimElement { } } -#[cfg(feature = "unproven")] impl Encode for DimElement { type Error = anyhow::Error; @@ -100,7 +97,6 @@ impl Encode for DimElement { } #[cfg(test)] -#[cfg(feature = "unproven")] mod tests { use super::*; use crate::run_test; diff --git a/src/svd/endian.rs b/src/svd/endian.rs index 45cd2f3a..d9c15077 100644 --- a/src/svd/endian.rs +++ b/src/svd/endian.rs @@ -1,10 +1,8 @@ -#[cfg(feature = "unproven")] use std::collections::HashMap; use xmltree::Element; use crate::elementext::ElementExt; -#[cfg(feature = "unproven")] use crate::encode::Encode; use crate::types::Parse; @@ -36,7 +34,6 @@ impl Parse for Endian { } } -#[cfg(feature = "unproven")] impl Encode for Endian { type Error = anyhow::Error; @@ -61,7 +58,6 @@ impl Encode for Endian { } #[cfg(test)] -#[cfg(feature = "unproven")] mod tests { use super::*; use crate::run_test; diff --git a/src/svd/enumeratedvalue.rs b/src/svd/enumeratedvalue.rs index e18cf665..088f58d2 100644 --- a/src/svd/enumeratedvalue.rs +++ b/src/svd/enumeratedvalue.rs @@ -1,14 +1,11 @@ -#[cfg(feature = "unproven")] use std::collections::HashMap; use crate::elementext::ElementExt; use crate::parse; use xmltree::Element; -#[cfg(feature = "unproven")] use crate::encode::Encode; use crate::error::*; -#[cfg(feature = "unproven")] use crate::new_element; use crate::types::Parse; @@ -130,7 +127,6 @@ impl Parse for EnumeratedValue { } } -#[cfg(feature = "unproven")] impl Encode for EnumeratedValue { type Error = anyhow::Error; @@ -165,7 +161,6 @@ impl Encode for EnumeratedValue { } #[cfg(test)] -#[cfg(feature = "unproven")] mod tests { use super::*; use crate::run_test; diff --git a/src/svd/enumeratedvalues.rs b/src/svd/enumeratedvalues.rs index ef6c0a98..5cfbaa68 100644 --- a/src/svd/enumeratedvalues.rs +++ b/src/svd/enumeratedvalues.rs @@ -1,13 +1,11 @@ -#[cfg(feature = "unproven")] use std::collections::HashMap; use crate::elementext::ElementExt; use xmltree::Element; -#[cfg(feature = "unproven")] use crate::encode::Encode; use crate::error::*; -#[cfg(feature = "unproven")] + use crate::new_element; use crate::parse; use crate::svd::{enumeratedvalue::EnumeratedValue, usage::Usage}; @@ -143,7 +141,6 @@ impl Parse for EnumeratedValues { } } -#[cfg(feature = "unproven")] impl Encode for EnumeratedValues { type Error = anyhow::Error; @@ -180,7 +177,6 @@ impl Encode for EnumeratedValues { } #[cfg(test)] -#[cfg(feature = "unproven")] mod tests { use super::*; use crate::svd::enumeratedvalue::EnumeratedValueBuilder; diff --git a/src/svd/field.rs b/src/svd/field.rs index bf0dd6d9..fdd5137d 100644 --- a/src/svd/field.rs +++ b/src/svd/field.rs @@ -4,9 +4,8 @@ use xmltree::Element; use crate::types::Parse; -#[cfg(feature = "unproven")] use crate::elementext::ElementExt; -#[cfg(feature = "unproven")] + use crate::encode::Encode; use crate::error::*; use crate::svd::{dimelement::DimElement, fieldinfo::FieldInfo}; @@ -51,7 +50,7 @@ impl Parse for Field { } } -#[cfg(feature = "unproven")] + impl Encode for Field { type Error = anyhow::Error; @@ -69,7 +68,6 @@ impl Encode for Field { } #[cfg(test)] -#[cfg(feature = "unproven")] mod tests { use super::*; use crate::bitrange::{BitRange, BitRangeType}; diff --git a/src/svd/fieldinfo.rs b/src/svd/fieldinfo.rs index e4119119..072dad80 100644 --- a/src/svd/fieldinfo.rs +++ b/src/svd/fieldinfo.rs @@ -1,13 +1,12 @@ -#[cfg(feature = "unproven")] + use std::collections::HashMap; use crate::elementext::ElementExt; use xmltree::Element; -#[cfg(feature = "unproven")] use crate::encode::Encode; use crate::error::*; -#[cfg(feature = "unproven")] + use crate::new_element; use crate::parse; use crate::types::Parse; @@ -187,7 +186,6 @@ impl FieldInfo { } } -#[cfg(feature = "unproven")] impl Encode for FieldInfo { type Error = anyhow::Error; @@ -237,7 +235,6 @@ impl Encode for FieldInfo { } #[cfg(test)] -#[cfg(feature = "unproven")] mod tests { use super::*; use crate::run_test; diff --git a/src/svd/interrupt.rs b/src/svd/interrupt.rs index e08c79f6..8500c53d 100644 --- a/src/svd/interrupt.rs +++ b/src/svd/interrupt.rs @@ -1,14 +1,12 @@ -#[cfg(feature = "unproven")] + use std::collections::HashMap; use xmltree::Element; use crate::elementext::ElementExt; -#[cfg(feature = "unproven")] use crate::encode::Encode; use crate::error::*; -#[cfg(feature = "unproven")] use crate::new_element; use crate::types::Parse; @@ -50,7 +48,6 @@ impl Parse for Interrupt { } } -#[cfg(feature = "unproven")] impl Encode for Interrupt { type Error = anyhow::Error; @@ -72,7 +69,6 @@ impl Encode for Interrupt { } #[cfg(test)] -#[cfg(feature = "unproven")] mod tests { use super::*; use crate::run_test; diff --git a/src/svd/modifiedwritevalues.rs b/src/svd/modifiedwritevalues.rs index df42e289..eb1f6cb5 100644 --- a/src/svd/modifiedwritevalues.rs +++ b/src/svd/modifiedwritevalues.rs @@ -1,11 +1,10 @@ use crate::elementext::ElementExt; -#[cfg(feature = "unproven")] + use std::collections::HashMap; use xmltree::Element; use crate::types::Parse; -#[cfg(feature = "unproven")] use crate::encode::Encode; use crate::error::*; @@ -46,7 +45,6 @@ impl Parse for ModifiedWriteValues { } } -#[cfg(feature = "unproven")] impl Encode for ModifiedWriteValues { type Error = anyhow::Error; @@ -77,7 +75,6 @@ impl Encode for ModifiedWriteValues { } #[cfg(test)] -#[cfg(feature = "unproven")] mod tests { use super::*; use crate::run_test; diff --git a/src/svd/peripheral.rs b/src/svd/peripheral.rs index 2f896e90..e7c78528 100644 --- a/src/svd/peripheral.rs +++ b/src/svd/peripheral.rs @@ -1,4 +1,4 @@ -#[cfg(feature = "unproven")] + use std::collections::HashMap; use xmltree::Element; @@ -6,9 +6,8 @@ use xmltree::Element; use crate::elementext::ElementExt; use crate::parse; -#[cfg(feature = "unproven")] use crate::encode::{Encode, EncodeChildren}; -#[cfg(feature = "unproven")] + use crate::new_element; use crate::types::Parse; @@ -222,7 +221,6 @@ impl Peripheral { } } -#[cfg(feature = "unproven")] impl Encode for Peripheral { type Error = anyhow::Error; diff --git a/src/svd/register.rs b/src/svd/register.rs index 6a813af5..8e4b40a8 100644 --- a/src/svd/register.rs +++ b/src/svd/register.rs @@ -4,9 +4,8 @@ use xmltree::Element; use crate::types::Parse; -#[cfg(feature = "unproven")] use crate::elementext::ElementExt; -#[cfg(feature = "unproven")] + use crate::encode::Encode; use crate::error::*; use crate::svd::{dimelement::DimElement, registerinfo::RegisterInfo}; @@ -52,7 +51,6 @@ impl Parse for Register { } } -#[cfg(feature = "unproven")] impl Encode for Register { type Error = anyhow::Error; @@ -70,7 +68,6 @@ impl Encode for Register { } #[cfg(test)] -#[cfg(feature = "unproven")] mod tests { use super::*; use crate::dimelement::DimElementBuilder; diff --git a/src/svd/registercluster.rs b/src/svd/registercluster.rs index c08c2180..40fd3922 100644 --- a/src/svd/registercluster.rs +++ b/src/svd/registercluster.rs @@ -2,9 +2,7 @@ use xmltree::Element; use crate::types::Parse; -#[cfg(feature = "unproven")] use crate::encode::Encode; - use crate::error::*; use crate::svd::{cluster::Cluster, register::Register}; @@ -42,7 +40,6 @@ impl Parse for RegisterCluster { } } -#[cfg(feature = "unproven")] impl Encode for RegisterCluster { type Error = anyhow::Error; diff --git a/src/svd/registerinfo.rs b/src/svd/registerinfo.rs index b94cc172..f4ad4261 100644 --- a/src/svd/registerinfo.rs +++ b/src/svd/registerinfo.rs @@ -1,13 +1,11 @@ -#[cfg(feature = "unproven")] use std::collections::HashMap; use crate::elementext::ElementExt; use xmltree::Element; -#[cfg(feature = "unproven")] use crate::encode::Encode; use crate::error::*; -#[cfg(feature = "unproven")] + use crate::new_element; use crate::parse; use crate::types::Parse; @@ -244,7 +242,6 @@ impl RegisterInfo { } } -#[cfg(feature = "unproven")] impl Encode for RegisterInfo { type Error = anyhow::Error; @@ -334,7 +331,6 @@ impl Encode for RegisterInfo { } #[cfg(test)] -#[cfg(feature = "unproven")] mod tests { use super::*; use crate::run_test; diff --git a/src/svd/registerproperties.rs b/src/svd/registerproperties.rs index f05d6143..b446813e 100644 --- a/src/svd/registerproperties.rs +++ b/src/svd/registerproperties.rs @@ -1,11 +1,9 @@ use xmltree::Element; -#[cfg(feature = "unproven")] use crate::encode::Encode; -#[cfg(feature = "unproven")] use crate::encode::EncodeChildren; use crate::error::*; -#[cfg(feature = "unproven")] + use crate::new_element; use crate::parse; use crate::types::Parse; @@ -56,7 +54,6 @@ impl Parse for RegisterProperties { } } -#[cfg(feature = "unproven")] impl EncodeChildren for RegisterProperties { type Error = anyhow::Error; @@ -84,7 +81,6 @@ impl EncodeChildren for RegisterProperties { } #[cfg(test)] -#[cfg(feature = "unproven")] mod tests { use super::*; diff --git a/src/svd/usage.rs b/src/svd/usage.rs index d57bc14b..e2205110 100644 --- a/src/svd/usage.rs +++ b/src/svd/usage.rs @@ -1,10 +1,8 @@ -#[cfg(feature = "unproven")] use std::collections::HashMap; use crate::elementext::ElementExt; use xmltree::Element; -#[cfg(feature = "unproven")] use crate::encode::Encode; use crate::error::*; use crate::types::Parse; @@ -33,7 +31,6 @@ impl Parse for Usage { } } -#[cfg(feature = "unproven")] impl Encode for Usage { type Error = anyhow::Error; @@ -57,7 +54,6 @@ impl Encode for Usage { } #[cfg(test)] -#[cfg(feature = "unproven")] mod tests { use super::*; use crate::run_test; diff --git a/src/svd/writeconstraint.rs b/src/svd/writeconstraint.rs index 23475ed7..f4d050e9 100644 --- a/src/svd/writeconstraint.rs +++ b/src/svd/writeconstraint.rs @@ -1,13 +1,11 @@ -#[cfg(feature = "unproven")] use std::collections::HashMap; use crate::elementext::ElementExt; use xmltree::Element; -#[cfg(feature = "unproven")] use crate::encode::Encode; use crate::error::*; -#[cfg(feature = "unproven")] + use crate::new_element; use crate::types::Parse; @@ -52,7 +50,6 @@ impl Parse for WriteConstraint { } } -#[cfg(feature = "unproven")] impl Encode for WriteConstraint { type Error = anyhow::Error; @@ -89,7 +86,6 @@ impl Parse for WriteConstraintRange { } } -#[cfg(feature = "unproven")] impl Encode for WriteConstraintRange { type Error = anyhow::Error; @@ -110,7 +106,6 @@ impl Encode for WriteConstraintRange { } #[cfg(test)] -#[cfg(feature = "unproven")] mod tests { use super::*; use crate::run_test; diff --git a/src/types.rs b/src/types.rs index 119961e8..57127315 100644 --- a/src/types.rs +++ b/src/types.rs @@ -2,7 +2,6 @@ use xmltree::Element; -#[cfg(feature = "unproven")] pub use crate::encode::Encode; pub use crate::parse::optional as parse_optional; pub use crate::parse::Parse; diff --git a/tests/bad_svd.rs b/tests/bad_svd.rs index a4137964..d463d4a1 100644 --- a/tests/bad_svd.rs +++ b/tests/bad_svd.rs @@ -4,7 +4,7 @@ use svd_parser as svd; fn arm_sample_faulty() { let xml = include_str!(concat!( env!("CARGO_MANIFEST_DIR"), - "/tests/ARM_Sample_faulty.svd" + "/tests/data/ARM_Sample_faulty.svd" )); if let Err(e) = svd::parse(xml) { for e in e.chain() { @@ -13,4 +13,4 @@ fn arm_sample_faulty() { } else { panic!() } -} +} \ No newline at end of file diff --git a/tests/ARM_Sample_faulty.svd b/tests/data/ARM_Sample_faulty.svd similarity index 100% rename from tests/ARM_Sample_faulty.svd rename to tests/data/ARM_Sample_faulty.svd