[Xcb] [PATCH libxcb 2/3] generator: support lists of structs which contain a switch

Christian Linhart chris at DemoRecorder.com
Fri Sep 19 04:55:01 PDT 2014


On 09/09/14 18:09, Ran Benita wrote:
> On Thu, Aug 21, 2014 at 10:35:55PM +0200, Christian Linhart wrote:
[...]
>> Note:
>> This patch also fixes a problem in the generator when
>> a fixed-size list is the last field of a case or bitcase.
> 
> I'm not really qualified or have enough time to R-b this one, but from
> what I can see all of these changes make sense and look good.

Will it help when I explain this change in detail, 
or shall I wait until somebody else reviews it?

Chris

> 
> Ran
> 
>> ---
>>  src/c_client.py | 14 ++++++++++++--
>>  1 file changed, 12 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/c_client.py b/src/c_client.py
>> index fa59fff..1ed486c 100644
>> --- a/src/c_client.py
>> +++ b/src/c_client.py
>> @@ -354,15 +354,16 @@ def _c_type_setup(self, name, postfix):
>>              if field.type.is_list and not field.type.member.fixed_size():
>>                  field.c_pointer = '*'
>>  
>>              if field.type.is_switch:
>>                  field.c_pointer = '*'
>>                  field.c_field_const_type = 'const ' + field.c_field_type
>>                  self.c_need_aux = True
>> -            elif not field.type.fixed_size() and not field.type.is_case_or_bitcase:
>> +
>> +            if not field.type.fixed_size() and not field.type.is_case_or_bitcase:
>>                  self.c_need_sizeof = True
>>  
>>              field.c_iterator_type = _t(field.field_type + ('iterator',))      # xcb_fieldtype_iterator_t
>>              field.c_iterator_name = _n(name + (field.field_name, 'iterator')) # xcb_container_field_iterator
>>              field.c_accessor_name = _n(name + (field.field_name,))            # xcb_container_field
>>              field.c_length_name = _n(name + (field.field_name, 'length'))     # xcb_container_field_length
>>              field.c_end_name = _n(name + (field.field_name, 'end'))           # xcb_container_field_end
>> @@ -766,14 +767,18 @@ def _c_serialize_helper_switch_field(context, self, field, c_switch_variable, pr
>>      # call _serialize()/_unpack() to determine the actual size
>>      if 'serialize' == context:
>>          length = "%s(&%s, %s&%s%s)" % (field.type.c_serialize_name, c_switch_variable,
>>                                         c_field_names, prefix_str, field.c_field_name)
>>      elif context in ('unserialize', 'unpack'):
>>          length = "%s(xcb_tmp, %s&%s%s)" % (field.type.c_unpack_name,
>>                                             c_field_names, prefix_str, field.c_field_name)
>> +    elif 'sizeof' == context:
>> +        #remove trailing ", " from c_field_names because it will be used at end of arglist
>> +        my_c_field_names = c_field_names[:-2]
>> +        length = "%s( xcb_tmp, %s )" % ( field.type.c_sizeof_name, my_c_field_names )
>>  
>>      return length
>>  # _c_serialize_helper_switch_field()
>>  
>>  def _c_serialize_helper_list_field(context, self, field,
>>                                     code_lines, temp_vars,
>>                                     space, prefix):
>> @@ -1042,15 +1047,20 @@ def _c_serialize_helper_fields(context, self,
>>  
>>          if 'serialize' == context:
>>              if '' != length:
>>                  code_lines.append('%s    xcb_parts[xcb_parts_idx].iov_len = %s;' % (space, length))
>>              code_lines.append('%s    xcb_parts_idx++;' % space)
>>              count += 1
>>  
>> -        code_lines.append('%s    xcb_align_to = ALIGNOF(%s);' % (space, 'char' if field.c_field_type == 'void' else field.c_field_type))
>> +        code_lines.append(
>> +            '%s    xcb_align_to = ALIGNOF(%s);'
>> +             % (space,
>> +                 'char'
>> +                  if field.c_field_type == 'void' or field.type.is_switch
>> +                  else field.c_field_type))
>>  
>>          need_padding = True
>>          if self.c_var_followed_by_fixed_fields:
>>              need_padding = False
>>  
>>      return count
>>  # _c_serialize_helper_fields()
>> -- 
>> 2.0.1
>>
>> _______________________________________________
>> Xcb mailing list
>> Xcb at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/xcb
> _______________________________________________
> Xcb mailing list
> Xcb at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/xcb
> 



More information about the Xcb mailing list