diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/scala/firrtl/features/LetterCaseTransform.scala | 29 |
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 +} |
