blob: adcd9259cd89eb37c95c095c676ae07bed3bd95a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package Chisel
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
private def rename(n: String) = { i += 1; s"${n}_${i}" }
def contains(elem: String): Boolean = {
forbidden.contains(elem) ||
parent.map(_ contains elem).getOrElse(false)
}
def name(elem: String): String = {
val res = if(forbidden contains elem) rename(elem) else elem
names += res
res
}
def child(ks: Option[Set[String]]): Namespace = new Namespace(Some(this), ks)
def child: Namespace = new Namespace(Some(this), None)
}
private class FIRRTLNamespace extends Namespace(None, Some(Set("mem", "node", "wire", "reg", "inst")))
|