aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/features/LetterCaseTransform.scala
diff options
context:
space:
mode:
authorSchuyler Eldridge2020-06-25 15:24:01 -0400
committerGitHub2020-06-25 15:24:01 -0400
commit672e2a9a4e8876580d97269d0e3d218a7c5ce491 (patch)
tree4c28b5fcd4c1ce87f10176fa49366f9efff27aa2 /src/main/scala/firrtl/features/LetterCaseTransform.scala
parent04f60431454f030c03dd196e276d97fccc7e6c64 (diff)
parent72ab5ef044dc79e12a3af29770349a33193415d4 (diff)
Merge pull request #1638 from freechipsproject/manipulate-names-issues-refactor
Refactor ManipulateNames to use Target
Diffstat (limited to 'src/main/scala/firrtl/features/LetterCaseTransform.scala')
-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
+}