blob: 09bf6643094b177b9aed42bb01561f48e1ee1f11 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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
}
|