Rollup merge of #107961 - scottmcm:unify-ilog-panics, r=Mark-Simulacrum
Avoid copy-pasting the `ilog` panic string in a bunch of places I also ended up changing the implementations to `if let` because it doesn't work to ```rust self.checked_ilog2().unwrap_or_else(panic_for_nonpositive_argument) ``` due to the `!`. But as a bonus that meant I could remove the `rustc_allow_const_fn_unstable` too.
This commit is contained in:
commit
2ec6aebb41
@ -138,3 +138,11 @@ pub const fn i64(val: i64) -> u32 {
|
|||||||
pub const fn i128(val: i128) -> u32 {
|
pub const fn i128(val: i128) -> u32 {
|
||||||
u128(val as u128)
|
u128(val as u128)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Instantiate this panic logic once, rather than for all the ilog methods
|
||||||
|
/// on every single primitive type.
|
||||||
|
#[cold]
|
||||||
|
#[track_caller]
|
||||||
|
pub const fn panic_for_nonpositive_argument() -> ! {
|
||||||
|
panic!("argument of integer logarithm must be positive")
|
||||||
|
}
|
||||||
|
@ -2331,14 +2331,17 @@ macro_rules! int_impl {
|
|||||||
/// ```
|
/// ```
|
||||||
#[stable(feature = "int_log", since = "1.67.0")]
|
#[stable(feature = "int_log", since = "1.67.0")]
|
||||||
#[rustc_const_stable(feature = "int_log", since = "1.67.0")]
|
#[rustc_const_stable(feature = "int_log", since = "1.67.0")]
|
||||||
#[rustc_allow_const_fn_unstable(const_option)]
|
|
||||||
#[must_use = "this returns the result of the operation, \
|
#[must_use = "this returns the result of the operation, \
|
||||||
without modifying the original"]
|
without modifying the original"]
|
||||||
#[inline]
|
#[inline]
|
||||||
#[track_caller]
|
#[track_caller]
|
||||||
pub const fn ilog(self, base: Self) -> u32 {
|
pub const fn ilog(self, base: Self) -> u32 {
|
||||||
assert!(base >= 2, "base of integer logarithm must be at least 2");
|
assert!(base >= 2, "base of integer logarithm must be at least 2");
|
||||||
self.checked_ilog(base).expect("argument of integer logarithm must be positive")
|
if let Some(log) = self.checked_ilog(base) {
|
||||||
|
log
|
||||||
|
} else {
|
||||||
|
int_log10::panic_for_nonpositive_argument()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the base 2 logarithm of the number, rounded down.
|
/// Returns the base 2 logarithm of the number, rounded down.
|
||||||
@ -2354,13 +2357,16 @@ macro_rules! int_impl {
|
|||||||
/// ```
|
/// ```
|
||||||
#[stable(feature = "int_log", since = "1.67.0")]
|
#[stable(feature = "int_log", since = "1.67.0")]
|
||||||
#[rustc_const_stable(feature = "int_log", since = "1.67.0")]
|
#[rustc_const_stable(feature = "int_log", since = "1.67.0")]
|
||||||
#[rustc_allow_const_fn_unstable(const_option)]
|
|
||||||
#[must_use = "this returns the result of the operation, \
|
#[must_use = "this returns the result of the operation, \
|
||||||
without modifying the original"]
|
without modifying the original"]
|
||||||
#[inline]
|
#[inline]
|
||||||
#[track_caller]
|
#[track_caller]
|
||||||
pub const fn ilog2(self) -> u32 {
|
pub const fn ilog2(self) -> u32 {
|
||||||
self.checked_ilog2().expect("argument of integer logarithm must be positive")
|
if let Some(log) = self.checked_ilog2() {
|
||||||
|
log
|
||||||
|
} else {
|
||||||
|
int_log10::panic_for_nonpositive_argument()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the base 10 logarithm of the number, rounded down.
|
/// Returns the base 10 logarithm of the number, rounded down.
|
||||||
@ -2376,13 +2382,16 @@ macro_rules! int_impl {
|
|||||||
/// ```
|
/// ```
|
||||||
#[stable(feature = "int_log", since = "1.67.0")]
|
#[stable(feature = "int_log", since = "1.67.0")]
|
||||||
#[rustc_const_stable(feature = "int_log", since = "1.67.0")]
|
#[rustc_const_stable(feature = "int_log", since = "1.67.0")]
|
||||||
#[rustc_allow_const_fn_unstable(const_option)]
|
|
||||||
#[must_use = "this returns the result of the operation, \
|
#[must_use = "this returns the result of the operation, \
|
||||||
without modifying the original"]
|
without modifying the original"]
|
||||||
#[inline]
|
#[inline]
|
||||||
#[track_caller]
|
#[track_caller]
|
||||||
pub const fn ilog10(self) -> u32 {
|
pub const fn ilog10(self) -> u32 {
|
||||||
self.checked_ilog10().expect("argument of integer logarithm must be positive")
|
if let Some(log) = self.checked_ilog10() {
|
||||||
|
log
|
||||||
|
} else {
|
||||||
|
int_log10::panic_for_nonpositive_argument()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the logarithm of the number with respect to an arbitrary base,
|
/// Returns the logarithm of the number with respect to an arbitrary base,
|
||||||
|
@ -705,14 +705,17 @@ macro_rules! uint_impl {
|
|||||||
/// ```
|
/// ```
|
||||||
#[stable(feature = "int_log", since = "1.67.0")]
|
#[stable(feature = "int_log", since = "1.67.0")]
|
||||||
#[rustc_const_stable(feature = "int_log", since = "1.67.0")]
|
#[rustc_const_stable(feature = "int_log", since = "1.67.0")]
|
||||||
#[rustc_allow_const_fn_unstable(const_option)]
|
|
||||||
#[must_use = "this returns the result of the operation, \
|
#[must_use = "this returns the result of the operation, \
|
||||||
without modifying the original"]
|
without modifying the original"]
|
||||||
#[inline]
|
#[inline]
|
||||||
#[track_caller]
|
#[track_caller]
|
||||||
pub const fn ilog(self, base: Self) -> u32 {
|
pub const fn ilog(self, base: Self) -> u32 {
|
||||||
assert!(base >= 2, "base of integer logarithm must be at least 2");
|
assert!(base >= 2, "base of integer logarithm must be at least 2");
|
||||||
self.checked_ilog(base).expect("argument of integer logarithm must be positive")
|
if let Some(log) = self.checked_ilog(base) {
|
||||||
|
log
|
||||||
|
} else {
|
||||||
|
int_log10::panic_for_nonpositive_argument()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the base 2 logarithm of the number, rounded down.
|
/// Returns the base 2 logarithm of the number, rounded down.
|
||||||
@ -728,13 +731,16 @@ macro_rules! uint_impl {
|
|||||||
/// ```
|
/// ```
|
||||||
#[stable(feature = "int_log", since = "1.67.0")]
|
#[stable(feature = "int_log", since = "1.67.0")]
|
||||||
#[rustc_const_stable(feature = "int_log", since = "1.67.0")]
|
#[rustc_const_stable(feature = "int_log", since = "1.67.0")]
|
||||||
#[rustc_allow_const_fn_unstable(const_option)]
|
|
||||||
#[must_use = "this returns the result of the operation, \
|
#[must_use = "this returns the result of the operation, \
|
||||||
without modifying the original"]
|
without modifying the original"]
|
||||||
#[inline]
|
#[inline]
|
||||||
#[track_caller]
|
#[track_caller]
|
||||||
pub const fn ilog2(self) -> u32 {
|
pub const fn ilog2(self) -> u32 {
|
||||||
self.checked_ilog2().expect("argument of integer logarithm must be positive")
|
if let Some(log) = self.checked_ilog2() {
|
||||||
|
log
|
||||||
|
} else {
|
||||||
|
int_log10::panic_for_nonpositive_argument()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the base 10 logarithm of the number, rounded down.
|
/// Returns the base 10 logarithm of the number, rounded down.
|
||||||
@ -750,13 +756,16 @@ macro_rules! uint_impl {
|
|||||||
/// ```
|
/// ```
|
||||||
#[stable(feature = "int_log", since = "1.67.0")]
|
#[stable(feature = "int_log", since = "1.67.0")]
|
||||||
#[rustc_const_stable(feature = "int_log", since = "1.67.0")]
|
#[rustc_const_stable(feature = "int_log", since = "1.67.0")]
|
||||||
#[rustc_allow_const_fn_unstable(const_option)]
|
|
||||||
#[must_use = "this returns the result of the operation, \
|
#[must_use = "this returns the result of the operation, \
|
||||||
without modifying the original"]
|
without modifying the original"]
|
||||||
#[inline]
|
#[inline]
|
||||||
#[track_caller]
|
#[track_caller]
|
||||||
pub const fn ilog10(self) -> u32 {
|
pub const fn ilog10(self) -> u32 {
|
||||||
self.checked_ilog10().expect("argument of integer logarithm must be positive")
|
if let Some(log) = self.checked_ilog10() {
|
||||||
|
log
|
||||||
|
} else {
|
||||||
|
int_log10::panic_for_nonpositive_argument()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the logarithm of the number with respect to an arbitrary base,
|
/// Returns the logarithm of the number with respect to an arbitrary base,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user