Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Make the unstable StrExt and SliceExt traits private to libcore in no…
…t(stage0)

`Float` still needs to be public for libcore unit tests.
  • Loading branch information
SimonSapin committed Apr 21, 2018
1 parent 18ab16b commit 70fdd1b
Show file tree
Hide file tree
Showing 8 changed files with 40 additions and 29 deletions.
2 changes: 1 addition & 1 deletion src/liballoc/lib.rs
Expand Up @@ -75,7 +75,7 @@
#![deny(missing_debug_implementations)]

#![cfg_attr(test, allow(deprecated))] // rand
#![cfg_attr(not(test), feature(core_float))]
#![cfg_attr(all(not(test), stage0), feature(float_internals))]
#![cfg_attr(not(test), feature(exact_size_is_empty))]
#![cfg_attr(not(test), feature(generator_trait))]
#![cfg_attr(test, feature(rand, test))]
Expand Down
13 changes: 13 additions & 0 deletions src/libcore/internal_macros.rs
Expand Up @@ -87,3 +87,16 @@ macro_rules! forward_ref_op_assign {
}
}

#[cfg(stage0)]
macro_rules! public_in_stage0 {
( { $(#[$attr:meta])* } $($Item: tt)*) => {
$(#[$attr])* pub $($Item)*
}
}

#[cfg(not(stage0))]
macro_rules! public_in_stage0 {
( { $(#[$attr:meta])* } $($Item: tt)*) => {
$(#[$attr])* pub(crate) $($Item)*
}
}
31 changes: 12 additions & 19 deletions src/libcore/num/mod.rs
Expand Up @@ -4098,65 +4098,58 @@ pub enum FpCategory {
Normal,
}

/// A built-in floating point number.
// Technically private and only exposed for coretests:
#[doc(hidden)]
#[unstable(feature = "core_float",
reason = "stable interface is via `impl f{32,64}` in later crates",
issue = "32110")]
#[unstable(feature = "float_internals",
reason = "internal routines only exposed for testing",
issue = "0")]
pub trait Float: Sized {
/// Type used by `to_bits` and `from_bits`.
#[stable(feature = "core_float_bits", since = "1.25.0")]
type Bits;

/// Returns `true` if this value is NaN and false otherwise.
#[stable(feature = "core", since = "1.6.0")]
fn is_nan(self) -> bool;

/// Returns `true` if this value is positive infinity or negative infinity and
/// false otherwise.
#[stable(feature = "core", since = "1.6.0")]
fn is_infinite(self) -> bool;

/// Returns `true` if this number is neither infinite nor NaN.
#[stable(feature = "core", since = "1.6.0")]
fn is_finite(self) -> bool;

/// Returns `true` if this number is neither zero, infinite, denormal, or NaN.
#[stable(feature = "core", since = "1.6.0")]
fn is_normal(self) -> bool;

/// Returns the category that this number falls into.
#[stable(feature = "core", since = "1.6.0")]
fn classify(self) -> FpCategory;

/// Returns `true` if `self` is positive, including `+0.0` and
/// `Float::infinity()`.
#[stable(feature = "core", since = "1.6.0")]
fn is_sign_positive(self) -> bool;

/// Returns `true` if `self` is negative, including `-0.0` and
/// `Float::neg_infinity()`.
#[stable(feature = "core", since = "1.6.0")]
fn is_sign_negative(self) -> bool;

/// Take the reciprocal (inverse) of a number, `1/x`.
#[stable(feature = "core", since = "1.6.0")]
fn recip(self) -> Self;

/// Convert radians to degrees.
#[stable(feature = "deg_rad_conversions", since="1.7.0")]
fn to_degrees(self) -> Self;

/// Convert degrees to radians.
#[stable(feature = "deg_rad_conversions", since="1.7.0")]
fn to_radians(self) -> Self;

/// Returns the maximum of the two numbers.
#[stable(feature = "core_float_min_max", since="1.20.0")]
fn max(self, other: Self) -> Self;

/// Returns the minimum of the two numbers.
#[stable(feature = "core_float_min_max", since="1.20.0")]
fn min(self, other: Self) -> Self;

/// Raw transmutation to integer.
#[stable(feature = "core_float_bits", since="1.25.0")]
fn to_bits(self) -> Self::Bits;

/// Raw transmutation from integer.
#[stable(feature = "core_float_bits", since="1.25.0")]
fn from_bits(v: Self::Bits) -> Self;
}

Expand Down
7 changes: 5 additions & 2 deletions src/libcore/slice/mod.rs
Expand Up @@ -68,12 +68,15 @@ struct Repr<T> {
// Extension traits
//

public_in_stage0! {
{
/// Extension methods for slices.
#[unstable(feature = "core_slice_ext",
reason = "stable interface provided by `impl [T]` in later crates",
issue = "32110")]
#[allow(missing_docs)] // documented elsewhere
pub trait SliceExt {
}
trait SliceExt {
type Item;

#[stable(feature = "core", since = "1.6.0")]
Expand Down Expand Up @@ -238,7 +241,7 @@ pub trait SliceExt {
fn sort_unstable_by_key<B, F>(&mut self, f: F)
where F: FnMut(&Self::Item) -> B,
B: Ord;
}
}}

// Use macros to be generic over const/mut
macro_rules! slice_offset {
Expand Down
8 changes: 5 additions & 3 deletions src/libcore/str/mod.rs
Expand Up @@ -2117,14 +2117,16 @@ mod traits {

}


public_in_stage0! {
{
/// Methods for string slices
#[allow(missing_docs)]
#[doc(hidden)]
#[unstable(feature = "core_str_ext",
reason = "stable interface provided by `impl str` in later crates",
issue = "32110")]
pub trait StrExt {
}
trait StrExt {
// NB there are no docs here are they're all located on the StrExt trait in
// liballoc, not here.

Expand Down Expand Up @@ -2224,7 +2226,7 @@ pub trait StrExt {
fn trim_left(&self) -> &str;
#[stable(feature = "rust1", since = "1.0.0")]
fn trim_right(&self) -> &str;
}
}}

// truncate `&str` to length at most equal to `max`
// return `true` if it were truncated, and the new str.
Expand Down
1 change: 1 addition & 0 deletions src/libcore/tests/lib.rs
Expand Up @@ -17,6 +17,7 @@
#![feature(decode_utf8)]
#![feature(exact_size_is_empty)]
#![feature(fixed_size_array)]
#![feature(float_internals)]
#![feature(flt2dec)]
#![feature(fmt_internals)]
#![feature(hashmap_internals)]
Expand Down
3 changes: 2 additions & 1 deletion src/libstd/lib.rs
Expand Up @@ -252,14 +252,15 @@
#![feature(collections_range)]
#![feature(compiler_builtins_lib)]
#![feature(const_fn)]
#![feature(core_float)]
#![cfg_attr(stage0, feature(core_float))]
#![feature(core_intrinsics)]
#![feature(dropck_eyepatch)]
#![feature(exact_size_is_empty)]
#![feature(external_doc)]
#![feature(fs_read_write)]
#![feature(fixed_size_array)]
#![feature(float_from_str_radix)]
#![cfg_attr(stage0, feature(float_internals))]
#![feature(fn_traits)]
#![feature(fnbox)]
#![cfg_attr(stage0, feature(generic_param_attrs))]
Expand Down
Expand Up @@ -8,10 +8,8 @@ LL | foo(|s| s.is_empty());
| ^^^^^^^^
|
= help: items from traits can only be used if the trait is implemented and in scope
= note: the following traits define an item `is_empty`, perhaps you need to implement one of them:
= note: the following trait defines an item `is_empty`, perhaps you need to implement it:
candidate #1: `std::iter::ExactSizeIterator`
candidate #2: `core::slice::SliceExt`
candidate #3: `core::str::StrExt`

error: aborting due to previous error

Expand Down

0 comments on commit 70fdd1b

Please sign in to comment.