[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v6 08/27] qapi: change enum visitor and gen_enum* to
From: |
Marc-André Lureau |
Subject: |
[Qemu-devel] [PATCH v6 08/27] qapi: change enum visitor and gen_enum* to take QAPISchemaMember |
Date: |
Fri, 6 Jul 2018 12:57:34 +0200 |
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.
While at it, also modify gen_enum() and gen_enum_lookup() for the
same reason.
Suggested-by: Markus Armbruster <address@hidden>
Signed-off-by: Marc-André Lureau <address@hidden>
---
scripts/qapi/common.py | 22 +++++++++++-----------
scripts/qapi/doc.py | 2 +-
scripts/qapi/events.py | 2 +-
scripts/qapi/introspect.py | 5 +++--
scripts/qapi/types.py | 6 +++---
scripts/qapi/visit.py | 2 +-
tests/qapi-schema/test-qapi.py | 4 ++--
7 files changed, 22 insertions(+), 21 deletions(-)
diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
index 7020b88abc..a353670079 100644
--- a/scripts/qapi/common.py
+++ b/scripts/qapi/common.py
@@ -1063,7 +1063,7 @@ class QAPISchemaVisitor(object):
def visit_builtin_type(self, name, info, json_type):
pass
- def visit_enum_type(self, name, info, ifcond, values, prefix):
+ def visit_enum_type(self, name, info, ifcond, members, prefix):
pass
def visit_array_type(self, name, info, ifcond, element_type):
@@ -1193,7 +1193,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):
@@ -2012,19 +2012,19 @@ def _wrap_ifcond(ifcond, before, after):
return out
-def gen_enum_lookup(name, values, prefix=None):
+def gen_enum_lookup(name, members, prefix=None):
ret = mcgen('''
const QEnumLookup %(c_name)s_lookup = {
.array = (const char *const[]) {
''',
c_name=c_name(name))
- for value in values:
- index = c_enum_const(name, value, prefix)
+ for m in members:
+ index = c_enum_const(name, m.name, prefix)
ret += mcgen('''
- [%(index)s] = "%(value)s",
+ [%(index)s] = "%(name)s",
''',
- index=index, value=value)
+ index=index, name=m.name)
ret += mcgen('''
},
@@ -2035,9 +2035,9 @@ const QEnumLookup %(c_name)s_lookup = {
return ret
-def gen_enum(name, values, prefix=None):
+def gen_enum(name, members, prefix=None):
# append automatically generated _MAX value
- enum_values = values + ['_MAX']
+ enum_members = members + [QAPISchemaMember('_MAX')]
ret = mcgen('''
@@ -2045,11 +2045,11 @@ typedef enum %(c_name)s {
''',
c_name=c_name(name))
- for value in enum_values:
+ for m in enum_members:
ret += mcgen('''
%(c_enum)s,
''',
- c_enum=c_enum_const(name, value, prefix))
+ c_enum=c_enum_const(name, m.name, prefix))
ret += mcgen('''
} %(c_name)s;
diff --git a/scripts/qapi/doc.py b/scripts/qapi/doc.py
index 987fd3c943..76cb186ff9 100755
--- a/scripts/qapi/doc.py
+++ b/scripts/qapi/doc.py
@@ -206,7 +206,7 @@ class
QAPISchemaGenDocVisitor(qapi.common.QAPISchemaVisitor):
def write(self, output_dir):
self._gen.write(output_dir, self._prefix + 'qapi-doc.texi')
- def visit_enum_type(self, name, info, ifcond, values, prefix):
+ def visit_enum_type(self, name, info, ifcond, members, prefix):
doc = self.cur_doc
self._gen.add(TYPE_FMT(type='Enum',
name=doc.symbol,
diff --git a/scripts/qapi/events.py b/scripts/qapi/events.py
index 764ef177ab..ea4dac6a05 100644
--- a/scripts/qapi/events.py
+++ b/scripts/qapi/events.py
@@ -189,7 +189,7 @@ class QAPISchemaGenEventVisitor(QAPISchemaModularCVisitor):
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 71d4a779ce..3f1ca99f6d 100644
--- a/scripts/qapi/introspect.py
+++ b/scripts/qapi/introspect.py
@@ -160,8 +160,9 @@ const QLitObject %(c_name)s = %(c_string)s;
def visit_builtin_type(self, name, info, json_type):
self._gen_qlit(name, 'builtin', {'json-type': json_type}, [])
- def visit_enum_type(self, name, info, ifcond, values, prefix):
- self._gen_qlit(name, 'enum', {'values': values}, ifcond)
+ def visit_enum_type(self, name, info, ifcond, members, prefix):
+ 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/scripts/qapi/types.py b/scripts/qapi/types.py
index 91f87d0b8f..2d4a70f810 100644
--- a/scripts/qapi/types.py
+++ b/scripts/qapi/types.py
@@ -213,10 +213,10 @@ class QAPISchemaGenTypeVisitor(QAPISchemaModularCVisitor):
self._genh.add(gen_type_cleanup_decl(name))
self._genc.add(gen_type_cleanup(name))
- def visit_enum_type(self, name, info, ifcond, values, prefix):
+ def visit_enum_type(self, name, info, ifcond, members, prefix):
with ifcontext(ifcond, self._genh, self._genc):
- self._genh.preamble_add(gen_enum(name, values, prefix))
- self._genc.add(gen_enum_lookup(name, values, prefix))
+ self._genh.preamble_add(gen_enum(name, members, prefix))
+ self._genc.add(gen_enum_lookup(name, members, prefix))
def visit_array_type(self, name, info, ifcond, element_type):
with ifcontext(ifcond, self._genh, self._genc):
diff --git a/scripts/qapi/visit.py b/scripts/qapi/visit.py
index 460cf12989..24f85a2e85 100644
--- a/scripts/qapi/visit.py
+++ b/scripts/qapi/visit.py
@@ -310,7 +310,7 @@ class QAPISchemaGenVisitVisitor(QAPISchemaModularCVisitor):
''',
types=types))
- def visit_enum_type(self, name, info, ifcond, values, prefix):
+ def visit_enum_type(self, name, info, ifcond, members, prefix):
with ifcontext(ifcond, self._genh, self._genc):
self._genh.add(gen_visit_decl(name, scalar=True))
self._genc.add(gen_visit_enum(name))
diff --git a/tests/qapi-schema/test-qapi.py b/tests/qapi-schema/test-qapi.py
index cea21c773a..27f776693e 100644
--- a/tests/qapi-schema/test-qapi.py
+++ b/tests/qapi-schema/test-qapi.py
@@ -23,8 +23,8 @@ class QAPISchemaTestVisitor(QAPISchemaVisitor):
def visit_include(self, name, info):
print('include %s' % name)
- def visit_enum_type(self, name, info, ifcond, values, prefix):
- print('enum %s %s' % (name, values))
+ def visit_enum_type(self, name, info, ifcond, members, prefix):
+ print('enum %s %s' % (name, [m.name for m in members]))
if prefix:
print(' prefix %s' % prefix)
self._print_if(ifcond)
--
2.18.0.rc1
- [Qemu-devel] [PATCH v6 00/27] qapi: add #if pre-processor conditions to generated code (part 2), Marc-André Lureau, 2018/07/06
- [Qemu-devel] [PATCH v6 01/27] qmp-shell: learn to send commands with quoted arguments, Marc-André Lureau, 2018/07/06
- [Qemu-devel] [PATCH v6 03/27] tests: change /0.15/* tests to /qmp/*, Marc-André Lureau, 2018/07/06
- [Qemu-devel] [PATCH v6 02/27] json: remove useless return value from lexer/parser, Marc-André Lureau, 2018/07/06
- [Qemu-devel] [PATCH v6 04/27] qapi: Fix some pycodestyle-3 complaints, Marc-André Lureau, 2018/07/06
- [Qemu-devel] [PATCH v6 06/27] qapi: do not define enumeration value explicitly, Marc-André Lureau, 2018/07/06
- [Qemu-devel] [PATCH v6 07/27] qapi: rename QAPISchemaEnumType.values to .members, Marc-André Lureau, 2018/07/06
- [Qemu-devel] [PATCH v6 05/27] qapi: include osdep.h in type headers, Marc-André Lureau, 2018/07/06
- [Qemu-devel] [PATCH v6 08/27] qapi: change enum visitor and gen_enum* to take QAPISchemaMember,
Marc-André Lureau <=
- [Qemu-devel] [PATCH v6 10/27] qapi: factor out checking for keys, Marc-André Lureau, 2018/07/06
- [Qemu-devel] [PATCH v6 09/27] tests: print enum type members more like object type members, Marc-André Lureau, 2018/07/06
- [Qemu-devel] [PATCH v6 11/27] qapi: improve reporting of unknown or missing keys, Marc-André Lureau, 2018/07/06
- [Qemu-devel] [PATCH v6 12/27] qapi: add a dictionnary form with 'name' key for enum members, Marc-André Lureau, 2018/07/06
- [Qemu-devel] [PATCH v6 14/27] qapi-event: add 'if' condition to implicit event enum, Marc-André Lureau, 2018/07/06
- [Qemu-devel] [PATCH v6 13/27] qapi: add 'if' to enum members, Marc-André Lureau, 2018/07/06
- [Qemu-devel] [PATCH v6 15/27] qapi: rename allow_dict to allow_implicit, Marc-André Lureau, 2018/07/06
- [Qemu-devel] [PATCH v6 16/27] qapi: add a dictionary form with 'type' key for members, Marc-André Lureau, 2018/07/06
- [Qemu-devel] [PATCH v6 18/27] qapi: add an error in case a discriminator is conditionnal, Marc-André Lureau, 2018/07/06
- [Qemu-devel] [PATCH v6 17/27] qapi: add 'if' to implicit struct members, Marc-André Lureau, 2018/07/06