about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSimon Sapin <simon.sapin@exyr.org>2019-10-23 15:30:04 +0200
committerSimon Sapin <simon.sapin@exyr.org>2019-10-23 15:35:36 +0200
commit7472cd46aa6c004568d12a71ecd90c9c45b69fb0 (patch)
tree212e6e6c7e21d9c9fdd6c9163ffa8edf2585ede1
parentf69293ae808dea61a2dacee6057ca5bb0d7dc817 (diff)
downloadrust-7472cd46aa6c004568d12a71ecd90c9c45b69fb0.tar.gz
rust-7472cd46aa6c004568d12a71ecd90c9c45b69fb0.zip
Move the `matches!` macro to the prelude
-rw-r--r--Cargo.lock5
-rw-r--r--src/libcore/Cargo.toml3
-rw-r--r--src/libcore/lib.rs12
-rw-r--r--src/libcore/macros.rs24
-rw-r--r--src/libcore/prelude/v1.rs2
-rw-r--r--src/libmatches_macro/Cargo.toml10
-rw-r--r--src/libmatches_macro/lib.rs29
-rw-r--r--src/libstd/lib.rs12
-rw-r--r--src/test/ui/macros/unknown-builtin.stderr2
-rw-r--r--src/test/ui/matches_macro_imported.rs13
-rw-r--r--src/test/ui/matches_macro_not_in_the_prelude.rs7
-rw-r--r--src/test/ui/matches_macro_not_in_the_prelude.stderr8
12 files changed, 29 insertions, 98 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 343b101990a..3f37a1b7eb0 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -585,7 +585,6 @@ checksum = "8ff012e225ce166d4422e0e78419d901719760f62ae2b7969ca6b564d1b54a9e"
 name = "core"
 version = "0.0.0"
 dependencies = [
- "matches_macro",
  "rand 0.7.0",
 ]
 
@@ -1902,10 +1901,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
 
 [[package]]
-name = "matches_macro"
-version = "0.0.0"
-
-[[package]]
 name = "mdbook"
 version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/src/libcore/Cargo.toml b/src/libcore/Cargo.toml
index 65f7a42824b..ac07ffb14fe 100644
--- a/src/libcore/Cargo.toml
+++ b/src/libcore/Cargo.toml
@@ -20,9 +20,6 @@ path = "../libcore/tests/lib.rs"
 name = "corebenches"
 path = "../libcore/benches/lib.rs"
 
-[dependencies]
-matches_macro = { path = "../libmatches_macro" }
-
 [dev-dependencies]
 rand = "0.7"
 
diff --git a/src/libcore/lib.rs b/src/libcore/lib.rs
index a5af32250e6..30e8dddff85 100644
--- a/src/libcore/lib.rs
+++ b/src/libcore/lib.rs
@@ -85,7 +85,6 @@
 #![feature(iter_once_with)]
 #![feature(lang_items)]
 #![feature(link_llvm_intrinsics)]
-#![feature(matches_macro)]
 #![feature(never_type)]
 #![feature(nll)]
 #![feature(exhaustive_patterns)]
@@ -135,16 +134,7 @@
 use prelude::v1::*;
 
 #[macro_use]
-#[path = "macros.rs"]
-mod prelude_macros;
-
-/// Macros that are not in the prelude and need to be imported explicitly
-#[unstable(feature = "matches_macro", issue = "0")]
-pub mod macros {
-    #[unstable(feature = "matches_macro", issue = "0")]
-    #[doc(inline)]
-    pub use matches_macro::matches;
-}
+mod macros;
 
 #[macro_use]
 mod internal_macros;
diff --git a/src/libcore/macros.rs b/src/libcore/macros.rs
index 1320e63df06..f2775ffa7ca 100644
--- a/src/libcore/macros.rs
+++ b/src/libcore/macros.rs
@@ -238,6 +238,30 @@ macro_rules! debug_assert_ne {
     ($($arg:tt)*) => (if $crate::cfg!(debug_assertions) { $crate::assert_ne!($($arg)*); })
 }
 
+/// Returns whether the given expression matches (any of) the given pattern(s).
+///
+/// # Examples
+///
+/// ```
+/// #![feature(matches_macro)]
+///
+/// let foo = 'f';
+/// assert!(matches!(foo, 'A'..='Z' | 'a'..='z'));
+///
+/// let bar = Some(4);
+/// assert!(matches!(bar, Some(x) if x > 2));
+/// ```
+#[macro_export]
+#[unstable(feature = "matches_macro", issue = "0")]
+macro_rules! matches {
+    ($expression:expr, $( $pattern:pat )|+ $( if $guard: expr )?) => {
+        match $expression {
+            $( $pattern )|+ $( if $guard )? => true,
+            _ => false
+        }
+    }
+}
+
 /// Unwraps a result or propagates its error.
 ///
 /// The `?` operator was added to replace `try!` and should be used instead.
diff --git a/src/libcore/prelude/v1.rs b/src/libcore/prelude/v1.rs
index 285f8d6e077..7cc279a9ef2 100644
--- a/src/libcore/prelude/v1.rs
+++ b/src/libcore/prelude/v1.rs
@@ -82,7 +82,7 @@ pub use crate::{
 #[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
 #[allow(deprecated)]
 #[doc(no_inline)]
-pub use crate::prelude_macros::builtin::{
+pub use crate::macros::builtin::{
     RustcDecodable,
     RustcEncodable,
     bench,
diff --git a/src/libmatches_macro/Cargo.toml b/src/libmatches_macro/Cargo.toml
deleted file mode 100644
index 3ed0aa60350..00000000000
--- a/src/libmatches_macro/Cargo.toml
+++ /dev/null
@@ -1,10 +0,0 @@
-[package]
-authors = ["The Rust Project Developers"]
-name = "matches_macro"
-version = "0.0.0"
-autotests = false
-autobenches = false
-edition = "2018"
-
-[lib]
-path = "lib.rs"
diff --git a/src/libmatches_macro/lib.rs b/src/libmatches_macro/lib.rs
deleted file mode 100644
index 0e3552ed4ea..00000000000
--- a/src/libmatches_macro/lib.rs
+++ /dev/null
@@ -1,29 +0,0 @@
-#![no_core]
-#![feature(no_core)]
-#![feature(staged_api)]
-#![doc(test(no_crate_inject))]
-
-/// Returns whether the given expression matches (any of) the given pattern(s).
-///
-/// # Examples
-///
-/// ```
-/// #![feature(matches_macro)]
-/// use std::macros::matches;
-///
-/// let foo = 'f';
-/// assert!(matches!(foo, 'A'..='Z' | 'a'..='z'));
-///
-/// let bar = Some(4);
-/// assert!(matches!(bar, Some(x) if x > 2));
-/// ```
-#[macro_export]
-#[unstable(feature = "matches_macro", issue = "0")]
-macro_rules! matches {
-    ($expression:expr, $( $pattern:pat )|+ $( if $guard: expr )?) => {
-        match $expression {
-            $( $pattern )|+ $( if $guard )? => true,
-            _ => false
-        }
-    }
-}
diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs
index 4c079108e2e..d0cb0104f6c 100644
--- a/src/libstd/lib.rs
+++ b/src/libstd/lib.rs
@@ -354,16 +354,7 @@ extern crate cfg_if;
 
 // The standard macros that are not built-in to the compiler.
 #[macro_use]
-#[path = "macros.rs"]
-mod prelude_macros;
-
-/// Macros that are not in the prelude and need to be imported explicitly
-#[unstable(feature = "matches_macro", issue = "0")]
-pub mod macros {
-    #[unstable(feature = "matches_macro", issue = "0")]
-    #[doc(inline)]
-    pub use core::macros::matches;
-}
+mod macros;
 
 // The Rust prelude
 pub mod prelude;
@@ -537,6 +528,7 @@ pub use core::{
     writeln,
     // Unstable
     todo,
+    matches,
 };
 
 // Re-export built-in macros defined through libcore.
diff --git a/src/test/ui/macros/unknown-builtin.stderr b/src/test/ui/macros/unknown-builtin.stderr
index 27992b466ba..33b7b055b4e 100644
--- a/src/test/ui/macros/unknown-builtin.stderr
+++ b/src/test/ui/macros/unknown-builtin.stderr
@@ -5,7 +5,7 @@ LL | macro_rules! unknown { () => () }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 error: cannot find a built-in macro with name `line`
-  --> <::core::prelude_macros::builtin::line macros>:1:1
+  --> <::core::macros::builtin::line macros>:1:1
    |
 LL | () => { }
    | ^^^^^^^^^
diff --git a/src/test/ui/matches_macro_imported.rs b/src/test/ui/matches_macro_imported.rs
deleted file mode 100644
index 76b7e692cee..00000000000
--- a/src/test/ui/matches_macro_imported.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-// run-pass
-
-#![feature(matches_macro)]
-
-use std::macros::matches;
-
-fn main() {
-    let foo = 'f';
-    assert!(matches!(foo, 'A'..='Z' | 'a'..='z'));
-
-    let foo = '_';
-    assert!(!matches!(foo, 'A'..='Z' | 'a'..='z'));
-}
diff --git a/src/test/ui/matches_macro_not_in_the_prelude.rs b/src/test/ui/matches_macro_not_in_the_prelude.rs
deleted file mode 100644
index 489c7b86645..00000000000
--- a/src/test/ui/matches_macro_not_in_the_prelude.rs
+++ /dev/null
@@ -1,7 +0,0 @@
-#![feature(matches_macro)]
-
-fn main() {
-    let foo = 'f';
-    assert!(matches!(foo, 'A'..='Z' | 'a'..='z'));
-    //~^ Error: cannot find macro `matches` in this scope
-}
diff --git a/src/test/ui/matches_macro_not_in_the_prelude.stderr b/src/test/ui/matches_macro_not_in_the_prelude.stderr
deleted file mode 100644
index 0abe29a835b..00000000000
--- a/src/test/ui/matches_macro_not_in_the_prelude.stderr
+++ /dev/null
@@ -1,8 +0,0 @@
-error: cannot find macro `matches` in this scope
-  --> $DIR/matches_macro_not_in_the_prelude.rs:5:13
-   |
-LL |     assert!(matches!(foo, 'A'..='Z' | 'a'..='z'));
-   |             ^^^^^^^
-
-error: aborting due to previous error
-