[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v7 09/14] qapi/commands: add #if conditions to comma
From: |
Marc-André Lureau |
Subject: |
[Qemu-devel] [PATCH v7 09/14] qapi/commands: add #if conditions to commands |
Date: |
Tue, 3 Jul 2018 17:56:43 +0200 |
Wrap generated code with #if/#endif using an 'ifcontext' on
QAPIGenCSnippet objects.
Signed-off-by: Marc-André Lureau <address@hidden>
---
scripts/qapi/commands.py | 26 +++++++++++++++++---------
tests/test-qmp-cmds.c | 4 ++--
2 files changed, 19 insertions(+), 11 deletions(-)
diff --git a/scripts/qapi/commands.py b/scripts/qapi/commands.py
index dcc03c7859..0c9e321179 100644
--- a/scripts/qapi/commands.py
+++ b/scripts/qapi/commands.py
@@ -239,7 +239,7 @@ class
QAPISchemaGenCommandVisitor(QAPISchemaModularCVisitor):
QAPISchemaModularCVisitor.__init__(
self, prefix, 'qapi-commands',
' * Schema-defined QAPI/QMP commands', __doc__)
- self._regy = ''
+ self._regy = QAPIGenCCode()
self._visited_ret_types = {}
def _begin_module(self, name):
@@ -275,20 +275,28 @@ class
QAPISchemaGenCommandVisitor(QAPISchemaModularCVisitor):
void %(c_prefix)sqmp_init_marshal(QmpCommandList *cmds);
''',
c_prefix=c_name(self._prefix, protect=False)))
- genc.add(gen_registry(self._regy, self._prefix))
+ genc.add(gen_registry(self._regy.get_content(), self._prefix))
def visit_command(self, name, info, ifcond, arg_type, ret_type, gen,
success_response, boxed, allow_oob, allow_preconfig):
if not gen:
return
- self._genh.add(gen_command_decl(name, arg_type, boxed, ret_type))
- if ret_type and ret_type not in self._visited_ret_types[self._genc]:
+ # FIXME: If T is a user-defined type, the user is responsible
+ # for making this work, i.e. to make T's condition the
+ # conjunction of the T-returning commands' conditions. If T
+ # is a built-in type, this isn't possible: the
+ # qmp_marshal_output_T() will be generated unconditionally.
+ if (ret_type and
+ ret_type not in self._visited_ret_types[self._genc]):
self._visited_ret_types[self._genc].add(ret_type)
- self._genc.add(gen_marshal_output(ret_type))
- self._genh.add(gen_marshal_decl(name))
- self._genc.add(gen_marshal(name, arg_type, boxed, ret_type))
- self._regy += gen_register_command(name, success_response, allow_oob,
- allow_preconfig)
+ with ifcontext(ret_type.ifcond, self._genh, self._genc,
self._regy):
+ self._genc.add(gen_marshal_output(ret_type))
+ with ifcontext(ifcond, self._genh, self._genc, self._regy):
+ self._genh.add(gen_command_decl(name, arg_type, boxed, ret_type))
+ self._genh.add(gen_marshal_decl(name))
+ self._genc.add(gen_marshal(name, arg_type, boxed, ret_type))
+ self._regy.add(gen_register_command(name, success_response,
+ allow_oob, allow_preconfig))
def gen_commands(schema, output_dir, prefix):
diff --git a/tests/test-qmp-cmds.c b/tests/test-qmp-cmds.c
index 840530b84c..ce277c9c3b 100644
--- a/tests/test-qmp-cmds.c
+++ b/tests/test-qmp-cmds.c
@@ -12,12 +12,12 @@
static QmpCommandList qmp_commands;
-/* #if defined(TEST_IF_STRUCT) && defined(TEST_IF_CMD) */
+#if defined(TEST_IF_STRUCT) && defined(TEST_IF_CMD)
UserDefThree *qmp_TestIfCmd(TestIfStruct *foo, Error **errp)
{
return NULL;
}
-/* #endif */
+#endif
UserDefThree *qmp_TestCmdReturnDefThree(Error **errp)
{
--
2.18.0.rc1
- Re: [Qemu-devel] [PATCH v7 01/14] qapi: add 'if' to top-level expressions, (continued)
- [Qemu-devel] [PATCH v7 02/14] qapi: pass 'if' condition into QAPISchemaEntity objects, Marc-André Lureau, 2018/07/03
- [Qemu-devel] [PATCH v7 05/14] qapi: mcgen() shouldn't indent # lines, Marc-André Lureau, 2018/07/03
- [Qemu-devel] [PATCH v7 03/14] qapi: leave the ifcond attribute undefined until check(), Marc-André Lureau, 2018/07/03
- [Qemu-devel] [PATCH v7 04/14] qapi: add 'ifcond' to visitor methods, Marc-André Lureau, 2018/07/03
- [Qemu-devel] [PATCH v7 07/14] qapi-introspect: modify to_qlit() to append ', ' on level > 0, Marc-André Lureau, 2018/07/03
- [Qemu-devel] [PATCH v7 11/14] qapi-types: add #if conditions to types & visitors, Marc-André Lureau, 2018/07/03
- [Qemu-devel] [PATCH v7 10/14] qapi/events: add #if conditions to events, Marc-André Lureau, 2018/07/03
- [Qemu-devel] [PATCH v7 08/14] qapi-introspect: add preprocessor conditions to generated QLit, Marc-André Lureau, 2018/07/03
- [Qemu-devel] [PATCH v7 09/14] qapi/commands: add #if conditions to commands,
Marc-André Lureau <=
- [Qemu-devel] [PATCH v7 06/14] qapi: add #if/#endif helpers, Marc-André Lureau, 2018/07/03
- [Qemu-devel] [PATCH v7 12/14] qapi: add 'If:' section to generated documentation, Marc-André Lureau, 2018/07/03
- [Qemu-devel] [PATCH v7 13/14] qapi: add conditions to VNC type/commands/events on the schema, Marc-André Lureau, 2018/07/03
- [Qemu-devel] [PATCH v7 14/14] qapi: add conditions to SPICE type/commands/events on the schema, Marc-André Lureau, 2018/07/03
- Re: [Qemu-devel] [PATCH v7 00/14] qapi: add #if pre-processor conditions to generated code (part 1), Markus Armbruster, 2018/07/03