aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/Serialize.scala
diff options
context:
space:
mode:
authorAdam Izraelevitz2016-06-07 16:32:11 -0700
committerAdam Izraelevitz2016-06-07 16:32:11 -0700
commit12751ef8b519786deb13081da6f7bbbecd9f1eb5 (patch)
tree86d62ef0f0f42dcc4a557a47f92af56190886e77 /src/main/scala/firrtl/Serialize.scala
parent26694d3496b7b500a3448599eb889126335b031f (diff)
parentf5a3b381dd64302817f3ad0c3d35d1ae3f0106db (diff)
Merge pull request #183 from jackkoenig/threadsafe-serialize
Fix non-thread safe Serialize by splitting it into class and object
Diffstat (limited to 'src/main/scala/firrtl/Serialize.scala')
-rw-r--r--src/main/scala/firrtl/Serialize.scala30
1 files changed, 17 insertions, 13 deletions
diff --git a/src/main/scala/firrtl/Serialize.scala b/src/main/scala/firrtl/Serialize.scala
index 0229bb57..1735c270 100644
--- a/src/main/scala/firrtl/Serialize.scala
+++ b/src/main/scala/firrtl/Serialize.scala
@@ -31,25 +31,29 @@ import firrtl.PrimOps._
import firrtl.Utils._
private object Serialize {
-
def serialize(root: AST): String = {
+ lazy val ser = new Serialize
root match {
- case r: PrimOp => serialize(r)
- case r: Expression => serialize(r)
- case r: Stmt => serialize(r)
- case r: Width => serialize(r)
- case r: Flip => serialize(r)
- case r: Field => serialize(r)
- case r: Type => serialize(r)
- case r: Direction => serialize(r)
- case r: Port => serialize(r)
- case r: Module => serialize(r)
- case r: Circuit => serialize(r)
- case r: StringLit => serialize(r)
+ case r: PrimOp => ser.serialize(r)
+ case r: Expression => ser.serialize(r)
+ case r: Stmt => ser.serialize(r)
+ case r: Width => ser.serialize(r)
+ case r: Flip => ser.serialize(r)
+ case r: Field => ser.serialize(r)
+ case r: Type => ser.serialize(r)
+ case r: Direction => ser.serialize(r)
+ case r: Port => ser.serialize(r)
+ case r: Module => ser.serialize(r)
+ case r: Circuit => ser.serialize(r)
+ case r: StringLit => ser.serialize(r)
case _ => throw new Exception("serialize called on unknown AST node!")
}
}
+ /** Creates new instance of Serialize */
+ def apply() = new Serialize
+}
+class Serialize {
def serialize(bi: BigInt): String =
if (bi < BigInt(0)) "\"h" + bi.toString(16).substring(1) + "\""
else "\"h" + bi.toString(16) + "\""