Hey,

Can you prefix all your commits with either dissector: or codegen: ?
dissector: if it touches dissector.py or the tests in codegen/, and
codegen: if it touches python_modules.py? (and when it touches both,
make it 'dissector:').

On Tue, Jul 21, 2015 at 05:45:48PM +0100, Frediano Ziglio wrote:
> Specifying attributes for items allows to specify different attribute

'different attributes' ?

> for the same member where some are specific to the item while the
> other to the array.

'others' if the first one should have been a plural.

> The element attributes are attached to the array as they cannot be
> attached to the type as the object is unique for each type.
> Same for pointers but in this case these attributes are attached
> directly to the pointer.
> 
> Signed-off-by: Frediano Ziglio <fzig...@redhat.com>
> ---
>  python_modules/ptypes.py       |  9 +++++++--
>  python_modules/spice_parser.py | 18 +++++++++++-------
>  2 files changed, 18 insertions(+), 9 deletions(-)
> 
> diff --git a/python_modules/ptypes.py b/python_modules/ptypes.py
> index 3a1acbd..a899b6c 100644
> --- a/python_modules/ptypes.py
> +++ b/python_modules/ptypes.py
> @@ -480,12 +480,16 @@ class FlagsType(EnumBaseType):
>          writer.newline()
>  
>  class ArrayType(Type):
> -    def __init__(self, element_type, size):
> +    def __init__(self, element_type, size, item_attribute_list):
>          Type.__init__(self)
>          self.name = None
>  
>          self.element_type = element_type
>          self.size = size
> +        self.item_attrs = fix_attributes(item_attribute_list)
> +        wrong = [k for k in self.item_attrs.keys() if k[:2] != 'ws']
> +        if len(wrong) != 0:
> +            assert False, 'Attributes %s not expected in item list' % wrong
>  
>      def __str__(self):
>          if self.size == None:
> @@ -560,11 +564,12 @@ class ArrayType(Type):
>          return self.element_type.c_type()
>  
>  class PointerType(Type):
> -    def __init__(self, target_type):
> +    def __init__(self, target_type, attribute_list):
>          Type.__init__(self)
>          self.name = None
>          self.target_type = target_type
>          self.pointer_size = default_pointer_size
> +        self.attributes = fix_attributes(attribute_list)
>  
>      def __str__(self):
>          return "%s*" % (str(self.target_type))
> diff --git a/python_modules/spice_parser.py b/python_modules/spice_parser.py
> index 06000a4..5326e59 100644
> --- a/python_modules/spice_parser.py
> +++ b/python_modules/spice_parser.py
> @@ -16,16 +16,20 @@ cvtInt = lambda toks: int(toks[0])
>  
>  def parseVariableDef(toks):
>      t = toks[0][0]
> -    pointer = toks[0][1]
> -    name = toks[0][2]
> -    array_size = toks[0][3]
> -    attributes = toks[0][4]
> +    item_attrs = toks[0][1]
> +    pointer = toks[0][2]
> +    pointer_attrs = toks[0][3]
> +    name = toks[0][4]
> +    array_size = toks[0][5]
> +    attributes = toks[0][6]
>  
>      if array_size != None:
> -        t = ptypes.ArrayType(t, array_size)
> +        t = ptypes.ArrayType(t, array_size, item_attrs)
> +    else:
> +        assert len(item_attrs) == 0, "Cannot specify item attributes without 
> an array"
>  
>      if pointer != None:
> -        t = ptypes.PointerType(t)
> +        t = ptypes.PointerType(t, pointer_attrs)
>  
>      return ptypes.Member(name, t, attributes)
>  
> @@ -105,7 +109,7 @@ def SPICE_BNF():
>          arraySizeSpecBytes = Group(bytes_ + lparen + identifier + comma + 
> identifier + rparen)
>          arraySizeSpecCString = Group(cstring_ + lparen + rparen)
>          arraySizeSpec = lbrack + Optional(identifier ^ integer ^ 
> arraySizeSpecImage ^ arraySizeSpecBytes ^arraySizeSpecCString, default="") + 
> rbrack
> -        variableDef = Group(typeSpec + Optional("*", default=None) + 
> identifier + Optional(arraySizeSpec, default=None) + attributes - semi) \
> +        variableDef = Group(typeSpec + attributes + Optional("*", 
> default=None) + attributes + identifier + Optional(arraySizeSpec, 
> default=None) + attributes - semi) \
>              .setParseAction(parseVariableDef)
>  
>          switchCase = 
> Group(Group(OneOrMore(default_.setParseAction(replaceWith(None)) + colon | 
> Group(case_.suppress() + Optional("!", default="") + identifier) + colon)) + 
> variableDef) \
> -- 
> 2.1.0
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel

Attachment: pgp3nn3xgwDNR.pgp
Description: PGP signature

_______________________________________________
Spice-devel mailing list
Spice-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/spice-devel

Reply via email to