From: Markus Armbruster <armbru@redhat.com>
To: marcandre.lureau@redhat.com
Cc: pbonzini@redhat.com, berrange@redhat.com, qemu-devel@nongnu.org,
stefanha@redhat.com
Subject: Re: [RFC v3 03/32] scripts/qapi: teach c_param_type() to return const argument type
Date: Wed, 08 Sep 2021 14:10:51 +0200 [thread overview]
Message-ID: <87v93bw9mc.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <20210907121943.3498701-4-marcandre.lureau@redhat.com> (marcandre lureau's message of "Tue, 7 Sep 2021 16:19:14 +0400")
marcandre.lureau@redhat.com writes:
> 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.
This comment makes sense only if you're familiar with Rust, where "may
change" is actually tied to ownership.
However, I can't see a use of .c_param_type(True). Sure you need this
patch in this series?
> + 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)
Would
def c_param_type(self, const: bool = False):
return super().c_param_type(const or self.name == 'str')
do?
>
> def json_type(self):
> return self._json_type_name
next prev parent reply other threads:[~2021-09-08 12:13 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-07 12:19 [RFC v3 00/32] Rust binding for QAPI and qemu-ga QMP handler examples marcandre.lureau
2021-09-07 12:19 ` [RFC v3 01/32] RFC: docs: add supported host CPUs section marcandre.lureau
2021-09-07 12:33 ` Peter Maydell
2021-09-13 11:32 ` Marc-André Lureau
2021-09-13 11:46 ` Peter Maydell
2021-09-07 12:19 ` [RFC v3 02/32] build-sys: add HAVE_IPPROTO_MPTCP marcandre.lureau
2021-09-08 12:01 ` Markus Armbruster
2021-09-13 13:02 ` Paolo Bonzini
2021-09-07 12:19 ` [RFC v3 03/32] scripts/qapi: teach c_param_type() to return const argument type marcandre.lureau
2021-09-08 12:10 ` Markus Armbruster [this message]
2021-09-08 14:33 ` Marc-André Lureau
2021-09-07 12:19 ` [RFC v3 04/32] glib-compat: add G_SIZEOF_MEMBER marcandre.lureau
2021-09-08 12:16 ` Markus Armbruster
2021-09-08 13:49 ` Marc-André Lureau
2021-09-07 12:19 ` [RFC v3 05/32] scripts/qapi: add QAPISchemaVisitor.visit_module_end marcandre.lureau
2021-09-08 12:26 ` Markus Armbruster
2021-09-07 12:19 ` [RFC v3 06/32] scripts/qapi: add a CABI module marcandre.lureau
2021-09-07 12:19 ` [RFC v3 07/32] scripts/qapi: generate CABI dump for C types marcandre.lureau
2021-09-07 12:19 ` [RFC v3 08/32] tests: build qapi-cabi (C ABI dump) marcandre.lureau
2021-09-07 12:19 ` [RFC v3 09/32] build-sys: add i686 cpu target marcandre.lureau
2021-09-08 13:45 ` Peter Maydell
2021-09-07 12:19 ` [RFC v3 10/32] build-sys: add --with-rust{-target} & basic build infrastructure marcandre.lureau
2021-09-08 14:00 ` Peter Maydell
2021-09-08 14:21 ` Marc-André Lureau
2021-09-07 12:19 ` [RFC v3 11/32] build-sys: add a cargo-wrapper script marcandre.lureau
2021-09-07 12:19 ` [RFC v3 12/32] rust: provide a common crate for QEMU marcandre.lureau
2021-09-10 1:18 ` Alistair Francis
2021-09-10 7:43 ` Marc-André Lureau
2021-09-13 17:11 ` Paolo Bonzini
2021-09-14 11:34 ` Marc-André Lureau
2021-09-07 12:19 ` [RFC v3 13/32] rust: use vendored-sources marcandre.lureau
2021-09-08 15:38 ` Ian Jackson
2021-09-08 15:47 ` Marc-André Lureau
2021-09-08 15:55 ` Ian Jackson
2021-09-08 16:15 ` Marc-André Lureau
2021-09-08 16:22 ` Peter Maydell
2021-09-08 16:22 ` Ian Jackson
2021-09-08 16:20 ` Marc-André Lureau
2021-09-08 16:29 ` Ian Jackson
2021-09-08 16:34 ` Marc-André Lureau
2021-09-08 16:50 ` Ian Jackson
2021-09-08 19:33 ` Marc-André Lureau
2021-09-09 16:02 ` Peter Maydell
2021-09-09 16:29 ` Marc-André Lureau
2021-09-09 16:53 ` Daniel P. Berrangé
2021-09-09 17:04 ` Ian Jackson
2021-09-13 14:21 ` Paolo Bonzini
2021-09-09 16:49 ` Daniel P. Berrangé
2021-09-09 17:02 ` Ian Jackson
2021-09-07 12:19 ` [RFC v3 14/32] scripts/qapi: add QAPISchemaIfCond.rsgen() marcandre.lureau
2021-09-08 12:33 ` Markus Armbruster
2021-09-08 14:06 ` Marc-André Lureau
2021-09-07 12:19 ` [RFC v3 15/32] scripts/qapi: strip trailing whitespaces marcandre.lureau
2021-09-07 12:19 ` [RFC v3 16/32] scripts/qapi: add Rust FFI bindings generation marcandre.lureau
2021-09-07 12:19 ` [RFC v3 17/32] scripts/qapi: learn to generate ABI dump for Rust FFI marcandre.lureau
2021-09-07 12:19 ` [RFC v3 18/32] tests: generate Rust bindings marcandre.lureau
2021-09-07 12:19 ` [RFC v3 19/32] tests: check Rust and C CABI diffs marcandre.lureau
2021-09-07 12:19 ` [RFC v3 20/32] scripts/qapi: generate high-level Rust bindings marcandre.lureau
2021-09-07 12:19 ` [RFC v3 21/32] tests/rust: build a common library, checking bindings compile marcandre.lureau
2021-09-07 12:19 ` [RFC v3 22/32] qga: build qapi-cabi binary (ABI from C) marcandre.lureau
2021-09-07 12:19 ` [RFC v3 23/32] qga/rust: build and link an empty static library marcandre.lureau
2021-09-07 12:19 ` [RFC v3 24/32] qga/rust: generate QGA QAPI types FFI bindings marcandre.lureau
2021-09-07 12:19 ` [RFC v3 25/32] qga/rust: build a qga-cabi-rs executable (ABI from Rust) marcandre.lureau
2021-09-07 12:19 ` [RFC v3 26/32] qga/rust: check the Rust C binding marcandre.lureau
2021-09-07 12:19 ` [RFC v3 27/32] qga/rust: build high-level Rust QAPI types marcandre.lureau
2021-09-07 12:19 ` [RFC v3 28/32] qga/rust: implement get-host-name in Rust (example) marcandre.lureau
2021-09-07 12:19 ` [RFC v3 29/32] qga/rust: implement {get,set}-vcpus " marcandre.lureau
2021-09-07 12:19 ` [RFC v3 30/32] tests/vm: add Rust to FreeBSD VM marcandre.lureau
2021-09-07 12:19 ` [RFC v3 31/32] tests/vm: bump fedora VM to f32 marcandre.lureau
2021-09-07 12:19 ` [RFC v3 32/32] tests/vm: add Rust to Fedora marcandre.lureau
2021-09-08 13:22 ` [RFC v3 00/32] Rust binding for QAPI and qemu-ga QMP handler examples Markus Armbruster
2021-09-08 13:55 ` Marc-André Lureau
2021-09-09 10:31 ` Markus Armbruster
2021-09-09 15:22 ` Marc-André Lureau
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87v93bw9mc.fsf@dusky.pond.sub.org \
--to=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.