make ctor no_std
PiperOrigin-RevId: 513915408
diff --git a/support/ctor.rs b/support/ctor.rs
index f79e014..747653b 100644
--- a/support/ctor.rs
+++ b/support/ctor.rs
@@ -1,6 +1,7 @@
// Part of the Crubit project, under the Apache License v2.0 with LLVM
// Exceptions. See /LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+#![cfg_attr(not(test), no_std)]
#![feature(negative_impls)]
//! Traits for memory management operations on wrapped C++ objects, based on
//! moveit.
@@ -101,10 +102,13 @@
//! `PhantomPinned`. It knows no conflict exists if, instead, types impl
//! `!Unpin`.
-use std::marker::PhantomData;
-use std::mem::{ManuallyDrop, MaybeUninit};
-use std::ops::Deref;
-use std::pin::Pin;
+extern crate alloc;
+
+use alloc::boxed::Box;
+use core::marker::PhantomData;
+use core::mem::{ManuallyDrop, MaybeUninit};
+use core::ops::Deref;
+use core::pin::Pin;
pub use ctor_proc_macros::*;
@@ -316,7 +320,7 @@
#[macro_export]
macro_rules! mov {
($p:expr) => {
- $crate::RvalueReference(::std::pin::Pin::as_mut(&mut { $p }))
+ $crate::RvalueReference(::core::pin::Pin::as_mut(&mut { $p }))
};
}
@@ -537,7 +541,7 @@
if self.is_initialized {
let Self { is_initialized, maybe_uninit } = unsafe { Pin::into_inner_unchecked(self) };
unsafe {
- std::ptr::drop_in_place(maybe_uninit.as_mut_ptr());
+ core::ptr::drop_in_place(maybe_uninit.as_mut_ptr());
}
*is_initialized = false;
}
@@ -615,8 +619,8 @@
#[doc(hidden)]
pub mod macro_internal {
use super::*;
- pub use std::mem::MaybeUninit;
- pub use std::pin::Pin;
+ pub use core::mem::MaybeUninit;
+ pub use core::pin::Pin;
/// Workaround for more_qualified_paths.
/// Instead of `<Foo as Bar>::Assoc { ... }`, which requires that feature,
@@ -643,7 +647,7 @@
pub struct UnsafeDropGuard<T>(*mut T);
impl<T> Drop for UnsafeDropGuard<T> {
fn drop(&mut self) {
- unsafe { std::ptr::drop_in_place(self.0) };
+ unsafe { core::ptr::drop_in_place(self.0) };
}
}
@@ -791,7 +795,7 @@
use $t $(:: $ts)* as Type;
$crate::FnCtor::new(|x: $crate::macro_internal::Pin<&mut $crate::macro_internal::MaybeUninit<Type>>| {
// Unused if Type is fieldless.
- #[allow(unused_imports)] use ::std::ptr::addr_of_mut;
+ #[allow(unused_imports)] use ::core::ptr::addr_of_mut;
struct DropGuard;
let drop_guard = DropGuard;
let x_mut = unsafe{$crate::macro_internal::Pin::into_inner_unchecked(x)}.as_mut_ptr();
@@ -830,7 +834,7 @@
};
let drop_guard = (drop_guard, field_drop);
)*
- ::std::mem::forget(drop_guard);
+ ::core::mem::forget(drop_guard);
})
}
};
@@ -899,7 +903,7 @@
/// See trait documentation.
unsafe fn reconstruct_unchecked(self: Pin<&mut Self>, ctor: impl Ctor<Output = Self>) {
let self_ptr = Pin::into_inner_unchecked(self) as *mut _;
- std::ptr::drop_in_place(self_ptr);
+ core::ptr::drop_in_place(self_ptr);
abort_on_unwind(move || {
let maybe_uninit_self = &mut *(self_ptr as *mut MaybeUninit<Self>);
ctor.ctor(Pin::new_unchecked(maybe_uninit_self));
@@ -994,7 +998,7 @@
let bomb = Bomb;
let rv = f();
- std::mem::forget(bomb);
+ core::mem::forget(bomb);
rv
}
@@ -1017,7 +1021,7 @@
impl<'a, T: Unpin + CtorNew<&'a T>> Assign<&'a T> for T {
fn assign(mut self: Pin<&mut Self>, src: &'a Self) {
- if std::mem::needs_drop::<Self>() {
+ if core::mem::needs_drop::<Self>() {
let mut constructed = MaybeUninit::uninit();
unsafe {
T::ctor_new(src).ctor(Pin::new(&mut constructed));
@@ -1031,7 +1035,7 @@
impl<'a, T: Unpin + CtorNew<RvalueReference<'a, T>>> Assign<RvalueReference<'a, T>> for T {
fn assign(mut self: Pin<&mut Self>, src: RvalueReference<'a, Self>) {
- if std::mem::needs_drop::<Self>() {
+ if core::mem::needs_drop::<Self>() {
let mut constructed = MaybeUninit::uninit();
unsafe {
T::ctor_new(src).ctor(Pin::new(&mut constructed));
@@ -1047,7 +1051,7 @@
for T
{
fn assign(mut self: Pin<&mut Self>, src: ConstRvalueReference<'a, Self>) {
- if std::mem::needs_drop::<Self>() {
+ if core::mem::needs_drop::<Self>() {
let mut constructed = MaybeUninit::uninit();
unsafe {
T::ctor_new(src).ctor(Pin::new(&mut constructed));
@@ -1126,9 +1130,9 @@
/// type locally, we cannot give foreign impls.
pub struct PhantomPinnedCtor;
impl Ctor for PhantomPinnedCtor {
- type Output = std::marker::PhantomPinned;
+ type Output = core::marker::PhantomPinned;
unsafe fn ctor(self, dest: Pin<&mut MaybeUninit<Self::Output>>) {
- RustMoveCtor(std::marker::PhantomPinned).ctor(dest)
+ RustMoveCtor(core::marker::PhantomPinned).ctor(dest)
}
}
impl !Unpin for PhantomPinnedCtor {}
@@ -1686,7 +1690,7 @@
x: &'a i32,
y: &'b i32,
) -> impl Ctor<Output = i32> + Captures<'a> + Captures<'b> {
- FnCtor::new(|mut dest: Pin<&mut std::mem::MaybeUninit<i32>>| {
+ FnCtor::new(|mut dest: Pin<&mut core::mem::MaybeUninit<i32>>| {
dest.write(*x + *y);
})
}