xemu/scripts
Eric Blake 82ca8e4696 qapi: Share gen_visit_fields()
Consolidate the code between visit, command marshalling, and
event generation that iterates over the members of a struct.
It reduces code duplication in the generator, so that a future
patch can reduce the size of generated code while touching only
one instead of three locations.

There are no changes to the generated marshal code.

The visitor code becomes slightly more verbose, but remains
semantically equivalent, and is actually easier to read as
it follows a more common idiom:

|     visit_optional(v, &(*obj)->has_device, "device", &err);
|-    if (!err && (*obj)->has_device) {
|-        visit_type_str(v, &(*obj)->device, "device", &err);
|-    }
|     if (err) {
|         goto out;
|     }
|+    if ((*obj)->has_device) {
|+        visit_type_str(v, &(*obj)->device, "device", &err);
|+        if (err) {
|+            goto out;
|+        }
|+    }

The event code becomes slightly more verbose, but this is
arguably a bug fix: although the visitors are not well
documented, use of an optional member should not be attempted
unless guarded by a prior call to visit_optional().  Works only
because the output qmp visitor has a no-op visit_optional():

|+    visit_optional(v, &has_offset, "offset", &err);
|+    if (err) {
|+        goto out;
|+    }
|     if (has_offset) {
|         visit_type_int(v, &offset, "offset", &err);

Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <1443565276-4535-17-git-send-email-eblake@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
2015-10-12 18:46:50 +02:00
..
kvm
qemu-guest-agent
qemugdb scripts/qemu-gdb: Split CoroutineCommand into its own file 2015-09-11 17:14:49 +01:00
qmp qmp-shell: add documentation 2015-09-04 13:18:04 +02:00
tracetool
acpi_extract.py
acpi_extract_preprocess.py
analyse-9p-simpletrace.py
analyze-migration.py Teach analyze-migration.py about section footers 2015-06-12 06:54:01 +02:00
check-qerror.sh
checkpatch.pl checkpatch: do not recommend qemu_strtok over strtok 2015-09-25 12:04:41 +02:00
cleanup-trace-events.pl
cocci-macro-file.h add macro file for coccinelle 2015-09-09 15:34:55 +02:00
coverity-model.c
create_config
disas-objdump.pl
dump-guest-memory.py scripts/dump-guest-memory.py: fix after RAMBlock change 2015-09-09 15:34:55 +02:00
extract-vsssdk-headers
feature_to_c.sh
get_maintainer.pl get_maintainer.pl: \C is deprecated 2015-09-25 12:04:41 +02:00
gtester-cat
hxtool
make-release
make_device_config.sh
ordereddict.py qapi: Clean up qapi.py per pep8 2015-10-12 18:44:54 +02:00
qapi-commands.py qapi: Share gen_visit_fields() 2015-10-12 18:46:50 +02:00
qapi-event.py qapi: Share gen_visit_fields() 2015-10-12 18:46:50 +02:00
qapi-introspect.py qapi-introspect: Hide type names 2015-09-21 09:56:49 +02:00
qapi-types.py qapi: Consistent generated code: prefer visitor 'v' 2015-10-12 18:46:49 +02:00
qapi-visit.py qapi: Share gen_visit_fields() 2015-10-12 18:46:50 +02:00
qapi.py qapi: Share gen_visit_fields() 2015-10-12 18:46:50 +02:00
qemu-binfmt-conf.sh
qemu-gdb.py scripts/qemu-gdb: Add brief comment describing usage 2015-09-11 17:14:50 +01:00
qtest.py
refresh-pxe-roms.sh
shaderinclude.pl
signrom.py
simpletrace.py
switch-timer-api
texi2pod.pl
tracetool.py
update-acpi.sh
update-linux-headers.sh update-linux-headers: Rename SW_MAX to SW_MAX_ 2015-10-09 15:22:39 +02:00
vmstate-static-checker.py