aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSchuyler Eldridge2020-05-11 19:11:11 -0400
committerSchuyler Eldridge2020-05-13 15:57:19 -0400
commitc8dcdacf313f19a4d0238be694478a325432edd4 (patch)
tree76dc16e032e929c6dded521711404ce79db0de3c /src
parentc534c5abae7b80a725ec9925569b3383b3c24a34 (diff)
Add features.{LowerCaseNames, UpperCaseNames} transforms
Creates the features package and populates it with two new transforms: LowerCaseNames and UpperCaseNames. These transforms convert all names in a FIRRTL circuit to lower case or upper case. This is intended to help align generated Verilog with the policies of the company/institution using it. Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com> squash! Add LowerCaseNames and UpperCaseNames transforms
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/firrtl/features/LetterCaseTransform.scala38
-rw-r--r--src/main/scala/firrtl/transforms/ManipulateNames.scala2
2 files changed, 38 insertions, 2 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..09bf6643
--- /dev/null
+++ b/src/main/scala/firrtl/features/LetterCaseTransform.scala
@@ -0,0 +1,38 @@
+// See LICENSE for license details.
+
+package firrtl.features
+
+import firrtl.{analyses, Namespace, passes, Transform}
+import firrtl.options.Dependency
+import firrtl.stage.Forms
+import firrtl.transforms.ManipulateNames
+
+/** Parent of transforms that do change the letter case of names in a FIRRTL circuit */
+abstract class LetterCaseTransform extends ManipulateNames {
+ override def prerequisites = Seq(Dependency(passes.LowerTypes))
+ override def optionalPrerequisites = Seq.empty
+ override def optionalPrerequisiteOf = Forms.LowEmitters
+ override def invalidates(a: Transform) = a match {
+ case _: analyses.GetNamespace => true
+ case _ => false
+ }
+
+ protected def newName: String => String
+
+ final def condition = _ => true
+
+ final def manipulate = (a: String, ns: Namespace) => newName(a) match {
+ case `a` => a
+ case b => ns.newName(b)
+ }
+}
+
+/** Convert all FIRRTL names to lowercase */
+final class LowerCaseNames extends LetterCaseTransform {
+ override protected def newName = (a: String) => a.toLowerCase
+}
+
+/** Convert all FIRRTL names to UPPERCASE */
+final class UpperCaseNames extends LetterCaseTransform {
+ override protected def newName = (a: String) => a.toUpperCase
+}
diff --git a/src/main/scala/firrtl/transforms/ManipulateNames.scala b/src/main/scala/firrtl/transforms/ManipulateNames.scala
index df6ad177..1d628881 100644
--- a/src/main/scala/firrtl/transforms/ManipulateNames.scala
+++ b/src/main/scala/firrtl/transforms/ManipulateNames.scala
@@ -6,9 +6,7 @@ import firrtl._
import firrtl.analyses.InstanceGraph
import firrtl.annotations.{Named, CircuitName, ModuleName, ComponentName}
import firrtl.Mappers._
-import firrtl.options.Dependency
import firrtl.passes.PassException
-import firrtl.stage.Forms
import scala.collection.mutable