[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 15/26] qapi: Support downstream flat unions
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PULL 15/26] qapi: Support downstream flat unions |
Date: |
Fri, 15 May 2015 10:24:41 +0200 |
From: Eric Blake <address@hidden>
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 <address@hidden>
Signed-off-by: Markus Armbruster <address@hidden>
---
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
- [Qemu-devel] [PULL 26/26] qapi: Inline gen_command_decl_prologue(), gen_command_def_prologue(), (continued)
- [Qemu-devel] [PULL 26/26] qapi: Inline gen_command_decl_prologue(), gen_command_def_prologue(), Markus Armbruster, 2015/05/15
- [Qemu-devel] [PULL 25/26] qapi: Drop pointless flush() before close(), Markus Armbruster, 2015/05/15
- [Qemu-devel] [PULL 20/26] qapi: qapi-commands.py option --type is unused, drop it, Markus Armbruster, 2015/05/15
- [Qemu-devel] [PULL 11/26] qapi: Make c_type() consistently convert qapi names, Markus Armbruster, 2015/05/15
- [Qemu-devel] [PULL 19/26] qapi: qapi-event.py option -b does nothing, drop it, Markus Armbruster, 2015/05/15
- [Qemu-devel] [PULL 04/26] qapi: Rename identical c_fun()/c_var() into c_name(), Markus Armbruster, 2015/05/15
- [Qemu-devel] [PULL 23/26] qapi: Turn generators' mandatory option -i into an argument, Markus Armbruster, 2015/05/15
- [Qemu-devel] [PULL 24/26] qapi: Factor open_output(), close_output() out of generators, Markus Armbruster, 2015/05/15
- [Qemu-devel] [PULL 13/26] qapi: Support downstream structs, Markus Armbruster, 2015/05/15
- [Qemu-devel] [PULL 22/26] qapi: Fix generators to report command line errors decently, Markus Armbruster, 2015/05/15
- [Qemu-devel] [PULL 15/26] qapi: Support downstream flat unions,
Markus Armbruster <=
- [Qemu-devel] [PULL 10/26] qapi: Tidy c_type() logic, Markus Armbruster, 2015/05/15
- [Qemu-devel] [PULL 16/26] qapi: Support downstream alternates, Markus Armbruster, 2015/05/15
- [Qemu-devel] [PULL 21/26] qapi: Factor parse_command_line() out of the generators, Markus Armbruster, 2015/05/15
- [Qemu-devel] [PULL 17/26] qapi: Support downstream events and commands, Markus Armbruster, 2015/05/15
- [Qemu-devel] [PULL 12/26] qapi: Support downstream enums, Markus Armbruster, 2015/05/15
- [Qemu-devel] [PULL 09/26] qapi: Move camel_to_upper(), c_enum_const() to closely related code, Markus Armbruster, 2015/05/15
- Re: [Qemu-devel] [PULL 00/26] qapi: Fix qapi mangling of downstream names, and more, Peter Maydell, 2015/05/15