Am 13.03.2021 um 09:41 hat Markus Armbruster geschrieben:
Observation, not objection:
1. QMP core parses JSON text into QObject, passes to generated
marshaller.
2. Marshaller converts QObject to ObjectOptions with the QObject input
visitor, passes to qmp_object_add().
3. qmp_object_add() wraps around user_creatable_add_qapi().
4. user_creatable_add_qapi() converts right back to QObject with the
QObject output visitor. It splits the result into qom_type, id and
the rest, and passes all three to user_creatable_add_type().
5. user_creatable_add_type() performs a virtual visit with the QObject
input visitor. The outermost object it visits itself, its children
it visits by calling object_property_set().
I sure hope we wouldn't write it this way from scratch :)
I think your patch is a reasonable step towards a QOM that is at peace
with QAPI. But there's plenty of work left.
Yes, obviously the conversion back to QObject is not great. There are
two reasons why we currently need it:
1. user_creatable_add_type() wants to iterate over all properties
without knowing which properties exist. This should be fixed by not
visiting the top level in user_creatable_add_type(), but moving this
part to object-specific code (in the final state probably code
generated from the QAPI schema).
2. We have ObjectOptions, but need to pass a visitor. We don't have a
general purpose visitor that visits both sides. The clone visitor
seems somewhat similar to what we need, but I seem to remember it was
more restricted to its particular use case.
Kevin