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
|
return all_fields
|
||||||
|
|
||||||
def get_expr_fields(self):
|
|
||||||
|
def get_expr_field_names(expr):
|
||||||
"""
|
"""
|
||||||
get the Fields referenced by switch or list expression
|
returns a list of field names referenced in an expression
|
||||||
"""
|
"""
|
||||||
def get_expr_field_names(expr):
|
|
||||||
if expr.op is None or expr.op == 'calculate_len':
|
if expr.op is None or expr.op == 'calculate_len':
|
||||||
if expr.lenfield_name is not None:
|
if expr.lenfield_name is not None:
|
||||||
return [expr.lenfield_name]
|
return [expr.lenfield_name]
|
||||||
else:
|
|
||||||
# constant value expr
|
# constant value expr
|
||||||
return []
|
return []
|
||||||
else:
|
|
||||||
if expr.op == '~':
|
if expr.op == '~':
|
||||||
return get_expr_field_names(expr.rhs)
|
return get_expr_field_names(expr.rhs)
|
||||||
elif expr.op == 'popcount':
|
if expr.op == 'popcount':
|
||||||
return get_expr_field_names(expr.rhs)
|
return get_expr_field_names(expr.rhs)
|
||||||
elif expr.op == 'sumof':
|
if expr.op == 'sumof':
|
||||||
# sumof expr references another list,
|
# sumof expr references another list,
|
||||||
# we need that list's length field here
|
# we need that list's length field here
|
||||||
field = None
|
field = None
|
||||||
|
@ -677,11 +676,15 @@ def get_expr_fields(self):
|
||||||
raise Exception("list field '%s' referenced by sumof not found" % expr.lenfield_name)
|
raise Exception("list field '%s' referenced by sumof not found" % expr.lenfield_name)
|
||||||
# referenced list + its length field
|
# referenced list + its length field
|
||||||
return [expr.lenfield_name] + get_expr_field_names(field.type.expr)
|
return [expr.lenfield_name] + get_expr_field_names(field.type.expr)
|
||||||
elif expr.op == 'enumref':
|
if expr.op == 'enumref':
|
||||||
return []
|
return []
|
||||||
else:
|
|
||||||
return get_expr_field_names(expr.lhs) + get_expr_field_names(expr.rhs)
|
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)
|
# resolve the field names with the parent structure(s)
|
||||||
unresolved_fields_names = get_expr_field_names(self.expr)
|
unresolved_fields_names = get_expr_field_names(self.expr)
|
||||||
|
|
Loading…
Reference in New Issue