diff options
| author | Jack Koenig | 2020-08-21 13:05:38 -0700 |
|---|---|---|
| committer | GitHub | 2020-08-21 13:05:38 -0700 |
| commit | 266ac5fc32865d001409194f426b4126f5d9001b (patch) | |
| tree | 882b568677ed3578023bc8987ac0b4ee601c5db3 /src/main/scala/firrtl/Namespace.scala | |
| parent | 73868fc6e8110282ce545c296540d3ebbafadfeb (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.scala | 17 |
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) + } } |
