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

Christian Linhart chris at DemoRecorder.com
Thu Mar 19 05:29:57 PDT 2015


Hi Jaya,

Thank you for this patch.

This patch together with your libxcb patch creates the "length" and "iterator"
functions for lengthless lists in requests correctly.

ABI and API compatibility is OK because it only changes parameter lists
of functions that were not present at all in the previous official release.

Therefore
Reviewed-by: Christian Linhart <chris at demorecorder.com>

BTW, there is one line with trailing whitespace. ( I have marked it below )
Can you please fix this line and repost your patch?

Thank you,

Chris

On 03/19/15 08:34, 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..414d3b6 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)
> +                
This line above has trailing whitespace. ( it contains only a lot of blank-characters )
>          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