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