X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Flibcore%2Fmacros.rs;h=326b5281d9e8f992fbb24a7bbd48881a956b29fb;hb=02969a7e0df02eaa32783a79925411f3a51b1444;hp=021079f85f6be2292001ad9fb70a0ecc8c83d81e;hpb=8287d0de0ee24dda2b64de0758e8fd7719ab5b58;p=rust.git diff --git a/src/libcore/macros.rs b/src/libcore/macros.rs index 021079f85f6..326b5281d9e 100644 --- a/src/libcore/macros.rs +++ b/src/libcore/macros.rs @@ -35,6 +35,8 @@ macro_rules! panic { /// This will invoke the [`panic!`] macro if the provided expression cannot be /// evaluated to `true` at runtime. /// +/// # Uses +/// /// Assertions are always checked in both debug and release builds, and cannot /// be disabled. See [`debug_assert!`] for assertions that are not enabled in /// release builds by default. @@ -45,7 +47,9 @@ macro_rules! panic { /// Other use-cases of `assert!` include [testing] and enforcing run-time /// invariants in safe code (whose violation cannot result in unsafety). /// -/// This macro has a second version, where a custom panic message can +/// # Custom Messages +/// +/// This macro has a second form, where a custom panic message can /// be provided with or without arguments for formatting. /// /// [`panic!`]: macro.panic.html @@ -85,14 +89,15 @@ macro_rules! assert { ); } -/// Asserts that two expressions are equal to each other. +/// Asserts that two expressions are equal to each other (using [`PartialEq`]). /// /// On panic, this macro will print the values of the expressions with their /// debug representations. /// -/// Like [`assert!`], this macro has a second version, where a custom +/// Like [`assert!`], this macro has a second form, where a custom /// panic message can be provided. /// +/// [`PartialEq`]: cmp/trait.PartialEq.html /// [`assert!`]: macro.assert.html /// /// # Examples @@ -111,8 +116,9 @@ macro_rules! assert_eq { match (&$left, &$right) { (left_val, right_val) => { if !(*left_val == *right_val) { - panic!("assertion failed: `(left == right)` \ - (left: `{:?}`, right: `{:?}`)", left_val, right_val) + panic!(r#"assertion failed: `(left == right)` + left: `{:?}` + right: `{:?}`"#, left_val, right_val) } } } @@ -121,8 +127,9 @@ macro_rules! assert_eq { match (&($left), &($right)) { (left_val, right_val) => { if !(*left_val == *right_val) { - panic!("assertion failed: `(left == right)` \ - (left: `{:?}`, right: `{:?}`): {}", left_val, right_val, + panic!(r#"assertion failed: `(left == right)` + left: `{:?}` + right: `{:?}`: {}"#, left_val, right_val, format_args!($($arg)+)) } } @@ -130,14 +137,15 @@ macro_rules! assert_eq { }); } -/// Asserts that two expressions are not equal to each other. +/// Asserts that two expressions are not equal to each other (using [`PartialEq`]). /// /// On panic, this macro will print the values of the expressions with their /// debug representations. /// -/// Like `assert!()`, this macro has a second version, where a custom +/// Like [`assert!`], this macro has a second form, where a custom /// panic message can be provided. /// +/// [`PartialEq`]: cmp/trait.PartialEq.html /// [`assert!`]: macro.assert.html /// /// # Examples @@ -150,14 +158,15 @@ macro_rules! assert_eq { /// assert_ne!(a, b, "we are testing that the values are not equal"); /// ``` #[macro_export] -#[stable(feature = "assert_ne", since = "1.12.0")] +#[stable(feature = "assert_ne", since = "1.13.0")] macro_rules! assert_ne { ($left:expr, $right:expr) => ({ match (&$left, &$right) { (left_val, right_val) => { if *left_val == *right_val { - panic!("assertion failed: `(left != right)` \ - (left: `{:?}`, right: `{:?}`)", left_val, right_val) + panic!(r#"assertion failed: `(left != right)` + left: `{:?}` + right: `{:?}`"#, left_val, right_val) } } } @@ -166,8 +175,9 @@ macro_rules! assert_ne { match (&($left), &($right)) { (left_val, right_val) => { if *left_val == *right_val { - panic!("assertion failed: `(left != right)` \ - (left: `{:?}`, right: `{:?}`): {}", left_val, right_val, + panic!(r#"assertion failed: `(left != right)` + left: `{:?}` + right: `{:?}`: {}"#, left_val, right_val, format_args!($($arg)+)) } } @@ -183,6 +193,8 @@ macro_rules! assert_ne { /// Like [`assert!`], this macro also has a second version, where a custom panic /// message can be provided. /// +/// # Uses +/// /// Unlike [`assert!`], `debug_assert!` statements are only enabled in non /// optimized builds by default. An optimized build will omit all /// `debug_assert!` statements unless `-C debug-assertions` is passed to the @@ -268,7 +280,7 @@ macro_rules! debug_assert_eq { /// debug_assert_ne!(a, b); /// ``` #[macro_export] -#[stable(feature = "assert_ne", since = "1.12.0")] +#[stable(feature = "assert_ne", since = "1.13.0")] macro_rules! debug_assert_ne { ($($arg:tt)*) => (if cfg!(debug_assertions) { assert_ne!($($arg)*); }) } @@ -337,27 +349,20 @@ macro_rules! try { /// Write formatted data into a buffer /// -/// This macro accepts a 'writer' (any value with a `write_fmt` method), a format string, and a -/// list of arguments to format. +/// This macro accepts a format string, a list of arguments, and a 'writer'. Arguments will be +/// formatted according to the specified format string and the result will be passed to the writer. +/// The writer may be any value with a `write_fmt` method; generally this comes from an +/// implementation of either the [`std::fmt::Write`] or the [`std::io::Write`] trait. The macro +/// returns whatever the 'write_fmt' method returns; commonly a [`std::fmt::Result`], or an +/// [`io::Result`]. /// -/// The `write_fmt` method usually comes from an implementation of [`std::fmt::Write`][fmt_write] -/// or [`std::io::Write`][io_write] traits. The term 'writer' refers to an implementation of one of -/// these two traits. +/// See [`std::fmt`] for more information on the format string syntax. /// -/// Passed arguments will be formatted according to the specified format string and the resulting -/// string will be passed to the writer. -/// -/// See [`std::fmt`][fmt] for more information on format syntax. -/// -/// `write!` returns whatever the 'write_fmt' method returns. -/// -/// Common return values include: [`fmt::Result`][fmt_result], [`io::Result`][io_result] -/// -/// [fmt]: ../std/fmt/index.html -/// [fmt_write]: ../std/fmt/trait.Write.html -/// [io_write]: ../std/io/trait.Write.html -/// [fmt_result]: ../std/fmt/type.Result.html -/// [io_result]: ../std/io/type.Result.html +/// [`std::fmt`]: ../std/fmt/index.html +/// [`std::fmt::Write`]: ../std/fmt/trait.Write.html +/// [`std::io::Write`]: ../std/io/trait.Write.html +/// [`std::fmt::Result`]: ../std/fmt/type.Result.html +/// [`io::Result`]: ../std/io/type.Result.html /// /// # Examples /// @@ -386,7 +391,7 @@ macro_rules! try { /// assert_eq!(v, b"s = \"abc 123\""); /// ``` #[macro_export] -#[stable(feature = "core", since = "1.6.0")] +#[stable(feature = "rust1", since = "1.0.0")] macro_rules! write { ($dst:expr, $($arg:tt)*) => ($dst.write_fmt(format_args!($($arg)*))) } @@ -396,27 +401,12 @@ macro_rules! write { /// On all platforms, the newline is the LINE FEED character (`\n`/`U+000A`) alone /// (no additional CARRIAGE RETURN (`\r`/`U+000D`). /// -/// This macro accepts a 'writer' (any value with a `write_fmt` method), a format string, and a -/// list of arguments to format. -/// -/// The `write_fmt` method usually comes from an implementation of [`std::fmt::Write`][fmt_write] -/// or [`std::io::Write`][io_write] traits. The term 'writer' refers to an implementation of one of -/// these two traits. -/// -/// Passed arguments will be formatted according to the specified format string and the resulting -/// string will be passed to the writer, along with the appended newline. -/// -/// See [`std::fmt`][fmt] for more information on format syntax. -/// -/// `write!` returns whatever the 'write_fmt' method returns. +/// For more information, see [`write!`]. For information on the format string syntax, see +/// [`std::fmt`]. /// -/// Common return values include: [`fmt::Result`][fmt_result], [`io::Result`][io_result] +/// [`write!`]: macro.write.html +/// [`std::fmt`]: ../std/fmt/index.html /// -/// [fmt]: ../std/fmt/index.html -/// [fmt_write]: ../std/fmt/trait.Write.html -/// [io_write]: ../std/io/trait.Write.html -/// [fmt_result]: ../std/fmt/type.Result.html -/// [io_result]: ../std/io/type.Result.html /// /// # Examples /// @@ -501,7 +491,7 @@ macro_rules! writeln { /// } /// ``` #[macro_export] -#[stable(feature = "core", since = "1.6.0")] +#[stable(feature = "rust1", since = "1.0.0")] macro_rules! unreachable { () => ({ panic!("internal error: entered unreachable code") @@ -562,7 +552,7 @@ macro_rules! unreachable { /// } /// ``` #[macro_export] -#[stable(feature = "core", since = "1.6.0")] +#[stable(feature = "rust1", since = "1.0.0")] macro_rules! unimplemented { () => (panic!("not yet implemented")) }