[Spice-devel] [PATCH v3 18/51] Allows to specify attributes for array items and pointers

Christophe Fergeau cfergeau at redhat.com
Thu Jul 23 06:11:34 PDT 2015


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 <fziglio at 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 at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20150723/cfa733ad/attachment.sig>


More information about the Spice-devel mailing list