c_client.py: Extract get_expr_field_names()
Signed-off-by: Povilas Kanapickas <povilas@radix.lt>
This commit is contained in:
parent
21414e7c44
commit
4d678b162b
|
@ -649,23 +649,22 @@ def _c_helper_resolve_field_names (prefix):
|
|||
|
||||
return all_fields
|
||||
|
||||
def get_expr_fields(self):
|
||||
"""
|
||||
get the Fields referenced by switch or list expression
|
||||
"""
|
||||
|
||||
def get_expr_field_names(expr):
|
||||
"""
|
||||
returns a list of field names referenced in an expression
|
||||
"""
|
||||
if expr.op is None or expr.op == 'calculate_len':
|
||||
if expr.lenfield_name is not None:
|
||||
return [expr.lenfield_name]
|
||||
else:
|
||||
# constant value expr
|
||||
return []
|
||||
else:
|
||||
|
||||
if expr.op == '~':
|
||||
return get_expr_field_names(expr.rhs)
|
||||
elif expr.op == 'popcount':
|
||||
if expr.op == 'popcount':
|
||||
return get_expr_field_names(expr.rhs)
|
||||
elif expr.op == 'sumof':
|
||||
if expr.op == 'sumof':
|
||||
# sumof expr references another list,
|
||||
# we need that list's length field here
|
||||
field = None
|
||||
|
@ -677,11 +676,15 @@ def get_expr_fields(self):
|
|||
raise Exception("list field '%s' referenced by sumof not found" % expr.lenfield_name)
|
||||
# referenced list + its length field
|
||||
return [expr.lenfield_name] + get_expr_field_names(field.type.expr)
|
||||
elif expr.op == 'enumref':
|
||||
if expr.op == 'enumref':
|
||||
return []
|
||||
else:
|
||||
return get_expr_field_names(expr.lhs) + get_expr_field_names(expr.rhs)
|
||||
# get_expr_field_names()
|
||||
|
||||
|
||||
def get_expr_fields(self):
|
||||
"""
|
||||
get the Fields referenced by switch or list expression
|
||||
"""
|
||||
|
||||
# resolve the field names with the parent structure(s)
|
||||
unresolved_fields_names = get_expr_field_names(self.expr)
|
||||
|
|
Loading…
Reference in New Issue