aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Koenig2018-03-02 16:32:32 -0800
committerGitHub2018-03-02 16:32:32 -0800
commitdd03e983298819922978664aa04d307595d2b9fc (patch)
tree4fdbca3da6d7d2f24e1d1e5763081420757af282
parent7f29fac97f48f67e11fce975b3ab236c8c643eff (diff)
Fix annotation deserialization of component subfields (#750)
Also make InvalidAnnotationFileException extend FIRRTLException for better error reporting
-rw-r--r--src/main/scala/firrtl/annotations/AnnotationUtils.scala10
-rw-r--r--src/test/scala/firrtlTests/AnnotationTests.scala1
2 files changed, 6 insertions, 5 deletions
diff --git a/src/main/scala/firrtl/annotations/AnnotationUtils.scala b/src/main/scala/firrtl/annotations/AnnotationUtils.scala
index 0fc192a6..6b7f9a60 100644
--- a/src/main/scala/firrtl/annotations/AnnotationUtils.scala
+++ b/src/main/scala/firrtl/annotations/AnnotationUtils.scala
@@ -14,7 +14,7 @@ import firrtl.annotations.AnnotationYamlProtocol._
import firrtl.ir._
import firrtl.Utils.error
-class InvalidAnnotationFileException(msg: String) extends Exception(msg)
+class InvalidAnnotationFileException(msg: String) extends FIRRTLException(msg)
object AnnotationUtils {
def toYaml(a: LegacyAnnotation): String = a.toYaml.prettyPrint
@@ -48,10 +48,10 @@ 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, ".", x) => ComponentName(x, ModuleName(m, CircuitName(c)))
+ def toNamed(s: String): Named = s.split("\\.", 3) match {
+ case Array(n) => CircuitName(n)
+ case Array(c, m) => ModuleName(m, CircuitName(c))
+ case Array(c, m, x) => ComponentName(x, ModuleName(m, CircuitName(c)))
}
/** Given a serialized component/subcomponent reference, subindex, subaccess,
diff --git a/src/test/scala/firrtlTests/AnnotationTests.scala b/src/test/scala/firrtlTests/AnnotationTests.scala
index 85814713..f0d4cb25 100644
--- a/src/test/scala/firrtlTests/AnnotationTests.scala
+++ b/src/test/scala/firrtlTests/AnnotationTests.scala
@@ -495,6 +495,7 @@ class JsonAnnotationTests extends AnnotationTests {
InlineAnnotation(CircuitName("fox")),
InlineAnnotation(ModuleName("dog", CircuitName("bear"))),
InlineAnnotation(ComponentName("chocolate", ModuleName("like", CircuitName("i")))),
+ InlineAnnotation(ComponentName("chocolate.frog", ModuleName("like", CircuitName("i")))),
PinAnnotation(Seq("sea-lion", "monk-seal"))
).toArray