From: Markus Armbruster <armbru@redhat.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PULL 15/26] qapi: Support downstream flat unions
Date: Fri, 15 May 2015 10:24:41 +0200 [thread overview]
Message-ID: <1431678292-17692-16-git-send-email-armbru@redhat.com> (raw)
In-Reply-To: <1431678292-17692-1-git-send-email-armbru@redhat.com>
From: Eric Blake <eblake@redhat.com>
Enhance the testsuite to cover downstream flat unions, including
the base type, discriminator name and type, and branch name and
type. Update the generator to mangle the union names in the
appropriate places.
Signed-off-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
scripts/qapi-types.py | 2 +-
scripts/qapi-visit.py | 4 ++--
tests/qapi-schema/qapi-schema-test.json | 5 +++++
tests/qapi-schema/qapi-schema-test.out | 7 +++++--
4 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py
index 5b0bc5d..13e4b53 100644
--- a/scripts/qapi-types.py
+++ b/scripts/qapi-types.py
@@ -213,7 +213,7 @@ struct %(name)s
void *data;
''',
name=name,
- discriminator_type_name=discriminator_type_name)
+ discriminator_type_name=c_name(discriminator_type_name))
for key in typeinfo:
ret += mcgen('''
diff --git a/scripts/qapi-visit.py b/scripts/qapi-visit.py
index d1ec70b..c15305f 100644
--- a/scripts/qapi-visit.py
+++ b/scripts/qapi-visit.py
@@ -252,7 +252,7 @@ def generate_visit_union(expr):
if enum_define:
# Use the enum type as discriminator
ret = ""
- disc_type = enum_define['enum_name']
+ disc_type = c_name(enum_define['enum_name'])
else:
# There will always be a discriminator in the C switch code, by default
# it is an enum type generated silently
@@ -290,7 +290,7 @@ void visit_type_%(name)s(Visitor *m, %(name)s **obj, const char *name, Error **e
goto out_obj;
}
''',
- name=name)
+ name=c_name(name))
if not discriminator:
disc_key = "type"
diff --git a/tests/qapi-schema/qapi-schema-test.json b/tests/qapi-schema/qapi-schema-test.json
index 6416d85..ac236e3 100644
--- a/tests/qapi-schema/qapi-schema-test.json
+++ b/tests/qapi-schema/qapi-schema-test.json
@@ -115,3 +115,8 @@
{ 'struct': '__org.qemu_x-Struct', 'base': '__org.qemu_x-Base',
'data': { '__org.qemu_x-member2': 'str' } }
{ 'union': '__org.qemu_x-Union1', 'data': { '__org.qemu_x-branch': 'str' } }
+{ 'struct': '__org.qemu_x-Struct2',
+ 'data': { 'array': ['__org.qemu_x-Union1'] } }
+{ 'union': '__org.qemu_x-Union2', 'base': '__org.qemu_x-Base',
+ 'discriminator': '__org.qemu_x-member1',
+ 'data': { '__org.qemu_x-value': '__org.qemu_x-Struct2' } }
diff --git a/tests/qapi-schema/qapi-schema-test.out b/tests/qapi-schema/qapi-schema-test.out
index f9ebe08..3fc24e8 100644
--- a/tests/qapi-schema/qapi-schema-test.out
+++ b/tests/qapi-schema/qapi-schema-test.out
@@ -26,7 +26,9 @@
OrderedDict([('enum', '__org.qemu_x-Enum'), ('data', ['__org.qemu_x-value'])]),
OrderedDict([('struct', '__org.qemu_x-Base'), ('data', OrderedDict([('__org.qemu_x-member1', '__org.qemu_x-Enum')]))]),
OrderedDict([('struct', '__org.qemu_x-Struct'), ('base', '__org.qemu_x-Base'), ('data', OrderedDict([('__org.qemu_x-member2', 'str')]))]),
- OrderedDict([('union', '__org.qemu_x-Union1'), ('data', OrderedDict([('__org.qemu_x-branch', 'str')]))])]
+ OrderedDict([('union', '__org.qemu_x-Union1'), ('data', OrderedDict([('__org.qemu_x-branch', 'str')]))]),
+ OrderedDict([('struct', '__org.qemu_x-Struct2'), ('data', OrderedDict([('array', ['__org.qemu_x-Union1'])]))]),
+ OrderedDict([('union', '__org.qemu_x-Union2'), ('base', '__org.qemu_x-Base'), ('discriminator', '__org.qemu_x-member1'), ('data', OrderedDict([('__org.qemu_x-value', '__org.qemu_x-Struct2')]))])]
[{'enum_name': 'EnumOne', 'enum_values': ['value1', 'value2', 'value3']},
{'enum_name': '__org.qemu_x-Enum', 'enum_values': ['__org.qemu_x-value']},
{'enum_name': 'UserDefAlternateKind', 'enum_values': None},
@@ -45,4 +47,5 @@
OrderedDict([('struct', 'UserDefOptions'), ('data', OrderedDict([('*i64', ['int']), ('*u64', ['uint64']), ('*u16', ['uint16']), ('*i64x', 'int'), ('*u64x', 'uint64')]))]),
OrderedDict([('struct', 'EventStructOne'), ('data', OrderedDict([('struct1', 'UserDefOne'), ('string', 'str'), ('*enum2', 'EnumOne')]))]),
OrderedDict([('struct', '__org.qemu_x-Base'), ('data', OrderedDict([('__org.qemu_x-member1', '__org.qemu_x-Enum')]))]),
- OrderedDict([('struct', '__org.qemu_x-Struct'), ('base', '__org.qemu_x-Base'), ('data', OrderedDict([('__org.qemu_x-member2', 'str')]))])]
+ OrderedDict([('struct', '__org.qemu_x-Struct'), ('base', '__org.qemu_x-Base'), ('data', OrderedDict([('__org.qemu_x-member2', 'str')]))]),
+ OrderedDict([('struct', '__org.qemu_x-Struct2'), ('data', OrderedDict([('array', ['__org.qemu_x-Union1'])]))])]
--
1.9.3
next prev parent reply other threads:[~2015-05-15 8:25 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-15 8:24 [Qemu-devel] [PULL 00/26] qapi: Fix qapi mangling of downstream names, and more Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 01/26] qmp: Add qom_path field to query-cpus command Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 02/26] doc: fix qmp event type Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 03/26] qapi: Fix C identifiers generated for names containing '.' Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 04/26] qapi: Rename identical c_fun()/c_var() into c_name() Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 05/26] qapi: Rename _generate_enum_string() to camel_to_upper() Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 06/26] qapi: Rename generate_enum_full_value() to c_enum_const() Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 07/26] qapi: Simplify c_enum_const() Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 08/26] qapi: Use c_enum_const() in generate_alternate_qtypes() Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 09/26] qapi: Move camel_to_upper(), c_enum_const() to closely related code Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 10/26] qapi: Tidy c_type() logic Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 11/26] qapi: Make c_type() consistently convert qapi names Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 12/26] qapi: Support downstream enums Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 13/26] qapi: Support downstream structs Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 14/26] qapi: Support downstream simple unions Markus Armbruster
2015-05-15 8:24 ` Markus Armbruster [this message]
2015-05-15 8:24 ` [Qemu-devel] [PULL 16/26] qapi: Support downstream alternates Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 17/26] qapi: Support downstream events and commands Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 18/26] tests: Add missing dependencies on $(qapi-py) Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 19/26] qapi: qapi-event.py option -b does nothing, drop it Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 20/26] qapi: qapi-commands.py option --type is unused, " Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 21/26] qapi: Factor parse_command_line() out of the generators Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 22/26] qapi: Fix generators to report command line errors decently Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 23/26] qapi: Turn generators' mandatory option -i into an argument Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 24/26] qapi: Factor open_output(), close_output() out of generators Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 25/26] qapi: Drop pointless flush() before close() Markus Armbruster
2015-05-15 8:24 ` [Qemu-devel] [PULL 26/26] qapi: Inline gen_command_decl_prologue(), gen_command_def_prologue() Markus Armbruster
2015-05-15 16:26 ` [Qemu-devel] [PULL 00/26] qapi: Fix qapi mangling of downstream names, and more Peter Maydell
2015-05-15 16:44 ` Markus Armbruster
2015-05-15 16:47 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1431678292-17692-16-git-send-email-armbru@redhat.com \
--to=armbru@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).