aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/Namespace.scala
diff options
context:
space:
mode:
authorJack Koenig2020-08-21 13:05:38 -0700
committerGitHub2020-08-21 13:05:38 -0700
commit266ac5fc32865d001409194f426b4126f5d9001b (patch)
tree882b568677ed3578023bc8987ac0b4ee601c5db3 /src/main/scala/firrtl/Namespace.scala
parent73868fc6e8110282ce545c296540d3ebbafadfeb (diff)
Deprecate Uniquify and move its useful utilities (#1856)
Diffstat (limited to 'src/main/scala/firrtl/Namespace.scala')
-rw-r--r--src/main/scala/firrtl/Namespace.scala17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/main/scala/firrtl/Namespace.scala b/src/main/scala/firrtl/Namespace.scala
index 196539c8..c036b5f7 100644
--- a/src/main/scala/firrtl/Namespace.scala
+++ b/src/main/scala/firrtl/Namespace.scala
@@ -3,6 +3,7 @@
package firrtl
import scala.collection.mutable
+import scala.annotation.tailrec
import firrtl.ir._
class Namespace private {
@@ -80,4 +81,20 @@ object Namespace {
namespace.namespace ++= names
namespace
}
+
+ /** Appends delim to prefix until no collisions of prefix + elts in names We don't add an _ in the collision check
+ * because elts could be Seq("") In this case, we're just really checking if prefix itself collides
+ */
+ def findValidPrefix(
+ prefix: String,
+ elts: Iterable[String],
+ namespace: String => Boolean
+ ): String = {
+ @tailrec
+ def rec(p: String): String = {
+ val found = elts.exists(elt => namespace(p + elt))
+ if (found) rec(p + "_") else p
+ }
+ rec(prefix)
+ }
}