about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2015-02-11 15:00:35 +0000
committerbors <bors@rust-lang.org>2015-02-11 15:00:35 +0000
commit446bc899b28e988f4252beca0d1858e7f7d866b1 (patch)
tree8f5c4e248e34374d8b863a6e97e13ca9d9e50b64
parent1500df8934431dd7842827209528211ae53ded12 (diff)
parentcdd8a5ad743338d246e3db31ab0b5b0d448a2146 (diff)
Auto merge of #22175 - pnkfelix:featuregate-boxpat-rfc469, r=nikomatsakis
Feature gate `box` patterns.

Note that this adds a new feature gate, `box_patterns` specific to e.g. `let box i = ...`, while leaving  `box` expressions (alone) still guarded via the preexisting `box_syntax`.
-rw-r--r--src/doc/reference.md3
-rw-r--r--src/libcollections/lib.rs1
-rw-r--r--src/librustc/lib.rs1
-rw-r--r--src/librustc_trans/lib.rs1
-rw-r--r--src/librustc_typeck/lib.rs1
-rw-r--r--src/librustdoc/lib.rs1
-rw-r--r--src/libsyntax/feature_gate.rs9
-rw-r--r--src/libsyntax/lib.rs1
-rw-r--r--src/test/compile-fail/borrowck-loan-in-overloaded-op.rs1
-rw-r--r--src/test/compile-fail/borrowck-vec-pattern-nesting.rs1
-rw-r--r--src/test/compile-fail/destructure-trait-ref.rs1
-rw-r--r--src/test/compile-fail/feature-gate-box-expr.rs6
-rw-r--r--src/test/compile-fail/feature-gate-box-pat.rs2
-rw-r--r--src/test/compile-fail/issue-12116.rs1
-rw-r--r--src/test/compile-fail/issue-3601.rs1
-rw-r--r--src/test/compile-fail/issue-4972.rs1
-rw-r--r--src/test/compile-fail/issue-5100.rs1
-rw-r--r--src/test/compile-fail/moves-based-on-type-block-bad.rs1
-rw-r--r--src/test/compile-fail/regions-ref-in-fn-arg.rs1
-rw-r--r--src/test/compile-fail/unreachable-arm.rs1
-rw-r--r--src/test/debuginfo/destructured-fn-argument.rs1
-rw-r--r--src/test/debuginfo/destructured-for-loop-variable.rs1
-rw-r--r--src/test/debuginfo/destructured-local.rs1
-rw-r--r--src/test/run-pass/borrowck-macro-interaction-issue-6304.rs1
-rw-r--r--src/test/run-pass/cleanup-rvalue-scopes.rs1
-rw-r--r--src/test/run-pass/func-arg-ref-pattern.rs1
-rw-r--r--src/test/run-pass/issue-11552.rs1
-rw-r--r--src/test/run-pass/issue-16774.rs1
-rw-r--r--src/test/run-pass/issue-21033.rs1
-rw-r--r--src/test/run-pass/issue-6557.rs1
-rw-r--r--src/test/run-pass/match-unique-bind.rs1
-rw-r--r--src/test/run-pass/regions-dependent-addr-of.rs1
-rw-r--r--src/test/run-pass/unique-destructure.rs1
-rw-r--r--src/test/run-pass/unique-pat-2.rs1
-rw-r--r--src/test/run-pass/unique-pat.rs1
35 files changed, 44 insertions, 7 deletions
diff --git a/src/doc/reference.md b/src/doc/reference.md
index d50c0d6582b..9c51f6bad6f 100644
--- a/src/doc/reference.md
+++ b/src/doc/reference.md
@@ -3196,6 +3196,7 @@ stands for a *single* data field, whereas a wildcard `..` stands for *all* the
 fields of a particular variant. For example:
 
 ```
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 enum List<X> { Nil, Cons(X, Box<List<X>>) }
 
@@ -3259,6 +3260,7 @@ the inside of the match.
 An example of a `match` expression:
 
 ```
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 # fn process_pair(a: i32, b: i32) { }
 # fn process_ten() { }
@@ -3294,6 +3296,7 @@ Subpatterns can also be bound to variables by the use of the syntax `variable @
 subpattern`. For example:
 
 ```
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 enum List { Nil, Cons(uint, Box<List>) }
diff --git a/src/libcollections/lib.rs b/src/libcollections/lib.rs
index a542ee5d47d..0dd48fcfab6 100644
--- a/src/libcollections/lib.rs
+++ b/src/libcollections/lib.rs
@@ -24,6 +24,7 @@
 
 #![feature(alloc)]
 #![feature(box_syntax)]
+#![feature(box_patterns)]
 #![feature(core)]
 #![feature(hash)]
 #![feature(staged_api)]
diff --git a/src/librustc/lib.rs b/src/librustc/lib.rs
index 00324820433..a4c4ea54386 100644
--- a/src/librustc/lib.rs
+++ b/src/librustc/lib.rs
@@ -23,6 +23,7 @@
       html_favicon_url = "http://www.rust-lang.org/favicon.ico",
       html_root_url = "http://doc.rust-lang.org/nightly/")]
 
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 #![feature(collections)]
 #![feature(core)]
diff --git a/src/librustc_trans/lib.rs b/src/librustc_trans/lib.rs
index 94a1d4dd5b2..c4d1416d975 100644
--- a/src/librustc_trans/lib.rs
+++ b/src/librustc_trans/lib.rs
@@ -24,6 +24,7 @@
       html_root_url = "http://doc.rust-lang.org/nightly/")]
 
 #![feature(alloc)]
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 #![feature(collections)]
 #![feature(core)]
diff --git a/src/librustc_typeck/lib.rs b/src/librustc_typeck/lib.rs
index ccf392365ce..d490ea5408d 100644
--- a/src/librustc_typeck/lib.rs
+++ b/src/librustc_typeck/lib.rs
@@ -74,6 +74,7 @@ This API is completely unstable and subject to change.
 
 #![allow(non_camel_case_types)]
 
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 #![feature(collections)]
 #![feature(core)]
diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs
index 40e9703c03f..0253aaa31ca 100644
--- a/src/librustdoc/lib.rs
+++ b/src/librustdoc/lib.rs
@@ -18,6 +18,7 @@
        html_root_url = "http://doc.rust-lang.org/nightly/",
        html_playground_url = "http://play.rust-lang.org/")]
 
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 #![feature(collections)]
 #![feature(core)]
diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs
index 72bbe1adfaa..1a328f87c19 100644
--- a/src/libsyntax/feature_gate.rs
+++ b/src/libsyntax/feature_gate.rs
@@ -126,6 +126,9 @@ static KNOWN_FEATURES: &'static [(&'static str, &'static str, Status)] = &[
 
     // Allows using #![no_std]
     ("no_std", "1.0.0", Active),
+
+    // Allows using `box` in patterns; RFC 469
+    ("box_patterns", "1.0.0", Active),
 ];
 
 enum Status {
@@ -427,7 +430,7 @@ impl<'a, 'v> Visitor<'v> for PostExpansionVisitor<'a> {
             ast::ExprBox(..) | ast::ExprUnary(ast::UnOp::UnUniq, _) => {
                 self.gate_feature("box_syntax",
                                   e.span,
-                                  "box expression syntax is experimental in alpha release; \
+                                  "box expression syntax is experimental; \
                                    you can call `Box::new` instead.");
             }
             ast::ExprLit(ref lit) => {
@@ -486,9 +489,9 @@ impl<'a, 'v> Visitor<'v> for PostExpansionVisitor<'a> {
                                    `[0, ..xs, 0]` are experimental")
             }
             ast::PatBox(..) => {
-                self.gate_feature("box_syntax",
+                self.gate_feature("box_patterns",
                                   pattern.span,
-                                  "box pattern syntax is experimental in alpha release");
+                                  "box pattern syntax is experimental");
             }
             _ => {}
         }
diff --git a/src/libsyntax/lib.rs b/src/libsyntax/lib.rs
index 41850ada3e6..951e4dcf792 100644
--- a/src/libsyntax/lib.rs
+++ b/src/libsyntax/lib.rs
@@ -23,6 +23,7 @@
        html_favicon_url = "http://www.rust-lang.org/favicon.ico",
        html_root_url = "http://doc.rust-lang.org/nightly/")]
 
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 #![feature(collections)]
 #![feature(core)]
diff --git a/src/test/compile-fail/borrowck-loan-in-overloaded-op.rs b/src/test/compile-fail/borrowck-loan-in-overloaded-op.rs
index 902762f687e..8fb527b3242 100644
--- a/src/test/compile-fail/borrowck-loan-in-overloaded-op.rs
+++ b/src/test/compile-fail/borrowck-loan-in-overloaded-op.rs
@@ -8,6 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 use std::ops::Add;
diff --git a/src/test/compile-fail/borrowck-vec-pattern-nesting.rs b/src/test/compile-fail/borrowck-vec-pattern-nesting.rs
index b5745070817..b471439f751 100644
--- a/src/test/compile-fail/borrowck-vec-pattern-nesting.rs
+++ b/src/test/compile-fail/borrowck-vec-pattern-nesting.rs
@@ -9,6 +9,7 @@
 // except according to those terms.
 
 #![feature(advanced_slice_patterns)]
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 fn a() {
diff --git a/src/test/compile-fail/destructure-trait-ref.rs b/src/test/compile-fail/destructure-trait-ref.rs
index 21098f9283e..f2e068cc4ff 100644
--- a/src/test/compile-fail/destructure-trait-ref.rs
+++ b/src/test/compile-fail/destructure-trait-ref.rs
@@ -11,6 +11,7 @@
 // The regression test for #15031 to make sure destructuring trait
 // reference work properly.
 
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 trait T {}
diff --git a/src/test/compile-fail/feature-gate-box-expr.rs b/src/test/compile-fail/feature-gate-box-expr.rs
index bc7a70471cd..39f54be4561 100644
--- a/src/test/compile-fail/feature-gate-box-expr.rs
+++ b/src/test/compile-fail/feature-gate-box-expr.rs
@@ -11,13 +11,13 @@
 fn main() {
     use std::boxed::HEAP;
 
-    let x = box 'c'; //~ ERROR box expression syntax is experimental in alpha release
+    let x = box 'c'; //~ ERROR box expression syntax is experimental
     println!("x: {}", x);
 
-    let x = box () 'c'; //~ ERROR box expression syntax is experimental in alpha release
+    let x = box () 'c'; //~ ERROR box expression syntax is experimental
     println!("x: {}", x);
 
-    let x = box (HEAP) 'c'; //~ ERROR box expression syntax is experimental in alpha release
+    let x = box (HEAP) 'c'; //~ ERROR box expression syntax is experimental
     println!("x: {}", x);
 }
 
diff --git a/src/test/compile-fail/feature-gate-box-pat.rs b/src/test/compile-fail/feature-gate-box-pat.rs
index b36bc22b9dc..e64081823e7 100644
--- a/src/test/compile-fail/feature-gate-box-pat.rs
+++ b/src/test/compile-fail/feature-gate-box-pat.rs
@@ -9,6 +9,6 @@
 // except according to those terms.
 
 fn main() {
-    let box x = Box::new('c'); //~ ERROR box pattern syntax is experimental in alpha release
+    let box x = Box::new('c'); //~ ERROR box pattern syntax is experimental
     println!("x: {}", x);
 }
diff --git a/src/test/compile-fail/issue-12116.rs b/src/test/compile-fail/issue-12116.rs
index 6f75909fada..1978068575b 100644
--- a/src/test/compile-fail/issue-12116.rs
+++ b/src/test/compile-fail/issue-12116.rs
@@ -8,6 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 enum IntList {
diff --git a/src/test/compile-fail/issue-3601.rs b/src/test/compile-fail/issue-3601.rs
index 15b3ec0bfe7..b25e683db09 100644
--- a/src/test/compile-fail/issue-3601.rs
+++ b/src/test/compile-fail/issue-3601.rs
@@ -8,6 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 struct HTMLImageData {
diff --git a/src/test/compile-fail/issue-4972.rs b/src/test/compile-fail/issue-4972.rs
index b2b9dfce092..9a398796d2a 100644
--- a/src/test/compile-fail/issue-4972.rs
+++ b/src/test/compile-fail/issue-4972.rs
@@ -8,6 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 trait MyTrait { }
diff --git a/src/test/compile-fail/issue-5100.rs b/src/test/compile-fail/issue-5100.rs
index 474274c93fd..35096110e8f 100644
--- a/src/test/compile-fail/issue-5100.rs
+++ b/src/test/compile-fail/issue-5100.rs
@@ -8,6 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 enum A { B, C }
diff --git a/src/test/compile-fail/moves-based-on-type-block-bad.rs b/src/test/compile-fail/moves-based-on-type-block-bad.rs
index 179c71d3659..a1e876594c2 100644
--- a/src/test/compile-fail/moves-based-on-type-block-bad.rs
+++ b/src/test/compile-fail/moves-based-on-type-block-bad.rs
@@ -10,6 +10,7 @@
 
 // ignore-tidy-linelength
 
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 struct S {
diff --git a/src/test/compile-fail/regions-ref-in-fn-arg.rs b/src/test/compile-fail/regions-ref-in-fn-arg.rs
index 13a903bf2b5..bc8060e3915 100644
--- a/src/test/compile-fail/regions-ref-in-fn-arg.rs
+++ b/src/test/compile-fail/regions-ref-in-fn-arg.rs
@@ -8,6 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 fn arg_item(box ref x: Box<isize>) -> &'static isize {
diff --git a/src/test/compile-fail/unreachable-arm.rs b/src/test/compile-fail/unreachable-arm.rs
index f403457efbc..6434b0bde8d 100644
--- a/src/test/compile-fail/unreachable-arm.rs
+++ b/src/test/compile-fail/unreachable-arm.rs
@@ -10,6 +10,7 @@
 
 // error-pattern:unreachable pattern
 
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 enum foo { a(Box<foo>, isize), b(usize), }
diff --git a/src/test/debuginfo/destructured-fn-argument.rs b/src/test/debuginfo/destructured-fn-argument.rs
index 73289c56bef..77b29389338 100644
--- a/src/test/debuginfo/destructured-fn-argument.rs
+++ b/src/test/debuginfo/destructured-fn-argument.rs
@@ -311,6 +311,7 @@
 // lldb-command:continue
 
 #![allow(unused_variables)]
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 #![omit_gdb_pretty_printer_section]
 
diff --git a/src/test/debuginfo/destructured-for-loop-variable.rs b/src/test/debuginfo/destructured-for-loop-variable.rs
index 0d526d60190..37e465e43c3 100644
--- a/src/test/debuginfo/destructured-for-loop-variable.rs
+++ b/src/test/debuginfo/destructured-for-loop-variable.rs
@@ -153,6 +153,7 @@
 // lldb-command:continue
 
 #![allow(unused_variables)]
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 #![omit_gdb_pretty_printer_section]
 
diff --git a/src/test/debuginfo/destructured-local.rs b/src/test/debuginfo/destructured-local.rs
index 22cc779aeca..eaa2382501b 100644
--- a/src/test/debuginfo/destructured-local.rs
+++ b/src/test/debuginfo/destructured-local.rs
@@ -244,6 +244,7 @@
 
 
 #![allow(unused_variables)]
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 #![omit_gdb_pretty_printer_section]
 
diff --git a/src/test/run-pass/borrowck-macro-interaction-issue-6304.rs b/src/test/run-pass/borrowck-macro-interaction-issue-6304.rs
index 49483e40096..ae5734a09b3 100644
--- a/src/test/run-pass/borrowck-macro-interaction-issue-6304.rs
+++ b/src/test/run-pass/borrowck-macro-interaction-issue-6304.rs
@@ -11,6 +11,7 @@
 // Check that we do not ICE when compiling this
 // macro, which reuses the expression `$id`
 
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 struct Foo {
diff --git a/src/test/run-pass/cleanup-rvalue-scopes.rs b/src/test/run-pass/cleanup-rvalue-scopes.rs
index b39a4d7f685..b5bf35a7006 100644
--- a/src/test/run-pass/cleanup-rvalue-scopes.rs
+++ b/src/test/run-pass/cleanup-rvalue-scopes.rs
@@ -12,6 +12,7 @@
 // statement or end of block, as appropriate given the temporary
 // lifetime rules.
 
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 use std::ops::Drop;
diff --git a/src/test/run-pass/func-arg-ref-pattern.rs b/src/test/run-pass/func-arg-ref-pattern.rs
index 9e94bca96f7..5d44a9461be 100644
--- a/src/test/run-pass/func-arg-ref-pattern.rs
+++ b/src/test/run-pass/func-arg-ref-pattern.rs
@@ -15,6 +15,7 @@
 // pattern.
 
 #![allow(unknown_features)]
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 fn getaddr(box ref x: Box<uint>) -> *const uint {
diff --git a/src/test/run-pass/issue-11552.rs b/src/test/run-pass/issue-11552.rs
index f47f1e06011..b99a5b7ab37 100644
--- a/src/test/run-pass/issue-11552.rs
+++ b/src/test/run-pass/issue-11552.rs
@@ -9,6 +9,7 @@
 // except according to those terms.
 
 #![allow(unknown_features)]
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 #[derive(Clone)]
diff --git a/src/test/run-pass/issue-16774.rs b/src/test/run-pass/issue-16774.rs
index cc427dd941b..26661302242 100644
--- a/src/test/run-pass/issue-16774.rs
+++ b/src/test/run-pass/issue-16774.rs
@@ -10,6 +10,7 @@
 
 #![allow(unknown_features)]
 #![feature(box_syntax)]
+#![feature(box_patterns)]
 #![feature(unboxed_closures)]
 
 use std::ops::{Deref, DerefMut};
diff --git a/src/test/run-pass/issue-21033.rs b/src/test/run-pass/issue-21033.rs
index 5dcf1d904d0..30c166cc67b 100644
--- a/src/test/run-pass/issue-21033.rs
+++ b/src/test/run-pass/issue-21033.rs
@@ -7,6 +7,7 @@
 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 enum E {
diff --git a/src/test/run-pass/issue-6557.rs b/src/test/run-pass/issue-6557.rs
index 3163f139328..b9f4f1cf3bd 100644
--- a/src/test/run-pass/issue-6557.rs
+++ b/src/test/run-pass/issue-6557.rs
@@ -9,6 +9,7 @@
 // except according to those terms.
 
 #![allow(unknown_features)]
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 fn foo(box (_x, _y): Box<(int, int)>) {}
diff --git a/src/test/run-pass/match-unique-bind.rs b/src/test/run-pass/match-unique-bind.rs
index 63817d42ae8..78b02d709e2 100644
--- a/src/test/run-pass/match-unique-bind.rs
+++ b/src/test/run-pass/match-unique-bind.rs
@@ -9,6 +9,7 @@
 // except according to those terms.
 
 #![allow(unknown_features)]
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 pub fn main() {
diff --git a/src/test/run-pass/regions-dependent-addr-of.rs b/src/test/run-pass/regions-dependent-addr-of.rs
index 85402080f11..b51be0f0f79 100644
--- a/src/test/run-pass/regions-dependent-addr-of.rs
+++ b/src/test/run-pass/regions-dependent-addr-of.rs
@@ -12,6 +12,7 @@
 // Issue #3148.
 
 #![allow(unknown_features)]
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 struct A {
diff --git a/src/test/run-pass/unique-destructure.rs b/src/test/run-pass/unique-destructure.rs
index 3213146cbf4..9e71e850b3d 100644
--- a/src/test/run-pass/unique-destructure.rs
+++ b/src/test/run-pass/unique-destructure.rs
@@ -9,6 +9,7 @@
 // except according to those terms.
 
 #![allow(unknown_features)]
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 struct Foo { a: int, b: int }
diff --git a/src/test/run-pass/unique-pat-2.rs b/src/test/run-pass/unique-pat-2.rs
index eab775fc1db..826ba8c8cdd 100644
--- a/src/test/run-pass/unique-pat-2.rs
+++ b/src/test/run-pass/unique-pat-2.rs
@@ -9,6 +9,7 @@
 // except according to those terms.
 
 #![allow(unknown_features)]
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 struct Foo {a: int, b: uint}
diff --git a/src/test/run-pass/unique-pat.rs b/src/test/run-pass/unique-pat.rs
index ee975b9c81a..bff2d4e917f 100644
--- a/src/test/run-pass/unique-pat.rs
+++ b/src/test/run-pass/unique-pat.rs
@@ -9,6 +9,7 @@
 // except according to those terms.
 
 #![allow(unknown_features)]
+#![feature(box_patterns)]
 #![feature(box_syntax)]
 
 fn simple() {