From 45835fa54d3d345428554f5459ca6776c2b9d90a Mon Sep 17 00:00:00 2001 From: Schuyler Eldridge Date: Tue, 2 Jun 2020 16:43:37 -0400 Subject: Add LetterCaseTransforms This adds three new transforms: - (abstract) LetterCaseTransform parent of case manipulation - LowerCaseNames to lower case all names - UpperCaseNames to upper case all names Signed-off-by: Schuyler Eldridge --- .../firrtl/features/LetterCaseTransform.scala | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/scala/firrtl/features/LetterCaseTransform.scala (limited to 'src') diff --git a/src/main/scala/firrtl/features/LetterCaseTransform.scala b/src/main/scala/firrtl/features/LetterCaseTransform.scala new file mode 100644 index 00000000..a6cd270a --- /dev/null +++ b/src/main/scala/firrtl/features/LetterCaseTransform.scala @@ -0,0 +1,29 @@ +// See LICENSE for license details. + +package firrtl.features + +import firrtl.Namespace +import firrtl.transforms.ManipulateNames + +import scala.reflect.ClassTag + +/** Parent of transforms that do change the letter case of names in a FIRRTL circuit */ +abstract class LetterCaseTransform[A <: ManipulateNames[_] : ClassTag] extends ManipulateNames[A] { + + protected def newName: String => String + + final def manipulate = (a: String, ns: Namespace) => newName(a) match { + case `a` => None + case b => Some(ns.newName(b)) + } +} + +/** Convert all FIRRTL names to lowercase */ +final class LowerCaseNames extends LetterCaseTransform[LowerCaseNames] { + override protected def newName = (a: String) => a.toLowerCase +} + +/** Convert all FIRRTL names to UPPERCASE */ +final class UpperCaseNames extends LetterCaseTransform[UpperCaseNames] { + override protected def newName = (a: String) => a.toUpperCase +} -- cgit v1.2.3