aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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
+}