diff mbox series

[02/13] qapi/introspect: generate schema as a QObject directly

Message ID 20250507231442.879619-3-pierrick.bouvier@linaro.org
State New
Headers show
Series single-binary: make QAPI generated files common | expand

Commit Message

Pierrick Bouvier May 7, 2025, 11:14 p.m. UTC
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.bouvier@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 mbox series

Patch

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)))