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:
+ if needs_iterator:
+ _c_pre.code(
+ "const %s *xcb_listelement = %s.data;",
+ field.c_field_type, iteratorvar )
+ else:
+ _c_pre.code(
+ "const %s *xcb_listelement = %s;",
+ field.c_field_type, listvar )
+
+ #summation
if expr.rhs == None:
if needs_iterator:
_c_pre.code( "TODO" )
#field mapping for the subexpression needs to include
#the fields of the list-member type
scoped_field_mapping = field_mapping.copy()
- if needs_iterator:
- scoped_field_mapping.update(
- _c_helper_field_mapping(
- field.type.member,
- [( iteratorvar + ".data", '', field.type.member )] ) )
- else:
- scoped_field_mapping.update(
- _c_helper_field_mapping(
- field.type.member,
- [( listvar, '', field.type.member )] ) )
+ if not field.type.member.is_simple:
+ if needs_iterator:
+ scoped_field_mapping.update(
+ _c_helper_field_mapping(
+ field.type.member,
+ [( iteratorvar + ".data", '', field.type.member )] ) )
+ else:
+ 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()
_c_pre.end()
return sumvar;
#return 'xcb_sumof(%s, %s)' % (list_name, c_length_func)
+ elif expr.op == 'listelement-ref':
+ return '(*xcb_listelement)';
elif expr.op != None:
return ('(' + _c_accessor_get_expr(expr.lhs, field_mapping) +
' ' + expr.op + ' ' +