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 <arm...@redhat.com> Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> --- 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(''' @@ -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)) 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) -- 2.16.2.521.g9aa15f885a