summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2010-06-22 16:03:34 +0200
committerAlexander Larsson <alexl@redhat.com>2010-06-22 16:03:34 +0200
commit381025b1c3101548f478dacfa09fa13596a6d1d8 (patch)
treef303f983221f684122c3bf745feb325081ddacff
parent759a3d5446a5ebeaf074529c28bc97ad0599ef39 (diff)
downloadspice-381025b1c3101548f478dacfa09fa13596a6d1d8.tar.gz
spice-381025b1c3101548f478dacfa09fa13596a6d1d8.tar.xz
spice-381025b1c3101548f478dacfa09fa13596a6d1d8.zip
Add support for @virtual markup in spice protocol
This means the member is not sent on the network at all. Instead its initialized to the attribute argument when demarshalled. This is useful for backwards compatibility support.
-rw-r--r--python_modules/demarshal.py7
-rw-r--r--python_modules/marshal.py3
-rw-r--r--python_modules/ptypes.py4
3 files changed, 14 insertions, 0 deletions
diff --git a/python_modules/demarshal.py b/python_modules/demarshal.py
index eee659f1..a0697a91 100644
--- a/python_modules/demarshal.py
+++ b/python_modules/demarshal.py
@@ -400,6 +400,9 @@ def write_validate_item(writer, container, item, scope, parent_scope, start,
def write_validate_member(writer, container, member, parent_scope, start,
want_nw_size, want_mem_size, want_extra_size):
+ if member.has_attr("virtual"):
+ return
+
if member.has_minor_attr():
prefix = "if (minor >= %s)" % (member.get_minor_attr())
newline = False
@@ -740,6 +743,10 @@ def write_parse_pointer(writer, t, at_end, dest, member_name, is_64bit, scope):
writer.statement("n_ptr++")
def write_member_parser(writer, container, member, dest, scope):
+ if member.has_attr("virtual"):
+ writer.assign(dest.get_ref(member.name), member.attributes["virtual"][0])
+ return
+
if member.is_switch():
write_switch_parser(writer, container, member, dest, scope)
return
diff --git a/python_modules/marshal.py b/python_modules/marshal.py
index c4bb896f..c5afd7cf 100644
--- a/python_modules/marshal.py
+++ b/python_modules/marshal.py
@@ -266,6 +266,9 @@ def write_switch_marshaller(writer, container, switch, src, scope):
def write_member_marshaller(writer, container, member, src, scope):
if member.has_attr("outvar"):
writer.out_prefix = "%s_%s" % (member.attributes["outvar"][0], writer.out_prefix)
+ if member.has_attr("virtual"):
+ writer.comment("Don't marshall @virtual %s" % member.name).newline()
+ return
if member.has_attr("nomarshal"):
writer.comment("Don't marshall @nomarshal %s" % member.name).newline()
return
diff --git a/python_modules/ptypes.py b/python_modules/ptypes.py
index fe8a3212..101538ca 100644
--- a/python_modules/ptypes.py
+++ b/python_modules/ptypes.py
@@ -518,9 +518,13 @@ class Member(Containee):
return self.has_end_attr()
def is_fixed_nw_size(self):
+ if self.has_attr("virtual"):
+ return True
return self.member_type.is_fixed_nw_size()
def get_fixed_nw_size(self):
+ if self.has_attr("virtual"):
+ return 0
size = self.member_type.get_fixed_nw_size()
if self.has_minor_attr():
minor = self.get_minor_attr()