
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