From f25dac075dc747d68862f944236560383d3edf44 Mon Sep 17 00:00:00 2001 From: ivan tkachenko Date: Thu, 22 Apr 2021 12:18:41 +0300 Subject: [PATCH] localize unsafe blocks in QT_WAKER_VTABLE --- qmetaobject/src/future.rs | 56 +++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 29 deletions(-) diff --git a/qmetaobject/src/future.rs b/qmetaobject/src/future.rs index c7069bf0..d750ec38 100644 --- a/qmetaobject/src/future.rs +++ b/qmetaobject/src/future.rs @@ -6,35 +6,33 @@ use std::task::{Context, Poll, RawWaker, RawWakerVTable, Waker}; use crate::connections::SignalArgArrayToTuple; -static QT_WAKER_VTABLE: RawWakerVTable = unsafe { - RawWakerVTable::new( - |s: *const ()| { - RawWaker::new( - cpp!([s as "Waker *"] -> *const() as "Waker *" { - s->refs++; - return s; - }), - &QT_WAKER_VTABLE, - ) - }, - |s: *const ()| { - cpp!([s as "Waker *"] { - s->wake(); - s->deref(); - }) - }, - |s: *const ()| { - cpp!([s as "Waker *"] { - s->wake(); - }) - }, - |s: *const ()| { - cpp!([s as "Waker *"] { - s->deref(); - }) - }, - ) -}; +static QT_WAKER_VTABLE: RawWakerVTable = RawWakerVTable::new( + |s: *const ()| { + RawWaker::new( + cpp!(unsafe [s as "Waker *"] -> *const() as "Waker *" { + s->refs++; + return s; + }), + &QT_WAKER_VTABLE, + ) + }, + |s: *const ()| { + cpp!(unsafe [s as "Waker *"] { + s->wake(); + s->deref(); + }) + }, + |s: *const ()| { + cpp!(unsafe [s as "Waker *"] { + s->wake(); + }) + }, + |s: *const ()| { + cpp!(unsafe [s as "Waker *"] { + s->deref(); + }) + }, +); cpp! {{