aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJack2017-01-19 09:41:31 -0800
committerJack Koenig2017-01-20 12:43:52 -0800
commit6b7d3bfd528f4c4749cabb6defc044233b9e0471 (patch)
tree60fb4d4fb536240dc590adcec235f3918e6dbe07 /src
parentfb104879321a32bdf52a9ea938fec9538eb3d36e (diff)
Add MultiInfo. Speedup Info concatenation. Fixes #391
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/firrtl/ir/IR.scala13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/main/scala/firrtl/ir/IR.scala b/src/main/scala/firrtl/ir/IR.scala
index 6eac592c..ca518a5a 100644
--- a/src/main/scala/firrtl/ir/IR.scala
+++ b/src/main/scala/firrtl/ir/IR.scala
@@ -21,10 +21,17 @@ case object NoInfo extends Info {
}
case class FileInfo(info: StringLit) extends Info {
override def toString: String = " @[" + info.serialize + "]"
- def ++(that: Info): Info = that match {
- case NoInfo => this
- case FileInfo(otherInfo) => FileInfo(FIRRTLStringLitHandler.unescape(info.serialize + " " + otherInfo.serialize))
+ def ++(that: Info): Info = MultiInfo(Seq(this, that))
+}
+case class MultiInfo(infos: Seq[Info]) extends Info {
+ private def collectStringLits(info: Info): Seq[StringLit] = info match {
+ case FileInfo(lit) => Seq(lit)
+ case MultiInfo(seq) => seq flatMap collectStringLits
+ case NoInfo => Seq.empty
}
+ override def toString: String =
+ collectStringLits(this).map(_.serialize).mkString(" @[", " ", "]")
+ def ++(that: Info): Info = MultiInfo(Seq(this, that))
}
trait HasName {