[Spice-devel] [PATCH v3 23/51] Write function to write members
Christophe Fergeau
cfergeau at redhat.com
Thu Jul 23 06:13:43 PDT 2015
On Tue, Jul 21, 2015 at 05:45:53PM +0100, Frediano Ziglio wrote:
> Check members are all of a giver type and call stubs for each type.
'given'
>
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
> python_modules/dissector.py | 50 +++++++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 48 insertions(+), 2 deletions(-)
>
> diff --git a/python_modules/dissector.py b/python_modules/dissector.py
> index ed3b939..cd653b3 100644
> --- a/python_modules/dissector.py
> +++ b/python_modules/dissector.py
> @@ -166,9 +166,55 @@ class SubDestination(Destination):
> return self.parent_dest.get_ref(self.member + "." + member, writer)
>
>
> -def write_member_parser(writer, container, member, dest, scope):
> +def write_switch(writer, container, switch, dest, scope):
> pass
>
> +def write_array(writer, container, member, array, dest, scope):
> + assert(container and member)
> +
> +def write_pointer(writer, container, member, t, dest, scope):
> + assert(t.is_pointer())
> +
> +def write_struct(writer, member, t, index, dest, scope):
> + assert(t.is_struct())
> +
> +def write_member_primitive(writer, container, member, t, dest, scope):
> + assert(t.is_primitive())
> +
> +def write_member(writer, container, member, dest, scope):
> +
> + if member.has_attr("virtual"):
> + dest.write_ref(writer, 32, member.name, member.attributes["virtual"][0])
> + return
> +
> + writer.comment(member.name)
> + writer.newline()
> +
> + if member.is_switch():
> + write_switch(writer, container, member, dest, scope)
> + return
> +
> + if member.has_attr('ws_as'):
> + type_name = member.attributes['ws_as'][0]
> + assert(ptypes.type_exists(type_name))
> + t = ptypes.lookup_type(type_name)
> + else:
> + t = member.member_type
> +
> + if t.is_pointer():
> + # TODO case not handled
> + if not member.has_attr("nocopy"):
> + write_pointer(writer, container, member, t, dest, scope)
> + elif t.is_primitive():
> + write_member_primitive(writer, container, member, t, dest, scope)
> + elif t.is_array():
> + write_array(writer, container, member, t, dest, scope)
> +
> + elif t.is_struct():
> + write_struct(writer, member, t, '-1', dest, scope)
> + else:
> + raise NotImplementedError("TODO can't handle parsing of %s" % t)
> +
> def write_container_parser(writer, container, dest):
> if container.has_attr('ws_as'):
> type_name = container.attributes['ws_as'][0]
> @@ -179,7 +225,7 @@ def write_container_parser(writer, container, dest):
> for m in container.members:
> if m.has_minor_attr():
> writer.begin_block("if (minor >= %s)" % m.get_minor_attr())
> - write_member_parser(writer, container, m, dest, scope)
> + write_member(writer, container, m, dest, scope)
> if m.has_minor_attr():
> writer.end_block()
>
> --
> 2.1.0
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20150723/282896a3/attachment-0001.sig>
More information about the Spice-devel
mailing list