[PATCH v3 07/51] codegen: Do some check on attributes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
---
 python_modules/ptypes.py | 72 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)

diff --git a/python_modules/ptypes.py b/python_modules/ptypes.py
index 845fa73..d8b6c90 100644
--- a/python_modules/ptypes.py
+++ b/python_modules/ptypes.py
@@ -62,11 +62,79 @@ class FixedSize:
 # other members
 propagated_attributes=["ptr_array", "nonnull", "chunk"]
 
+valid_attributes={
+    # embedded/appended at the end of the structure
+    'end',
+    # the C structure contains a pointer to data
+    # 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
+    'zero_terminated',
+    'marshall',
+    # this pointer member cannot be null
+    'nonnull',
+    # this flag member contains only a single flag
+    'unique_flag',
+    'ptr_array',
+    'outvar',
+    # C structure has an anonymous member (used in switch)
+    'anon',
+    'chunk',
+    # this channel is contained in an #ifdef section
+    # the argument specify the preprocessor define to check
+    'ifdef',
+    # write this member as zero on network
+    'zero',
+    # specify minor version required for these members
+    'minor',
+    # this member contains the byte count for an array.
+    # the argument is the member name for item count (not bytes)
+    'bytes_count',
+    # this attribute does not exists on the network, fill just structure with the value
+    'virtual',
+    # for a switch this indicates that on network
+    # 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 +207,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 +592,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@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]