diff options
| author | Schuyler Eldridge | 2019-01-17 17:45:56 -0500 |
|---|---|---|
| committer | GitHub | 2019-01-17 17:45:56 -0500 |
| commit | 6f4f5dd24adf815f1db81ceb7086eaa399784e6f (patch) | |
| tree | 6116e128b6258ed5eee7d042d0fabbd14dcb3df7 /chiselFrontend/src/main/scala/chisel3/internal | |
| parent | 1e4fef2e933e01b692c57af1fd64b271829ab283 (diff) | |
| parent | 685790b2c6c7ff8ddfd34f2f84572a985d3416cc (diff) | |
Merge branch 'master' into improve-andr
Diffstat (limited to 'chiselFrontend/src/main/scala/chisel3/internal')
| -rw-r--r-- | chiselFrontend/src/main/scala/chisel3/internal/Builder.scala | 15 | ||||
| -rw-r--r-- | chiselFrontend/src/main/scala/chisel3/internal/Namer.scala | 5 |
2 files changed, 16 insertions, 4 deletions
diff --git a/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala b/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala index ce4e1e88..0938ea9e 100644 --- a/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala +++ b/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala @@ -294,6 +294,21 @@ private[chisel3] object Builder { lastStack } + /** Recursively suggests names to supported "container" classes + * Arbitrary nestings of supported classes are allowed so long as the + * innermost element is of type HasId + * (Note: Map is Iterable[Tuple2[_,_]] and thus excluded) + */ + def nameRecursively(prefix: String, nameMe: Any, namer: (HasId, String) => Unit): Unit = nameMe match { + case (id: HasId) => namer(id, prefix) + case Some(elt) => nameRecursively(prefix, elt, namer) + case (iter: Iterable[_]) if iter.hasDefiniteSize => + for ((elt, i) <- iter.zipWithIndex) { + nameRecursively(s"${prefix}_${i}", elt, namer) + } + case _ => // Do nothing + } + def errors: ErrorLog = dynamicContext.errors def error(m: => String): Unit = if (dynamicContextVar.value.isDefined) errors.error(m) def warning(m: => String): Unit = if (dynamicContextVar.value.isDefined) errors.warning(m) diff --git a/chiselFrontend/src/main/scala/chisel3/internal/Namer.scala b/chiselFrontend/src/main/scala/chisel3/internal/Namer.scala index a7196a22..79b48b1e 100644 --- a/chiselFrontend/src/main/scala/chisel3/internal/Namer.scala +++ b/chiselFrontend/src/main/scala/chisel3/internal/Namer.scala @@ -84,10 +84,7 @@ class NamingContext { closed = true for ((ref, suffix) <- items) { // First name the top-level object - ref match { - case nameable: chisel3.internal.HasId => nameable.suggestName(prefix + suffix) - case _ => - } + chisel3.internal.Builder.nameRecursively(prefix + suffix, ref, (id, name) => id.suggestName(name)) // Then recurse into descendant contexts if (descendants.containsKey(ref)) { |
