Eric Blake <ebl...@redhat.com> writes: > On 03/08/2016 08:59 AM, Markus Armbruster wrote: >> Eric Blake <ebl...@redhat.com> writes: >> >>> Simple unions were carrying a special case that hid their 'data' >>> QMP member from the resulting C struct, via the hack method >>> QAPISchemaObjectTypeVariant.simple_union_type(). But by using >>> the work we started by unboxing flat union and alternate >>> branches, coupled with the ability to visit the members of an >>> implicit type, we can now expose the simple union's implicit >>> type in qapi-types.h: >>> > >>> +++ b/scripts/qapi.py >>> @@ -1006,7 +1006,6 @@ class QAPISchemaObjectType(QAPISchemaType): >>> return c_name(self.name) + pointer_suffix >>> >>> def c_unboxed_type(self): >>> - assert not self.is_implicit() >> >> Doesn't this belong into PATCH 04? >> >>> return c_name(self.name) > > Maybe. Patch 3 kept the assertion out of straight code refactoring, and > patch 4 didn't use c_unboxed_type(), so this was the first place where I > had to weaken the assertion. But moving it into patch 4 doesn't seem > like it would hurt, as it is still semantically related to the fact that > we are planning on allowing an unboxed implicit type.
PATCH 04 drops the assertion from c_name(). Let's keep the two consistent. >>> - visit_type_%(c_type)s_members(v, &obj->u.%(c_name)s, &err); >>> -''', >>> - c_type=var.type.c_name(), >>> - c_name=c_name(var.name)) >>> - ret += mcgen(''' >>> - break; >>> -''') >>> + >>> variants.tag_member.type.prefix), >>> + c_type=var.type.c_name(), c_name=c_name(var.name)) >>> >>> ret += mcgen(''' >>> default: >> >> This stupid special case has given us enough trouble, good to see it >> gone! > > Yeah, it was a nice feeling to get to this point!