On 10/16/2015 10:35 PM, Eric Blake wrote: > Now that we have separate namespaces for QMP vs. tag values, > we can simplify how the QAPISchema*.check() methods check for > collisions. Each QAPISchemaObjectTypeMember check() call is > given a single set of names it must not collide with; this set > is either the QMP names (when this member is used by an > ObjectType) or the case names (when this member is used by an > ObjectTypeVariants). We no longer need an all_members > parameter, as it can be computed by seen.values(). When used > by a union, QAPISchemaObjectTypeVariant must also perform a > QMP collision check for each member of its corresponding type. > > The new ObjectType.check_qmp() is an idempotent subset of > check(), and can be called multiple times over different seen > sets (useful, since the members of one type can be applied > into more than one other location via inheritance or flat > union variants). > > The code needs a temporary hack of passing a 'union' flag > through Variants.check(), since we do not inline the branches > of an alternate type into a parent QMP object. A later patch > will rework how alternates are laid out, by adding a new > subclass, and that will allow us to drop the extra parameter. > > There are no changes to generated code, and we can now add a > positive test to qapi-schema-test that proves that alternates > can now use names that would previously trigger assertions > (see commit 7b2a5c2f for an example of the failure that was > still possible for alternates before this commit). > > Future patches will add more positive tests, improve error > message quality on actual collisions, and move collision > checks out of ad hoc parse code into the check() methods.
This paragraph may be a bit out of date based on rebasing that I've done, but one patch for sure that needs to come later is deferring subset B v10 24/25 to after this point. The patch itself should be in good state for reviewing, even if the commit message needs massaging. > > Signed-off-by: Eric Blake <ebl...@redhat.com> > > --- > v7: new patch, although it is a much cleaner implementation of > what was attempted by subset B v8 15/18 > https://lists.gnu.org/archive/html/qemu-devel/2015-10/msg03042.html -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature