mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice-protocol
synced 2026-01-08 12:24:48 +00:00
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.
This commit is contained in:
parent
9f3a36f3f9
commit
ee944c8314
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user