xdrgen: Track constant values
In order to compute the numeric on-the-wire width of XDR types, xdrgen needs to keep track of the numeric value of constants that are defined in the input specification so it can perform calculations with those values. Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
@@ -19,6 +19,8 @@ public_apis = []
|
||||
structs = set()
|
||||
pass_by_reference = set()
|
||||
|
||||
constants = {}
|
||||
|
||||
|
||||
@dataclass
|
||||
class _XdrAst(ast_utils.Ast):
|
||||
@@ -156,6 +158,10 @@ class _XdrConstant(_XdrAst):
|
||||
name: str
|
||||
value: str
|
||||
|
||||
def __post_init__(self):
|
||||
if self.value not in constants:
|
||||
constants[self.name] = int(self.value, 0)
|
||||
|
||||
|
||||
@dataclass
|
||||
class _XdrEnumerator(_XdrAst):
|
||||
@@ -164,6 +170,10 @@ class _XdrEnumerator(_XdrAst):
|
||||
name: str
|
||||
value: str
|
||||
|
||||
def __post_init__(self):
|
||||
if self.value not in constants:
|
||||
constants[self.name] = int(self.value, 0)
|
||||
|
||||
|
||||
@dataclass
|
||||
class _XdrEnum(_XdrAst):
|
||||
|
||||
Reference in New Issue
Block a user