Skip to content

Commit

Permalink
rollup merge of rust-lang#23794: brson/slicegate
Browse files Browse the repository at this point in the history
Conflicts:
	src/test/run-pass/issue-13027.rs
  • Loading branch information
alexcrichton committed Mar 27, 2015
2 parents d65fee2 + 1639e51 commit 990202c
Show file tree
Hide file tree
Showing 51 changed files with 93 additions and 3 deletions.
10 changes: 7 additions & 3 deletions src/doc/reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -2337,9 +2337,13 @@ considered off, and using the features will result in a compiler error.

The currently implemented features of the reference compiler are:

* `advanced_slice_patterns` - see the [match expressions](#match-expressions)
* `advanced_slice_patterns` - See the [match expressions](#match-expressions)
section for discussion; the exact semantics of
slice patterns are subject to change.
slice patterns are subject to change, so some types
are still unstable.

* `slice_patterns` - OK, actually, slice patterns are just scary and
completely unstable.

* `asm` - The `asm!` macro provides a means for inline assembly. This is often
useful, but the exact syntax for this feature along with its
Expand Down Expand Up @@ -3255,7 +3259,7 @@ array, like `[.., 42, ..]`. If preceded by a variable name, it will bind the
corresponding slice to the variable. Example:

```
# #![feature(advanced_slice_patterns)]
# #![feature(advanced_slice_patterns, slice_patterns)]
fn is_symmetric(list: &[u32]) -> bool {
match list {
[] | [_] => true,
Expand Down
1 change: 1 addition & 0 deletions src/doc/trpl/patterns.md
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,7 @@ match origin {
If you want to match against a slice or array, you can use `&`:

```{rust}
# #![feature(slice_patterns)]
fn main() {
let v = vec!["match_this", "1"];
Expand Down
1 change: 1 addition & 0 deletions src/libcollections/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
#![feature(step_by)]
#![feature(str_char)]
#![feature(convert)]
#![feature(slice_patterns)]
#![cfg_attr(test, feature(rand, rustc_private, test, hash, collections))]
#![cfg_attr(test, allow(deprecated))] // rand

Expand Down
1 change: 1 addition & 0 deletions src/libcoretest/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#![feature(debug_builders)]
#![feature(unique)]
#![feature(step_by)]
#![feature(slice_patterns)]
#![allow(deprecated)] // rand

extern crate core;
Expand Down
1 change: 1 addition & 0 deletions src/librustc/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
#![feature(str_char)]
#![feature(convert)]
#![feature(into_cow)]
#![feature(slice_patterns)]
#![cfg_attr(test, feature(test))]

#![allow(trivial_casts)]
Expand Down
1 change: 1 addition & 0 deletions src/librustdoc/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#![feature(path_ext)]
#![feature(path_relative_from)]
#![feature(convert)]
#![feature(slice_patterns)]

extern crate arena;
extern crate getopts;
Expand Down
1 change: 1 addition & 0 deletions src/libstd/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@
#![feature(allow_internal_unstable)]
#![feature(str_char)]
#![feature(into_cow)]
#![feature(slice_patterns)]
#![cfg_attr(test, feature(test, rustc_private, std_misc))]

// Don't link to std. We are std.
Expand Down
8 changes: 8 additions & 0 deletions src/libsyntax/feature_gate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,9 @@ const KNOWN_FEATURES: &'static [(&'static str, &'static str, Status)] = &[
// below (it has to be checked before expansion possibly makes
// macros disappear).
("allow_internal_unstable", "1.0.0", Active),

// #23121. Array patterns have some hazards yet.
("slice_patterns", "1.0.0", Active),
];
// (changing above list without updating src/doc/reference.md makes @cmr sad)

Expand Down Expand Up @@ -628,6 +631,11 @@ impl<'a, 'v> Visitor<'v> for PostExpansionVisitor<'a> {
but at the end of a slice (e.g. \
`[0, ..xs, 0]` are experimental")
}
ast::PatVec(..) => {
self.gate_feature("slice_patterns",
pattern.span,
"slice pattern syntax is experimental");
}
ast::PatBox(..) => {
self.gate_feature("box_patterns",
pattern.span,
Expand Down
1 change: 1 addition & 0 deletions src/libsyntax/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
#![feature(str_char)]
#![feature(convert)]
#![feature(into_cow)]
#![feature(slice_patterns)]

extern crate arena;
extern crate fmt_macros;
Expand Down
1 change: 1 addition & 0 deletions src/test/auxiliary/roman_numerals.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

#![crate_type="dylib"]
#![feature(plugin_registrar, rustc_private)]
#![feature(slice_patterns)]

extern crate syntax;
extern crate rustc;
Expand Down
2 changes: 2 additions & 0 deletions src/test/compile-fail/borrowck-match-binding-is-assignment.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

// Test that immutable pattern bindings cannot be reassigned.

#![feature(slice_patterns)]

enum E {
Foo(isize)
}
Expand Down
2 changes: 2 additions & 0 deletions src/test/compile-fail/borrowck-move-out-of-vec-tail.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

// Test that we do not permit moves from &[] matched by a vec pattern.

#![feature(slice_patterns)]

#[derive(Clone, Debug)]
struct Foo {
string: String
Expand Down
1 change: 1 addition & 0 deletions src/test/compile-fail/borrowck-vec-pattern-element-loan.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
// except according to those terms.

#![feature(advanced_slice_patterns)]
#![feature(slice_patterns)]

fn a<'a>() -> &'a [isize] {
let vec = vec!(1, 2, 3, 4);
Expand Down
2 changes: 2 additions & 0 deletions src/test/compile-fail/borrowck-vec-pattern-loan-from-mut.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![feature(slice_patterns)]

fn a() {
let mut v = vec!(1, 2, 3);
let vb: &mut [isize] = &mut v;
Expand Down
2 changes: 2 additions & 0 deletions src/test/compile-fail/borrowck-vec-pattern-move-tail.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![feature(slice_patterns)]

fn main() {
let mut a = [1, 2, 3, 4];
let t = match a {
Expand Down
1 change: 1 addition & 0 deletions src/test/compile-fail/borrowck-vec-pattern-nesting.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#![feature(advanced_slice_patterns)]
#![feature(box_patterns)]
#![feature(box_syntax)]
#![feature(slice_patterns)]

fn a() {
let mut vec = [box 1, box 2, box 3];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![feature(slice_patterns)]

fn a<'a>() -> &'a isize {
let vec = vec!(1, 2, 3, 4);
let vec: &[isize] = &vec; //~ ERROR `vec` does not live long enough
Expand Down
2 changes: 2 additions & 0 deletions src/test/compile-fail/feature-gate-advanced-slice-features.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![feature(slice_patterns)]

fn main() {
let x = [ 1, 2, 3, 4, 5 ];
match x {
Expand Down
2 changes: 2 additions & 0 deletions src/test/compile-fail/issue-12369.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![feature(slice_patterns)]

fn main() {
let sl = vec![1,2,3];
let v: isize = match &*sl {
Expand Down
2 changes: 2 additions & 0 deletions src/test/compile-fail/issue-12567.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![feature(slice_patterns)]

fn match_vecs<'a, T>(l1: &'a [T], l2: &'a [T]) {
match (l1, l2) {
([], []) => println!("both empty"),
Expand Down
2 changes: 2 additions & 0 deletions src/test/compile-fail/issue-13482-2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

// compile-flags:-Z verbose

#![feature(slice_patterns)]

fn main() {
let x = [1,2];
let y = match x {
Expand Down
2 changes: 2 additions & 0 deletions src/test/compile-fail/issue-13482.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![feature(slice_patterns)]

fn main() {
let x = [1,2];
let y = match x {
Expand Down
2 changes: 2 additions & 0 deletions src/test/compile-fail/issue-15381.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![feature(slice_patterns)]

fn main() {
let values: Vec<u8> = vec![1,2,3,4,5,6,7,8];

Expand Down
1 change: 1 addition & 0 deletions src/test/compile-fail/issue-6804.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
// except according to those terms.

#![feature(rustc_attrs)]
#![feature(slice_patterns)]
#![allow(dead_code)]

// Matching against NaN should result in a warning
Expand Down
2 changes: 2 additions & 0 deletions src/test/compile-fail/match-ref-ice.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![feature(slice_patterns)]

// The arity of `ref x` is always 1. If the pattern is compared to some non-structural type whose
// arity is always 0, an ICE occurs.
//
Expand Down
2 changes: 2 additions & 0 deletions src/test/compile-fail/match-vec-fixed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![feature(slice_patterns)]

fn a() {
let v = [1, 2, 3];
match v {
Expand Down
2 changes: 2 additions & 0 deletions src/test/compile-fail/match-vec-mismatch-2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![feature(slice_patterns)]

fn main() {
match () {
[()] => { }
Expand Down
2 changes: 2 additions & 0 deletions src/test/compile-fail/match-vec-mismatch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![feature(slice_patterns)]

fn main() {
match "foo".to_string() {
['f', 'o', ..] => {} //~ ERROR mismatched types
Expand Down
1 change: 1 addition & 0 deletions src/test/compile-fail/match-vec-unreachable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![feature(slice_patterns)]

fn main() {
let x: Vec<(isize, isize)> = Vec::new();
Expand Down
2 changes: 2 additions & 0 deletions src/test/compile-fail/non-exhaustive-match-nested.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![feature(slice_patterns)]

enum t { a(u), b }
enum u { c, d }

Expand Down
2 changes: 2 additions & 0 deletions src/test/compile-fail/non-exhaustive-match.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![feature(slice_patterns)]

enum t { a, b, }

fn main() {
Expand Down
1 change: 1 addition & 0 deletions src/test/compile-fail/non-exhaustive-pattern-witness.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
// except according to those terms.

#![feature(advanced_slice_patterns)]
#![feature(slice_patterns)]

struct Foo {
first: bool,
Expand Down
2 changes: 2 additions & 0 deletions src/test/compile-fail/regions-pattern-typing-issue-19552.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![feature(slice_patterns)]

fn assert_static<T: 'static>(_t: T) {}

fn main() {
Expand Down
2 changes: 2 additions & 0 deletions src/test/run-make/graphviz-flowgraph/f07.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#![feature(slice_patterns)]

pub fn pat_vec_7() {
match [7, 77, 777, 7777] {
[x, y, ..] => x + y
Expand Down
2 changes: 2 additions & 0 deletions src/test/run-pass/destructure-array-1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@

// pretty-expanded FIXME #23616

#![feature(slice_patterns)]

struct D { x: u8 }

impl Drop for D { fn drop(&mut self) { } }
Expand Down
1 change: 1 addition & 0 deletions src/test/run-pass/ignore-all-the-things.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
// pretty-expanded FIXME #23616

#![feature(advanced_slice_patterns)]
#![feature(slice_patterns)]

struct Foo(isize, isize, isize, isize);
struct Bar{a: isize, b: isize, c: isize, d: isize}
Expand Down
2 changes: 2 additions & 0 deletions src/test/run-pass/issue-13027.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
// Tests that match expression handles overlapped literal and range
// properly in the presence of guard function.

#![feature(slice_patterns)]

fn val() -> usize { 1 }

static CONST: usize = 1;
Expand Down
2 changes: 2 additions & 0 deletions src/test/run-pass/issue-15080.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

// pretty-expanded FIXME #23616

#![feature(slice_patterns)]

fn main() {
let mut x: &[_] = &[1, 2, 3, 4];

Expand Down
2 changes: 2 additions & 0 deletions src/test/run-pass/issue-15104.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

// pretty-expanded FIXME #23616

#![feature(slice_patterns)]

fn main() {
assert_eq!(count_members(&[1, 2, 3, 4]), 4);
}
Expand Down
2 changes: 2 additions & 0 deletions src/test/run-pass/issue-16648.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

// pretty-expanded FIXME #23616

#![feature(slice_patterns)]

fn main() {
let x: (isize, &[isize]) = (2, &[1, 2]);
assert_eq!(match x {
Expand Down
2 changes: 2 additions & 0 deletions src/test/run-pass/issue-17877.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

// pretty-expanded FIXME #23616

#![feature(slice_patterns)]

fn main() {
assert_eq!(match [0u8; 1024] {
_ => 42_usize,
Expand Down
1 change: 1 addition & 0 deletions src/test/run-pass/issue-7784.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
// pretty-expanded FIXME #23616

#![feature(advanced_slice_patterns)]
#![feature(slice_patterns)]

use std::ops::Add;

Expand Down
1 change: 1 addition & 0 deletions src/test/run-pass/match-vec-alternatives.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
// pretty-expanded FIXME #23616

#![feature(advanced_slice_patterns)]
#![feature(slice_patterns)]

fn match_vecs<'a, T>(l1: &'a [T], l2: &'a [T]) -> &'static str {
match (l1, l2) {
Expand Down
Loading

0 comments on commit 990202c

Please sign in to comment.