[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