From 0a4bcaa4053aca16f21f899ba76b1b751cfb47b3 Mon Sep 17 00:00:00 2001 From: Adam Izraelevitz Date: Tue, 30 Oct 2018 19:30:03 -0700 Subject: Instance Annotations (#926) Formerly #865 Major Code Changes/Features Added: Added Target trait as replacement for Named Added TargetToken as token in building Target Added GenericTarget as a catch-all Target Added CircuitTarget, ModuleTarget, ReferenceTarget, and InstanceTarget Added ResolvePaths annotation Added EliminateTargetPaths (and helper class DuplicationHelper) Updated Dedup to work with instance annotations Updated RenameMap to work with instance annotations DCE & ConstantProp extend ResolveAnnotationPaths --- .../scala/firrtl/annotations/JsonProtocol.scala | 30 +++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'src/main/scala/firrtl/annotations/JsonProtocol.scala') diff --git a/src/main/scala/firrtl/annotations/JsonProtocol.scala b/src/main/scala/firrtl/annotations/JsonProtocol.scala index 7b2617f5..36699151 100644 --- a/src/main/scala/firrtl/annotations/JsonProtocol.scala +++ b/src/main/scala/firrtl/annotations/JsonProtocol.scala @@ -35,11 +35,39 @@ object JsonProtocol { { case named: ComponentName => JString(named.serialize) } )) + + class TargetSerializer extends CustomSerializer[Target](format => ( + { case JString(s) => Target.deserialize(s) }, + { case named: Target => JString(named.serialize) } + )) + class GenericTargetSerializer extends CustomSerializer[GenericTarget](format => ( + { case JString(s) => Target.deserialize(s).asInstanceOf[GenericTarget] }, + { case named: GenericTarget => JString(named.serialize) } + )) + class CircuitTargetSerializer extends CustomSerializer[CircuitTarget](format => ( + { case JString(s) => Target.deserialize(s).asInstanceOf[CircuitTarget] }, + { case named: CircuitTarget => JString(named.serialize) } + )) + class ModuleTargetSerializer extends CustomSerializer[ModuleTarget](format => ( + { case JString(s) => Target.deserialize(s).asInstanceOf[ModuleTarget] }, + { case named: ModuleTarget => JString(named.serialize) } + )) + class InstanceTargetSerializer extends CustomSerializer[InstanceTarget](format => ( + { case JString(s) => Target.deserialize(s).asInstanceOf[InstanceTarget] }, + { case named: InstanceTarget => JString(named.serialize) } + )) + class ReferenceTargetSerializer extends CustomSerializer[ReferenceTarget](format => ( + { case JString(s) => Target.deserialize(s).asInstanceOf[ReferenceTarget] }, + { case named: ReferenceTarget => JString(named.serialize) } + )) + /** Construct Json formatter for annotations */ def jsonFormat(tags: Seq[Class[_ <: Annotation]]) = { Serialization.formats(FullTypeHints(tags.toList)).withTypeHintFieldName("class") + new TransformClassSerializer + new NamedSerializer + new CircuitNameSerializer + - new ModuleNameSerializer + new ComponentNameSerializer + new ModuleNameSerializer + new ComponentNameSerializer + new TargetSerializer + + new GenericTargetSerializer + new CircuitTargetSerializer + new ModuleTargetSerializer + + new InstanceTargetSerializer + new ReferenceTargetSerializer } /** Serialize annotations to a String for emission */ -- cgit v1.2.3