qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v6 15/27] qapi: rename allow_dict to allow_impli


From: Marc-André Lureau
Subject: Re: [Qemu-devel] [PATCH v6 15/27] qapi: rename allow_dict to allow_implicit
Date: Mon, 10 Dec 2018 15:15:30 +0400

Hi
On Mon, Dec 10, 2018 at 12:51 PM Markus Armbruster <address@hidden> wrote:
>
> Marc-André Lureau <address@hidden> writes:
>
> > On Wed, Dec 5, 2018 at 10:41 PM Markus Armbruster <address@hidden> wrote:
> >>
> >> Marc-André Lureau <address@hidden> writes:
> >>
> >> > This makes it a bit clearer what is the intent of the dictionnary for
> >>
> >> dictionary
> >
> > sigh, this must be a very common misspell (dictionnaire in french)
>
> Muscle memory...
>
> >> > the check_type() function, since there was some confusion on a
> >> > previous iteration of this series.
> >>
> >> I don't remember... got a pointer to that confusion handy?
> >
> > https://lists.nongnu.org/archive/html/qemu-devel/2017-12/msg01584.html
>
> Thanks!
>
> My review comment was
>
>     > diff --git a/scripts/qapi.py b/scripts/qapi.py
>     > index df2a304e8f..15711f96fa 100644
>     > --- a/scripts/qapi.py
>     > +++ b/scripts/qapi.py
>     > @@ -696,7 +696,15 @@ def check_type(info, source, value, 
> allow_array=False,
>     >          return
>     >
>     >      if not allow_dict:
>     > -        raise QAPISemError(info, "%s should be a type name" % source)
>     > +        if isinstance(value, dict) and 'type' in value:
>     > +            check_type(info, source, value['type'], allow_array,
>     > +                       allow_dict, allow_optional, allow_metas)
>     > +            if 'if' in value:
>     > +                check_if(value, info)
>     > +            check_unknown_keys(info, value, {'type', 'if'})
>     > +            return
>     > +        else:
>     > +            raise QAPISemError(info, "%s should be a type name" % 
> source)
>
>     @allow_dict becomes a misnomer: dictionaries are now always allowed, but
>     they have different meaning (implicit type vs. named type with
>     additional attributes).
>
>     Rename to @allow_implicit?
>
> As far as I can tell, it's not an issue in the current version of your
> patches anymore:
>
>     def check_type(info, source, value, allow_array=False,
>                    allow_implicit=False, allow_optional=False,
>                    allow_metas=[]):
>         global all_names
>
>         if value is None:
>             return
>
>         # Check if array type for value is okay
>         if isinstance(value, list):
>             if not allow_array:
>                 raise QAPISemError(info, "%s cannot be an array" % source)
>             if len(value) != 1 or not isinstance(value[0], str):
>                 raise QAPISemError(info,
>                                    "%s: array type must contain single type 
> name" %
>                                    source)
>             value = value[0]
>
>         # Check if type name for value is okay
>         if isinstance(value, str):
>             if value not in all_names:
>                 raise QAPISemError(info, "%s uses unknown type '%s'"
>                                    % (source, value))
>             if not all_names[value] in allow_metas:
>                 raise QAPISemError(info, "%s cannot use %s type '%s'" %
>                                    (source, all_names[value], value))
>             return
>
>         if not allow_implicit:
>             raise QAPISemError(info, "%s should be a type name" % source)
>
>         if not isinstance(value, OrderedDict):
>             raise QAPISemError(info,
>                                "%s should be a dictionary or type name" % 
> source)
>
>         # value is a dictionary, check that each member is okay
>         for (key, arg) in value.items():
>             check_name(info, "Member of %s" % source, key,
>                        allow_optional=allow_optional)
>             if c_name(key, False) == 'u' or c_name(key, 
> False).startswith('has_'):
>                 raise QAPISemError(info, "Member of %s uses reserved name 
> '%s'"
>                                    % (source, key))
>             # Todo: allow dictionaries to represent default values of
>             # an optional argument.
>             if isinstance(arg, dict):
>                 check_known_keys(info, "member '%s' of %s" % (key, source),
>                                  arg, ['type'], ['if'])
>                 typ = arg['type']
>             else:
>                 typ = arg
>             check_type(info, "Member '%s' of %s" % (key, source),
>                        typ, allow_array=True,
>                        allow_metas=['built-in', 'union', 'alternate', 
> 'struct',
>                                     'enum'])
>
>
> >> > Suggested-by: Markus Armbruster <address@hidden>
> >> > Signed-off-by: Marc-André Lureau <address@hidden>
>

Feel free to drop it (allow_implicit seems a bit more clear to me though).

-- 
Marc-André Lureau



reply via email to

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