[Xcb] [PATCH proto 1/1 RESEND] Calculate length of lengthless lists

Christian Linhart chris at DemoRecorder.com
Sun Mar 22 04:11:54 PDT 2015


Hi Jaya,

Thank you for the revised patch.
The empty line has fewer whitespace, but there are still some blank-characters left.
But I stop nitpicking about blanks now. :-)
(I'll fix the blanks during merging.)

I'll wait for a week to give others some more time for review.
If there are no reviews or only ACKs until then, then I'll push your two patches to upstream next weekend.

Regards,

Chris

On 03/20/15 19:39, Jaya Tiwari wrote:
> Added handling of length less list elements which are the only
> variable part of the request.
> Such lists that are the only variable part with all other fixed sized
> elements declared before it are identified here.
>
> Signed-off-by: Jaya Tiwari <tiwari.jaya18 at gmail.com>
> ---
>  xcbgen/xtypes.py | 21 ++++++++++++++++++---
>  1 file changed, 18 insertions(+), 3 deletions(-)
>
> diff --git a/xcbgen/xtypes.py b/xcbgen/xtypes.py
> index 4d6bbc0..1e2ad55 100644
> --- a/xcbgen/xtypes.py
> +++ b/xcbgen/xtypes.py
> @@ -176,16 +176,27 @@ class ListType(Type):
>      parent is the structure type containing the list.
>      expr is an Expression object containing the length information, for variable-sized lists.
>      '''
> -    def __init__(self, elt, member, *parent):
> +    def __init__(self, elt, member, no_of_var_fields, *parent):
>          Type.__init__(self, member.name)
>          self.is_list = True
>          self.member = member
>          self.parents = list(parent)
> +        lenfield_name = False
> +        has_request = False
> +        has_lenfield_ref = False
> +        dont_have_len = False
>  
>          if elt.tag == 'list':
>              elts = list(elt)
> -            self.expr = Expression(elts[0] if len(elts) else elt, self)
>  
> +            if 'Request' in str(self.parents):
> +                has_request = True
> +            if not len(elts) and has_request and no_of_var_fields == 1:
> +                self.expr = Expression(elt,self)
> +                self.expr.op = 'calculate_len'
> +            else:
> +                self.expr = Expression(elts[0] if len(elts) else elt, self)
> +        
>          self.size = member.size if member.fixed_size() else None
>          self.nmemb = self.expr.nmemb if self.expr.fixed_size() else None
>  
> @@ -302,7 +313,11 @@ class ComplexType(Type):
>          if self.resolved:
>              return
>          enum = None
> +	no_of_var_fields = 0
>  
> +	for child in list(self.elt):
> +	    if child.tag != 'pad' and child.tag != 'field':
> +		no_of_var_fields = no_of_var_fields + 1
>          # Resolve all of our field datatypes.
>          for child in list(self.elt):
>              if child.tag == 'pad':
> @@ -325,7 +340,7 @@ class ComplexType(Type):
>              elif child.tag == 'list':
>                  field_name = child.get('name')
>                  fkey = child.get('type')
> -                type = ListType(child, module.get_type(fkey), *self.lenfield_parent)
> +                type = ListType(child, module.get_type(fkey), no_of_var_fields, *self.lenfield_parent)
>                  visible = True
>              elif child.tag == 'switch':
>                  field_name = child.get('name')



More information about the Xcb mailing list