qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v2 2/2] qapi: Allow setting default values for o


From: Eric Blake
Subject: Re: [Qemu-devel] [PATCH v2 2/2] qapi: Allow setting default values for optional parameters
Date: Tue, 29 Apr 2014 07:01:10 -0600
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.4.0

On 04/29/2014 03:44 AM, Fam Zheng wrote:
> In command definition, 'defaults' is now parsed as a dict of default
> values. Only optional parameters will have effect in generated code.
> 
> 'str' and 'int' are supported. In generated code, 'str' will be
> converted to g_strdup'ed string pointer, 'int' will be identically
> assigned.

In addition to Kevin's review...

> +++ b/docs/qapi-code-gen.txt
> @@ -172,12 +172,16 @@ This example allows using both of the following example 
> objects:
>  
>  Commands are defined by using a list containing three members.  The first
>  member is the command name, the second member is a dictionary containing
> -arguments, and the third member is the return type.
> +arguments, the third member is optional to define default values for optional
> +arguments in 'data' dictionary, and the fourth member is the return type.

This is a dictionary; order shouldn't be important; and since things can
be omitted, 'defaults' is not always the fourth entry.  That is,

{ 'command': 'my-command1', 'returns': 'str' }
{ 'returns': 'str', 'command': 'my-command2' }

should be a valid file, even though the second line does not list the
command name as the first member.

Can a 'str' parameter explicitly default to NULL, as in:

{ 'command': 'foo', 'data': { '*s': 'str' }, 'defaults': { 's': null } }

for the case where the code really wants NULL (and not "") as the
default value for an omitted string?

> +++ b/tests/test-qmp-commands.c
> @@ -48,6 +48,13 @@ int64_t qmp_user_def_cmd3(int64_t a, bool has_b, int64_t 
> b, Error **errp)
>      return a + (has_b ? b : 0);
>  }
>  
> +int64_t qmp_user_def_cmd4(int64_t a, bool has_b, int64_t b,
> +                          bool has_c, const char *c,
> +                          Error **errp)
> +{
> +    return has_b && b == 100 && has_c && !strcmp(c, "A string");
> +}
> +

Missing (at least) the following semantic tests:

Supplying a defaults for a non-optional parameter should be an error
Supplying a defaults for an optional parameter not of integer or string
type should be an error
Supplying a string default for an integer parameter, or an integer
default for a string parameter, should be an error
Test for integer overflow of an integer default
Test for an integer default of 0 and/or negative

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

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