diff options
| author | Jack Koenig | 2020-02-11 12:29:36 -0800 |
|---|---|---|
| committer | GitHub | 2020-02-11 20:29:36 +0000 |
| commit | ebef7f597b7e127652403d46b96f8d16360738fd (patch) | |
| tree | d181b0d6e64c0f9d5fef8067348f77bacc0c9302 | |
| parent | 45a926148bd87a383ee6e8c7aa87e6b9aeabd861 (diff) | |
Clone child elements lazily in Vec (#1329)
Co-authored-by: Schuyler Eldridge <schuyler.eldridge@gmail.com>
| -rw-r--r-- | chiselFrontend/src/main/scala/chisel3/Aggregate.scala | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/chiselFrontend/src/main/scala/chisel3/Aggregate.scala b/chiselFrontend/src/main/scala/chisel3/Aggregate.scala index 84e959a5..6c1e8dfb 100644 --- a/chiselFrontend/src/main/scala/chisel3/Aggregate.scala +++ b/chiselFrontend/src/main/scala/chisel3/Aggregate.scala @@ -165,9 +165,12 @@ sealed class Vec[T <: Data] private[chisel3] (gen: => T, val length: Int) // Note: the constructor takes a gen() function instead of a Seq to enforce // that all elements must be the same and because it makes FIRRTL generation // simpler. - private val self: Seq[T] = Vector.fill(length)(gen) - for ((elt, i) <- self.zipWithIndex) - elt.setRef(this, i) + private lazy val self: Seq[T] = { + val _self = Vector.fill(length)(gen) + for ((elt, i) <- _self.zipWithIndex) + elt.setRef(this, i) + _self + } /** * sample_element 'tracks' all changes to the elements. |
