aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/annotations/Annotation.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/firrtl/annotations/Annotation.scala')
-rw-r--r--src/main/scala/firrtl/annotations/Annotation.scala21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/main/scala/firrtl/annotations/Annotation.scala b/src/main/scala/firrtl/annotations/Annotation.scala
new file mode 100644
index 00000000..5881001f
--- /dev/null
+++ b/src/main/scala/firrtl/annotations/Annotation.scala
@@ -0,0 +1,21 @@
+// See LICENSE for license details.
+
+package firrtl
+package annotations
+
+import firrtl.ir._
+
+case class AnnotationException(message: String) extends Exception(message)
+
+final case class Annotation(target: Named, transform: Class[_ <: Transform], value: String) {
+ val targetString: String = target.serialize
+ val transformClass: String = transform.getName
+ def serialize: String = this.toString
+ def update(tos: Seq[Named]): Seq[Annotation] = {
+ check(target, tos, this)
+ propagate(target, tos, duplicate)
+ }
+ def propagate(from: Named, tos: Seq[Named], dup: Named=>Annotation): Seq[Annotation] = tos.map(dup(_))
+ def check(from: Named, tos: Seq[Named], which: Annotation): Unit = {}
+ def duplicate(n: Named) = new Annotation(n, transform, value)
+}