qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v3 17/49] qapi: change enum visitor to take QAPI


From: Markus Armbruster
Subject: Re: [Qemu-devel] [PATCH v3 17/49] qapi: change enum visitor to take QAPISchemaMember
Date: Fri, 22 Jun 2018 14:24:13 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux)

Marc-André Lureau <address@hidden> writes:

> This will allow to add and access more properties associated with enum
> values/members, like the associated 'if' condition. We may want to
> have a specialized type QAPISchemaEnumMember, for now this will do.
>
> Suggested-by: Markus Armbruster <address@hidden>
> Signed-off-by: Marc-André Lureau <address@hidden>
> ---
>  scripts/qapi/common.py         | 12 ++++++------
>  scripts/qapi/events.py         |  2 +-
>  scripts/qapi/introspect.py     |  3 ++-
>  tests/qapi-schema/test-qapi.py |  2 +-
>  4 files changed, 10 insertions(+), 9 deletions(-)
>
> diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
> index ea5cdfe3be..4d19146064 100644
> --- a/scripts/qapi/common.py
> +++ b/scripts/qapi/common.py
> @@ -1198,7 +1198,7 @@ class QAPISchemaEnumType(QAPISchemaType):
>  
>      def visit(self, visitor):
>          visitor.visit_enum_type(self.name, self.info, self.ifcond,
> -                                self.member_names(), self.prefix)
> +                                self.members, self.prefix)
>  
>  
>  class QAPISchemaArrayType(QAPISchemaType):
> @@ -2007,11 +2007,11 @@ const QEnumLookup %(c_name)s_lookup = {
>  ''',
>                  c_name=c_name(name))
>      for m in members:
> -        index = c_enum_const(name, m, prefix)
> +        index = c_enum_const(name, m.name, prefix)
>          ret += mcgen('''
> -        [%(index)s] = "%(value)s",
> +        [%(index)s] = "%(name)s",
>  ''',
> -                     index=index, value=m)
> +                     index=index, name=m.name)
>  
>      ret += mcgen('''
>      },
> @@ -2024,7 +2024,7 @@ const QEnumLookup %(c_name)s_lookup = {
>  
>  def gen_enum(name, members, prefix=None):
>      # append automatically generated _MAX value
> -    enum_members = members + ['_MAX']
> +    enum_members = members + [QAPISchemaMember('_MAX')]
>  
>      ret = mcgen('''
>  

This hunk gave me pause...

> @@ -2036,7 +2036,7 @@ typedef enum %(c_name)s {
>          ret += mcgen('''
>      %(c_enum)s,
>  ''',
> -                     c_enum=c_enum_const(name, m, prefix))
> +                     c_enum=c_enum_const(name, m.name, prefix))
>  
>      ret += mcgen('''
>  } %(c_name)s;
> diff --git a/scripts/qapi/events.py b/scripts/qapi/events.py
> index dae03e3d88..233c27a6c8 100644
> --- a/scripts/qapi/events.py
> +++ b/scripts/qapi/events.py
> @@ -188,7 +188,7 @@ class 
> QAPISchemaGenEventVisitor(QAPISchemaModularCVisitor):
>          with ifcontext(ifcond, self._genh, self._genc):
>              self._genh.add(gen_event_send_decl(name, arg_type, boxed))
>              self._genc.add(gen_event_send(name, arg_type, boxed, 
> self._enum_name))
> -        self._event_names.append(name)
> +        self._event_names.append(QAPISchemaMember(name))
>  
>  

... and this one as well, until I realized that you're *also* changing
gen_enum_lookup() and gen_enum().  And then I realized that I missed
something about the previous patch.  Going to explain it there.

Anyway, let's mention the change to gen_enum_lookup() and gen_enum() in
the commit message.

>  def gen_events(schema, output_dir, prefix):
> diff --git a/scripts/qapi/introspect.py b/scripts/qapi/introspect.py
> index 66f7fd00a9..d62fca84de 100644
> --- a/scripts/qapi/introspect.py
> +++ b/scripts/qapi/introspect.py
> @@ -164,7 +164,8 @@ const QLitObject %(c_name)s = %(c_string)s;
>          self._gen_qlit(name, 'builtin', {'json-type': json_type}, [])
>  
>      def visit_enum_type(self, name, info, ifcond, members, prefix):
> -        self._gen_qlit(name, 'enum', {'values': members}, ifcond)
> +        self._gen_qlit(name, 'enum',
> +                       {'values': [m.name for m in members]}, ifcond)
>  
>      def visit_array_type(self, name, info, ifcond, element_type):
>          element = self._use_type(element_type)
> diff --git a/tests/qapi-schema/test-qapi.py b/tests/qapi-schema/test-qapi.py
> index f4b8feb9bc..3623deae62 100644
> --- a/tests/qapi-schema/test-qapi.py
> +++ b/tests/qapi-schema/test-qapi.py
> @@ -24,7 +24,7 @@ class QAPISchemaTestVisitor(QAPISchemaVisitor):
>          print('include %s' % name)
>  
>      def visit_enum_type(self, name, info, ifcond, members, prefix):
> -        print('enum %s %s' % (name, members))
> +        print('enum %s %s' % (name, [m.name for m in members]))
>          if prefix:
>              print('    prefix %s' % prefix)
>          self._print_if(ifcond)



reply via email to

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