From a49a2f5ebf5f61fc3d66798d5c81d91029fcc8db Mon Sep 17 00:00:00 2001 From: Schuyler Eldridge Date: Sun, 12 Apr 2020 16:49:43 -0400 Subject: Check EmitAnnotation class before emitting Fixes a bug where an Emitter was only checking for the presence of an EmitCircuitAnnotation or EmitAllModulesAnnotation to control its emission flavor (one-file-per-module or one-file). This changes the check to ensure that the class of emitter matches that of the annotation. This allows for correct behavior when mixing different emitters, e.g., -E high -e middle. Signed-off-by: Schuyler Eldridge --- src/main/scala/firrtl/Emitter.scala | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/main/scala/firrtl/Emitter.scala b/src/main/scala/firrtl/Emitter.scala index 91b04349..1ba218f0 100644 --- a/src/main/scala/firrtl/Emitter.scala +++ b/src/main/scala/firrtl/Emitter.scala @@ -143,10 +143,10 @@ sealed abstract class FirrtlEmitter(form: CircuitForm) extends Transform with Em override def execute(state: CircuitState): CircuitState = { val newAnnos = state.annotations.flatMap { - case EmitCircuitAnnotation(_) => + case EmitCircuitAnnotation(a) if this.getClass == a => Seq(EmittedFirrtlCircuitAnnotation( EmittedFirrtlCircuit(state.circuit.main, state.circuit.serialize, outputSuffix))) - case EmitAllModulesAnnotation(_) => + case EmitAllModulesAnnotation(a) if this.getClass == a => emitAllModules(state.circuit) map (EmittedFirrtlModuleAnnotation(_)) case _ => Seq() } @@ -1077,12 +1077,12 @@ class VerilogEmitter extends SeqTransform with Emitter { override def execute(state: CircuitState): CircuitState = { val newAnnos = state.annotations.flatMap { - case EmitCircuitAnnotation(_) => + case EmitCircuitAnnotation(a) if this.getClass == a => val writer = new java.io.StringWriter emit(state, writer) Seq(EmittedVerilogCircuitAnnotation(EmittedVerilogCircuit(state.circuit.main, writer.toString, outputSuffix))) - case EmitAllModulesAnnotation(_) => + case EmitAllModulesAnnotation(a) if this.getClass == a => val cs = runTransforms(state) val emissionOptions = new EmissionOptions(cs.annotations) val moduleMap = cs.circuit.modules.map(m => m.name -> m).toMap -- cgit v1.2.3