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 { Nil, Cons(X, Box>) } @@ -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) } 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) -> &'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, 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) -> *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 @@ // , 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() {