diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/scala/firrtl/passes/Inline.scala | 8 | ||||
| -rw-r--r-- | src/test/scala/firrtlTests/InlineInstancesTests.scala | 21 |
2 files changed, 23 insertions, 6 deletions
diff --git a/src/main/scala/firrtl/passes/Inline.scala b/src/main/scala/firrtl/passes/Inline.scala index 912acf8e..78b3ce36 100644 --- a/src/main/scala/firrtl/passes/Inline.scala +++ b/src/main/scala/firrtl/passes/Inline.scala @@ -179,7 +179,7 @@ class InlineInstances extends Transform with DependencyAPIMigration with Registe /** Add a prefix to all declarations updating a [[Namespace]] and appending to a [[RenameMap]] */ def appendNamePrefix( - currentModule: IsModule, + currentModule: InstanceTarget, nextModule: IsModule, prefix: String, ns: Namespace, @@ -197,8 +197,13 @@ class InlineInstances extends Transform with DependencyAPIMigration with Registe } ofModuleOpt match { case None => + renameMap.record(currentModule.ofModuleTarget.ref(name), nextModule.ref(prefix + name)) renameMap.record(currentModule.ref(name), nextModule.ref(prefix + name)) case Some(ofModule) => + renameMap.record( + currentModule.ofModuleTarget.instOf(name, ofModule), + nextModule.instOf(prefix + name, ofModule) + ) renameMap.record(currentModule.instOf(name, ofModule), nextModule.instOf(prefix + name, ofModule)) } renames(name) = prefix + name @@ -348,7 +353,6 @@ class InlineInstances extends Transform with DependencyAPIMigration with Registe .map(appendRefPrefix(inlineTarget, prefixMap)) renames.record(inlineTarget, currentModule) - renamedBody case sx => sx diff --git a/src/test/scala/firrtlTests/InlineInstancesTests.scala b/src/test/scala/firrtlTests/InlineInstancesTests.scala index cc7257d2..b54db7cc 100644 --- a/src/test/scala/firrtlTests/InlineInstancesTests.scala +++ b/src/test/scala/firrtlTests/InlineInstancesTests.scala @@ -380,8 +380,12 @@ class InlineInstancesTests extends LowTransformSpec { execute(input, check, Seq(inline("Inline"))) } - case class DummyAnno(target: ReferenceTarget) extends SingleTargetAnnotation[ReferenceTarget] { - override def duplicate(n: ReferenceTarget): Annotation = DummyAnno(n) + case class DummyAnno(targets: CompleteTarget*) extends Annotation { + override def update(renames: RenameMap): Seq[Annotation] = { + Seq(DummyAnno(targets.flatMap { t => + renames.get(t).getOrElse(Seq(t)) + }: _*)) + } } "annotations" should "be renamed" in { val input = @@ -573,6 +577,9 @@ class InlineInstancesTests extends LowTransformSpec { val nestedNotInlined = inlined.instOf("bar", "NestedNoInline") val innerNestedInlined = nestedNotInlined.instOf("foo", "NestedInline") + val inlineModuleTarget = top.copy(module = "Inline") + val nestedInlineModuleTarget = top.copy(module = "NestedInline") + executeWithAnnos( input, check, @@ -586,7 +593,10 @@ class InlineInstancesTests extends LowTransformSpec { DummyAnno(nestedNotInlined.ref("a")), DummyAnno(nestedNotInlined.ref("b")), DummyAnno(innerNestedInlined.ref("a")), - DummyAnno(innerNestedInlined.ref("b")) + DummyAnno(innerNestedInlined.ref("b")), + DummyAnno(inlineModuleTarget.instOf("bar", "NestedNoInline")), + DummyAnno(inlineModuleTarget.ref("a"), inlineModuleTarget.ref("b")), + DummyAnno(nestedInlineModuleTarget.ref("a")) ), Seq( DummyAnno(top.ref("i_a")), @@ -596,7 +606,10 @@ class InlineInstancesTests extends LowTransformSpec { DummyAnno(top.instOf("i_bar", "NestedNoInline").ref("a")), DummyAnno(top.instOf("i_bar", "NestedNoInline").ref("b")), DummyAnno(top.instOf("i_bar", "NestedNoInline").ref("foo_a")), - DummyAnno(top.instOf("i_bar", "NestedNoInline").ref("foo_b")) + DummyAnno(top.instOf("i_bar", "NestedNoInline").ref("foo_b")), + DummyAnno(top.instOf("i_bar", "NestedNoInline")), + DummyAnno(top.ref("i_a"), top.ref("i_b")), + DummyAnno(top.ref("i_foo_a"), top.copy(module = "NestedNoInline").ref("foo_a")) ) ) } |
