diff options
| author | Peter Maydell | 2018-07-05 11:31:36 +0200 |
|---|---|---|
| committer | Peter Maydell | 2018-07-05 11:31:36 +0200 |
| commit | 5dafaf4fbceeb4c5d204039045b50b2f37443ff4 (patch) | |
| tree | db8692abda31876ebf09ba63d2e64b78c36a1aaa /scripts/qapi/commands.py | |
| parent | Merge remote-tracking branch 'remotes/mdroth/tags/qga-pull-2018-07-03-tag' in... (diff) | |
| parent | qapi: add conditions to SPICE type/commands/events on the schema (diff) | |
| download | qemu-5dafaf4fbceeb4c5d204039045b50b2f37443ff4.tar.gz qemu-5dafaf4fbceeb4c5d204039045b50b2f37443ff4.tar.xz qemu-5dafaf4fbceeb4c5d204039045b50b2f37443ff4.zip | |
Merge remote-tracking branch 'remotes/armbru/tags/pull-qapi-2018-07-03' into staging
QAPI patches for 2018-07-03
# gpg: Signature made Tue 03 Jul 2018 21:52:55 BST
# gpg: using RSA key 3870B400EB918653
# gpg: Good signature from "Markus Armbruster <armbru@redhat.com>"
# gpg: aka "Markus Armbruster <armbru@pond.sub.org>"
# Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867 4E5F 3870 B400 EB91 8653
* remotes/armbru/tags/pull-qapi-2018-07-03:
qapi: add conditions to SPICE type/commands/events on the schema
qapi: add conditions to VNC type/commands/events on the schema
qapi: add 'If:' section to generated documentation
qapi-types: add #if conditions to types & visitors
qapi/events: add #if conditions to events
qapi/commands: add #if conditions to commands
qapi-introspect: add preprocessor conditions to generated QLit
qapi-introspect: modify to_qlit() to append ',' on level > 0
qapi: add #if/#endif helpers
qapi: mcgen() shouldn't indent # lines
qapi: add 'ifcond' to visitor methods
qapi: leave the ifcond attribute undefined until check()
qapi: pass 'if' condition into QAPISchemaEntity objects
qapi: add 'if' to top-level expressions
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'scripts/qapi/commands.py')
| -rw-r--r-- | scripts/qapi/commands.py | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/scripts/qapi/commands.py b/scripts/qapi/commands.py index 3b0867c14f..0f3c991918 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, arg_type, ret_type, gen, + 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)) + # 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): |
