summaryrefslogtreecommitdiff
path: root/core/src/main/scala/chisel3/internal
diff options
context:
space:
mode:
authorJack Koenig2020-11-05 15:54:14 -0800
committerGitHub2020-11-05 23:54:14 +0000
commit8187318e7aef42d541ce307f93d9fc946ed4c38d (patch)
tree8cadb914b3ef49c37bfebfb2aad9765167420a62 /core/src/main/scala/chisel3/internal
parent679dd54a8e0d65524b782459b64a10e0d91e3a9d (diff)
For HasId.setRef, have first set win (with force override) (#1655)
This is a refinement of the assertion added in #1616 then removed in #1654. Because Records now set the refs of children upon binding, later, unbound Records could incorrectly override the refs. The first set should win.
Diffstat (limited to 'core/src/main/scala/chisel3/internal')
-rw-r--r--core/src/main/scala/chisel3/internal/Builder.scala7
1 files changed, 5 insertions, 2 deletions
diff --git a/core/src/main/scala/chisel3/internal/Builder.scala b/core/src/main/scala/chisel3/internal/Builder.scala
index 57a0f968..56a85fb6 100644
--- a/core/src/main/scala/chisel3/internal/Builder.scala
+++ b/core/src/main/scala/chisel3/internal/Builder.scala
@@ -198,8 +198,11 @@ private[chisel3] trait HasId extends InstanceId {
}
private var _ref: Option[Arg] = None
- private[chisel3] def setRef(imm: Arg): Unit = {
- _ref = Some(imm)
+ private[chisel3] def setRef(imm: Arg): Unit = setRef(imm, false)
+ private[chisel3] def setRef(imm: Arg, force: Boolean): Unit = {
+ if (_ref.isEmpty || force) {
+ _ref = Some(imm)
+ }
}
private[chisel3] def setRef(parent: HasId, name: String): Unit = setRef(Slot(Node(parent), name))
private[chisel3] def setRef(parent: HasId, index: Int): Unit = setRef(Index(Node(parent), ILit(index)))