[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
>