From: Eric Blake <eblake@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: qemu-devel@nongnu.org, Michael Roth <mdroth@linux.vnet.ibm.com>
Subject: Re: [Qemu-devel] [PATCH v10 27/30] qapi: Track owner of each object member
Date: Tue, 10 Nov 2015 17:17:40 -0700 [thread overview]
Message-ID: <56428924.3010209@redhat.com> (raw)
In-Reply-To: <87d1vjgsg2.fsf@blackfin.pond.sub.org>
[-- Attachment #1: Type: text/plain, Size: 4070 bytes --]
On 11/09/2015 07:26 AM, Markus Armbruster wrote:
> Eric Blake <eblake@redhat.com> writes:
>
>> Future commits will migrate semantic checking away from parsing
>> and over to the various QAPISchema*.check() methods. But to
>> report an error message about an incorrect semantic use of a
>> member of an object type, it helps to know which type, command,
>> or event owns the member. In particular, when a member is
>> inherited from a base type, it is desirable to associate the
>> member name with the base type (and not the type calling
>> member.check()).
>>
>>
>> + def _pretty_owner(self):
>> + # See QAPISchema._make_implicit_object_type() - reverse the
>> + # mapping there to create a nice human-readable description
>
> This comment confused me briefly. It applies to the following
> conditionals if-part, but not its else-part. Move it into the if-part?
Done.
>> @@ -1082,9 +1117,11 @@ class QAPISchemaAlternateType(QAPISchemaType):
>> QAPISchemaType.__init__(self, name, info)
>> assert isinstance(variants, QAPISchemaObjectTypeVariants)
>> assert not variants.tag_name
>> + variants.set_owner(name)
>> self.variants = variants
>>
>> def check(self, schema):
>> + self.variants.tag_member.set_owner(self.name)
>> self.variants.tag_member.check(schema)
>> self.variants.check(schema, {})
>>
>
> Odd: all other .set_owner() calls are in .__init__() or .set_owner().
> Can we move this one to __init__() for consistency?
Yes, done.
>
> I think we can: __init__() requires its variants argument to have a
> tag_member (it even asserts not variants.tag_name).
>
>> @@ -1212,6 +1249,7 @@ class QAPISchema(object):
>> def _make_implicit_object_type(self, name, info, role, members):
>> if not members:
>> return None
>> + # See also QAPISchemaObjectTypeMember.describe()
>
> Should this point to ._pretty_owner() instead?
Good call.
>
>> name = ':obj-%s-%s' % (name, role)
>> if not self.lookup_entity(name, QAPISchemaObjectType):
>> self._def_entity(QAPISchemaObjectType(name, info, None,
>> @@ -1315,7 +1353,7 @@ class QAPISchema(object):
>> data = expr.get('data')
>> if isinstance(data, OrderedDict):
>> data = self._make_implicit_object_type(
>> - name, info, 'arg', self._make_members(data, info))
>> + name, info, 'data', self._make_members(data, info))
>
> This is necessary only to make .pretty_owner() say 'data of EVENT_NAME'
> instead of 'argument of EVENT_NAME'. Do we really need different
> wording for commands and events?
>
> I'd make it say 'parameter of' for both commands and events. I
> habitually use "parameter" for formal parameters, and "argument" for
> actual arguments. Guess I've worked with the C standard too much...
'parameter' sounds better for both, at which point the messages no
longer differ,...
>
> For what it's worth, the QAPI schema language uses 'data' for both (and
> many other things, too), and the introspection schema uses 'arg-type'
> for both.
>
>> self._def_entity(QAPISchemaEvent(name, info, data))
>>
>> def _def_exprs(self):
>> diff --git a/tests/qapi-schema/qapi-schema-test.out b/tests/qapi-schema/qapi-schema-test.out
>> index 786024e..f78ef04 100644
>> --- a/tests/qapi-schema/qapi-schema-test.out
>> +++ b/tests/qapi-schema/qapi-schema-test.out
>> @@ -1,9 +1,9 @@
>> object :empty
>> -object :obj-EVENT_C-arg
>> +object :obj-EVENT_C-data
>> member a: int optional=True
>> member b: UserDefOne optional=True
>> member c: str optional=False
>> -object :obj-EVENT_D-arg
>> +object :obj-EVENT_D-data
...so I no longer need to rename the implicit struct for events to allow
the differentiation. v11 is thus a smaller patch :)
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
next prev parent reply other threads:[~2015-11-11 0:17 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-06 6:35 [Qemu-devel] [PATCH v10 00/30] qapi member collision (post-introspection cleanups, subset C') Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 01/30] qapi: Use generated TestStruct machinery in tests Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 02/30] qapi: Strengthen test of TestStructList Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 03/30] qobject: Protect against use-after-free in qobject_decref() Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 04/30] qapi: Share test_init code in test-qmp-input* Eric Blake
2015-11-06 15:17 ` Markus Armbruster
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 05/30] qapi: Plug leaks in test-qmp-* Eric Blake
2015-11-06 15:21 ` Markus Armbruster
2015-11-06 15:49 ` Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 06/30] qapi: Simplify non-error testing " Eric Blake
2015-11-06 15:36 ` Markus Armbruster
2015-11-06 15:54 ` Eric Blake
2015-11-06 16:24 ` Markus Armbruster
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 07/30] qapi: Simplify error cleanup " Eric Blake
2015-11-06 15:40 ` Markus Armbruster
2015-11-06 15:59 ` Eric Blake
2015-11-06 16:23 ` Markus Armbruster
2015-11-06 16:32 ` Eric Blake
2015-11-06 17:04 ` [Qemu-devel] [PATCH] fixup! " Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 08/30] qapi: More tests of alternate output Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 09/30] qapi: Test failure in middle of array parse Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 10/30] qapi: More tests of input arrays Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 11/30] qapi: Provide nicer array names in introspection Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 12/30] qapi-introspect: Document lack of sorting Eric Blake
2015-11-06 15:52 ` Markus Armbruster
2015-11-09 20:56 ` Eric Blake
2015-11-10 7:36 ` Markus Armbruster
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 13/30] qapi: Track simple union tag in object.local_members Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 14/30] qapi-types: Consolidate gen_struct() and gen_union() Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 15/30] qapi-types: Simplify gen_struct_field[s] Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 16/30] qapi: Drop obsolete tag value collision assertions Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 17/30] qapi: Simplify QAPISchemaObjectTypeMember.check() Eric Blake
2015-11-09 12:31 ` Markus Armbruster
2015-11-09 14:44 ` Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 18/30] qapi: Clean up after previous commit Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 19/30] qapi: Fix up commit 7618b91's clash sanity checking change Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 20/30] qapi: Eliminate QAPISchemaObjectType.check() variable members Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 21/30] qapi: Factor out QAPISchemaObjectTypeMember.check_clash() Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 22/30] qapi: Simplify QAPISchemaObjectTypeVariants.check() Eric Blake
2015-11-09 12:38 ` Markus Armbruster
2015-11-10 5:04 ` Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 23/30] qapi: Check for qapi collisions of flat union branches Eric Blake
2015-11-09 12:56 ` Markus Armbruster
2015-11-09 15:13 ` Markus Armbruster
2015-11-10 5:18 ` Eric Blake
2015-11-10 5:16 ` Eric Blake
2015-11-10 8:30 ` Markus Armbruster
2015-11-10 13:24 ` Eric Blake
2015-11-10 23:37 ` Eric Blake
2015-11-11 9:50 ` Markus Armbruster
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 24/30] qapi: Factor out QAPISchemaObjectType.check_clash() Eric Blake
2015-11-09 13:00 ` Markus Armbruster
2015-11-09 17:36 ` Eric Blake
2015-11-09 19:11 ` Markus Armbruster
2015-11-10 5:22 ` Eric Blake
2015-11-09 14:49 ` Markus Armbruster
2015-11-10 5:32 ` Eric Blake
2015-11-10 9:15 ` Markus Armbruster
2015-11-10 13:19 ` Eric Blake
2015-11-10 14:43 ` Markus Armbruster
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 25/30] qapi: Hoist tag collision check to Variants.check() Eric Blake
2015-11-09 13:07 ` Markus Armbruster
2015-11-10 5:33 ` Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 26/30] qapi: Remove outdated tests related to QMP/branch collisions Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 27/30] qapi: Track owner of each object member Eric Blake
2015-11-09 14:26 ` Markus Armbruster
2015-11-11 0:17 ` Eric Blake [this message]
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 28/30] qapi: Detect collisions in C member names Eric Blake
2015-11-09 15:17 ` Markus Armbruster
2015-11-11 0:34 ` Eric Blake
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 29/30] cpu: Convert CpuInfo into flat union Eric Blake
2015-11-09 15:22 ` Markus Armbruster
2015-11-11 2:50 ` Eric Blake
2015-11-11 10:19 ` Markus Armbruster
2015-11-11 15:40 ` Eric Blake
2015-11-11 17:00 ` Markus Armbruster
2015-11-06 6:35 ` [Qemu-devel] [PATCH v10 30/30] qapi: Forbid case-insensitive clashes Eric Blake
2015-11-09 15:42 ` Markus Armbruster
2015-11-06 16:03 ` [Qemu-devel] [PATCH v10 00/30] qapi member collision (post-introspection cleanups, subset C') Markus Armbruster
2015-11-06 16:08 ` Eric Blake
2015-11-09 9:59 ` Markus Armbruster
2015-11-09 14:43 ` Eric Blake
2015-11-09 18:42 ` Markus Armbruster
2015-11-10 11:57 ` Markus Armbruster
2015-11-11 22:48 ` Eric Blake
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56428924.3010209@redhat.com \
--to=eblake@redhat.com \
--cc=armbru@redhat.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.