diff options
Diffstat (limited to 'src/main')
| -rw-r--r-- | src/main/scala/Chisel/Builder.scala | 19 | ||||
| -rw-r--r-- | src/main/scala/Chisel/Core.scala | 8 |
2 files changed, 12 insertions, 15 deletions
diff --git a/src/main/scala/Chisel/Builder.scala b/src/main/scala/Chisel/Builder.scala index fb3d600e..9a469149 100644 --- a/src/main/scala/Chisel/Builder.scala +++ b/src/main/scala/Chisel/Builder.scala @@ -2,7 +2,7 @@ package Chisel import scala.util.DynamicVariable import scala.collection.mutable.{ArrayBuffer, HashMap} -class Namespace(parent: Option[Namespace], kws: Option[Set[String]]) { +private class Namespace(parent: Option[Namespace], kws: Option[Set[String]]) { private var i = 0L private val names = collection.mutable.HashSet[String]() private val keywords = kws.getOrElse(Set()) @@ -10,9 +10,8 @@ class Namespace(parent: Option[Namespace], kws: Option[Set[String]]) { private def rename(n: String) = { i += 1; s"${n}_${i}" } def contains(elem: String): Boolean = { - keywords.contains(elem) || - names.contains(elem) || - parent.map(_ contains elem).getOrElse(false) + keywords.contains(elem) || names.contains(elem) || + parent.map(_ contains elem).getOrElse(false) } def name(elem: String): String = { @@ -35,12 +34,11 @@ private class IdGen { } } -trait HasId { +private[Chisel] trait HasId { private[Chisel] val _id = Builder.idGen.next def setRef() = Builder.globalRefMap.setRef(this, s"T_${_id}") def setRef(imm: Immediate) = Builder.globalRefMap.setRef(this, imm) - def setRef(name: String)(implicit namespace: Namespace = Builder.globalNamespace) = - Builder.globalRefMap.setRef(this, name)(namespace) + def setRef(name: String) = Builder.globalRefMap.setRef(this, name) def setRef(parent: HasId, name: String) = Builder.globalRefMap.setField(parent, this, name) def setRef(parent: HasId, index: Int) = Builder.globalRefMap.setIndex(parent, this, index) } @@ -51,9 +49,8 @@ class RefMap { def setRef(id: HasId, ref: Immediate): Unit = _refmap(id._id) = ref - def setRef(id: HasId, name: String)(implicit namespace: Namespace = Builder.globalNamespace): Unit = - if (!_refmap.contains(id._id)) - setRef(id, Ref(namespace.name(name))) + def setRef(id: HasId, name: String): Unit = + if (!_refmap.contains(id._id)) setRef(id, Ref(name)) def setField(parentid: HasId, id: HasId, name: String): Unit = { _refmap(id._id) = Slot(Alias(parentid), name) @@ -111,7 +108,7 @@ private object Builder { def build[T <: Module](f: => T): Circuit = { dynamicContextVar.withValue(Some(new DynamicContext)) { val mod = f - mod.setRef(mod.name) + mod.setRef(globalNamespace.name(mod.name)) Circuit(components.last.name, components, globalRefMap, parameterDump) } } diff --git a/src/main/scala/Chisel/Core.scala b/src/main/scala/Chisel/Core.scala index f1b92efa..9838554e 100644 --- a/src/main/scala/Chisel/Core.scala +++ b/src/main/scala/Chisel/Core.scala @@ -655,7 +655,7 @@ object Bundle { } class Bundle extends Aggregate(NO_DIR) { - private implicit val _namespace = Builder.globalNamespace.child + private val _namespace = Builder.globalNamespace.child override def <> (that: Data): Unit = that match { case _: Bundle => this bulkConnect that @@ -693,7 +693,7 @@ class Bundle extends Aggregate(NO_DIR) { namedElts += name -> elt override def collectElts = - for ((name, elt) <- namedElts) { elt.setRef(this, name) } + for ((name, elt) <- namedElts) { elt.setRef(this, _namespace.name(name)) } override def cloneType : this.type = { try { @@ -728,7 +728,7 @@ object Module { } abstract class Module(_clock: Clock = null, _reset: Bool = null) extends HasId { - private implicit val _namespace = Builder.globalNamespace.child + private val _namespace = Builder.globalNamespace.child private[Chisel] val _commands = ArrayBuffer[Command]() private[Chisel] val _nodes = ArrayBuffer[Data]() private[Chisel] val _children = ArrayBuffer[Module]() @@ -782,7 +782,7 @@ abstract class Module(_clock: Clock = null, _reset: Bool = null) extends HasId { val methods = getClass.getMethods.sortWith(_.getName > _.getName) for (m <- methods; if isPublicVal(m)) m.invoke(this) match { - case id: HasId => id.setRef(m.getName) + case id: HasId => id.setRef(_namespace.name(m.getName)) case _ => } (_nodes ++ _children).foreach(_.setRef) |
