Instead of defining a const QLitObject, we implement a function to directly return the QObject associated.
The benefit is that we can now have a non static definition for the QLitObject, and so we can assign it using non static initializer. This will be used in next commits to initialize a .hidden field per element, at runtime. Signed-off-by: Pierrick Bouvier <pierrick.bouv...@linaro.org> --- monitor/qmp-cmds-control.c | 2 +- tests/unit/test-qobject-input-visitor.c | 6 +++--- scripts/qapi/introspect.py | 9 ++++++--- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/monitor/qmp-cmds-control.c b/monitor/qmp-cmds-control.c index 150ca9f5cb6..1d52d4ca8e9 100644 --- a/monitor/qmp-cmds-control.c +++ b/monitor/qmp-cmds-control.c @@ -203,7 +203,7 @@ static SchemaInfoList *zap_deprecated(SchemaInfoList *schema) SchemaInfoList *qmp_query_qmp_schema(Error **errp) { - QObject *obj = qobject_from_qlit(&qmp_schema_qlit); + QObject *obj = qmp_schema_qobject(); Visitor *v = qobject_input_visitor_new(obj); SchemaInfoList *schema = NULL; diff --git a/tests/unit/test-qobject-input-visitor.c b/tests/unit/test-qobject-input-visitor.c index 84bdcdf702e..5d961325f95 100644 --- a/tests/unit/test-qobject-input-visitor.c +++ b/tests/unit/test-qobject-input-visitor.c @@ -1184,10 +1184,10 @@ static void test_visitor_in_fail_alternate(TestInputVisitorData *data, } static void do_test_visitor_in_qmp_introspect(TestInputVisitorData *data, - const QLitObject *qlit) + QObject *qlit) { g_autoptr(SchemaInfoList) schema = NULL; - QObject *obj = qobject_from_qlit(qlit); + QObject *obj = qlit; Visitor *v; v = qobject_input_visitor_new(obj); @@ -1202,7 +1202,7 @@ static void do_test_visitor_in_qmp_introspect(TestInputVisitorData *data, static void test_visitor_in_qmp_introspect(TestInputVisitorData *data, const void *unused) { - do_test_visitor_in_qmp_introspect(data, &test_qmp_schema_qlit); + do_test_visitor_in_qmp_introspect(data, test_qmp_schema_qobject()); } int main(int argc, char **argv) diff --git a/scripts/qapi/introspect.py b/scripts/qapi/introspect.py index 89ee5d5f176..e0269bef0ce 100644 --- a/scripts/qapi/introspect.py +++ b/scripts/qapi/introspect.py @@ -193,15 +193,18 @@ def visit_end(self) -> None: for typ in self._used_types: typ.visit(self) # generate C - name = c_name(self._prefix, protect=False) + 'qmp_schema_qlit' + name = c_name(self._prefix, protect=False) + 'qmp_schema_qobject' self._genh.add(mcgen(''' #include "qobject/qlit.h" -extern const QLitObject %(c_name)s; +QObject *%(c_name)s(void); ''', c_name=c_name(name))) self._genc.add(mcgen(''' -const QLitObject %(c_name)s = %(c_string)s; +QObject *%(c_name)s(void) { + const QLitObject res = %(c_string)s; + return qobject_from_qlit(&res); +} ''', c_name=c_name(name), c_string=_tree_to_qlit(self._trees))) -- 2.47.2