From 0c8261d7a9ce78901841dd42d67682a64e89bfd3 Mon Sep 17 00:00:00 2001 From: Schuyler Eldridge Date: Mon, 20 Apr 2020 13:21:15 -0400 Subject: Add IdentityLike mix-in for TransformLike Signed-off-by: Schuyler Eldridge --- src/main/scala/firrtl/options/Phase.scala | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src') diff --git a/src/main/scala/firrtl/options/Phase.scala b/src/main/scala/firrtl/options/Phase.scala index ffe3788f..847a4cf2 100644 --- a/src/main/scala/firrtl/options/Phase.scala +++ b/src/main/scala/firrtl/options/Phase.scala @@ -79,6 +79,29 @@ trait TransformLike[A] extends LazyLogging { } +/** Mix-in that makes a [[firrtl.options.TransformLike TransformLike]] guaranteed to be an identity function on some + * type. + * @tparam A the transformed type + */ +trait IdentityLike[A] { this: TransformLike[A] => + + /** The internal operation of this transform which, in order for this to be an identity function, must return nothing. + * @param a an input object + * @return nothing + */ + protected def internalTransform(a: A): Unit = Unit + + /** This method will execute `internalTransform` and then return the original input object + * @param a an input object + * @return the input object + */ + final override def transform(a: A): A = { + internalTransform(a) + a + } + +} + /** Mixin that defines dependencies between [[firrtl.options.TransformLike TransformLike]]s (hereafter referred to as * "transforms") * -- cgit v1.2.3