[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
- [RFC v3 00/32] Rust binding for QAPI and qemu-ga QMP handler examples, marcandre . lureau, 2021/09/07
- [RFC v3 02/32] build-sys: add HAVE_IPPROTO_MPTCP, marcandre . lureau, 2021/09/07
- [RFC v3 03/32] scripts/qapi: teach c_param_type() to return const argument type,
marcandre . lureau <=
- [RFC v3 04/32] glib-compat: add G_SIZEOF_MEMBER, marcandre . lureau, 2021/09/07
- [RFC v3 05/32] scripts/qapi: add QAPISchemaVisitor.visit_module_end, marcandre . lureau, 2021/09/07
- [RFC v3 06/32] scripts/qapi: add a CABI module, marcandre . lureau, 2021/09/07
- [RFC v3 07/32] scripts/qapi: generate CABI dump for C types, marcandre . lureau, 2021/09/07
- [RFC v3 08/32] tests: build qapi-cabi (C ABI dump), marcandre . lureau, 2021/09/07