On 07/15/2016 09:36 AM, Markus Armbruster wrote: > "Daniel P. Berrange" <berra...@redhat.com> writes: > >> Currently the QmpInputVisitor assumes that all scalar >> values are directly represented as their final types. >> ie it assumes an 'int' is using QInt, and a 'bool' is >> using QBool. >> >> This adds an alternative constructor for QmpInputVisitor >> that will set it up such that it expects a QString for >> all scalar types instead. >> >> This makes it possible to use QmpInputVisitor with a >> QDict produced from QemuOpts, where everything is in >> string format. >> >> Reviewed-by: Marc-André Lureau <marcandre.lur...@redhat.com> >> Signed-off-by: Daniel P. Berrange <berra...@redhat.com> >> ---
>> +Visitor *qmp_string_input_visitor_new(QObject *obj, bool strict); > > We have a QMP input visitor that isn't really about QMP, and a string > visitor. You're adding a QMP string input visitor that's even less > about QMP (using it with QMP would be wrong, in fact), and that is > related to the string visitor only insofar as both parse strings. > Differently, of course; this is QEMU. > > Can't think of a better name, and I'm running out of Friday. > Sounds like we might want a prereq patch that just does a global rename of s/qmp-\(input-visitor\|output-visitor\)/qobj-\1/ through all affected files. Since it really is a QObject visitor, the rename will make it easier to give the new visitor a nicer name. > Should we specify how strings are parsed? > > Do you actually need both strict = true and strict = false here? I'd be fine if we just enforced that the new QObject-string parser is always strict. Non-strict parsers should only be used where we are worried about back-compat for hand-written code that knows how to deal with unparsed keys (such as device_add, where we MUST accept arguments not part of the QAPI schema, so long as we don't have a schema that fully describes it). >> static void qmp_input_optional(Visitor *v, const char *name, bool *present) >> { >> QmpInputVisitor *qiv = to_qiv(v); > > Separate callbacks result in cleaner code than what I reviewed last. > Cleaner semantics, too: either all the scalars have sane types, or all > are strings. In other words, it forces us to strongly be tied to the input source, where command line is strongly-typed to strings, and QMP is strongly-typed to native types. It doesn't solve the problem of netdev_add previously being loose and taking both types, but as we've mentioned in other threads, we may not care (it may be sufficient to state that the undocumented looseness of netdev_add is not worth fixing); and Dan did have the nice followup proposal of adding yet another callback with peek semantics that can then delegate to the correct strongly-typed callback, rather than my approach that munged it all into a single callback. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature