std: Move the bitflags! macro to a gated crate
In accordance with [collections reform part 2][rfc] this macro has been moved to an external [bitflags crate][crate] which is [available though crates.io][cratesio]. Inside the standard distribution the macro has been moved to a crate called `rustc_bitflags` for current users to continue using. [rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0509-collections-reform-part-2.md [crate]: https://github.com/rust-lang/bitflags [cratesio]: http://crates.io/crates/bitflags The major user of `bitflags!` in terms of a public-facing possibly-stable API today is the `FilePermissions` structure inside of `std::io`. This user, however, will likely no longer use `bitflags!` after I/O reform has landed. To prevent breaking APIs today, this structure remains as-is. Current users of the `bitflags!` macro should add this to their `Cargo.toml`: bitflags = "0.1" and this to their crate root: #[macro_use] extern crate bitflags; Due to the removal of a public macro, this is a: [breaking-change]
This commit is contained in:
parent
02968389dc
commit
34fa70fba5
7 changed files with 24 additions and 8 deletions
|
@ -52,7 +52,7 @@
|
||||||
TARGET_CRATES := libc std flate arena term \
|
TARGET_CRATES := libc std flate arena term \
|
||||||
serialize getopts collections test rand \
|
serialize getopts collections test rand \
|
||||||
log regex graphviz core rbml alloc \
|
log regex graphviz core rbml alloc \
|
||||||
unicode
|
unicode rustc_bitflags
|
||||||
RUSTC_CRATES := rustc rustc_typeck rustc_borrowck rustc_resolve rustc_driver \
|
RUSTC_CRATES := rustc rustc_typeck rustc_borrowck rustc_resolve rustc_driver \
|
||||||
rustc_trans rustc_back rustc_llvm rustc_privacy
|
rustc_trans rustc_back rustc_llvm rustc_privacy
|
||||||
HOST_CRATES := syntax $(RUSTC_CRATES) rustdoc fmt_macros
|
HOST_CRATES := syntax $(RUSTC_CRATES) rustdoc fmt_macros
|
||||||
|
@ -64,7 +64,8 @@ DEPS_libc := core
|
||||||
DEPS_unicode := core
|
DEPS_unicode := core
|
||||||
DEPS_alloc := core libc native:jemalloc
|
DEPS_alloc := core libc native:jemalloc
|
||||||
DEPS_std := core libc rand alloc collections unicode \
|
DEPS_std := core libc rand alloc collections unicode \
|
||||||
native:rust_builtin native:backtrace native:rustrt_native
|
native:rust_builtin native:backtrace native:rustrt_native \
|
||||||
|
rustc_bitflags
|
||||||
DEPS_graphviz := std
|
DEPS_graphviz := std
|
||||||
DEPS_syntax := std term serialize log fmt_macros arena libc
|
DEPS_syntax := std term serialize log fmt_macros arena libc
|
||||||
DEPS_rustc_driver := arena flate getopts graphviz libc rustc rustc_back rustc_borrowck \
|
DEPS_rustc_driver := arena flate getopts graphviz libc rustc rustc_back rustc_borrowck \
|
||||||
|
@ -83,6 +84,7 @@ DEPS_rustc_llvm := native:rustllvm libc std
|
||||||
DEPS_rustc_back := std syntax rustc_llvm flate log libc
|
DEPS_rustc_back := std syntax rustc_llvm flate log libc
|
||||||
DEPS_rustdoc := rustc rustc_driver native:hoedown serialize getopts \
|
DEPS_rustdoc := rustc rustc_driver native:hoedown serialize getopts \
|
||||||
test
|
test
|
||||||
|
DEPS_rustc_bitflags := core
|
||||||
DEPS_flate := std native:miniz
|
DEPS_flate := std native:miniz
|
||||||
DEPS_arena := std
|
DEPS_arena := std
|
||||||
DEPS_graphviz := std
|
DEPS_graphviz := std
|
||||||
|
@ -114,6 +116,7 @@ ONLY_RLIB_alloc := 1
|
||||||
ONLY_RLIB_rand := 1
|
ONLY_RLIB_rand := 1
|
||||||
ONLY_RLIB_collections := 1
|
ONLY_RLIB_collections := 1
|
||||||
ONLY_RLIB_unicode := 1
|
ONLY_RLIB_unicode := 1
|
||||||
|
ONLY_RLIB_rustc_bitflags := 1
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# You should not need to edit below this line
|
# You should not need to edit below this line
|
||||||
|
|
|
@ -44,6 +44,7 @@ extern crate rbml;
|
||||||
extern crate collections;
|
extern crate collections;
|
||||||
#[macro_use] extern crate log;
|
#[macro_use] extern crate log;
|
||||||
#[macro_use] extern crate syntax;
|
#[macro_use] extern crate syntax;
|
||||||
|
#[macro_use] #[no_link] extern crate rustc_bitflags;
|
||||||
|
|
||||||
extern crate "serialize" as rustc_serialize; // used by deriving
|
extern crate "serialize" as rustc_serialize; // used by deriving
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,16 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
|
#![crate_name = "rustc_bitflags"]
|
||||||
#![unstable]
|
#![unstable]
|
||||||
|
#![staged_api]
|
||||||
|
#![crate_type = "rlib"]
|
||||||
|
#![no_std]
|
||||||
|
|
||||||
//! A typesafe bitmask flag generator.
|
//! A typesafe bitmask flag generator.
|
||||||
|
|
||||||
|
#[cfg(test)] #[macro_use] extern crate std;
|
||||||
|
|
||||||
/// The `bitflags!` macro generates a `struct` that holds a set of C-style
|
/// The `bitflags!` macro generates a `struct` that holds a set of C-style
|
||||||
/// bitmask flags. It is useful for creating typesafe wrappers for C APIs.
|
/// bitmask flags. It is useful for creating typesafe wrappers for C APIs.
|
||||||
///
|
///
|
||||||
|
@ -21,6 +27,8 @@
|
||||||
/// # Example
|
/// # Example
|
||||||
///
|
///
|
||||||
/// ```{.rust}
|
/// ```{.rust}
|
||||||
|
/// #[macro_use] extern crate rustc_bitflags;
|
||||||
|
///
|
||||||
/// bitflags! {
|
/// bitflags! {
|
||||||
/// flags Flags: u32 {
|
/// flags Flags: u32 {
|
||||||
/// const FLAG_A = 0b00000001,
|
/// const FLAG_A = 0b00000001,
|
||||||
|
@ -45,6 +53,8 @@
|
||||||
/// The generated `struct`s can also be extended with type and trait implementations:
|
/// The generated `struct`s can also be extended with type and trait implementations:
|
||||||
///
|
///
|
||||||
/// ```{.rust}
|
/// ```{.rust}
|
||||||
|
/// #[macro_use] extern crate rustc_bitflags;
|
||||||
|
///
|
||||||
/// use std::fmt;
|
/// use std::fmt;
|
||||||
///
|
///
|
||||||
/// bitflags! {
|
/// bitflags! {
|
||||||
|
@ -273,8 +283,8 @@ macro_rules! bitflags {
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
#[allow(non_upper_case_globals)]
|
#[allow(non_upper_case_globals)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use hash::{self, SipHasher};
|
use std::hash::{self, SipHasher};
|
||||||
use option::Option::{Some, None};
|
use std::option::Option::{Some, None};
|
||||||
|
|
||||||
bitflags! {
|
bitflags! {
|
||||||
#[doc = "> The first principle is that you must not fool yourself — and"]
|
#[doc = "> The first principle is that you must not fool yourself — and"]
|
|
@ -28,6 +28,7 @@
|
||||||
#![allow(unknown_features)] #![feature(int_uint)]
|
#![allow(unknown_features)] #![feature(int_uint)]
|
||||||
|
|
||||||
extern crate libc;
|
extern crate libc;
|
||||||
|
#[macro_use] #[no_link] extern crate rustc_bitflags;
|
||||||
|
|
||||||
pub use self::OtherAttribute::*;
|
pub use self::OtherAttribute::*;
|
||||||
pub use self::SpecialAttribute::*;
|
pub use self::SpecialAttribute::*;
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
#[macro_use] extern crate log;
|
#[macro_use] extern crate log;
|
||||||
#[macro_use] extern crate syntax;
|
#[macro_use] extern crate syntax;
|
||||||
|
#[macro_use] #[no_link] extern crate rustc_bitflags;
|
||||||
|
|
||||||
extern crate rustc;
|
extern crate rustc;
|
||||||
|
|
||||||
|
|
|
@ -111,7 +111,7 @@
|
||||||
#![feature(box_syntax)]
|
#![feature(box_syntax)]
|
||||||
#![feature(old_impl_check)]
|
#![feature(old_impl_check)]
|
||||||
#![feature(optin_builtin_traits)]
|
#![feature(optin_builtin_traits)]
|
||||||
#![allow(unknown_features)] #![feature(int_uint)]
|
#![feature(int_uint)]
|
||||||
|
|
||||||
// Don't link to std. We are std.
|
// Don't link to std. We are std.
|
||||||
#![no_std]
|
#![no_std]
|
||||||
|
@ -136,6 +136,8 @@ extern crate alloc;
|
||||||
extern crate unicode;
|
extern crate unicode;
|
||||||
extern crate libc;
|
extern crate libc;
|
||||||
|
|
||||||
|
#[macro_use] #[no_link] extern crate rustc_bitflags;
|
||||||
|
|
||||||
// Make std testable by not duplicating lang items. See #2912
|
// Make std testable by not duplicating lang items. See #2912
|
||||||
#[cfg(test)] extern crate "std" as realstd;
|
#[cfg(test)] extern crate "std" as realstd;
|
||||||
#[cfg(test)] pub use realstd::marker;
|
#[cfg(test)] pub use realstd::marker;
|
||||||
|
@ -181,9 +183,6 @@ pub use unicode::char;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
mod macros;
|
mod macros;
|
||||||
|
|
||||||
#[macro_use]
|
|
||||||
pub mod bitflags;
|
|
||||||
|
|
||||||
mod rtdeps;
|
mod rtdeps;
|
||||||
|
|
||||||
/* The Prelude. */
|
/* The Prelude. */
|
||||||
|
|
|
@ -35,6 +35,7 @@ extern crate serialize;
|
||||||
extern crate term;
|
extern crate term;
|
||||||
extern crate libc;
|
extern crate libc;
|
||||||
#[macro_use] extern crate log;
|
#[macro_use] extern crate log;
|
||||||
|
#[macro_use] #[no_link] extern crate rustc_bitflags;
|
||||||
|
|
||||||
extern crate "serialize" as rustc_serialize; // used by deriving
|
extern crate "serialize" as rustc_serialize; // used by deriving
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue