From 3ed79944e8b5fc69f325db955336aff86e9210e5 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Tue, 13 Oct 2015 17:11:49 +0200 Subject: [PATCH] Make Unique::new const function --- src/libcore/ptr.rs | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/libcore/ptr.rs b/src/libcore/ptr.rs index 8adbaf56f14..63057aadf77 100644 --- a/src/libcore/ptr.rs +++ b/src/libcore/ptr.rs @@ -498,12 +498,28 @@ unsafe impl Send for Unique { } #[unstable(feature = "unique", issue = "27730")] unsafe impl Sync for Unique { } +#[cfg(stage0)] +macro_rules! unique_new { + () => ( + /// Creates a new `Unique`. + pub unsafe fn new(ptr: *mut T) -> Unique { + Unique { pointer: NonZero::new(ptr), _marker: PhantomData } + } + ) +} +#[cfg(not(stage0))] +macro_rules! unique_new { + () => ( + /// Creates a new `Unique`. + pub unsafe const fn new(ptr: *mut T) -> Unique { + Unique { pointer: NonZero::new(ptr), _marker: PhantomData } + } + ) +} + #[unstable(feature = "unique", issue = "27730")] impl Unique { - /// Creates a new `Unique`. - pub unsafe fn new(ptr: *mut T) -> Unique { - Unique { pointer: NonZero::new(ptr), _marker: PhantomData } - } + unique_new!{} /// Dereferences the content. pub unsafe fn get(&self) -> &T {