From 73d02043de4987025f454244aee95a0ece470f59 Mon Sep 17 00:00:00 2001 From: Albert Chen Date: Sun, 21 Jul 2019 14:14:11 -0700 Subject: Fix RenameMap chaining (#1126) * fix RenameMap chaining * fix order of chaining, add another test case --- src/main/scala/firrtl/RenameMap.scala | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'src/main') diff --git a/src/main/scala/firrtl/RenameMap.scala b/src/main/scala/firrtl/RenameMap.scala index 30ad5a2f..825b0098 100644 --- a/src/main/scala/firrtl/RenameMap.scala +++ b/src/main/scala/firrtl/RenameMap.scala @@ -40,7 +40,13 @@ final class RenameMap private (val underlying: mutable.HashMap[CompleteTarget, S /** Chain a [[RenameMap]] with this [[RenameMap]] * @param next the map to chain with this map */ - def andThen(next: RenameMap) = new RenameMap(next.underlying, chained = Some(this)) + def andThen(next: RenameMap): RenameMap = { + if (next.chained.isEmpty) { + new RenameMap(next.underlying, chained = Some(this)) + } else { + new RenameMap(next.underlying, chained = next.chained.map(this.andThen(_))) + } + } /** Record that the from [[firrtl.annotations.CircuitTarget CircuitTarget]] is renamed to another * [[firrtl.annotations.CircuitTarget CircuitTarget]] @@ -204,8 +210,10 @@ final class RenameMap private (val underlying: mutable.HashMap[CompleteTarget, S if (chainedRet.isEmpty) { Some(chainedRet) } else { - val hereRet = chainedRet.flatMap(hereCompleteGet) - if (hereRet.isEmpty) { None } else { Some(hereRet.flatten) } + val hereRet = (chainedRet.flatMap { target => + hereCompleteGet(target).getOrElse(Seq(target)) + }).distinct + if (hereRet.size == 1 && hereRet.head == key) { None } else { Some(hereRet) } } } else { hereCompleteGet(key) -- cgit v1.2.3