aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSchuyler Eldridge2020-04-12 16:49:43 -0400
committerSchuyler Eldridge2020-04-13 16:03:25 -0400
commita49a2f5ebf5f61fc3d66798d5c81d91029fcc8db (patch)
tree5fcd12e2c76614f773304e1a112917ce2eafe0a9 /src
parent4761883cece1451dd7984554ec585a2feaf0a170 (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.scala8
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