diff options
Diffstat (limited to 'src/main/scala/firrtl/Mappers.scala')
| -rw-r--r-- | src/main/scala/firrtl/Mappers.scala | 70 |
1 files changed, 35 insertions, 35 deletions
diff --git a/src/main/scala/firrtl/Mappers.scala b/src/main/scala/firrtl/Mappers.scala index 335bc4aa..c00ca855 100644 --- a/src/main/scala/firrtl/Mappers.scala +++ b/src/main/scala/firrtl/Mappers.scala @@ -27,46 +27,47 @@ MODIFICATIONS. package firrtl +import firrtl.ir._ + // TODO: Implement remaining mappers and recursive mappers object Mappers { // ********** Stmt Mappers ********** private trait StmtMagnet { - def map(stmt: Stmt): Stmt + def map(stmt: Statement): Statement } private object StmtMagnet { - implicit def forStmt(f: Stmt => Stmt) = new StmtMagnet { - override def map(stmt: Stmt): Stmt = { + implicit def forStmt(f: Statement => Statement) = new StmtMagnet { + override def map(stmt: Statement): Statement = { stmt match { case s: Conditionally => Conditionally(s.info, s.pred, f(s.conseq), f(s.alt)) case s: Begin => Begin(s.stmts.map(f)) - case s: Stmt => s + case s: Statement => s } } } implicit def forExp(f: Expression => Expression) = new StmtMagnet { - override def map(stmt: Stmt): Stmt = { + override def map(stmt: Statement): Statement = { stmt match { case s: DefRegister => DefRegister(s.info, s.name, s.tpe, f(s.clock), f(s.reset), f(s.init)) case s: DefNode => DefNode(s.info, s.name, f(s.value)) - case s: Connect => Connect(s.info, f(s.loc), f(s.exp)) - case s: BulkConnect => BulkConnect(s.info, f(s.loc), f(s.exp)) + case s: Connect => Connect(s.info, f(s.loc), f(s.expr)) + case s: PartialConnect => PartialConnect(s.info, f(s.loc), f(s.expr)) case s: Conditionally => Conditionally(s.info, f(s.pred), s.conseq, s.alt) - case s: IsInvalid => IsInvalid(s.info, f(s.exp)) + case s: IsInvalid => IsInvalid(s.info, f(s.expr)) case s: Stop => Stop(s.info, s.ret, f(s.clk), f(s.en)) case s: Print => Print(s.info, s.string, s.args.map(f), f(s.clk), f(s.en)) case s: CDefMPort => CDefMPort(s.info,s.name,s.tpe,s.mem,s.exps.map(f),s.direction) - case s: Stmt => s + case s: Statement => s } } } implicit def forType(f: Type => Type) = new StmtMagnet { - override def map(stmt: Stmt) : Stmt = { + override def map(stmt: Statement) : Statement = { stmt match { - case s:DefPoison => DefPoison(s.info,s.name,f(s.tpe)) case s:DefWire => DefWire(s.info,s.name,f(s.tpe)) case s:DefRegister => DefRegister(s.info,s.name,f(s.tpe),s.clock,s.reset,s.init) - case s:DefMemory => DefMemory(s.info,s.name, f(s.data_type), s.depth, s.write_latency, s.read_latency, s.readers, s.writers, s.readwriters) + case s:DefMemory => DefMemory(s.info,s.name, f(s.dataType), s.depth, s.writeLatency, s.readLatency, s.readers, s.writers, s.readwriters) case s:CDefMemory => CDefMemory(s.info,s.name, f(s.tpe), s.size, s.seq) case s:CDefMPort => CDefMPort(s.info,s.name, f(s.tpe), s.mem, s.exps,s.direction) case s => s @@ -74,12 +75,11 @@ object Mappers { } } implicit def forString(f: String => String) = new StmtMagnet { - override def map(stmt: Stmt): Stmt = { + override def map(stmt: Statement): Statement = { stmt match { case s: DefWire => DefWire(s.info,f(s.name),s.tpe) - case s: DefPoison => DefPoison(s.info,f(s.name),s.tpe) case s: DefRegister => DefRegister(s.info,f(s.name), s.tpe, s.clock, s.reset, s.init) - case s: DefMemory => DefMemory(s.info,f(s.name), s.data_type, s.depth, s.write_latency, s.read_latency, s.readers, s.writers, s.readwriters) + case s: DefMemory => DefMemory(s.info,f(s.name), s.dataType, s.depth, s.writeLatency, s.readLatency, s.readers, s.writers, s.readwriters) case s: DefNode => DefNode(s.info,f(s.name),s.value) case s: DefInstance => DefInstance(s.info,f(s.name), s.module) case s: WDefInstance => WDefInstance(s.info,f(s.name), s.module,s.tpe) @@ -90,9 +90,9 @@ object Mappers { } } } - implicit class StmtMap(stmt: Stmt) { + implicit class StmtMap(stmt: Statement) { // Using implicit types to allow overloading of function type to map, see StmtMagnet above - def map[T](f: T => T)(implicit magnet: (T => T) => StmtMagnet): Stmt = magnet(f).map(stmt) + def map[T](f: T => T)(implicit magnet: (T => T) => StmtMagnet): Statement = magnet(f).map(stmt) } // ********** Expression Mappers ********** @@ -103,9 +103,9 @@ object Mappers { implicit def forExp(f: Expression => Expression) = new ExpMagnet { override def map(exp: Expression): Expression = { exp match { - case e: SubField => SubField(f(e.exp), e.name, e.tpe) - case e: SubIndex => SubIndex(f(e.exp), e.value, e.tpe) - case e: SubAccess => SubAccess(f(e.exp), f(e.index), e.tpe) + case e: SubField => SubField(f(e.expr), e.name, e.tpe) + case e: SubIndex => SubIndex(f(e.expr), e.value, e.tpe) + case e: SubAccess => SubAccess(f(e.expr), f(e.index), e.tpe) case e: Mux => Mux(f(e.cond), f(e.tval), f(e.fval), e.tpe) case e: ValidIf => ValidIf(f(e.cond), f(e.value), e.tpe) case e: DoPrim => DoPrim(e.op, e.args.map(f), e.consts, e.tpe) @@ -133,8 +133,8 @@ object Mappers { implicit def forWidth(f: Width => Width) = new ExpMagnet { override def map(exp: Expression): Expression = { exp match { - case e: UIntValue => UIntValue(e.value,f(e.width)) - case e: SIntValue => SIntValue(e.value,f(e.width)) + case e: UIntLiteral => UIntLiteral(e.value,f(e.width)) + case e: SIntLiteral => SIntLiteral(e.value,f(e.width)) case e => e } } @@ -196,36 +196,36 @@ object Mappers { // ********** Module Mappers ********** private trait ModuleMagnet { - def map(module: Module): Module + def map(module: DefModule): DefModule } private object ModuleMagnet { - implicit def forStmt(f: Stmt => Stmt) = new ModuleMagnet { - override def map(module: Module): Module = { + implicit def forStmt(f: Statement => Statement) = new ModuleMagnet { + override def map(module: DefModule): DefModule = { module match { - case m: InModule => InModule(m.info, m.name, m.ports, f(m.body)) - case m: ExModule => m + case m: Module => Module(m.info, m.name, m.ports, f(m.body)) + case m: ExtModule => m } } } implicit def forPorts(f: Port => Port) = new ModuleMagnet { - override def map(module: Module): Module = { + override def map(module: DefModule): DefModule = { module match { - case m: InModule => InModule(m.info, m.name, m.ports.map(f), m.body) - case m: ExModule => ExModule(m.info, m.name, m.ports.map(f)) + case m: Module => Module(m.info, m.name, m.ports.map(f), m.body) + case m: ExtModule => ExtModule(m.info, m.name, m.ports.map(f)) } } } implicit def forString(f: String => String) = new ModuleMagnet { - override def map(module: Module): Module = { + override def map(module: DefModule): DefModule = { module match { - case m: InModule => InModule(m.info, f(m.name), m.ports, m.body) - case m: ExModule => ExModule(m.info, f(m.name), m.ports) + case m: Module => Module(m.info, f(m.name), m.ports, m.body) + case m: ExtModule => ExtModule(m.info, f(m.name), m.ports) } } } } - implicit class ModuleMap(module: Module) { - def map[T](f: T => T)(implicit magnet: (T => T) => ModuleMagnet): Module = magnet(f).map(module) + implicit class ModuleMap(module: DefModule) { + def map[T](f: T => T)(implicit magnet: (T => T) => ModuleMagnet): DefModule = magnet(f).map(module) } } |
