Eric Blake <ebl...@redhat.com> writes: > What's more meta than using qapi to define qapi? :) > > Convert QType into a full-fledged[*] builtin qapi enum type, so > that a subsequent patch can then use it as the discriminator > type of qapi alternate types. Fortunately, the judicious use of > 'prefix' in the qapi definition avoids churn to the spelling of > the enum constants. > > To avoid circular definitions, we have to flip the order of > inclusion between "qobject.h" vs. "qapi-types.h". Back in commit > 28770e0, we had the latter include the former, so that we could > use 'QObject *' for our implementation of 'any'. But that usage > also works with only a forward declaration, whereas the > definition of QObject requires QType to be a complete type.
I figure putting the typedef in include/qemu/typedefs.h would be simpler. Didn't think of it when I reviewed v11. > > [*] The type has to be builtin, rather than declared in > qapi/common.json, because we want to use it for alternates even > when common.json is not included. But since it is the first > builtin enum type, we have to add special cases to qapi-types > and qapi-visit to only emit definitions once, even when two > qapi files are being compiled into the same binary (the way we > already handled builtin list types like 'intList'). We may > need to revisit how multiple qapi files share common types, > but that's a project for another day. > > Signed-off-by: Eric Blake <ebl...@redhat.com> Patch looks sane.