diff options
| author | Henry Cook | 2015-08-13 02:22:25 -0700 |
|---|---|---|
| committer | Henry Cook | 2015-08-13 02:22:25 -0700 |
| commit | d2b902380492ad0678234f7119f02f23f57a2b2b (patch) | |
| tree | f9460969b8348bdafcd6df88b0477522d11af96a /src/main/scala/Chisel/Namespace.scala | |
| parent | 976ff1439f51afc08c61ff39ecf0ad2e71a88e2a (diff) | |
refactor Namespace
Diffstat (limited to 'src/main/scala/Chisel/Namespace.scala')
| -rw-r--r-- | src/main/scala/Chisel/Namespace.scala | 42 |
1 files changed, 16 insertions, 26 deletions
diff --git a/src/main/scala/Chisel/Namespace.scala b/src/main/scala/Chisel/Namespace.scala index 9d867bdd..adcd9259 100644 --- a/src/main/scala/Chisel/Namespace.scala +++ b/src/main/scala/Chisel/Namespace.scala @@ -1,35 +1,25 @@ package Chisel -abstract class Namespace { - final def name(n: String): String = { - if (nameExists(n)) name(rename(n)) - else { - names += n - n - } - } - - def nameExists(n: String): Boolean +private class Namespace(parent: Option[Namespace], keywords: Option[Set[String]]) { + private var i = 0L + private val names = collection.mutable.HashSet[String]() + def forbidden = keywords.getOrElse(Set()) ++ names - protected final def nameExistsHere(n: String): Boolean = - names contains n + private def rename(n: String) = { i += 1; s"${n}_${i}" } - private def rename(n: String): String = { - i += 1 - s"${n}_${i}" + def contains(elem: String): Boolean = { + forbidden.contains(elem) || + parent.map(_ contains elem).getOrElse(false) } - private var i = 0L - protected val names = collection.mutable.HashSet[String]() -} - -class RootNamespace(initialNames: String*) extends Namespace { - names ++= initialNames - def nameExists(n: String) = nameExistsHere(n) -} + def name(elem: String): String = { + val res = if(forbidden contains elem) rename(elem) else elem + names += res + res + } -class ChildNamespace(parent: Namespace) extends Namespace { - def nameExists(n: String) = nameExistsHere(n) || parent.nameExists(n) + def child(ks: Option[Set[String]]): Namespace = new Namespace(Some(this), ks) + def child: Namespace = new Namespace(Some(this), None) } -class FIRRTLNamespace extends RootNamespace("mem", "node", "wire", "reg", "inst") +private class FIRRTLNamespace extends Namespace(None, Some(Set("mem", "node", "wire", "reg", "inst"))) |
