aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Koenig2021-10-08 17:09:55 -0700
committerGitHub2021-10-09 00:09:55 +0000
commitef1d27a84addc46353884eb06ea18f4c68e6a808 (patch)
tree315bec8bfb3eacdb7da9478d2b458cffce0a087e
parentd705335ed4a0af3371ad77ad5952700ea80f0be2 (diff)
Support parsing missing keywords as ids (#2381)
Reset, AsyncReset, Interval, attach, assert, assume, and cover have all been added as keywords but not added to the allowlist for parsing as ids.
-rw-r--r--src/main/antlr4/FIRRTL.g47
-rw-r--r--src/test/scala/firrtlTests/ParserSpec.scala18
2 files changed, 24 insertions, 1 deletions
diff --git a/src/main/antlr4/FIRRTL.g4 b/src/main/antlr4/FIRRTL.g4
index aa53f2f0..f5116485 100644
--- a/src/main/antlr4/FIRRTL.g4
+++ b/src/main/antlr4/FIRRTL.g4
@@ -225,8 +225,11 @@ keywordAsId
| 'UInt'
| 'SInt'
| 'Clock'
+ | 'Reset'
+ | 'AsyncReset'
| 'Analog'
| 'Fixed'
+ | 'Interval'
| 'flip'
| 'wire'
| 'reg'
@@ -259,6 +262,10 @@ keywordAsId
| 'read'
| 'write'
| 'rdwr'
+ | 'attach'
+ | 'assert'
+ | 'assume'
+ | 'cover'
;
// Parentheses are added as part of name because semantics require no space between primop and open parentheses
diff --git a/src/test/scala/firrtlTests/ParserSpec.scala b/src/test/scala/firrtlTests/ParserSpec.scala
index ba61b134..5183a6f2 100644
--- a/src/test/scala/firrtlTests/ParserSpec.scala
+++ b/src/test/scala/firrtlTests/ParserSpec.scala
@@ -48,8 +48,11 @@ class ParserSpec extends FirrtlFlatSpec {
"SInt",
"Analog",
"Fixed",
+ "Interval",
"flip",
"Clock",
+ "Reset",
+ "AsyncReset",
"wire",
"reg",
"reset",
@@ -80,7 +83,11 @@ class ParserSpec extends FirrtlFlatSpec {
"infer",
"read",
"write",
- "rdwr"
+ "rdwr",
+ "attach",
+ "assert",
+ "assume",
+ "cover"
) ++ PrimOps.listing
}
@@ -183,6 +190,15 @@ class ParserSpec extends FirrtlFlatSpec {
}
}
+ they should "be allowed as names for side effecting statements" in {
+ import KeywordTests._
+ keywords.foreach { keyword =>
+ firrtl.Parser.parse {
+ prelude :+ s""" assert($keyword, UInt(1), UInt(1), "") : $keyword"""
+ }
+ }
+ }
+
// ********** Digits as Fields **********
"Digits" should "be legal fields in bundles and in subexpressions" in {
val input = """