mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00
qapi: Support downstream alternates
Enhance the testsuite to cover downstream alternates, including whether the branch name or type is downstream. Update the generator to mangle alternate names in the appropriate places. Signed-off-by: Eric Blake <eblake@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
857af5f06c
commit
d1f07c86c0
4 changed files with 13 additions and 8 deletions
|
@ -174,16 +174,17 @@ def generate_alternate_qtypes(expr):
|
|||
ret = mcgen('''
|
||||
const int %(name)s_qtypes[QTYPE_MAX] = {
|
||||
''',
|
||||
name=name)
|
||||
name=c_name(name))
|
||||
|
||||
for key in members:
|
||||
qtype = find_alternate_member_qtype(members[key])
|
||||
assert qtype, "Invalid alternate member"
|
||||
|
||||
ret += mcgen('''
|
||||
[ %(qtype)s ] = %(enum_const)s,
|
||||
[%(qtype)s] = %(enum_const)s,
|
||||
''',
|
||||
qtype = qtype, enum_const = c_enum_const(name + 'Kind', key))
|
||||
qtype = qtype,
|
||||
enum_const = c_enum_const(name + 'Kind', key))
|
||||
|
||||
ret += mcgen('''
|
||||
};
|
||||
|
|
|
@ -202,11 +202,11 @@ void visit_type_%(name)s(Visitor *m, %(name)s **obj, const char *name, Error **e
|
|||
}
|
||||
switch ((*obj)->kind) {
|
||||
''',
|
||||
name=name)
|
||||
name=c_name(name))
|
||||
|
||||
# For alternate, always use the default enum type automatically generated
|
||||
# as "'%sKind' % (name)"
|
||||
disc_type = '%sKind' % (name)
|
||||
# as name + 'Kind'
|
||||
disc_type = c_name(name) + 'Kind'
|
||||
|
||||
for key in members:
|
||||
assert (members[key] in builtin_types.keys()
|
||||
|
|
|
@ -120,3 +120,5 @@
|
|||
{ 'union': '__org.qemu_x-Union2', 'base': '__org.qemu_x-Base',
|
||||
'discriminator': '__org.qemu_x-member1',
|
||||
'data': { '__org.qemu_x-value': '__org.qemu_x-Struct2' } }
|
||||
{ 'alternate': '__org.qemu_x-Alt',
|
||||
'data': { '__org.qemu_x-branch': 'str', 'b': '__org.qemu_x-Base' } }
|
||||
|
|
|
@ -28,12 +28,14 @@
|
|||
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([('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')]))])]
|
||||
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')]))]),
|
||||
OrderedDict([('alternate', '__org.qemu_x-Alt'), ('data', OrderedDict([('__org.qemu_x-branch', 'str'), ('b', '__org.qemu_x-Base')]))])]
|
||||
[{'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},
|
||||
{'enum_name': 'UserDefNativeListUnionKind', 'enum_values': None},
|
||||
{'enum_name': '__org.qemu_x-Union1Kind', 'enum_values': None}]
|
||||
{'enum_name': '__org.qemu_x-Union1Kind', 'enum_values': None},
|
||||
{'enum_name': '__org.qemu_x-AltKind', 'enum_values': None}]
|
||||
[OrderedDict([('struct', 'NestedEnumsOne'), ('data', OrderedDict([('enum1', 'EnumOne'), ('*enum2', 'EnumOne'), ('enum3', 'EnumOne'), ('*enum4', 'EnumOne')]))]),
|
||||
OrderedDict([('struct', 'UserDefZero'), ('data', OrderedDict([('integer', 'int')]))]),
|
||||
OrderedDict([('struct', 'UserDefOne'), ('base', 'UserDefZero'), ('data', OrderedDict([('string', 'str'), ('*enum1', 'EnumOne')]))]),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue