diff options
| author | Jim Lawson | 2015-08-13 13:15:34 -0700 |
|---|---|---|
| committer | Jim Lawson | 2015-08-13 13:15:34 -0700 |
| commit | 6232fce08fcc4a8f6b31b7f019b12fe20c489dba (patch) | |
| tree | 956fa26dd3776a5aa9280e788c1a0d15f94ee80c /src/main | |
| parent | bdbeab90fd7e12d8b9326a80724463a5a98de7c2 (diff) | |
| parent | 91a01936c79a6c529c48c8ea4a1dd1ff4d43b649 (diff) | |
Merge branch 'master' of https://github.com/ucb-bar/chisel3
Diffstat (limited to 'src/main')
| -rw-r--r-- | src/main/scala/Chisel/Builder.scala | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/main/scala/Chisel/Builder.scala b/src/main/scala/Chisel/Builder.scala index cbc94e93..fb3d600e 100644 --- a/src/main/scala/Chisel/Builder.scala +++ b/src/main/scala/Chisel/Builder.scala @@ -2,25 +2,26 @@ package Chisel import scala.util.DynamicVariable import scala.collection.mutable.{ArrayBuffer, HashMap} -private class Namespace(parent: Option[Namespace], keywords: Option[Set[String]]) { +class Namespace(parent: Option[Namespace], kws: Option[Set[String]]) { private var i = 0L private val names = collection.mutable.HashSet[String]() - def forbidden = keywords.getOrElse(Set()) ++ names + private val keywords = kws.getOrElse(Set()) private def rename(n: String) = { i += 1; s"${n}_${i}" } def contains(elem: String): Boolean = { - forbidden.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 = { - val res = if(forbidden contains elem) rename(elem) else elem + val res = if(this contains elem) rename(elem) else elem names += res res } - def child(ks: Option[Set[String]]): Namespace = new Namespace(Some(this), ks) + def child(kws: Option[Set[String]]): Namespace = new Namespace(Some(this), kws) def child: Namespace = new Namespace(Some(this), None) } @@ -38,7 +39,8 @@ 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) = Builder.globalRefMap.setRef(this, name) + def setRef(name: String)(implicit namespace: Namespace = Builder.globalNamespace) = + Builder.globalRefMap.setRef(this, name)(namespace) def setRef(parent: HasId, name: String) = Builder.globalRefMap.setField(parent, this, name) def setRef(parent: HasId, index: Int) = Builder.globalRefMap.setIndex(parent, this, index) } @@ -49,9 +51,9 @@ class RefMap { def setRef(id: HasId, ref: Immediate): Unit = _refmap(id._id) = ref - def setRef(id: HasId, name: String): Unit = + def setRef(id: HasId, name: String)(implicit namespace: Namespace = Builder.globalNamespace): Unit = if (!_refmap.contains(id._id)) - setRef(id, Ref(Builder.globalNamespace.name(name))) + setRef(id, Ref(namespace.name(name))) def setField(parentid: HasId, id: HasId, name: String): Unit = { _refmap(id._id) = Slot(Alias(parentid), name) |
