Skip to content

Commit ce636f2

Browse files
committed
Unimpl Shl{Assign} for signed Saturating types until the correct impl is clear
1 parent 977ae5a commit ce636f2

File tree

1 file changed

+63
-59
lines changed

1 file changed

+63
-59
lines changed

library/core/src/num/saturating.rs

+63-59
Original file line numberDiff line numberDiff line change
@@ -81,30 +81,32 @@ impl<T: fmt::UpperHex> fmt::UpperHex for Saturating<T> {
8181
#[allow(unused_macros)]
8282
macro_rules! sh_impl_signed {
8383
($t:ident, $f:ident) => {
84-
#[unstable(feature = "saturating_int_impl", issue = "87920")]
85-
impl Shl<$f> for Saturating<$t> {
86-
type Output = Saturating<$t>;
87-
88-
#[inline]
89-
fn shl(self, other: $f) -> Saturating<$t> {
90-
if other < 0 {
91-
Saturating(self.0.shr((-other & self::shift_max::$t as $f) as u32))
92-
} else {
93-
Saturating(self.0.shl((other & self::shift_max::$t as $f) as u32))
94-
}
95-
}
96-
}
97-
forward_ref_binop! { impl Shl, shl for Saturating<$t>, $f,
98-
#[unstable(feature = "saturating_int_impl", issue = "87920")] }
99-
100-
#[unstable(feature = "saturating_int_impl", issue = "87920")]
101-
impl ShlAssign<$f> for Saturating<$t> {
102-
#[inline]
103-
fn shl_assign(&mut self, other: $f) {
104-
*self = *self << other;
105-
}
106-
}
107-
forward_ref_op_assign! { impl ShlAssign, shl_assign for Saturating<$t>, $f }
84+
// FIXME what is the correct implementation here? see discussion https://github.com/rust-lang/rust/pull/87921#discussion_r695870065
85+
//
86+
// #[unstable(feature = "saturating_int_impl", issue = "87920")]
87+
// impl Shl<$f> for Saturating<$t> {
88+
// type Output = Saturating<$t>;
89+
//
90+
// #[inline]
91+
// fn shl(self, other: $f) -> Saturating<$t> {
92+
// if other < 0 {
93+
// Saturating(self.0.shr((-other & self::shift_max::$t as $f) as u32))
94+
// } else {
95+
// Saturating(self.0.shl((other & self::shift_max::$t as $f) as u32))
96+
// }
97+
// }
98+
// }
99+
// forward_ref_binop! { impl Shl, shl for Saturating<$t>, $f,
100+
// #[unstable(feature = "saturating_int_impl", issue = "87920")] }
101+
//
102+
// #[unstable(feature = "saturating_int_impl", issue = "87920")]
103+
// impl ShlAssign<$f> for Saturating<$t> {
104+
// #[inline]
105+
// fn shl_assign(&mut self, other: $f) {
106+
// *self = *self << other;
107+
// }
108+
// }
109+
// forward_ref_op_assign! { impl ShlAssign, shl_assign for Saturating<$t>, $f }
108110

109111
#[unstable(feature = "saturating_int_impl", issue = "87920")]
110112
impl Shr<$f> for Saturating<$t> {
@@ -935,38 +937,40 @@ macro_rules! saturating_int_impl_unsigned {
935937

936938
saturating_int_impl_unsigned! { usize u8 u16 u32 u64 u128 }
937939

938-
mod shift_max {
939-
#![allow(non_upper_case_globals)]
940-
941-
#[cfg(target_pointer_width = "16")]
942-
mod platform {
943-
pub const usize: u32 = super::u16;
944-
pub const isize: u32 = super::i16;
945-
}
946-
947-
#[cfg(target_pointer_width = "32")]
948-
mod platform {
949-
pub const usize: u32 = super::u32;
950-
pub const isize: u32 = super::i32;
951-
}
952-
953-
#[cfg(target_pointer_width = "64")]
954-
mod platform {
955-
pub const usize: u32 = super::u64;
956-
pub const isize: u32 = super::i64;
957-
}
958-
959-
pub const i8: u32 = (1 << 3) - 1;
960-
pub const i16: u32 = (1 << 4) - 1;
961-
pub const i32: u32 = (1 << 5) - 1;
962-
pub const i64: u32 = (1 << 6) - 1;
963-
pub const i128: u32 = (1 << 7) - 1;
964-
pub use self::platform::isize;
965-
966-
pub const u8: u32 = i8;
967-
pub const u16: u32 = i16;
968-
pub const u32: u32 = i32;
969-
pub const u64: u32 = i64;
970-
pub const u128: u32 = i128;
971-
pub use self::platform::usize;
972-
}
940+
// Related to potential Shl and ShlAssign implementation
941+
//
942+
// mod shift_max {
943+
// #![allow(non_upper_case_globals)]
944+
//
945+
// #[cfg(target_pointer_width = "16")]
946+
// mod platform {
947+
// pub const usize: u32 = super::u16;
948+
// pub const isize: u32 = super::i16;
949+
// }
950+
//
951+
// #[cfg(target_pointer_width = "32")]
952+
// mod platform {
953+
// pub const usize: u32 = super::u32;
954+
// pub const isize: u32 = super::i32;
955+
// }
956+
//
957+
// #[cfg(target_pointer_width = "64")]
958+
// mod platform {
959+
// pub const usize: u32 = super::u64;
960+
// pub const isize: u32 = super::i64;
961+
// }
962+
//
963+
// pub const i8: u32 = (1 << 3) - 1;
964+
// pub const i16: u32 = (1 << 4) - 1;
965+
// pub const i32: u32 = (1 << 5) - 1;
966+
// pub const i64: u32 = (1 << 6) - 1;
967+
// pub const i128: u32 = (1 << 7) - 1;
968+
// pub use self::platform::isize;
969+
//
970+
// pub const u8: u32 = i8;
971+
// pub const u16: u32 = i16;
972+
// pub const u32: u32 = i32;
973+
// pub const u64: u32 = i64;
974+
// pub const u128: u32 = i128;
975+
// pub use self::platform::usize;
976+
// }

0 commit comments

Comments
 (0)