c_client.py: Handle multiple expr. in a bitcase

Adopt a change from xcbgen. With that modification the expression in a
bitcase became a list of expressions to support multiple <enumref> in a
<bitcase>.

Signed-off-by: Daniel Martin <consume.noise@gmail.com>
Signed-off-by: Peter Harris <pharris@opentext.com>
This commit is contained in:
Daniel Martin 2013-05-13 23:33:04 +02:00 committed by Keith Packard
parent 1ac2822135
commit d2eefb77b9

View File

@ -687,10 +687,20 @@ def _c_serialize_helper_switch(context, self, complex_name,
switch_expr = _c_accessor_get_expr(self.expr, None) switch_expr = _c_accessor_get_expr(self.expr, None)
for b in self.bitcases: for b in self.bitcases:
bitcase_expr = _c_accessor_get_expr(b.type.expr, None) len_expr = len(b.type.expr)
code_lines.append(' if(%s & %s) {' % (switch_expr, bitcase_expr)) for n, expr in enumerate(b.type.expr):
# code_lines.append(' printf("switch %s: entering bitcase section %s (mask=%%%%d)...\\n", %s);' % bitcase_expr = _c_accessor_get_expr(expr, None)
# (self.name[-1], b.type.name[-1], bitcase_expr)) # only one <enumref> in the <bitcase>
if len_expr == 1:
code_lines.append(' if(%s & %s) {' % (switch_expr, bitcase_expr))
# multiple <enumref> in the <bitcase>
elif n == 0: # first
code_lines.append(' if((%s & %s) ||' % (switch_expr, bitcase_expr))
elif len_expr == (n + 1): # last
code_lines.append(' (%s & %s)) {' % (switch_expr, bitcase_expr))
else: # between first and last
code_lines.append(' (%s & %s) ||' % (switch_expr, bitcase_expr))
b_prefix = prefix b_prefix = prefix
if b.type.has_name: if b.type.has_name:
b_prefix = prefix + [(b.c_field_name, '.', b.type)] b_prefix = prefix + [(b.c_field_name, '.', b.type)]