qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 2/3] qapi.py: Allow top-level type reference


From: Michael Roth
Subject: Re: [Qemu-devel] [PATCH v3 2/3] qapi.py: Allow top-level type reference for command definitions
Date: Mon, 1 Jul 2013 11:27:39 -0500

On Mon, Jul 1, 2013 at 9:31 AM, Kevin Wolf <address@hidden> wrote:
> If 'data' for a command definition isn't a dict, but a string, it is
> taken as a (struct) type name and the fields of this struct are directly
> used as parameters.
>
> This is useful for transactionable commands that can use the same type
> definition for both the transaction action and the arguments of the
> standalone command.
>
> Signed-off-by: Kevin Wolf <address@hidden>

Reviewed-by: Michael Roth <address@hidden>

> ---
>  scripts/qapi.py | 19 +++++++++++++++++++
>  1 file changed, 19 insertions(+)
>
> diff --git a/scripts/qapi.py b/scripts/qapi.py
> index 3139994..baf1321 100644
> --- a/scripts/qapi.py
> +++ b/scripts/qapi.py
> @@ -106,11 +106,18 @@ def parse_schema(fp):
>              add_enum(expr_eval['enum'])
>          elif expr_eval.has_key('union'):
>              add_enum('%sKind' % expr_eval['union'])
> +        elif expr_eval.has_key('type'):
> +            add_struct(expr_eval)
>          exprs.append(expr_eval)
>
>      return exprs
>
>  def parse_args(typeinfo):
> +    if isinstance(typeinfo, basestring):
> +        struct = find_struct(typeinfo)
> +        assert struct != None
> +        typeinfo = struct['data']
> +
>      for member in typeinfo:
>          argname = member
>          argentry = typeinfo[member]
> @@ -180,6 +187,18 @@ def type_name(name):
>      return name
>
>  enum_types = []
> +struct_types = []
> +
> +def add_struct(definition):
> +    global struct_types
> +    struct_types.append(definition)
> +
> +def find_struct(name):
> +    global struct_types
> +    for struct in struct_types:
> +        if struct['type'] == name:
> +            return struct
> +    return None
>
>  def add_enum(name):
>      global enum_types
> --
> 1.8.1.4
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]