[Spice-devel] [PATCH 07/33] codegen: Do some check on attributes

Christophe Fergeau cfergeau at redhat.com
Mon Jul 20 11:10:48 PDT 2015


On Wed, Jul 01, 2015 at 06:09:59PM +0100, Frediano Ziglio wrote:
> Verify that the attribute is known. This could help for instance to
> avoid some future typo mistake.
> Also we have a list of attributes we can comment.
> 
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
>  python_modules/ptypes.py | 69 ++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 69 insertions(+)
> 
> diff --git a/python_modules/ptypes.py b/python_modules/ptypes.py
> index 845fa73..3a307ed 100644
> --- a/python_modules/ptypes.py
> +++ b/python_modules/ptypes.py
> @@ -62,11 +62,76 @@ class FixedSize:
>  # other members
>  propagated_attributes=["ptr_array", "nonnull", "chunk"]
>  
> +valid_attributes={
> +    # write to an array at end of structure

"embedded/appended at the end of the structure" maybe ?

> +    'end',
> +    # the C structure contain a pointer to data

contains

> +    # for instance we want to write an array to an allocated array
> +    'to_ptr',
> +    # write output to this C structure
> +    'ctype',
> +    # prefix for flags/values enumerations
> +    'prefix',
> +    # use in demarshaller to use directly data from message without copy
> +    'nocopy',
> +    # store member array in a pointer
> +    # similar to to_ptr but has an additional argument as C field to
> +    # store length
> +    'as_ptr',
> +    # do not generate marshal code
> +    # used for last members to be able to marshall them manually
> +    'nomarshal',
> +    # ??? not used by python code

Given the name, probably meant to annotate \0 strings, or NULL
terminated char **, or stuff like that ?

> +    'zero_terminated',
> +    'marshall',
> +    # this pointer member cannot be null
> +    'nonnull',
> +    # this flags member contains only a single flag

'flag' rather than 'flags' ?

> +    'unique_flag',
> +    'ptr_array',
> +    'outvar',
> +    # C structure has anonymous member (used in switch)

'has an anonymous'

> +    'anon',
> +    'chunk',
> +    # this channel if conditional to an #ifdef

I cannot really parse this one, could you reformulate ?

> +    'ifdef',
> +    # write this member as zero on network
> +    'zero',
> +    # specify minor version required for these members
> +    'minor',
> +    'bytes_count',
> +    # this attribute does not exists on the network, fill just structure with the value
> +    'virtual',
> +    # for a switch this indicate that on network

indicates

Looks good otherwise

> +    # will occupy always same size (maximum size required for all members)
> +    'fixedsize',
> +    # use 32 bit pointer
> +    'ptr32',
> +}
> +
> +attributes_with_arguments={
> +    'ctype',
> +    'prefix',
> +    'as_ptr',
> +    'outvar',
> +    'ifdef',
> +    'minor',
> +    'bytes_count',
> +    'virtual',
> +}
> +
>  def fix_attributes(attribute_list):
>      attrs = {}
>      for attr in attribute_list:
>          name = attr[0][1:]
>          lst = attr[1:]
> +        if not name in valid_attributes:
> +            raise Exception("Attribute %s not recognized" % name)
> +        if not name in attributes_with_arguments:
> +            if len(lst) > 0:
> +                raise Exception("Attribute %s specified with options" % name)
> +        elif len(lst) > 1:
> +            raise Exception("Attribute %s has more than 1 argument" % name)
>          attrs[name] = lst
>      return attrs
>  
> @@ -139,6 +204,8 @@ class Type:
>          _types_by_name[self.name] = self
>  
>      def has_attr(self, name):
> +        if not name in valid_attributes:
> +            raise Exception('attribute %s not expected' % name)
>          return name in self.attributes
>  
>  class TypeRef(Type):
> @@ -522,6 +589,8 @@ class Containee:
>          return not self.is_switch() and self.member_type.is_primitive()
>  
>      def has_attr(self, name):
> +        if not name in valid_attributes:
> +            raise Exception('attribute %s not expected' % name)
>          return name in self.attributes
>  
>      def has_minor_attr(self):
> -- 
> 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/20150720/d8755c02/attachment.sig>


More information about the Spice-devel mailing list