[Spice-commits] docs/spice_protocol.txt python_modules/ptypes.py python_modules/spice_parser.py spice.proto

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Apr 7 09:24:57 UTC 2020


 docs/spice_protocol.txt        |    6 ++++++
 python_modules/ptypes.py       |   22 ++++++++++++++--------
 python_modules/spice_parser.py |    2 +-
 spice.proto                    |    2 +-
 4 files changed, 22 insertions(+), 10 deletions(-)

New commits:
commit 61ce54ef6c1067ddc5bb210c560566ef46dd826e
Author: Frediano Ziglio <fziglio at redhat.com>
Date:   Thu Apr 2 12:56:10 2020 +0100

    proto: Allows to specify @deprecated option for flags and enums
    
    We want to obsolete from enumeration values, currently CELT.
    The removal of check in has_attr is not an issue, as the attributes
    are already checked by fix_attributes calls.
    
    Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
    Acked-by: Victor Toso <victortoso at redhat.com>

diff --git a/docs/spice_protocol.txt b/docs/spice_protocol.txt
index e0c27b8..48f67c7 100644
--- a/docs/spice_protocol.txt
+++ b/docs/spice_protocol.txt
@@ -438,6 +438,12 @@ This flag field should contain just a single flag.
 Actually it's not used by python code so it's not enforced and no
 code is generated.
 
+deprecated
+~~~~~~~~~~
+
+This flag currently apply only to enumerations and flags types and will set
+generated C enumeration constant to deprecated
+
 ptr_array
 ~~~~~~~~~
 
diff --git a/python_modules/ptypes.py b/python_modules/ptypes.py
index 5aa6e18..7b4146d 100644
--- a/python_modules/ptypes.py
+++ b/python_modules/ptypes.py
@@ -20,7 +20,7 @@ def get_named_types():
 # other members
 propagated_attributes=["ptr_array", "nonnull", "chunk"]
 
-valid_attributes=set([
+valid_attributes_generic=set([
     # embedded/appended at the end of the resulting C structure
     'end',
     # the C structure contains a pointer to data
@@ -86,7 +86,7 @@ attributes_with_arguments=set([
     'virtual',
 ])
 
-def fix_attributes(attribute_list):
+def fix_attributes(attribute_list, valid_attributes=valid_attributes_generic):
     attrs = {}
     for attr in attribute_list:
         name = attr[0][1:] # [1:] strips the leading '@' from the name
@@ -173,8 +173,6 @@ 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):
@@ -310,9 +308,10 @@ class EnumType(EnumBaseType):
         last = -1
         names = {}
         values = {}
+        attributes = {}
         for v in enums:
             name = v[0]
-            if len(v) > 1:
+            if v[1] is not None:
                 value = v[1]
             else:
                 value = last + 1
@@ -321,9 +320,11 @@ class EnumType(EnumBaseType):
             assert value not in names
             names[value] = name
             values[name] = value
+            attributes[value] = fix_attributes(v[2], set(['deprecated']))
 
         self.names = names
         self.values = values
+        self.val_attributes = attributes
 
         self.attributes = fix_attributes(attribute_list)
 
@@ -341,6 +342,8 @@ class EnumType(EnumBaseType):
             writer.write(self.c_enumname(i))
             if i != current_default:
                 writer.write(" = %d" % (i))
+            if 'deprecated' in self.val_attributes[i]:
+                writer.write(' SPICE_GNUC_DEPRECATED')
             writer.write(",")
             writer.newline()
             current_default = i + 1
@@ -363,9 +366,10 @@ class FlagsType(EnumBaseType):
         last = -1
         names = {}
         values = {}
+        attributes = {}
         for v in flags:
             name = v[0]
-            if len(v) > 1:
+            if v[1] is not None:
                 value = v[1]
             else:
                 value = last + 1
@@ -374,9 +378,11 @@ class FlagsType(EnumBaseType):
             assert value not in names
             names[value] = name
             values[name] = value
+            attributes[value] = fix_attributes(v[2], set(['deprecated']))
 
         self.names = names
         self.values = values
+        self.val_attributes = attributes
 
         self.attributes = fix_attributes(attribute_list)
 
@@ -394,6 +400,8 @@ class FlagsType(EnumBaseType):
             writer.write(self.c_enumname(i))
             mask = mask |  (1<<i)
             writer.write(" = (1 << %d)" % (i))
+            if 'deprecated' in self.val_attributes[i]:
+                writer.write(' SPICE_GNUC_DEPRECATED')
             writer.write(",")
             writer.newline()
             current_default = i + 1
@@ -600,8 +608,6 @@ 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_end_attr(self):
diff --git a/python_modules/spice_parser.py b/python_modules/spice_parser.py
index db3cc8d..6fa3fc8 100644
--- a/python_modules/spice_parser.py
+++ b/python_modules/spice_parser.py
@@ -112,7 +112,7 @@ def SPICE_BNF():
                      int32_ ^ uint32_ ^ int64_ ^ uint64_ ^ unix_fd_ ^
                      typename).setName("type")
 
-        flagsBody = enumBody = Group(lbrace + delimitedList(Group (enumname + Optional(equals + integer))) + Optional(comma) + rbrace)
+        flagsBody = enumBody = Group(lbrace + delimitedList(Group (enumname + Optional(equals + integer, default=None) + attributes)) + Optional(comma) + rbrace)
 
         messageSpec = Group(message_ + messageBody + attributes).setParseAction(lambda toks: ptypes.MessageType(None, toks[0][1], toks[0][2])) | typename
 
diff --git a/spice.proto b/spice.proto
index d9b419e..2042754 100644
--- a/spice.proto
+++ b/spice.proto
@@ -1163,7 +1163,7 @@ channel CursorChannel : BaseChannel {
 enum16 audio_data_mode {
     INVALID,
     RAW,
-    CELT_0_5_1,
+    CELT_0_5_1 @deprecated,
     OPUS,
 };
 


More information about the Spice-commits mailing list