* [Qemu-devel] [PATCH 0/2] qapi: easier debugging of introspection file @ 2018-06-29 19:55 Eric Blake 2018-06-29 19:55 ` [Qemu-devel] [PATCH 1/2] qapi: Add comments to aid debugging generated introspection Eric Blake 2018-06-29 19:55 ` [Qemu-devel] [PATCH 2/2] qapi: Drop qapi-gen --unmask option Eric Blake 0 siblings, 2 replies; 13+ messages in thread From: Eric Blake @ 2018-06-29 19:55 UTC (permalink / raw) To: qemu-devel; +Cc: armbru When inspecting the generated qapi-introspect.c (for debugging, or to see what QAPI changes are user visible vs. internal only), the fact that we've intentionally masked names from the QMP client makes it harder to tie back generated code back to the original QAPI .json files. We have a -u switch to qapi-gen for temporarily bypassing the name masking, but that's a rather heavy-handed tactic just for some temporary debugging. Better is to just make the generated file include strategic comments. Eric Blake (2): qapi: Add comments to aid debugging generated introspection qapi: Drop qapi-gen --unmask option scripts/qapi-gen.py | 5 +---- scripts/qapi/introspect.py | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 13 deletions(-) -- 2.14.4 ^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 1/2] qapi: Add comments to aid debugging generated introspection 2018-06-29 19:55 [Qemu-devel] [PATCH 0/2] qapi: easier debugging of introspection file Eric Blake @ 2018-06-29 19:55 ` Eric Blake 2018-06-29 20:09 ` Eric Blake 2018-06-29 20:53 ` Eric Blake 2018-06-29 19:55 ` [Qemu-devel] [PATCH 2/2] qapi: Drop qapi-gen --unmask option Eric Blake 1 sibling, 2 replies; 13+ messages in thread From: Eric Blake @ 2018-06-29 19:55 UTC (permalink / raw) To: qemu-devel; +Cc: armbru, Michael Roth We consciously chose in commit 1a9a507b to hide QAPI type names from the generated introspection output, but added a command line option -u to unmask the type name when doing a debug build. At that time, we generated a monolithic C string, so there was no better way to do things (we could not really inject comments). Later, in commit 7d0f982b, we switched the generation to output a QLit object, in part to make it easier for future addition of conditional compilation. But this switch has also made it easier to interject strategic comments. That commit also forgot to delete some now-stale comments about long generated line lengths. For now, type name debug aid comments are only output once per meta-type, rather than at all uses of the number used to encode the type to the introspection data. But this is still a lot more convenient than having to regenerate the file with the unmask operation temporarily turned on. The generated qapi-introspect.c changes only with the addition of comments, such as: | @@ -14927,6 +15410,7 @@ | {} | })), | QLIT_QDICT(((QLitDictEntry[]) { | + /* QCryptoBlockInfoLUKSSlot */ | { "members", QLIT_QLIST(((QLitObject[]) { | QLIT_QDICT(((QLitDictEntry[]) { | { "name", QLIT_QSTR("active") }, | Signed-off-by: Eric Blake <eblake@redhat.com> --- scripts/qapi/introspect.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/scripts/qapi/introspect.py b/scripts/qapi/introspect.py index 6ad198ae5b5..b37160292bc 100644 --- a/scripts/qapi/introspect.py +++ b/scripts/qapi/introspect.py @@ -35,10 +35,14 @@ def to_qlit(obj, level=0, suppress_first_indent=False): elif isinstance(obj, dict): elts = [] for key, value in sorted(obj.items()): + if key == 'comment': + continue elts.append(indent(level + 1) + '{ %s, %s }' % (to_c_string(key), to_qlit(value, level + 1, True))) elts.append(indent(level + 1) + '{}') ret += 'QLIT_QDICT(((QLitDictEntry[]) {\n' + if obj.get('comment'): + ret += indent(level + 1) + '/* %s */\n' % obj['comment'] ret += ',\n'.join(elts) + '\n' ret += indent(level) + '}))' elif isinstance(obj, bool): @@ -78,7 +82,6 @@ class QAPISchemaGenIntrospectVisitor(QAPISchemaMonolithicCVisitor): for typ in self._used_types: typ.visit(self) # generate C - # TODO can generate awfully long lines name = c_name(self._prefix, protect=False) + 'qmp_schema_qlit' self._genh.add(mcgen(''' #include "qapi/qmp/qlit.h" @@ -118,8 +121,8 @@ const QLitObject %(c_name)s = %(c_string)s; if typ not in self._used_types: self._used_types.append(typ) # Clients should examine commands and events, not types. Hide - # type names to reduce the temptation. Also saves a few - # characters. + # type names as integers to reduce the temptation, but provide + # comments for debugging aid. if isinstance(typ, QAPISchemaBuiltinType): return typ.name if isinstance(typ, QAPISchemaArrayType): @@ -128,6 +131,8 @@ const QLitObject %(c_name)s = %(c_string)s; def _gen_qlit(self, name, mtype, obj): if mtype not in ('command', 'event', 'builtin', 'array'): + if not self._unmask: + obj['comment'] = name name = self._name(name) obj['name'] = name obj['meta-type'] = mtype -- 2.14.4 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] qapi: Add comments to aid debugging generated introspection 2018-06-29 19:55 ` [Qemu-devel] [PATCH 1/2] qapi: Add comments to aid debugging generated introspection Eric Blake @ 2018-06-29 20:09 ` Eric Blake 2018-07-02 18:43 ` Markus Armbruster 2018-06-29 20:53 ` Eric Blake 1 sibling, 1 reply; 13+ messages in thread From: Eric Blake @ 2018-06-29 20:09 UTC (permalink / raw) To: qemu-devel; +Cc: armbru, Michael Roth, Marc-André Lureau On 06/29/2018 02:55 PM, Eric Blake wrote: > We consciously chose in commit 1a9a507b to hide QAPI type names > from the generated introspection output, but added a command line > option -u to unmask the type name when doing a debug build. At > that time, we generated a monolithic C string, so there was no > better way to do things (we could not really inject comments). > > Later, in commit 7d0f982b, we switched the generation to output > a QLit object, in part to make it easier for future addition of > conditional compilation. But this switch has also made it easier > to interject strategic comments. That commit also forgot to > delete some now-stale comments about long generated line lengths. > > For now, type name debug aid comments are only output once per > meta-type, rather than at all uses of the number used to encode > the type to the introspection data. But this is still a lot > more convenient than having to regenerate the file with the > unmask operation temporarily turned on. ... > Signed-off-by: Eric Blake <eblake@redhat.com> > --- > scripts/qapi/introspect.py | 11 ++++++++--- > 1 file changed, 8 insertions(+), 3 deletions(-) Misses a change to docs/devel/qapi-code.gen.tx: diff --git i/docs/devel/qapi-code-gen.txt w/docs/devel/qapi-code-gen.txt index 88a70e4d451..0c98c7d7b6c 100644 --- i/docs/devel/qapi-code-gen.txt +++ w/docs/devel/qapi-code-gen.txt @@ -1392,6 +1392,7 @@ Example: { } })), QLIT_QDICT(((QLitDictEntry[]) { + /* q_empty */ { "members", QLIT_QLIST(((QLitObject[]) { { } })) }, > @@ -118,8 +121,8 @@ const QLitObject %(c_name)s = %(c_string)s; > if typ not in self._used_types: > self._used_types.append(typ) > # Clients should examine commands and events, not types. Hide > - # type names to reduce the temptation. Also saves a few > - # characters. > + # type names as integers to reduce the temptation, but provide > + # comments for debugging aid. When I wrote the patch, I assumed the final sentence of the comment was talking about fewer characters in the generated .c file (I nuked it, since adding comments makes for a longer, not shorter, generated .c file); but now that I'm writing this email, I see it could also refer to fewer characters sent over the wire in the QMP command (which length is unchanged by this patch, but was a 13KiB savings compared to the unmasked version, per commit 1a9a507b). So feel free to bikeshed this comment. -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] qapi: Add comments to aid debugging generated introspection 2018-06-29 20:09 ` Eric Blake @ 2018-07-02 18:43 ` Markus Armbruster 2018-07-02 19:59 ` Eric Blake 0 siblings, 1 reply; 13+ messages in thread From: Markus Armbruster @ 2018-07-02 18:43 UTC (permalink / raw) To: Eric Blake; +Cc: qemu-devel, Marc-André Lureau, armbru, Michael Roth Eric Blake <eblake@redhat.com> writes: > On 06/29/2018 02:55 PM, Eric Blake wrote: >> We consciously chose in commit 1a9a507b to hide QAPI type names >> from the generated introspection output, but added a command line >> option -u to unmask the type name when doing a debug build. At >> that time, we generated a monolithic C string, so there was no >> better way to do things (we could not really inject comments). >> >> Later, in commit 7d0f982b, we switched the generation to output >> a QLit object, in part to make it easier for future addition of >> conditional compilation. But this switch has also made it easier >> to interject strategic comments. That commit also forgot to >> delete some now-stale comments about long generated line lengths. >> >> For now, type name debug aid comments are only output once per >> meta-type, rather than at all uses of the number used to encode >> the type to the introspection data. But this is still a lot >> more convenient than having to regenerate the file with the >> unmask operation temporarily turned on. > ... > >> Signed-off-by: Eric Blake <eblake@redhat.com> >> --- >> scripts/qapi/introspect.py | 11 ++++++++--- >> 1 file changed, 8 insertions(+), 3 deletions(-) > > Misses a change to docs/devel/qapi-code.gen.tx: > > diff --git i/docs/devel/qapi-code-gen.txt w/docs/devel/qapi-code-gen.txt > index 88a70e4d451..0c98c7d7b6c 100644 > --- i/docs/devel/qapi-code-gen.txt > +++ w/docs/devel/qapi-code-gen.txt > @@ -1392,6 +1392,7 @@ Example: > { } > })), > QLIT_QDICT(((QLitDictEntry[]) { > + /* q_empty */ > { "members", QLIT_QLIST(((QLitObject[]) { > { } > })) }, Yes. >> diff --git a/scripts/qapi/introspect.py b/scripts/qapi/introspect.py >> index 6ad198ae5b5..b37160292bc 100644 >> --- a/scripts/qapi/introspect.py >> +++ b/scripts/qapi/introspect.py >> @@ -35,10 +35,14 @@ def to_qlit(obj, level=0, suppress_first_indent=False): >> elif isinstance(obj, dict): >> elts = [] >> for key, value in sorted(obj.items()): >> + if key == 'comment': >> + continue >> elts.append(indent(level + 1) + '{ %s, %s }' % >> (to_c_string(key), to_qlit(value, level + 1, True))) >> elts.append(indent(level + 1) + '{}') >> ret += 'QLIT_QDICT(((QLitDictEntry[]) {\n' >> + if obj.get('comment'): >> + ret += indent(level + 1) + '/* %s */\n' % obj['comment'] >> ret += ',\n'.join(elts) + '\n' >> ret += indent(level) + '}))' >> elif isinstance(obj, bool): to_qlit() converts from a natural representation of JSON in Python to JSON text. Your patch breaks it for JSON objects that have a member named 'comment'. Related work: Marc-André's "[PATCH v6 09/15] qapi-introspect: add preprocessor conditions to generated QLit" uses tuples to augment JSON. He uses them for conditionals, but the technique could be generalized, say from his (jobj, ifcond) to (jobj, { 'if': ifcond, '#': comment }. >> @@ -78,7 +82,6 @@ class QAPISchemaGenIntrospectVisitor(QAPISchemaMonolithicCVisitor): >> for typ in self._used_types: >> typ.visit(self) >> # generate C >> - # TODO can generate awfully long lines >> name = c_name(self._prefix, protect=False) + 'qmp_schema_qlit' >> self._genh.add(mcgen(''' >> #include "qapi/qmp/qlit.h" >> @@ -118,8 +121,8 @@ const QLitObject %(c_name)s = %(c_string)s; >> if typ not in self._used_types: >> self._used_types.append(typ) >> # Clients should examine commands and events, not types. Hide >> - # type names to reduce the temptation. Also saves a few >> - # characters. >> + # type names as integers to reduce the temptation, but provide >> + # comments for debugging aid. > > When I wrote the patch, I assumed the final sentence of the comment > was talking about fewer characters in the generated .c file (I nuked > it, since adding comments makes for a longer, not shorter, generated > .c file); but now that I'm writing this email, I see it could also > refer to fewer characters sent over the wire in the QMP command (which Yes, that was my intent. > length is unchanged by this patch, but was a 13KiB savings compared to > the unmasked version, per commit 1a9a507b). So feel free to bikeshed > this comment. I think I'd merely clarify the comment's last sentence by adding "on the wire", ... >> if isinstance(typ, QAPISchemaBuiltinType): >> return typ.name >> if isinstance(typ, QAPISchemaArrayType): >> @@ -128,6 +131,8 @@ const QLitObject %(c_name)s = %(c_string)s; >> >> def _gen_qlit(self, name, mtype, obj): >> if mtype not in ('command', 'event', 'builtin', 'array'): >> + if not self._unmask: ... and perhaps briefly explain here why we generate a comment. >> + obj['comment'] = name >> name = self._name(name) >> obj['name'] = name >> obj['meta-type'] = mtype ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] qapi: Add comments to aid debugging generated introspection 2018-07-02 18:43 ` Markus Armbruster @ 2018-07-02 19:59 ` Eric Blake 2018-07-03 5:38 ` Markus Armbruster 0 siblings, 1 reply; 13+ messages in thread From: Eric Blake @ 2018-07-02 19:59 UTC (permalink / raw) To: Markus Armbruster; +Cc: qemu-devel, Marc-André Lureau, Michael Roth On 07/02/2018 01:43 PM, Markus Armbruster wrote: > Eric Blake <eblake@redhat.com> writes: > >> On 06/29/2018 02:55 PM, Eric Blake wrote: >>> We consciously chose in commit 1a9a507b to hide QAPI type names >>> from the generated introspection output, but added a command line >>> option -u to unmask the type name when doing a debug build. At >>> that time, we generated a monolithic C string, so there was no >>> better way to do things (we could not really inject comments). >>> >>> Later, in commit 7d0f982b, we switched the generation to output >>> a QLit object, in part to make it easier for future addition of >>> conditional compilation. But this switch has also made it easier >>> to interject strategic comments. That commit also forgot to >>> delete some now-stale comments about long generated line lengths. >>> >>> For now, type name debug aid comments are only output once per >>> meta-type, rather than at all uses of the number used to encode >>> the type to the introspection data. But this is still a lot >>> more convenient than having to regenerate the file with the >>> unmask operation temporarily turned on. >> ... > to_qlit() converts from a natural representation of JSON in Python to > JSON text. > > Your patch breaks it for JSON objects that have a member named > 'comment'. Hmm. None do, presently. And I don't see where it would be permitted in the QAPI schema for query-qmp-schema. > > Related work: Marc-André's "[PATCH v6 09/15] qapi-introspect: add > preprocessor conditions to generated QLit" uses tuples to augment JSON. > He uses them for conditionals, but the technique could be generalized, > say from his (jobj, ifcond) to (jobj, { 'if': ifcond, '#': comment }. Yeah, I can probably rebase on top of that (and at this point, it's late enough to probably have missed 3.0 anyways, so I'm not time-crunched for getting it done right now). -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] qapi: Add comments to aid debugging generated introspection 2018-07-02 19:59 ` Eric Blake @ 2018-07-03 5:38 ` Markus Armbruster 0 siblings, 0 replies; 13+ messages in thread From: Markus Armbruster @ 2018-07-03 5:38 UTC (permalink / raw) To: Eric Blake; +Cc: Marc-André Lureau, qemu-devel, Michael Roth Eric Blake <eblake@redhat.com> writes: > On 07/02/2018 01:43 PM, Markus Armbruster wrote: >> Eric Blake <eblake@redhat.com> writes: >> >>> On 06/29/2018 02:55 PM, Eric Blake wrote: >>>> We consciously chose in commit 1a9a507b to hide QAPI type names >>>> from the generated introspection output, but added a command line >>>> option -u to unmask the type name when doing a debug build. At >>>> that time, we generated a monolithic C string, so there was no >>>> better way to do things (we could not really inject comments). >>>> >>>> Later, in commit 7d0f982b, we switched the generation to output >>>> a QLit object, in part to make it easier for future addition of >>>> conditional compilation. But this switch has also made it easier >>>> to interject strategic comments. That commit also forgot to >>>> delete some now-stale comments about long generated line lengths. >>>> >>>> For now, type name debug aid comments are only output once per >>>> meta-type, rather than at all uses of the number used to encode >>>> the type to the introspection data. But this is still a lot >>>> more convenient than having to regenerate the file with the >>>> unmask operation temporarily turned on. >>> ... > >> to_qlit() converts from a natural representation of JSON in Python to >> JSON text. >> >> Your patch breaks it for JSON objects that have a member named >> 'comment'. > > Hmm. None do, presently. And I don't see where it would be permitted > in the QAPI schema for query-qmp-schema. So far, to_qlit() is completely oblivious of the schema; it just crunches JSON. I'd like to keep it that way, if practical. >> Related work: Marc-André's "[PATCH v6 09/15] qapi-introspect: add >> preprocessor conditions to generated QLit" uses tuples to augment JSON. >> He uses them for conditionals, but the technique could be generalized, >> say from his (jobj, ifcond) to (jobj, { 'if': ifcond, '#': comment }. > > Yeah, I can probably rebase on top of that (and at this point, it's > late enough to probably have missed 3.0 anyways, so I'm not > time-crunched for getting it done right now). It's a lovely improvement for developers, but it'll be just as lovely in 3.1 :) ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] qapi: Add comments to aid debugging generated introspection 2018-06-29 19:55 ` [Qemu-devel] [PATCH 1/2] qapi: Add comments to aid debugging generated introspection Eric Blake 2018-06-29 20:09 ` Eric Blake @ 2018-06-29 20:53 ` Eric Blake 1 sibling, 0 replies; 13+ messages in thread From: Eric Blake @ 2018-06-29 20:53 UTC (permalink / raw) To: qemu-devel; +Cc: armbru, Michael Roth On 06/29/2018 02:55 PM, Eric Blake wrote: > The generated qapi-introspect.c changes only with the addition > of comments, such as: > > | @@ -14927,6 +15410,7 @@ > | {} > | })), > | QLIT_QDICT(((QLitDictEntry[]) { > | + /* QCryptoBlockInfoLUKSSlot */ > | { "members", QLIT_QLIST(((QLitObject[]) { > | QLIT_QDICT(((QLitDictEntry[]) { > | { "name", QLIT_QSTR("active") }, --- ... > @@ -128,6 +131,8 @@ const QLitObject %(c_name)s = %(c_string)s; > > def _gen_qlit(self, name, mtype, obj): > if mtype not in ('command', 'event', 'builtin', 'array'): > + if not self._unmask: > + obj['comment'] = name If desired, we could change this to: if not self._unmask: obj['comment'] = '"%s" = %s' % (self._name(name), name) to produce comments like /* "0" = q_empty */ for even easier debugging (if I see a line containing "ret-type", QLIT_QSTR("0"), then I can grep for '"0" =' to directly look up the type name, rather than having to grep for 'name.*"0"' then scrolling back to find the associated comment). -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org ^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 2/2] qapi: Drop qapi-gen --unmask option 2018-06-29 19:55 [Qemu-devel] [PATCH 0/2] qapi: easier debugging of introspection file Eric Blake 2018-06-29 19:55 ` [Qemu-devel] [PATCH 1/2] qapi: Add comments to aid debugging generated introspection Eric Blake @ 2018-06-29 19:55 ` Eric Blake 2018-06-29 20:18 ` Eduardo Habkost 2018-07-02 18:48 ` Markus Armbruster 1 sibling, 2 replies; 13+ messages in thread From: Eric Blake @ 2018-06-29 19:55 UTC (permalink / raw) To: qemu-devel; +Cc: armbru, Michael Roth, Eduardo Habkost, Cleber Rosa Now that we have useful access to the type name as a comment in the generated qapi-introspect.c, we don't need to regenerate code with a temporary -u option just to get at type names. Signed-off-by: Eric Blake <eblake@redhat.com> --- scripts/qapi-gen.py | 5 +---- scripts/qapi/introspect.py | 12 ++++-------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/scripts/qapi-gen.py b/scripts/qapi-gen.py index 3d98ca2e0c6..6ec7e481b1b 100755 --- a/scripts/qapi-gen.py +++ b/scripts/qapi-gen.py @@ -26,9 +26,6 @@ def main(argv): help="write output to directory OUTPUT_DIR") parser.add_argument('-p', '--prefix', action='store', default='', help="prefix for symbols") - parser.add_argument('-u', '--unmask-non-abi-names', action='store_true', - dest='unmask', - help="expose non-ABI names in introspection") parser.add_argument('schema', action='store') args = parser.parse_args() @@ -49,7 +46,7 @@ def main(argv): gen_visit(schema, args.output_dir, args.prefix, args.builtins) gen_commands(schema, args.output_dir, args.prefix) gen_events(schema, args.output_dir, args.prefix) - gen_introspect(schema, args.output_dir, args.prefix, args.unmask) + gen_introspect(schema, args.output_dir, args.prefix) gen_doc(schema, args.output_dir, args.prefix) diff --git a/scripts/qapi/introspect.py b/scripts/qapi/introspect.py index b37160292bc..8dd4136c0af 100644 --- a/scripts/qapi/introspect.py +++ b/scripts/qapi/introspect.py @@ -58,11 +58,10 @@ def to_c_string(string): class QAPISchemaGenIntrospectVisitor(QAPISchemaMonolithicCVisitor): - def __init__(self, prefix, unmask): + def __init__(self, prefix): QAPISchemaMonolithicCVisitor.__init__( self, prefix, 'qapi-introspect', ' * QAPI/QMP schema introspection', __doc__) - self._unmask = unmask self._schema = None self._qlits = [] self._used_types = [] @@ -104,8 +103,6 @@ const QLitObject %(c_name)s = %(c_string)s; return not isinstance(entity, QAPISchemaType) def _name(self, name): - if self._unmask: - return name if name not in self._name_map: self._name_map[name] = '%d' % len(self._name_map) return self._name_map[name] @@ -131,8 +128,7 @@ const QLitObject %(c_name)s = %(c_string)s; def _gen_qlit(self, name, mtype, obj): if mtype not in ('command', 'event', 'builtin', 'array'): - if not self._unmask: - obj['comment'] = name + obj['comment'] = name name = self._name(name) obj['name'] = name obj['meta-type'] = mtype @@ -188,7 +184,7 @@ const QLitObject %(c_name)s = %(c_string)s; self._gen_qlit(name, 'event', {'arg-type': self._use_type(arg_type)}) -def gen_introspect(schema, output_dir, prefix, opt_unmask): - vis = QAPISchemaGenIntrospectVisitor(prefix, opt_unmask) +def gen_introspect(schema, output_dir, prefix): + vis = QAPISchemaGenIntrospectVisitor(prefix) schema.visit(vis) vis.write(output_dir) -- 2.14.4 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] qapi: Drop qapi-gen --unmask option 2018-06-29 19:55 ` [Qemu-devel] [PATCH 2/2] qapi: Drop qapi-gen --unmask option Eric Blake @ 2018-06-29 20:18 ` Eduardo Habkost 2018-07-02 18:48 ` Markus Armbruster 1 sibling, 0 replies; 13+ messages in thread From: Eduardo Habkost @ 2018-06-29 20:18 UTC (permalink / raw) To: Eric Blake; +Cc: qemu-devel, armbru, Michael Roth, Cleber Rosa On Fri, Jun 29, 2018 at 02:55:44PM -0500, Eric Blake wrote: > Now that we have useful access to the type name as a comment > in the generated qapi-introspect.c, we don't need to regenerate > code with a temporary -u option just to get at type names. > > Signed-off-by: Eric Blake <eblake@redhat.com> Reviewed-by: Eduardo Habkost <ehabkost@redhat.com> -- Eduardo ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] qapi: Drop qapi-gen --unmask option 2018-06-29 19:55 ` [Qemu-devel] [PATCH 2/2] qapi: Drop qapi-gen --unmask option Eric Blake 2018-06-29 20:18 ` Eduardo Habkost @ 2018-07-02 18:48 ` Markus Armbruster 2018-07-02 19:55 ` Eric Blake 1 sibling, 1 reply; 13+ messages in thread From: Markus Armbruster @ 2018-07-02 18:48 UTC (permalink / raw) To: Eric Blake; +Cc: qemu-devel, Cleber Rosa, armbru, Eduardo Habkost, Michael Roth Eric Blake <eblake@redhat.com> writes: > Now that we have useful access to the type name as a comment > in the generated qapi-introspect.c, we don't need to regenerate > code with a temporary -u option just to get at type names. > > Signed-off-by: Eric Blake <eblake@redhat.com> I occasionally feed output of query-qmp-schema to ad hoc Python scripts. My last one searched for object types containing non-string members (directly or indirectly). -u remains useful there, and having to recompile is not a problem. I'd prefer to keep it. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] qapi: Drop qapi-gen --unmask option 2018-07-02 18:48 ` Markus Armbruster @ 2018-07-02 19:55 ` Eric Blake 2018-07-03 5:51 ` Markus Armbruster 0 siblings, 1 reply; 13+ messages in thread From: Eric Blake @ 2018-07-02 19:55 UTC (permalink / raw) To: Markus Armbruster; +Cc: qemu-devel, Cleber Rosa, Eduardo Habkost, Michael Roth On 07/02/2018 01:48 PM, Markus Armbruster wrote: > Eric Blake <eblake@redhat.com> writes: > >> Now that we have useful access to the type name as a comment >> in the generated qapi-introspect.c, we don't need to regenerate >> code with a temporary -u option just to get at type names. >> >> Signed-off-by: Eric Blake <eblake@redhat.com> > > I occasionally feed output of query-qmp-schema to ad hoc Python scripts. > My last one searched for object types containing non-string members > (directly or indirectly). -u remains useful there, and having to > recompile is not a problem. I'd prefer to keep it. Would it be any easier to argue for the removal of -u if the generated output resembled: { "ret-type", QLIT_QSTR("1") /* Foo */ }, that is, sticking in the comment everywhere the type name is mangled to an integer, rather than just once per type? -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] qapi: Drop qapi-gen --unmask option 2018-07-02 19:55 ` Eric Blake @ 2018-07-03 5:51 ` Markus Armbruster 2018-07-03 12:44 ` Eric Blake 0 siblings, 1 reply; 13+ messages in thread From: Markus Armbruster @ 2018-07-03 5:51 UTC (permalink / raw) To: Eric Blake Cc: Markus Armbruster, Michael Roth, qemu-devel, Eduardo Habkost, Cleber Rosa Eric Blake <eblake@redhat.com> writes: > On 07/02/2018 01:48 PM, Markus Armbruster wrote: >> Eric Blake <eblake@redhat.com> writes: >> >>> Now that we have useful access to the type name as a comment >>> in the generated qapi-introspect.c, we don't need to regenerate >>> code with a temporary -u option just to get at type names. >>> >>> Signed-off-by: Eric Blake <eblake@redhat.com> >> >> I occasionally feed output of query-qmp-schema to ad hoc Python scripts. >> My last one searched for object types containing non-string members >> (directly or indirectly). -u remains useful there, and having to >> recompile is not a problem. I'd prefer to keep it. > > Would it be any easier to argue for the removal of -u if the generated > output resembled: > > { "ret-type", QLIT_QSTR("1") /* Foo */ }, > > that is, sticking in the comment everywhere the type name is mangled > to an integer, rather than just once per type? Doesn't help with my use case. Let me elaborate on it. My ad hoc Python script gets the output of query-qmp-schema like this: pipe = subprocess.Popen('socat %s STDIO' % qmp_socket, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE) (out, err) = pipe.communicate('{ "execute": "qmp_capabilities" }\n' '{ "execute": "query-qmp-schema" }\n') # three lines: greeting, output of qmp_capabilities, query-qmp-schema return json.loads(out.split('\n')[2])['return'] This returns an abstract syntax tree, represented in Python the obvious way. I can then explore it in Python, say search for object types with certain properties. For example, commit 2860b2b2cb8: Thus, the flaw puts an artificial restriction on the QAPI schema: we can't have potentially empty objects and arrays within BlockdevOptions, except when they're optional and "empty" has the same meaning as "absent". --> Our QAPI schema satisfies this restriction (I checked), but it's a trap for the unwary, and a temptation to employ awkward workarounds for the wary. Let's get rid of it. I checked with a Python script that read the schema as shown above. Without -u, I'd have to revert the identifier hiding. I could certainly write some more Python to read the mapping from the generated C, but that feels like busy work. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] qapi: Drop qapi-gen --unmask option 2018-07-03 5:51 ` Markus Armbruster @ 2018-07-03 12:44 ` Eric Blake 0 siblings, 0 replies; 13+ messages in thread From: Eric Blake @ 2018-07-03 12:44 UTC (permalink / raw) To: Markus Armbruster; +Cc: Michael Roth, qemu-devel, Eduardo Habkost, Cleber Rosa On 07/03/2018 12:51 AM, Markus Armbruster wrote: > Eric Blake <eblake@redhat.com> writes: > >> On 07/02/2018 01:48 PM, Markus Armbruster wrote: >>> Eric Blake <eblake@redhat.com> writes: >>> >>>> Now that we have useful access to the type name as a comment >>>> in the generated qapi-introspect.c, we don't need to regenerate >>>> code with a temporary -u option just to get at type names. >>>> > # three lines: greeting, output of qmp_capabilities, query-qmp-schema > return json.loads(out.split('\n')[2])['return'] > > This returns an abstract syntax tree, represented in Python the obvious > way. I can then explore it in Python, say search for object types with > certain properties. For example, commit 2860b2b2cb8: > > Thus, the flaw puts an artificial restriction on the QAPI schema: we > can't have potentially empty objects and arrays within > BlockdevOptions, except when they're optional and "empty" has the same > meaning as "absent". > > --> Our QAPI schema satisfies this restriction (I checked), but it's a > trap for the unwary, and a temptation to employ awkward workarounds > for the wary. Let's get rid of it. > > I checked with a Python script that read the schema as shown above. > Without -u, I'd have to revert the identifier hiding. I could certainly > write some more Python to read the mapping from the generated C, but > that feels like busy work. Good argument. Okay, I'm dropping this patch, and tweaking the other patch commit message to explain that -u is still useful, even with the addition of comment aids. -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2018-07-03 12:44 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-06-29 19:55 [Qemu-devel] [PATCH 0/2] qapi: easier debugging of introspection file Eric Blake 2018-06-29 19:55 ` [Qemu-devel] [PATCH 1/2] qapi: Add comments to aid debugging generated introspection Eric Blake 2018-06-29 20:09 ` Eric Blake 2018-07-02 18:43 ` Markus Armbruster 2018-07-02 19:59 ` Eric Blake 2018-07-03 5:38 ` Markus Armbruster 2018-06-29 20:53 ` Eric Blake 2018-06-29 19:55 ` [Qemu-devel] [PATCH 2/2] qapi: Drop qapi-gen --unmask option Eric Blake 2018-06-29 20:18 ` Eduardo Habkost 2018-07-02 18:48 ` Markus Armbruster 2018-07-02 19:55 ` Eric Blake 2018-07-03 5:51 ` Markus Armbruster 2018-07-03 12:44 ` Eric Blake
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).