Skip to content

Commit

Permalink
Auto merge of #28016 - ranma42:mini-rem-in-core, r=alexcrichton
Browse files Browse the repository at this point in the history
The implementation of the remainder operation belongs to
librustc_trans, but it is also stubbed out in libcore in order to
expose it as a trait on primitive types. Instead of exposing some
implementation details (like the upcast to `f64` in MSVC), use a
minimal implementation just like that of the `Div` trait.
  • Loading branch information
bors committed Aug 27, 2015
2 parents 40fd4d6 + 4653a8b commit ccf8317
Showing 1 changed file with 24 additions and 2 deletions.
26 changes: 24 additions & 2 deletions src/libcore/ops.rs
Expand Up @@ -423,7 +423,7 @@ pub trait Rem<RHS=Self> {
fn rem(self, rhs: RHS) -> Self::Output;
}

macro_rules! rem_impl {
macro_rules! rem_impl_integer {
($($t:ty)*) => ($(
/// This operation satisfies `n % d == n - (n / d) * d`. The
/// result has the same sign as the left operand.
Expand All @@ -439,9 +439,28 @@ macro_rules! rem_impl {
)*)
}

rem_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 }
rem_impl_integer! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 }

#[cfg(not(stage0))]
macro_rules! rem_impl_float {
($($t:ty)*) => ($(
#[stable(feature = "rust1", since = "1.0.0")]
impl Rem for $t {
type Output = $t;

#[inline]
fn rem(self, other: $t) -> $t { self % other }
}

forward_ref_binop! { impl Rem, rem for $t, $t }
)*)
}

#[cfg(not(stage0))]
rem_impl_float! { f32 f64 }

#[stable(feature = "rust1", since = "1.0.0")]
#[cfg(stage0)]
impl Rem for f32 {
type Output = f32;

Expand All @@ -463,6 +482,7 @@ impl Rem for f32 {
}

#[stable(feature = "rust1", since = "1.0.0")]
#[cfg(stage0)]
impl Rem for f64 {
type Output = f64;

Expand All @@ -473,7 +493,9 @@ impl Rem for f64 {
}
}

#[cfg(stage0)]
forward_ref_binop! { impl Rem, rem for f64, f64 }
#[cfg(stage0)]
forward_ref_binop! { impl Rem, rem for f32, f32 }

/// The `Neg` trait is used to specify the functionality of unary `-`.
Expand Down

0 comments on commit ccf8317

Please sign in to comment.