pub use self::imp::*; #[cfg(not(dox))] mod imp { pub use core::option::Option; pub use core::clone::Clone; pub use core::marker::Copy; pub use core::mem; } #[cfg(dox)] mod imp { pub enum Option { Some(T), None, } impl Copy for Option {} impl Clone for Option { fn clone(&self) -> Option { loop {} } } pub trait Clone { fn clone(&self) -> Self; } #[lang = "copy"] pub trait Copy {} #[lang = "freeze"] pub trait Freeze {} #[lang = "sync"] pub trait Sync {} impl Sync for T {} #[lang = "sized"] pub trait Sized {} macro_rules! each_int { ($mac:ident) => ( $mac!(u8); $mac!(u16); $mac!(u32); $mac!(u64); $mac!(usize); each_signed_int!($mac); ) } macro_rules! each_signed_int { ($mac:ident) => ( $mac!(i8); $mac!(i16); $mac!(i32); $mac!(i64); $mac!(isize); ) } #[lang = "div"] pub trait Div { type Output; fn div(self, rhs: RHS) -> Self::Output; } #[lang = "shl"] pub trait Shl { type Output; fn shl(self, rhs: RHS) -> Self::Output; } #[lang = "mul"] pub trait Mul { type Output; fn mul(self, rhs: RHS) -> Self::Output; } #[lang = "sub"] pub trait Sub { type Output; fn sub(self, rhs: RHS) -> Self::Output; } #[lang = "bitor"] pub trait Bitor { type Output; fn bitor(self, rhs: RHS) -> Self::Output; } #[lang = "neg"] pub trait Neg { type Output; fn neg(self) -> Self::Output; } #[lang = "not"] pub trait Not { type Output; fn not(self) -> Self::Output; } #[lang = "add"] pub trait Add { type Output; fn add(self, r: RHS) -> Self::Output; } macro_rules! impl_traits { ($($i:ident)*) => ($( impl Div<$i> for $i { type Output = $i; fn div(self, rhs: $i) -> $i { self / rhs } } impl Shl<$i> for $i { type Output = $i; fn shl(self, rhs: $i) -> $i { self << rhs } } impl Mul for $i { type Output = $i; fn mul(self, rhs: $i) -> $i { self * rhs } } impl Sub for $i { type Output = $i; fn sub(self, rhs: $i) -> $i { self - rhs } } impl Bitor for $i { type Output = $i; fn bitor(self, rhs: $i) -> $i { self | rhs } } impl Neg for $i { type Output = $i; fn neg(self) -> $i { -self } } impl Not for $i { type Output = $i; fn not(self) -> $i { !self } } impl Add<$i> for $i { type Output = $i; fn add(self, other: $i) -> $i { self + other } } )*) } each_int!(impl_traits); pub mod mem { pub fn size_of_val(_: &T) -> usize { 4 } pub fn size_of(_: &T) -> usize { 4 } } }