diff --git a/core/src/main/scala-2/chisel3/SelectableCompat.scala b/core/src/main/scala-2/chisel3/SelectableCompat.scala index 6075ae53cf3..cb253dbc2ad 100644 --- a/core/src/main/scala-2/chisel3/SelectableCompat.scala +++ b/core/src/main/scala-2/chisel3/SelectableCompat.scala @@ -2,8 +2,16 @@ package chisel3 -/** Does nothing in Scala 2; this stub trait is for maintaining - * compatibility with Scala 3's selectable, required to support - * structurally-typed Bundles in Scala 3. +/** Shim for Scala 3's `scala.reflect.Selectable` + * + * Allows Chisel to cross-compile Scala 2 and Scala 3 + * while enabling structural typing in Scala 3. + */ +trait ReflectSelectable + +/** Shim for Scala 3's `scala.Selectable` + * + * Allows Chisel to cross-compile Scala 2 and Scala 3 + * while enabling structural typing in Scala 3. */ trait Selectable diff --git a/core/src/main/scala-3/chisel3/SelectableCompat.scala b/core/src/main/scala-3/chisel3/SelectableCompat.scala new file mode 100644 index 00000000000..cf8e3e830f2 --- /dev/null +++ b/core/src/main/scala-3/chisel3/SelectableCompat.scala @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + +package chisel3 + +type ReflectSelectable = scala.reflect.Selectable diff --git a/core/src/main/scala/chisel3/Module.scala b/core/src/main/scala/chisel3/Module.scala index ccec2281e0c..0d6de1bf3f6 100644 --- a/core/src/main/scala/chisel3/Module.scala +++ b/core/src/main/scala/chisel3/Module.scala @@ -413,7 +413,7 @@ package experimental { /** Abstract base class for Modules, an instantiable organizational unit for RTL. */ // TODO: seal this? - abstract class BaseModule extends HasId with IsInstantiable { + abstract class BaseModule extends HasId with IsInstantiable with ReflectSelectable { _parent.foreach(_.addId(this)) // Set if the returned top-level module of a nested call to the Chisel Builder, see Definition.apply