qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[RFC v3 03/32] scripts/qapi: teach c_param_type() to return const argume


From: marcandre . lureau
Subject: [RFC v3 03/32] scripts/qapi: teach c_param_type() to return const argument type
Date: Tue, 7 Sep 2021 16:19:14 +0400

From: Marc-André Lureau <marcandre.lureau@redhat.com>

The argument isn't owned by the callee, so it better be const.
But a lot of code in QEMU rely on non-const arguments to tweak it (steal
values etc).

Since Rust types / bindings are derived from the C version, we have to
be more accurate there to do correct ownership in the bindings.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 scripts/qapi/schema.py | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/scripts/qapi/schema.py b/scripts/qapi/schema.py
index 3d72c7dfc9..1f6301c394 100644
--- a/scripts/qapi/schema.py
+++ b/scripts/qapi/schema.py
@@ -226,8 +226,15 @@ def c_type(self):
         pass
 
     # Return the C type to be used in a parameter list.
-    def c_param_type(self):
-        return self.c_type()
+    #
+    # The argument should be considered const, since no ownership is given to
+    # the callee, but qemu C code frequently tweaks it. Set const=True for a
+    # stricter declaration.
+    def c_param_type(self, const: bool = False):
+        c_type = self.c_type()
+        if const and c_type.endswith(POINTER_SUFFIX):
+            c_type = 'const ' + c_type
+        return c_type
 
     # Return the C type to be used where we suppress boxing.
     def c_unboxed_type(self):
@@ -280,10 +287,10 @@ def c_name(self):
     def c_type(self):
         return self._c_type_name
 
-    def c_param_type(self):
+    def c_param_type(self, const: bool = False):
         if self.name == 'str':
             return 'const ' + self._c_type_name
-        return self._c_type_name
+        return super().c_param_type(const)
 
     def json_type(self):
         return self._json_type_name
-- 
2.33.0.113.g6c40894d24




reply via email to

[Prev in Thread] Current Thread [Next in Thread]