aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/annotations/AnnotationUtils.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/firrtl/annotations/AnnotationUtils.scala')
-rw-r--r--src/main/scala/firrtl/annotations/AnnotationUtils.scala13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/main/scala/firrtl/annotations/AnnotationUtils.scala b/src/main/scala/firrtl/annotations/AnnotationUtils.scala
index 6e6af81d..8f55c13e 100644
--- a/src/main/scala/firrtl/annotations/AnnotationUtils.scala
+++ b/src/main/scala/firrtl/annotations/AnnotationUtils.scala
@@ -3,9 +3,15 @@
package firrtl
package annotations
+import net.jcazevedo.moultingyaml._
+import firrtl.annotations.AnnotationYamlProtocol._
+
import firrtl.ir._
object AnnotationUtils {
+ def toYaml(a: Annotation): String = a.toYaml.prettyPrint
+ def fromYaml(s: String): Annotation = s.parseYaml.convertTo[Annotation]
+
/** Returns true if a valid Module name */
val SerializedModuleName = """([a-zA-Z_][a-zA-Z_0-9~!@#$%^*\-+=?/]*)""".r
def validModuleName(s: String): Boolean = s match {
@@ -34,6 +40,13 @@ object AnnotationUtils {
case None => Seq(s)
}
+ def toNamed(s: String): Named = tokenize(s) match {
+ case Seq(n) => CircuitName(n)
+ case Seq(c, m) => ModuleName(m, CircuitName(c))
+ case Seq(c, m) => ModuleName(m, CircuitName(c))
+ case Seq(c, m, x) => ComponentName(x, ModuleName(m, CircuitName(c)))
+ }
+
/** Given a serialized component/subcomponent reference, subindex, subaccess,
* or subfield, return the corresponding IR expression.
* E.g. "foo.bar" becomes SubField(Reference("foo", UnknownType), "bar", UnknownType)