diff options
| author | Adam Izraelevitz | 2018-10-24 20:40:27 -0700 |
|---|---|---|
| committer | GitHub | 2018-10-24 20:40:27 -0700 |
| commit | 7e2f787e125227dc389d5cf1d09717748ecfed2e (patch) | |
| tree | 2c654726a5c9850440792cf673e91ed01e0bdfe4 /src/main/scala/firrtl/annotations/TargetToken.scala | |
| parent | f2c50e11c0e1ff3ed7b8ca3ae3d2d3b16f157453 (diff) | |
Instance Annotations (#865)
Added Target, which now supports Instance Annotations. See #865 for details.
Diffstat (limited to 'src/main/scala/firrtl/annotations/TargetToken.scala')
| -rw-r--r-- | src/main/scala/firrtl/annotations/TargetToken.scala | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/main/scala/firrtl/annotations/TargetToken.scala b/src/main/scala/firrtl/annotations/TargetToken.scala new file mode 100644 index 00000000..587f30eb --- /dev/null +++ b/src/main/scala/firrtl/annotations/TargetToken.scala @@ -0,0 +1,46 @@ +// See LICENSE for license details. + +package firrtl.annotations + +/** Building block to represent a [[Target]] of a FIRRTL component */ +sealed trait TargetToken { + def keyword: String + def value: Any + + /** Returns whether this token is one of the type of tokens whose keyword is passed as an argument + * @param keywords + * @return + */ + def is(keywords: String*): Boolean = { + keywords.map { kw => + require(TargetToken.keyword2targettoken.keySet.contains(kw), + s"Keyword $kw must be in set ${TargetToken.keyword2targettoken.keys}") + val lastClass = this.getClass + lastClass == TargetToken.keyword2targettoken(kw)("0").getClass + }.reduce(_ || _) + } +} + +/** Object containing all [[TargetToken]] subclasses */ +case object TargetToken { + case class Instance(value: String) extends TargetToken { override def keyword: String = "inst" } + case class OfModule(value: String) extends TargetToken { override def keyword: String = "of" } + case class Ref(value: String) extends TargetToken { override def keyword: String = "ref" } + case class Index(value: Int) extends TargetToken { override def keyword: String = "[]" } + case class Field(value: String) extends TargetToken { override def keyword: String = "." } + case object Clock extends TargetToken { override def keyword: String = "clock"; val value = "" } + case object Init extends TargetToken { override def keyword: String = "init"; val value = "" } + case object Reset extends TargetToken { override def keyword: String = "reset"; val value = "" } + + val keyword2targettoken = Map( + "inst" -> ((value: String) => Instance(value)), + "of" -> ((value: String) => OfModule(value)), + "ref" -> ((value: String) => Ref(value)), + "[]" -> ((value: String) => Index(value.toInt)), + "." -> ((value: String) => Field(value)), + "clock" -> ((value: String) => Clock), + "init" -> ((value: String) => Init), + "reset" -> ((value: String) => Reset) + ) +} + |
