diff options
| author | Jack | 2017-01-19 09:41:31 -0800 |
|---|---|---|
| committer | Jack Koenig | 2017-01-20 12:43:52 -0800 |
| commit | 6b7d3bfd528f4c4749cabb6defc044233b9e0471 (patch) | |
| tree | 60fb4d4fb536240dc590adcec235f3918e6dbe07 /src | |
| parent | fb104879321a32bdf52a9ea938fec9538eb3d36e (diff) | |
Add MultiInfo. Speedup Info concatenation. Fixes #391
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/scala/firrtl/ir/IR.scala | 13 |
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 { |
