diff options
author | Christian Linhart <chris@DemoRecorder.com> | 2014-11-03 09:58:08 +0100 |
---|---|---|
committer | Christian Linhart <chris@demorecorder.com> | 2014-11-03 11:23:17 +0100 |
commit | 912cd97a6dd019e9e7ecf09c82c4577dd2ad7529 (patch) | |
tree | 840ca4673922461a5d76a63dee4fbb862c856239 | |
parent | 422458b66380e4103c4937f0e2e8bb93e31f273a (diff) |
generator: support listelement-ref
Support for listelement-ref needs the following three changes
(in the order as they appear in the patch):
* making the current list-element accessible with the variable
xcb_listelement which is a pointer to the list-element
* supporting lists of simple-type for sumof with a nested expression
* using the variable for resolving a listelement-ref expression
Changes for V2 of this patch:
- adapt to removal of patch "libxcb 2/6" from patchset "ListInputDevices".
Changes for V3 of this patch:
- adapt to V2 of patch "libxcb 5/6" from patchset "ListInputDevices"
Changes for V4 of this patch:
- adapt to revision 2 of the patchset "ListInputDevices"
Message-ID: <545743A0.50907@DemoRecorder.com>
Patch-Thread-Subject: [Xcb] support popcount of a list and associated xml changes
Patch-Set: PopcountList
Patch-Number: libxcb 4/4
Patch-Version: V4
Signed-off-by: Christian Linhart <chris@DemoRecorder.com>
-rw-r--r-- | src/c_client.py | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/c_client.py b/src/c_client.py index 88321f4..904bfce 100644 --- a/src/c_client.py +++ b/src/c_client.py @@ -1646,6 +1646,14 @@ def _c_accessor_get_expr(expr, field_mapping): _c_pre.code("for (%s = 0; %s < %s; %s++) {", loopvar, loopvar, lengthvar, loopvar) _c_pre.indent() + # define and set xcb_listelement, so that it can be used by + # listelement-ref expressions. + if expr.contains_listelement_ref: + _c_pre.code( + "const %s *xcb_listelement = %s;", + field.c_field_type, listvar) + + # summation if expr.rhs is None: _c_pre.code("%s += *%s;", sumvar, listvar) else: @@ -1655,10 +1663,11 @@ def _c_accessor_get_expr(expr, field_mapping): # field mapping for the subexpression needs to include # the fields of the list-member type scoped_field_mapping = field_mapping.copy() - scoped_field_mapping.update( - _c_helper_field_mapping( - field.type.member, - [(listvar, '->', field.type.member)])) + if not field.type.member.is_simple: + scoped_field_mapping.update( + _c_helper_field_mapping( + field.type.member, + [(listvar, '->', field.type.member)])) # cause pre-code of the subexpression be added right here _c_pre.end() @@ -1675,6 +1684,8 @@ def _c_accessor_get_expr(expr, field_mapping): _c_pre.code("/* sumof end. Result is in %s */", sumvar) _c_pre.end() return sumvar + elif expr.op == 'listelement-ref': + return '(*xcb_listelement)' elif expr.op != None: return ('(' + _c_accessor_get_expr(expr.lhs, field_mapping) + ' ' + expr.op + ' ' + |