Skip to content

Commit 9a78fab

Browse files
committed
Made from_waker, waker, from_raw const
1 parent c97922d commit 9a78fab

File tree

6 files changed

+26
-4
lines changed

6 files changed

+26
-4
lines changed

library/alloc/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@
109109
#![feature(core_intrinsics)]
110110
#![feature(const_eval_select)]
111111
#![feature(const_pin)]
112+
#![feature(const_waker)]
112113
#![feature(cstr_from_bytes_until_nul)]
113114
#![feature(dispatch_from_dyn)]
114115
#![cfg_attr(not(bootstrap), feature(error_generic_member_access))]

library/core/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@
145145
#![feature(const_default_impls)]
146146
#![feature(const_unicode_case_lookup)]
147147
#![feature(const_unsafecell_get_mut)]
148+
#![feature(const_waker)]
148149
#![feature(core_panic)]
149150
#![feature(duration_consts_float)]
150151
#![feature(maybe_uninit_uninit_array)]

library/core/src/task/wake.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -186,17 +186,19 @@ pub struct Context<'a> {
186186
impl<'a> Context<'a> {
187187
/// Create a new `Context` from a [`&Waker`](Waker).
188188
#[stable(feature = "futures_api", since = "1.36.0")]
189+
#[rustc_const_unstable(feature = "const_waker", issue = "none")]
189190
#[must_use]
190191
#[inline]
191-
pub fn from_waker(waker: &'a Waker) -> Self {
192+
pub const fn from_waker(waker: &'a Waker) -> Self {
192193
Context { waker, _marker: PhantomData }
193194
}
194195

195196
/// Returns a reference to the [`Waker`] for the current task.
196197
#[stable(feature = "futures_api", since = "1.36.0")]
198+
#[rustc_const_unstable(feature = "const_waker", issue = "none")]
197199
#[must_use]
198200
#[inline]
199-
pub fn waker(&self) -> &'a Waker {
201+
pub const fn waker(&self) -> &'a Waker {
200202
&self.waker
201203
}
202204
}
@@ -311,7 +313,8 @@ impl Waker {
311313
#[inline]
312314
#[must_use]
313315
#[stable(feature = "futures_api", since = "1.36.0")]
314-
pub unsafe fn from_raw(waker: RawWaker) -> Waker {
316+
#[rustc_const_unstable(feature = "const_waker", issue = "none")]
317+
pub const unsafe fn from_raw(waker: RawWaker) -> Waker {
315318
Waker { waker }
316319
}
317320

library/core/tests/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
#![feature(iterator_try_reduce)]
7575
#![feature(const_mut_refs)]
7676
#![feature(const_pin)]
77+
#![feature(const_waker)]
7778
#![feature(never_type)]
7879
#![feature(unwrap_infallible)]
7980
#![feature(pointer_byte_offsets)]

library/core/tests/task.rs

+16-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use core::task::Poll;
1+
use core::task::{Context, Poll, RawWaker, RawWakerVTable, Waker};
22

33
#[test]
44
fn poll_const() {
@@ -12,3 +12,18 @@ fn poll_const() {
1212
const IS_PENDING: bool = POLL.is_pending();
1313
assert!(IS_PENDING);
1414
}
15+
16+
#[test]
17+
fn waker_const() {
18+
const VOID_TABLE: RawWakerVTable = RawWakerVTable::new(|_| VOID_WAKER, |_| {}, |_| {}, |_| {});
19+
20+
const VOID_WAKER: RawWaker = RawWaker::new(&(), &VOID_TABLE);
21+
22+
static WAKER: Waker = unsafe { Waker::from_raw(VOID_WAKER) };
23+
24+
static CONTEXT: Context<'static> = Context::from_waker(&WAKER);
25+
26+
static WAKER_REF: &'static Waker = CONTEXT.waker();
27+
28+
WAKER_REF.wake_by_ref();
29+
}

library/std/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@
315315
#![feature(strict_provenance)]
316316
#![feature(maybe_uninit_uninit_array)]
317317
#![feature(const_maybe_uninit_uninit_array)]
318+
#![feature(const_waker)]
318319
//
319320
// Library features (alloc):
320321
#![feature(alloc_layout_extra)]

0 commit comments

Comments
 (0)