diff options
| author | Jack | 2016-02-02 11:49:38 -0800 |
|---|---|---|
| committer | azidar | 2016-02-09 18:57:06 -0800 |
| commit | b2d9eacd26e8283f438bc6429770497290d5b9c3 (patch) | |
| tree | 4eff98b858a049bc533a6fcaf10888a331c6e773 /src/main/scala/firrtl/Visitor.scala | |
| parent | 43ecab5aec6751d05ac986570e0648bb3d90982a (diff) | |
Adding ScalaTest for unit testing of Scala FIRRTL. Added a few basic tests for the Parser. Added custom Parser exceptions for better error reporting and checking. Fixed bug in grammar not allowing most keywords as Ids
Diffstat (limited to 'src/main/scala/firrtl/Visitor.scala')
| -rw-r--r-- | src/main/scala/firrtl/Visitor.scala | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/main/scala/firrtl/Visitor.scala b/src/main/scala/firrtl/Visitor.scala index 3f5b64e6..2ba12b92 100644 --- a/src/main/scala/firrtl/Visitor.scala +++ b/src/main/scala/firrtl/Visitor.scala @@ -113,7 +113,7 @@ class Visitor(val fullFilename: String) extends FIRRTLBaseVisitor[AST] val seq = map getOrElse (field, Seq()) map + (field -> (seq :+ children(2))) } else { // data-type, depth, read-latency, write-latency, read-under-write - if (map.contains(field)) throw new Exception(s"Redefinition of mem field ${field}") + if (map.contains(field)) throw new ParameterRedefinedException(s"Redefinition of ${field}") else map + (field -> Seq(children(2))) } parseChildren(children.drop(3), newMap) // We consume tokens in groups of three (eg. 'depth' '=>' 5) @@ -124,8 +124,12 @@ class Visitor(val fullFilename: String) extends FIRRTLBaseVisitor[AST] // Build map of different Memory fields to their values val map = try { parseChildren(ctx.children.drop(4), Map[String, Seq[ParseTree]]()) // First 4 tokens are 'mem' id ':' '{', skip to fields - } catch { - case e: Exception => throw new Exception(s"[${info}] ${e.getMessage}") // attach line number + } catch { // attach line number + case e: ParameterRedefinedException => throw new ParameterRedefinedException(s"[${info}] ${e.message}") + } + // Check for required fields + Seq("data-type", "depth", "read-latency", "write-latency") foreach { field => + map.getOrElse(field, throw new ParameterNotSpecifiedException(s"[${info}] Required mem field ${field} not found")) } // Each memory field value has been left as ParseTree type, need to convert // TODO Improve? Remove dynamic typecast of data-type |
