std: Convert statics to constants

This commit repurposes most statics as constants in the standard library itself,
with the exception of TLS keys which precisely have their own memory location as
an implementation detail.

This commit also rewrites the bitflags syntax to use `const` instead of
`static`. All invocations will need to replace the word `static` with `const`
when declaring flags.

Due to the modification of the `bitflags!` syntax, this is a:

[breaking-change]
This commit is contained in:
Alex Crichton
2014-10-06 16:29:47 -07:00
parent d9874bfb40
commit ab5935c88d
9 changed files with 129 additions and 129 deletions

View File

@@ -24,10 +24,10 @@
/// ```{.rust} /// ```{.rust}
/// bitflags! { /// bitflags! {
/// flags Flags: u32 { /// flags Flags: u32 {
/// static FLAG_A = 0x00000001, /// const FLAG_A = 0x00000001,
/// static FLAG_B = 0x00000010, /// const FLAG_B = 0x00000010,
/// static FLAG_C = 0x00000100, /// const FLAG_C = 0x00000100,
/// static FLAG_ABC = FLAG_A.bits /// const FLAG_ABC = FLAG_A.bits
/// | FLAG_B.bits /// | FLAG_B.bits
/// | FLAG_C.bits, /// | FLAG_C.bits,
/// } /// }
@@ -50,8 +50,8 @@
/// ///
/// bitflags! { /// bitflags! {
/// flags Flags: u32 { /// flags Flags: u32 {
/// static FLAG_A = 0x00000001, /// const FLAG_A = 0x00000001,
/// static FLAG_B = 0x00000010, /// const FLAG_B = 0x00000010,
/// } /// }
/// } /// }
/// ///
@@ -115,7 +115,7 @@
#[macro_export] #[macro_export]
macro_rules! bitflags { macro_rules! bitflags {
($(#[$attr:meta])* flags $BitFlags:ident: $T:ty { ($(#[$attr:meta])* flags $BitFlags:ident: $T:ty {
$($(#[$Flag_attr:meta])* static $Flag:ident = $value:expr),+ $($(#[$Flag_attr:meta])* const $Flag:ident = $value:expr),+
}) => { }) => {
#[deriving(PartialEq, Eq, Clone, PartialOrd, Ord, Hash)] #[deriving(PartialEq, Eq, Clone, PartialOrd, Ord, Hash)]
$(#[$attr])* $(#[$attr])*
@@ -123,7 +123,7 @@ macro_rules! bitflags {
bits: $T, bits: $T,
} }
$($(#[$Flag_attr])* pub static $Flag: $BitFlags = $BitFlags { bits: $value };)+ $($(#[$Flag_attr])* pub const $Flag: $BitFlags = $BitFlags { bits: $value };)+
impl $BitFlags { impl $BitFlags {
/// Returns an empty set of flags. /// Returns an empty set of flags.
@@ -235,12 +235,12 @@ macro_rules! bitflags {
} }
}; };
($(#[$attr:meta])* flags $BitFlags:ident: $T:ty { ($(#[$attr:meta])* flags $BitFlags:ident: $T:ty {
$($(#[$Flag_attr:meta])* static $Flag:ident = $value:expr),+, $($(#[$Flag_attr:meta])* const $Flag:ident = $value:expr),+,
}) => { }) => {
bitflags! { bitflags! {
$(#[$attr])* $(#[$attr])*
flags $BitFlags: $T { flags $BitFlags: $T {
$($(#[$Flag_attr])* static $Flag = $value),+ $($(#[$Flag_attr])* const $Flag = $value),+
} }
} }
}; };
@@ -259,14 +259,14 @@ mod tests {
#[doc = "> "] #[doc = "> "]
#[doc = "> - Richard Feynman"] #[doc = "> - Richard Feynman"]
flags Flags: u32 { flags Flags: u32 {
static FlagA = 0x00000001, const FlagA = 0x00000001,
#[doc = "<pcwalton> macros are way better at generating code than trans is"] #[doc = "<pcwalton> macros are way better at generating code than trans is"]
static FlagB = 0x00000010, const FlagB = 0x00000010,
static FlagC = 0x00000100, const FlagC = 0x00000100,
#[doc = "* cmr bed"] #[doc = "* cmr bed"]
#[doc = "* strcat table"] #[doc = "* strcat table"]
#[doc = "<strcat> wait what?"] #[doc = "<strcat> wait what?"]
static FlagABC = FlagA.bits const FlagABC = FlagA.bits
| FlagB.bits | FlagB.bits
| FlagC.bits, | FlagC.bits,
} }
@@ -274,7 +274,7 @@ mod tests {
bitflags! { bitflags! {
flags AnotherSetOfFlags: uint { flags AnotherSetOfFlags: uint {
static AnotherFlag = 1u, const AnotherFlag = 1u,
} }
} }

View File

@@ -41,8 +41,8 @@ use super::table::{
SafeHash SafeHash
}; };
static INITIAL_LOG2_CAP: uint = 5; const INITIAL_LOG2_CAP: uint = 5;
pub static INITIAL_CAPACITY: uint = 1 << INITIAL_LOG2_CAP; // 2^5 pub const INITIAL_CAPACITY: uint = 1 << INITIAL_LOG2_CAP; // 2^5
/// The default behavior of HashMap implements a load factor of 90.9%. /// The default behavior of HashMap implements a load factor of 90.9%.
/// This behavior is characterized by the following conditions: /// This behavior is characterized by the following conditions:

View File

@@ -24,7 +24,7 @@ use ptr::{RawPtr, copy_nonoverlapping_memory, zero_memory};
use ptr; use ptr;
use rt::heap::{allocate, deallocate}; use rt::heap::{allocate, deallocate};
static EMPTY_BUCKET: u64 = 0u64; const EMPTY_BUCKET: u64 = 0u64;
/// The raw hashtable, providing safe-ish access to the unzipped and highly /// The raw hashtable, providing safe-ish access to the unzipped and highly
/// optimized arrays of hashes, keys, and values. /// optimized arrays of hashes, keys, and values.

View File

@@ -283,7 +283,7 @@ pub mod util;
/// The default buffer size for various I/O operations /// The default buffer size for various I/O operations
// libuv recommends 64k buffers to maximize throughput // libuv recommends 64k buffers to maximize throughput
// https://groups.google.com/forum/#!topic/libuv/oQO1HJAIDdA // https://groups.google.com/forum/#!topic/libuv/oQO1HJAIDdA
static DEFAULT_BUF_SIZE: uint = 1024 * 64; const DEFAULT_BUF_SIZE: uint = 1024 * 64;
/// A convenient typedef of the return value of any I/O action. /// A convenient typedef of the return value of any I/O action.
pub type IoResult<T> = Result<T, IoError>; pub type IoResult<T> = Result<T, IoError>;
@@ -1803,93 +1803,93 @@ bitflags! {
#[doc = "A set of permissions for a file or directory is represented"] #[doc = "A set of permissions for a file or directory is represented"]
#[doc = "by a set of flags which are or'd together."] #[doc = "by a set of flags which are or'd together."]
flags FilePermission: u32 { flags FilePermission: u32 {
static USER_READ = 0o400, const USER_READ = 0o400,
static USER_WRITE = 0o200, const USER_WRITE = 0o200,
static USER_EXECUTE = 0o100, const USER_EXECUTE = 0o100,
static GROUP_READ = 0o040, const GROUP_READ = 0o040,
static GROUP_WRITE = 0o020, const GROUP_WRITE = 0o020,
static GROUP_EXECUTE = 0o010, const GROUP_EXECUTE = 0o010,
static OTHER_READ = 0o004, const OTHER_READ = 0o004,
static OTHER_WRITE = 0o002, const OTHER_WRITE = 0o002,
static OTHER_EXECUTE = 0o001, const OTHER_EXECUTE = 0o001,
static USER_RWX = USER_READ.bits | USER_WRITE.bits | USER_EXECUTE.bits, const USER_RWX = USER_READ.bits | USER_WRITE.bits | USER_EXECUTE.bits,
static GROUP_RWX = GROUP_READ.bits | GROUP_WRITE.bits | GROUP_EXECUTE.bits, const GROUP_RWX = GROUP_READ.bits | GROUP_WRITE.bits | GROUP_EXECUTE.bits,
static OTHER_RWX = OTHER_READ.bits | OTHER_WRITE.bits | OTHER_EXECUTE.bits, const OTHER_RWX = OTHER_READ.bits | OTHER_WRITE.bits | OTHER_EXECUTE.bits,
#[doc = "Permissions for user owned files, equivalent to 0644 on"] #[doc = "Permissions for user owned files, equivalent to 0644 on"]
#[doc = "unix-like systems."] #[doc = "unix-like systems."]
static USER_FILE = USER_READ.bits | USER_WRITE.bits | GROUP_READ.bits | OTHER_READ.bits, const USER_FILE = USER_READ.bits | USER_WRITE.bits | GROUP_READ.bits | OTHER_READ.bits,
#[doc = "Permissions for user owned directories, equivalent to 0755 on"] #[doc = "Permissions for user owned directories, equivalent to 0755 on"]
#[doc = "unix-like systems."] #[doc = "unix-like systems."]
static USER_DIR = USER_RWX.bits | GROUP_READ.bits | GROUP_EXECUTE.bits | const USER_DIR = USER_RWX.bits | GROUP_READ.bits | GROUP_EXECUTE.bits |
OTHER_READ.bits | OTHER_EXECUTE.bits, OTHER_READ.bits | OTHER_EXECUTE.bits,
#[doc = "Permissions for user owned executables, equivalent to 0755"] #[doc = "Permissions for user owned executables, equivalent to 0755"]
#[doc = "on unix-like systems."] #[doc = "on unix-like systems."]
static USER_EXEC = USER_DIR.bits, const USER_EXEC = USER_DIR.bits,
#[doc = "All possible permissions enabled."] #[doc = "All possible permissions enabled."]
static ALL_PERMISSIONS = USER_RWX.bits | GROUP_RWX.bits | OTHER_RWX.bits, const ALL_PERMISSIONS = USER_RWX.bits | GROUP_RWX.bits | OTHER_RWX.bits,
// Deprecated names // Deprecated names
#[allow(non_uppercase_statics)] #[allow(non_uppercase_statics)]
#[deprecated = "use USER_READ instead"] #[deprecated = "use USER_READ instead"]
static UserRead = USER_READ.bits, const UserRead = USER_READ.bits,
#[allow(non_uppercase_statics)] #[allow(non_uppercase_statics)]
#[deprecated = "use USER_WRITE instead"] #[deprecated = "use USER_WRITE instead"]
static UserWrite = USER_WRITE.bits, const UserWrite = USER_WRITE.bits,
#[allow(non_uppercase_statics)] #[allow(non_uppercase_statics)]
#[deprecated = "use USER_EXECUTE instead"] #[deprecated = "use USER_EXECUTE instead"]
static UserExecute = USER_EXECUTE.bits, const UserExecute = USER_EXECUTE.bits,
#[allow(non_uppercase_statics)] #[allow(non_uppercase_statics)]
#[deprecated = "use GROUP_READ instead"] #[deprecated = "use GROUP_READ instead"]
static GroupRead = GROUP_READ.bits, const GroupRead = GROUP_READ.bits,
#[allow(non_uppercase_statics)] #[allow(non_uppercase_statics)]
#[deprecated = "use GROUP_WRITE instead"] #[deprecated = "use GROUP_WRITE instead"]
static GroupWrite = GROUP_WRITE.bits, const GroupWrite = GROUP_WRITE.bits,
#[allow(non_uppercase_statics)] #[allow(non_uppercase_statics)]
#[deprecated = "use GROUP_EXECUTE instead"] #[deprecated = "use GROUP_EXECUTE instead"]
static GroupExecute = GROUP_EXECUTE.bits, const GroupExecute = GROUP_EXECUTE.bits,
#[allow(non_uppercase_statics)] #[allow(non_uppercase_statics)]
#[deprecated = "use OTHER_READ instead"] #[deprecated = "use OTHER_READ instead"]
static OtherRead = OTHER_READ.bits, const OtherRead = OTHER_READ.bits,
#[allow(non_uppercase_statics)] #[allow(non_uppercase_statics)]
#[deprecated = "use OTHER_WRITE instead"] #[deprecated = "use OTHER_WRITE instead"]
static OtherWrite = OTHER_WRITE.bits, const OtherWrite = OTHER_WRITE.bits,
#[allow(non_uppercase_statics)] #[allow(non_uppercase_statics)]
#[deprecated = "use OTHER_EXECUTE instead"] #[deprecated = "use OTHER_EXECUTE instead"]
static OtherExecute = OTHER_EXECUTE.bits, const OtherExecute = OTHER_EXECUTE.bits,
#[allow(non_uppercase_statics)] #[allow(non_uppercase_statics)]
#[deprecated = "use USER_RWX instead"] #[deprecated = "use USER_RWX instead"]
static UserRWX = USER_RWX.bits, const UserRWX = USER_RWX.bits,
#[allow(non_uppercase_statics)] #[allow(non_uppercase_statics)]
#[deprecated = "use GROUP_RWX instead"] #[deprecated = "use GROUP_RWX instead"]
static GroupRWX = GROUP_RWX.bits, const GroupRWX = GROUP_RWX.bits,
#[allow(non_uppercase_statics)] #[allow(non_uppercase_statics)]
#[deprecated = "use OTHER_RWX instead"] #[deprecated = "use OTHER_RWX instead"]
static OtherRWX = OTHER_RWX.bits, const OtherRWX = OTHER_RWX.bits,
#[doc = "Deprecated: use `USER_FILE` instead."] #[doc = "Deprecated: use `USER_FILE` instead."]
#[allow(non_uppercase_statics)] #[allow(non_uppercase_statics)]
#[deprecated = "use USER_FILE instead"] #[deprecated = "use USER_FILE instead"]
static UserFile = USER_FILE.bits, const UserFile = USER_FILE.bits,
#[doc = "Deprecated: use `USER_DIR` instead."] #[doc = "Deprecated: use `USER_DIR` instead."]
#[allow(non_uppercase_statics)] #[allow(non_uppercase_statics)]
#[deprecated = "use USER_DIR instead"] #[deprecated = "use USER_DIR instead"]
static UserDir = USER_DIR.bits, const UserDir = USER_DIR.bits,
#[doc = "Deprecated: use `USER_EXEC` instead."] #[doc = "Deprecated: use `USER_EXEC` instead."]
#[allow(non_uppercase_statics)] #[allow(non_uppercase_statics)]
#[deprecated = "use USER_EXEC instead"] #[deprecated = "use USER_EXEC instead"]
static UserExec = USER_EXEC.bits, const UserExec = USER_EXEC.bits,
#[doc = "Deprecated: use `ALL_PERMISSIONS` instead"] #[doc = "Deprecated: use `ALL_PERMISSIONS` instead"]
#[allow(non_uppercase_statics)] #[allow(non_uppercase_statics)]
#[deprecated = "use ALL_PERMISSIONS instead"] #[deprecated = "use ALL_PERMISSIONS instead"]
static AllPermissions = ALL_PERMISSIONS.bits, const AllPermissions = ALL_PERMISSIONS.bits,
} }
} }

View File

@@ -32,16 +32,16 @@ use std::hash::sip::SipState;
/// Signal a process to exit, without forcibly killing it. Corresponds to /// Signal a process to exit, without forcibly killing it. Corresponds to
/// SIGTERM on unix platforms. /// SIGTERM on unix platforms.
#[cfg(windows)] pub static PleaseExitSignal: int = 15; #[cfg(windows)] pub const PleaseExitSignal: int = 15;
/// Signal a process to exit immediately, forcibly killing it. Corresponds to /// Signal a process to exit immediately, forcibly killing it. Corresponds to
/// SIGKILL on unix platforms. /// SIGKILL on unix platforms.
#[cfg(windows)] pub static MustDieSignal: int = 9; #[cfg(windows)] pub const MustDieSignal: int = 9;
/// Signal a process to exit, without forcibly killing it. Corresponds to /// Signal a process to exit, without forcibly killing it. Corresponds to
/// SIGTERM on unix platforms. /// SIGTERM on unix platforms.
#[cfg(not(windows))] pub static PleaseExitSignal: int = libc::SIGTERM as int; #[cfg(not(windows))] pub const PleaseExitSignal: int = libc::SIGTERM as int;
/// Signal a process to exit immediately, forcibly killing it. Corresponds to /// Signal a process to exit immediately, forcibly killing it. Corresponds to
/// SIGKILL on unix platforms. /// SIGKILL on unix platforms.
#[cfg(not(windows))] pub static MustDieSignal: int = libc::SIGKILL as int; #[cfg(not(windows))] pub const MustDieSignal: int = libc::SIGKILL as int;
/// Representation of a running or exited child process. /// Representation of a running or exited child process.
/// ///

View File

@@ -66,8 +66,8 @@ pub fn num_cpus() -> uint {
} }
} }
pub static TMPBUF_SZ : uint = 1000u; pub const TMPBUF_SZ : uint = 1000u;
static BUF_BYTES : uint = 2048u; const BUF_BYTES : uint = 2048u;
/// Returns the current working directory as a Path. /// Returns the current working directory as a Path.
/// ///
@@ -1672,230 +1672,230 @@ impl MemoryMap {
pub mod consts { pub mod consts {
pub use os::arch_consts::ARCH; pub use os::arch_consts::ARCH;
pub static FAMILY: &'static str = "unix"; pub const FAMILY: &'static str = "unix";
/// A string describing the specific operating system in use: in this /// A string describing the specific operating system in use: in this
/// case, `linux`. /// case, `linux`.
pub static SYSNAME: &'static str = "linux"; pub const SYSNAME: &'static str = "linux";
/// Specifies the filename prefix used for shared libraries on this /// Specifies the filename prefix used for shared libraries on this
/// platform: in this case, `lib`. /// platform: in this case, `lib`.
pub static DLL_PREFIX: &'static str = "lib"; pub const DLL_PREFIX: &'static str = "lib";
/// Specifies the filename suffix used for shared libraries on this /// Specifies the filename suffix used for shared libraries on this
/// platform: in this case, `.so`. /// platform: in this case, `.so`.
pub static DLL_SUFFIX: &'static str = ".so"; pub const DLL_SUFFIX: &'static str = ".so";
/// Specifies the file extension used for shared libraries on this /// Specifies the file extension used for shared libraries on this
/// platform that goes after the dot: in this case, `so`. /// platform that goes after the dot: in this case, `so`.
pub static DLL_EXTENSION: &'static str = "so"; pub const DLL_EXTENSION: &'static str = "so";
/// Specifies the filename suffix used for executable binaries on this /// Specifies the filename suffix used for executable binaries on this
/// platform: in this case, the empty string. /// platform: in this case, the empty string.
pub static EXE_SUFFIX: &'static str = ""; pub const EXE_SUFFIX: &'static str = "";
/// Specifies the file extension, if any, used for executable binaries /// Specifies the file extension, if any, used for executable binaries
/// on this platform: in this case, the empty string. /// on this platform: in this case, the empty string.
pub static EXE_EXTENSION: &'static str = ""; pub const EXE_EXTENSION: &'static str = "";
} }
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
pub mod consts { pub mod consts {
pub use os::arch_consts::ARCH; pub use os::arch_consts::ARCH;
pub static FAMILY: &'static str = "unix"; pub const FAMILY: &'static str = "unix";
/// A string describing the specific operating system in use: in this /// A string describing the specific operating system in use: in this
/// case, `macos`. /// case, `macos`.
pub static SYSNAME: &'static str = "macos"; pub const SYSNAME: &'static str = "macos";
/// Specifies the filename prefix used for shared libraries on this /// Specifies the filename prefix used for shared libraries on this
/// platform: in this case, `lib`. /// platform: in this case, `lib`.
pub static DLL_PREFIX: &'static str = "lib"; pub const DLL_PREFIX: &'static str = "lib";
/// Specifies the filename suffix used for shared libraries on this /// Specifies the filename suffix used for shared libraries on this
/// platform: in this case, `.dylib`. /// platform: in this case, `.dylib`.
pub static DLL_SUFFIX: &'static str = ".dylib"; pub const DLL_SUFFIX: &'static str = ".dylib";
/// Specifies the file extension used for shared libraries on this /// Specifies the file extension used for shared libraries on this
/// platform that goes after the dot: in this case, `dylib`. /// platform that goes after the dot: in this case, `dylib`.
pub static DLL_EXTENSION: &'static str = "dylib"; pub const DLL_EXTENSION: &'static str = "dylib";
/// Specifies the filename suffix used for executable binaries on this /// Specifies the filename suffix used for executable binaries on this
/// platform: in this case, the empty string. /// platform: in this case, the empty string.
pub static EXE_SUFFIX: &'static str = ""; pub const EXE_SUFFIX: &'static str = "";
/// Specifies the file extension, if any, used for executable binaries /// Specifies the file extension, if any, used for executable binaries
/// on this platform: in this case, the empty string. /// on this platform: in this case, the empty string.
pub static EXE_EXTENSION: &'static str = ""; pub const EXE_EXTENSION: &'static str = "";
} }
#[cfg(target_os = "ios")] #[cfg(target_os = "ios")]
pub mod consts { pub mod consts {
pub use os::arch_consts::ARCH; pub use os::arch_consts::ARCH;
pub static FAMILY: &'static str = "unix"; pub const FAMILY: &'static str = "unix";
/// A string describing the specific operating system in use: in this /// A string describing the specific operating system in use: in this
/// case, `ios`. /// case, `ios`.
pub static SYSNAME: &'static str = "ios"; pub const SYSNAME: &'static str = "ios";
/// Specifies the filename suffix used for executable binaries on this /// Specifies the filename suffix used for executable binaries on this
/// platform: in this case, the empty string. /// platform: in this case, the empty string.
pub static EXE_SUFFIX: &'static str = ""; pub const EXE_SUFFIX: &'static str = "";
/// Specifies the file extension, if any, used for executable binaries /// Specifies the file extension, if any, used for executable binaries
/// on this platform: in this case, the empty string. /// on this platform: in this case, the empty string.
pub static EXE_EXTENSION: &'static str = ""; pub const EXE_EXTENSION: &'static str = "";
} }
#[cfg(target_os = "freebsd")] #[cfg(target_os = "freebsd")]
pub mod consts { pub mod consts {
pub use os::arch_consts::ARCH; pub use os::arch_consts::ARCH;
pub static FAMILY: &'static str = "unix"; pub const FAMILY: &'static str = "unix";
/// A string describing the specific operating system in use: in this /// A string describing the specific operating system in use: in this
/// case, `freebsd`. /// case, `freebsd`.
pub static SYSNAME: &'static str = "freebsd"; pub const SYSNAME: &'static str = "freebsd";
/// Specifies the filename prefix used for shared libraries on this /// Specifies the filename prefix used for shared libraries on this
/// platform: in this case, `lib`. /// platform: in this case, `lib`.
pub static DLL_PREFIX: &'static str = "lib"; pub const DLL_PREFIX: &'static str = "lib";
/// Specifies the filename suffix used for shared libraries on this /// Specifies the filename suffix used for shared libraries on this
/// platform: in this case, `.so`. /// platform: in this case, `.so`.
pub static DLL_SUFFIX: &'static str = ".so"; pub const DLL_SUFFIX: &'static str = ".so";
/// Specifies the file extension used for shared libraries on this /// Specifies the file extension used for shared libraries on this
/// platform that goes after the dot: in this case, `so`. /// platform that goes after the dot: in this case, `so`.
pub static DLL_EXTENSION: &'static str = "so"; pub const DLL_EXTENSION: &'static str = "so";
/// Specifies the filename suffix used for executable binaries on this /// Specifies the filename suffix used for executable binaries on this
/// platform: in this case, the empty string. /// platform: in this case, the empty string.
pub static EXE_SUFFIX: &'static str = ""; pub const EXE_SUFFIX: &'static str = "";
/// Specifies the file extension, if any, used for executable binaries /// Specifies the file extension, if any, used for executable binaries
/// on this platform: in this case, the empty string. /// on this platform: in this case, the empty string.
pub static EXE_EXTENSION: &'static str = ""; pub const EXE_EXTENSION: &'static str = "";
} }
#[cfg(target_os = "dragonfly")] #[cfg(target_os = "dragonfly")]
pub mod consts { pub mod consts {
pub use os::arch_consts::ARCH; pub use os::arch_consts::ARCH;
pub static FAMILY: &'static str = "unix"; pub const FAMILY: &'static str = "unix";
/// A string describing the specific operating system in use: in this /// A string describing the specific operating system in use: in this
/// case, `dragonfly`. /// case, `dragonfly`.
pub static SYSNAME: &'static str = "dragonfly"; pub const SYSNAME: &'static str = "dragonfly";
/// Specifies the filename prefix used for shared libraries on this /// Specifies the filename prefix used for shared libraries on this
/// platform: in this case, `lib`. /// platform: in this case, `lib`.
pub static DLL_PREFIX: &'static str = "lib"; pub const DLL_PREFIX: &'static str = "lib";
/// Specifies the filename suffix used for shared libraries on this /// Specifies the filename suffix used for shared libraries on this
/// platform: in this case, `.so`. /// platform: in this case, `.so`.
pub static DLL_SUFFIX: &'static str = ".so"; pub const DLL_SUFFIX: &'static str = ".so";
/// Specifies the file extension used for shared libraries on this /// Specifies the file extension used for shared libraries on this
/// platform that goes after the dot: in this case, `so`. /// platform that goes after the dot: in this case, `so`.
pub static DLL_EXTENSION: &'static str = "so"; pub const DLL_EXTENSION: &'static str = "so";
/// Specifies the filename suffix used for executable binaries on this /// Specifies the filename suffix used for executable binaries on this
/// platform: in this case, the empty string. /// platform: in this case, the empty string.
pub static EXE_SUFFIX: &'static str = ""; pub const EXE_SUFFIX: &'static str = "";
/// Specifies the file extension, if any, used for executable binaries /// Specifies the file extension, if any, used for executable binaries
/// on this platform: in this case, the empty string. /// on this platform: in this case, the empty string.
pub static EXE_EXTENSION: &'static str = ""; pub const EXE_EXTENSION: &'static str = "";
} }
#[cfg(target_os = "android")] #[cfg(target_os = "android")]
pub mod consts { pub mod consts {
pub use os::arch_consts::ARCH; pub use os::arch_consts::ARCH;
pub static FAMILY: &'static str = "unix"; pub const FAMILY: &'static str = "unix";
/// A string describing the specific operating system in use: in this /// A string describing the specific operating system in use: in this
/// case, `android`. /// case, `android`.
pub static SYSNAME: &'static str = "android"; pub const SYSNAME: &'static str = "android";
/// Specifies the filename prefix used for shared libraries on this /// Specifies the filename prefix used for shared libraries on this
/// platform: in this case, `lib`. /// platform: in this case, `lib`.
pub static DLL_PREFIX: &'static str = "lib"; pub const DLL_PREFIX: &'static str = "lib";
/// Specifies the filename suffix used for shared libraries on this /// Specifies the filename suffix used for shared libraries on this
/// platform: in this case, `.so`. /// platform: in this case, `.so`.
pub static DLL_SUFFIX: &'static str = ".so"; pub const DLL_SUFFIX: &'static str = ".so";
/// Specifies the file extension used for shared libraries on this /// Specifies the file extension used for shared libraries on this
/// platform that goes after the dot: in this case, `so`. /// platform that goes after the dot: in this case, `so`.
pub static DLL_EXTENSION: &'static str = "so"; pub const DLL_EXTENSION: &'static str = "so";
/// Specifies the filename suffix used for executable binaries on this /// Specifies the filename suffix used for executable binaries on this
/// platform: in this case, the empty string. /// platform: in this case, the empty string.
pub static EXE_SUFFIX: &'static str = ""; pub const EXE_SUFFIX: &'static str = "";
/// Specifies the file extension, if any, used for executable binaries /// Specifies the file extension, if any, used for executable binaries
/// on this platform: in this case, the empty string. /// on this platform: in this case, the empty string.
pub static EXE_EXTENSION: &'static str = ""; pub const EXE_EXTENSION: &'static str = "";
} }
#[cfg(target_os = "windows")] #[cfg(target_os = "windows")]
pub mod consts { pub mod consts {
pub use os::arch_consts::ARCH; pub use os::arch_consts::ARCH;
pub static FAMILY: &'static str = "windows"; pub const FAMILY: &'static str = "windows";
/// A string describing the specific operating system in use: in this /// A string describing the specific operating system in use: in this
/// case, `windows`. /// case, `windows`.
pub static SYSNAME: &'static str = "windows"; pub const SYSNAME: &'static str = "windows";
/// Specifies the filename prefix used for shared libraries on this /// Specifies the filename prefix used for shared libraries on this
/// platform: in this case, the empty string. /// platform: in this case, the empty string.
pub static DLL_PREFIX: &'static str = ""; pub const DLL_PREFIX: &'static str = "";
/// Specifies the filename suffix used for shared libraries on this /// Specifies the filename suffix used for shared libraries on this
/// platform: in this case, `.dll`. /// platform: in this case, `.dll`.
pub static DLL_SUFFIX: &'static str = ".dll"; pub const DLL_SUFFIX: &'static str = ".dll";
/// Specifies the file extension used for shared libraries on this /// Specifies the file extension used for shared libraries on this
/// platform that goes after the dot: in this case, `dll`. /// platform that goes after the dot: in this case, `dll`.
pub static DLL_EXTENSION: &'static str = "dll"; pub const DLL_EXTENSION: &'static str = "dll";
/// Specifies the filename suffix used for executable binaries on this /// Specifies the filename suffix used for executable binaries on this
/// platform: in this case, `.exe`. /// platform: in this case, `.exe`.
pub static EXE_SUFFIX: &'static str = ".exe"; pub const EXE_SUFFIX: &'static str = ".exe";
/// Specifies the file extension, if any, used for executable binaries /// Specifies the file extension, if any, used for executable binaries
/// on this platform: in this case, `exe`. /// on this platform: in this case, `exe`.
pub static EXE_EXTENSION: &'static str = "exe"; pub const EXE_EXTENSION: &'static str = "exe";
} }
#[cfg(target_arch = "x86")] #[cfg(target_arch = "x86")]
mod arch_consts { mod arch_consts {
pub static ARCH: &'static str = "x86"; pub const ARCH: &'static str = "x86";
} }
#[cfg(target_arch = "x86_64")] #[cfg(target_arch = "x86_64")]
mod arch_consts { mod arch_consts {
pub static ARCH: &'static str = "x86_64"; pub const ARCH: &'static str = "x86_64";
} }
#[cfg(target_arch = "arm")] #[cfg(target_arch = "arm")]
mod arch_consts { mod arch_consts {
pub static ARCH: &'static str = "arm"; pub const ARCH: &'static str = "arm";
} }
#[cfg(target_arch = "mips")] #[cfg(target_arch = "mips")]
mod arch_consts { mod arch_consts {
pub static ARCH: &'static str = "mips"; pub const ARCH: &'static str = "mips";
} }
#[cfg(target_arch = "mipsel")] #[cfg(target_arch = "mipsel")]
mod arch_consts { mod arch_consts {
pub static ARCH: &'static str = "mipsel"; pub const ARCH: &'static str = "mipsel";
} }
#[cfg(test)] #[cfg(test)]

View File

@@ -42,10 +42,10 @@ pub struct Path {
} }
/// The standard path separator character /// The standard path separator character
pub static SEP: char = '/'; pub const SEP: char = '/';
/// The standard path separator byte /// The standard path separator byte
pub static SEP_BYTE: u8 = SEP as u8; pub const SEP_BYTE: u8 = SEP as u8;
/// Returns whether the given byte is a path separator /// Returns whether the given byte is a path separator
#[inline] #[inline]

View File

@@ -958,14 +958,14 @@ pub fn make_non_verbatim(path: &Path) -> Option<Path> {
} }
/// The standard path separator character /// The standard path separator character
pub static SEP: char = '\\'; pub const SEP: char = '\\';
/// The standard path separator byte /// The standard path separator byte
pub static SEP_BYTE: u8 = SEP as u8; pub const SEP_BYTE: u8 = SEP as u8;
/// The alternative path separator character /// The alternative path separator character
pub static SEP2: char = '/'; pub const SEP2: char = '/';
/// The alternative path separator character /// The alternative path separator character
pub static SEP2_BYTE: u8 = SEP2 as u8; pub const SEP2_BYTE: u8 = SEP2 as u8;
/// Returns whether the given char is a path separator. /// Returns whether the given char is a path separator.
/// Allows both the primary separator '\' and the alternative separator '/'. /// Allows both the primary separator '\' and the alternative separator '/'.

View File

@@ -20,23 +20,23 @@ use num::{CheckedAdd, CheckedMul};
use result::{Result, Ok, Err}; use result::{Result, Ok, Err};
/// The number of nanoseconds in a microsecond. /// The number of nanoseconds in a microsecond.
static NANOS_PER_MICRO: i32 = 1000; const NANOS_PER_MICRO: i32 = 1000;
/// The number of nanoseconds in a millisecond. /// The number of nanoseconds in a millisecond.
static NANOS_PER_MILLI: i32 = 1000_000; const NANOS_PER_MILLI: i32 = 1000_000;
/// The number of nanoseconds in seconds. /// The number of nanoseconds in seconds.
static NANOS_PER_SEC: i32 = 1_000_000_000; const NANOS_PER_SEC: i32 = 1_000_000_000;
/// The number of microseconds per second. /// The number of microseconds per second.
static MICROS_PER_SEC: i64 = 1000_000; const MICROS_PER_SEC: i64 = 1000_000;
/// The number of milliseconds per second. /// The number of milliseconds per second.
static MILLIS_PER_SEC: i64 = 1000; const MILLIS_PER_SEC: i64 = 1000;
/// The number of seconds in a minute. /// The number of seconds in a minute.
static SECS_PER_MINUTE: i64 = 60; const SECS_PER_MINUTE: i64 = 60;
/// The number of seconds in an hour. /// The number of seconds in an hour.
static SECS_PER_HOUR: i64 = 3600; const SECS_PER_HOUR: i64 = 3600;
/// The number of (non-leap) seconds in days. /// The number of (non-leap) seconds in days.
static SECS_PER_DAY: i64 = 86400; const SECS_PER_DAY: i64 = 86400;
/// The number of (non-leap) seconds in a week. /// The number of (non-leap) seconds in a week.
static SECS_PER_WEEK: i64 = 604800; const SECS_PER_WEEK: i64 = 604800;
macro_rules! try_opt( macro_rules! try_opt(
($e:expr) => (match $e { Some(v) => v, None => return None }) ($e:expr) => (match $e { Some(v) => v, None => return None })
@@ -52,13 +52,13 @@ pub struct Duration {
} }
/// The minimum possible `Duration`: `i64::MIN` milliseconds. /// The minimum possible `Duration`: `i64::MIN` milliseconds.
pub static MIN: Duration = Duration { pub const MIN: Duration = Duration {
secs: i64::MIN / MILLIS_PER_SEC - 1, secs: i64::MIN / MILLIS_PER_SEC - 1,
nanos: NANOS_PER_SEC + (i64::MIN % MILLIS_PER_SEC) as i32 * NANOS_PER_MILLI nanos: NANOS_PER_SEC + (i64::MIN % MILLIS_PER_SEC) as i32 * NANOS_PER_MILLI
}; };
/// The maximum possible `Duration`: `i64::MAX` milliseconds. /// The maximum possible `Duration`: `i64::MAX` milliseconds.
pub static MAX: Duration = Duration { pub const MAX: Duration = Duration {
secs: i64::MAX / MILLIS_PER_SEC, secs: i64::MAX / MILLIS_PER_SEC,
nanos: (i64::MAX % MILLIS_PER_SEC) as i32 * NANOS_PER_MILLI nanos: (i64::MAX % MILLIS_PER_SEC) as i32 * NANOS_PER_MILLI
}; };
@@ -456,7 +456,7 @@ mod tests {
assert_eq!(MIN.num_microseconds(), None); assert_eq!(MIN.num_microseconds(), None);
// overflow checks // overflow checks
static MICROS_PER_DAY: i64 = 86400_000_000; const MICROS_PER_DAY: i64 = 86400_000_000;
assert_eq!(Duration::days(i64::MAX / MICROS_PER_DAY).num_microseconds(), assert_eq!(Duration::days(i64::MAX / MICROS_PER_DAY).num_microseconds(),
Some(i64::MAX / MICROS_PER_DAY * MICROS_PER_DAY)); Some(i64::MAX / MICROS_PER_DAY * MICROS_PER_DAY));
assert_eq!(Duration::days(i64::MIN / MICROS_PER_DAY).num_microseconds(), assert_eq!(Duration::days(i64::MIN / MICROS_PER_DAY).num_microseconds(),
@@ -477,7 +477,7 @@ mod tests {
assert_eq!(MIN.num_nanoseconds(), None); assert_eq!(MIN.num_nanoseconds(), None);
// overflow checks // overflow checks
static NANOS_PER_DAY: i64 = 86400_000_000_000; const NANOS_PER_DAY: i64 = 86400_000_000_000;
assert_eq!(Duration::days(i64::MAX / NANOS_PER_DAY).num_nanoseconds(), assert_eq!(Duration::days(i64::MAX / NANOS_PER_DAY).num_nanoseconds(),
Some(i64::MAX / NANOS_PER_DAY * NANOS_PER_DAY)); Some(i64::MAX / NANOS_PER_DAY * NANOS_PER_DAY));
assert_eq!(Duration::days(i64::MIN / NANOS_PER_DAY).num_nanoseconds(), assert_eq!(Duration::days(i64::MIN / NANOS_PER_DAY).num_nanoseconds(),