diff options
-rw-r--r-- | python_modules/demarshal.py | 7 | ||||
-rw-r--r-- | python_modules/marshal.py | 3 | ||||
-rw-r--r-- | python_modules/ptypes.py | 4 |
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() |