[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 07/15] rust: qemu_api_macros: add Wrapper derive macro
From: |
Zhao Liu |
Subject: |
Re: [PATCH 07/15] rust: qemu_api_macros: add Wrapper derive macro |
Date: |
Tue, 25 Feb 2025 15:54:46 +0800 |
> +fn derive_opaque_or_error(input: DeriveInput) ->
> Result<proc_macro2::TokenStream, MacroError> {
> + is_transparent_repr(&input, "#[derive(Wrapper)]")?;
> +
> + let name = &input.ident;
> + let field = &get_unnamed_field(&input, "#[derive(Wrapper)]")?;
> + let typ = &field.ty;
> +
> + // TODO: how to add "::qemu_api"? For now, this is only used in the
> + // qemu_api crate so it's not a problem.
> + Ok(quote! {
> + unsafe impl crate::cell::Wrapper for #name {
> + type Wrapped = <#typ as crate::cell::Wrapper>::Wrapped;
> + }
> + impl #name {
> + pub unsafe fn from_raw<'a>(ptr: *mut <Self as
> crate::cell::Wrapper>::Wrapped) -> &'a Self {
> + let ptr =
> ::std::ptr::NonNull::new(ptr).unwrap().cast::<Self>();
> + unsafe { ptr.as_ref() }
> + }
> +
> + pub const fn as_mut_ptr(&self) -> *mut <Self as
> crate::cell::Wrapper>::Wrapped {
> + self.0.as_mut_ptr()
> + }
> +
> + pub const fn as_ptr(&self) -> *const <Self as
> crate::cell::Wrapper>::Wrapped {
> + self.0.as_ptr()
> + }
What about also adding as_void_ptr? Then DeviceState can benefit from
this in qdev_init_clock_in.
> + }
> + })
> +}
> +
Others are fine for me. Nice improvement!
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
- Re: [PATCH 03/15] rust: qom: add ObjectImpl::CLASS_INIT, (continued)
- [PATCH 02/15] rust: add SysBusDeviceImpl, Paolo Bonzini, 2025/02/21
- [PATCH 04/15] rust: pl011, qemu_api tests: do not use ClassInitImpl, Paolo Bonzini, 2025/02/21
- [PATCH 05/15] rust: qom: get rid of ClassInitImpl, Paolo Bonzini, 2025/02/21
- [PATCH 08/15] rust: timer: wrap QEMUTimer with Opaque<>, Paolo Bonzini, 2025/02/21
- [PATCH 07/15] rust: qemu_api_macros: add Wrapper derive macro, Paolo Bonzini, 2025/02/21
- Re: [PATCH 07/15] rust: qemu_api_macros: add Wrapper derive macro,
Zhao Liu <=
- [PATCH 06/15] rust: cell: add wrapper for FFI types, Paolo Bonzini, 2025/02/21
- [PATCH 09/15] rust: irq: wrap IRQState with Opaque<>, Paolo Bonzini, 2025/02/21
- [PATCH 10/15] rust: qom: wrap Object with Opaque<>, Paolo Bonzini, 2025/02/21
- [PATCH 12/15] rust: sysbus: wrap SysBusDevice with Opaque<>, Paolo Bonzini, 2025/02/21