Skip to content

Commit 33b6b2d

Browse files
authored
add type safe API to access OM (#4558)
1 parent 4232cae commit 33b6b2d

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

panamaom/src/PanamaCIRCTOM.scala

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,61 @@ class PanamaCIRCTOMEvaluator private[chisel3] (circt: PanamaCIRCT, mlirModule: M
3232
abstract class PanamaCIRCTOMEvaluatorValue {
3333
val circt: PanamaCIRCT
3434
val value: OMEvaluatorValue
35+
def objOpt: Option[PanamaCIRCTOMEvaluatorValueObject] =
36+
this match {
37+
case valueObject: PanamaCIRCTOMEvaluatorValueObject => Some(valueObject)
38+
case _ => None
39+
}
40+
def obj: PanamaCIRCTOMEvaluatorValueObject = objOpt.get
41+
42+
def basePathOpt: Option[PanamaCIRCTOMEvaluatorValueBasePath] =
43+
this match {
44+
case path: PanamaCIRCTOMEvaluatorValueBasePath => Some(path)
45+
case _ => None
46+
}
47+
def basePath: PanamaCIRCTOMEvaluatorValueBasePath = basePathOpt.get
48+
49+
def listOpt: Option[PanamaCIRCTOMEvaluatorValueList] =
50+
this match {
51+
case list: PanamaCIRCTOMEvaluatorValueList => Some(list)
52+
case _ => None
53+
}
54+
def list: PanamaCIRCTOMEvaluatorValueList = listOpt.get
55+
56+
def mapOpt: Option[PanamaCIRCTOMEvaluatorValueMap] =
57+
this match {
58+
case map: PanamaCIRCTOMEvaluatorValueMap => Some(map)
59+
case _ => None
60+
}
61+
def mapPath: PanamaCIRCTOMEvaluatorValueMap = mapOpt.get
62+
63+
def pathOpt: Option[PanamaCIRCTOMEvaluatorValuePath] =
64+
this match {
65+
case path: PanamaCIRCTOMEvaluatorValuePath => Some(path)
66+
case _ => None
67+
}
68+
def path: PanamaCIRCTOMEvaluatorValuePath = pathOpt.get
69+
70+
def intOpt: Option[PanamaCIRCTOMEvaluatorValuePrimitiveInteger] =
71+
this match {
72+
case integer: PanamaCIRCTOMEvaluatorValuePrimitiveInteger => Some(integer)
73+
case _ => None
74+
}
75+
def int: PanamaCIRCTOMEvaluatorValuePrimitiveInteger = intOpt.get
76+
77+
def stringOpt: Option[PanamaCIRCTOMEvaluatorValuePrimitiveString] =
78+
this match {
79+
case string: PanamaCIRCTOMEvaluatorValuePrimitiveString => Some(string)
80+
case _ => None
81+
}
82+
def string: PanamaCIRCTOMEvaluatorValuePrimitiveString = stringOpt.get
83+
84+
def tupleOpt: Option[PanamaCIRCTOMEvaluatorValueTuple] =
85+
this match {
86+
case tuple: PanamaCIRCTOMEvaluatorValueTuple => Some(tuple)
87+
case _ => None
88+
}
89+
def tuple: PanamaCIRCTOMEvaluatorValueTuple = tupleOpt.get
3590

3691
// Incomplete. currently for debugging purposes only
3792
override def toString: String = {
@@ -148,6 +203,7 @@ class PanamaCIRCTOMEvaluatorValuePrimitiveString private[chisel3] (
148203

149204
class PanamaCIRCTOMEvaluatorValueObject private[chisel3] (val circt: PanamaCIRCT, val value: OMEvaluatorValue)
150205
extends PanamaCIRCTOMEvaluatorValue {
206+
def apply(name: String): PanamaCIRCTOMEvaluatorValue = field(name)
151207
def field(name: String): PanamaCIRCTOMEvaluatorValue =
152208
PanamaCIRCTOMEvaluatorValue.newValue(circt, circt.omEvaluatorObjectGetField(value, name))
153209

0 commit comments

Comments
 (0)