c_client: Extract _c_get_field_mapping_for_expr()
This commit is contained in:
parent
068af21cb3
commit
bdc3f21a52
|
@ -966,18 +966,15 @@ def _c_get_additional_type_params(type):
|
||||||
param_fields, wire_fields, params = get_serialize_params('sizeof', type)
|
param_fields, wire_fields, params = get_serialize_params('sizeof', type)
|
||||||
return params[1:]
|
return params[1:]
|
||||||
|
|
||||||
def _c_serialize_helper_list_field(context, self, field,
|
|
||||||
code_lines, temp_vars,
|
def _c_get_field_mapping_for_expr(self, expr, prefix):
|
||||||
space, prefix):
|
|
||||||
"""
|
"""
|
||||||
helper function to cope with lists of variable length
|
helper function to get field mapping of a particular expression.
|
||||||
"""
|
"""
|
||||||
expr = field.type.expr
|
|
||||||
prefix_str = _c_helper_fieldaccess_expr(prefix)
|
|
||||||
param_fields, wire_fields, params = get_serialize_params('sizeof', self)
|
param_fields, wire_fields, params = get_serialize_params('sizeof', self)
|
||||||
param_names = [p[2] for p in params]
|
param_names = [p[2] for p in params]
|
||||||
|
|
||||||
expr_fields_names = get_expr_field_names(field.type.expr)
|
expr_fields_names = get_expr_field_names(expr)
|
||||||
resolved = [x for x in expr_fields_names if x in param_names]
|
resolved = [x for x in expr_fields_names if x in param_names]
|
||||||
unresolved = [x for x in expr_fields_names if x not in param_names]
|
unresolved = [x for x in expr_fields_names if x not in param_names]
|
||||||
|
|
||||||
|
@ -996,6 +993,21 @@ def _c_serialize_helper_list_field(context, self, field,
|
||||||
unresolved = [x for x in unresolved if x not in field_mapping]
|
unresolved = [x for x in unresolved if x not in field_mapping]
|
||||||
if len(unresolved)>0:
|
if len(unresolved)>0:
|
||||||
raise Exception('could not resolve the length fields required for list %s' % field.c_field_name)
|
raise Exception('could not resolve the length fields required for list %s' % field.c_field_name)
|
||||||
|
|
||||||
|
return field_mapping
|
||||||
|
|
||||||
|
|
||||||
|
def _c_serialize_helper_list_field(context, self, field,
|
||||||
|
code_lines, temp_vars,
|
||||||
|
space, prefix):
|
||||||
|
"""
|
||||||
|
helper function to cope with lists of variable length
|
||||||
|
"""
|
||||||
|
expr = field.type.expr
|
||||||
|
prefix_str = _c_helper_fieldaccess_expr(prefix)
|
||||||
|
|
||||||
|
field_mapping = _c_get_field_mapping_for_expr(self, field.type.expr, prefix)
|
||||||
|
|
||||||
if expr.op == 'calculate_len':
|
if expr.op == 'calculate_len':
|
||||||
list_length = field.type.expr.lenfield_name
|
list_length = field.type.expr.lenfield_name
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in New Issue