From: Daniel Martin Date: Mon, 13 May 2013 21:33:04 +0000 (+0200) Subject: c_client.py: Handle multiple expr. in a bitcase X-Git-Url: http://git.demorecorder.com/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e602b653c191e18cbb63db6526aac77c368ed70b;p=free-sw%2Fxcb%2Flibxcb 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 in a . Signed-off-by: Daniel Martin Signed-off-by: Peter Harris --- diff --git a/src/c_client.py b/src/c_client.py index ec66223..942e78a 100644 --- a/src/c_client.py +++ b/src/c_client.py @@ -687,10 +687,20 @@ def _c_serialize_helper_switch(context, self, complex_name, switch_expr = _c_accessor_get_expr(self.expr, None) for b in self.bitcases: - bitcase_expr = _c_accessor_get_expr(b.type.expr, None) - code_lines.append(' if(%s & %s) {' % (switch_expr, bitcase_expr)) -# code_lines.append(' printf("switch %s: entering bitcase section %s (mask=%%%%d)...\\n", %s);' % -# (self.name[-1], b.type.name[-1], bitcase_expr)) + len_expr = len(b.type.expr) + for n, expr in enumerate(b.type.expr): + bitcase_expr = _c_accessor_get_expr(expr, None) + # only one in the + if len_expr == 1: + code_lines.append(' if(%s & %s) {' % (switch_expr, bitcase_expr)) + # multiple in the + 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 if b.type.has_name: b_prefix = prefix + [(b.c_field_name, '.', b.type)]