diff options
| author | Schuyler Eldridge | 2020-04-12 16:49:43 -0400 |
|---|---|---|
| committer | Schuyler Eldridge | 2020-04-13 16:03:25 -0400 |
| commit | a49a2f5ebf5f61fc3d66798d5c81d91029fcc8db (patch) | |
| tree | 5fcd12e2c76614f773304e1a112917ce2eafe0a9 /src | |
| parent | 4761883cece1451dd7984554ec585a2feaf0a170 (diff) | |
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 <schuyler.eldridge@ibm.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/scala/firrtl/Emitter.scala | 8 |
1 files changed, 4 insertions, 4 deletions
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 |
