aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSchuyler Eldridge2020-06-02 16:43:37 -0400
committerSchuyler Eldridge2020-06-25 13:46:23 -0400
commit45835fa54d3d345428554f5459ca6776c2b9d90a (patch)
tree9249ed41b0448f8e116b3b1c8e647f8ab97b204d
parentd93eef47c65e5d9f0b9942f9d22d754b776e42a3 (diff)
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 <schuyler.eldridge@ibm.com>
-rw-r--r--src/main/scala/firrtl/features/LetterCaseTransform.scala29
1 files changed, 29 insertions, 0 deletions
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
+}