Skip to content

Commit

Permalink
stabilize top level or-pats in if/while let.
Browse files Browse the repository at this point in the history
  • Loading branch information
Centril committed Jan 11, 2019
1 parent b439861 commit 561483e
Show file tree
Hide file tree
Showing 6 changed files with 18 additions and 44 deletions.
2 changes: 1 addition & 1 deletion src/librustc_mir/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Rust MIR: a lowered representation of Rust. Also: an experiment!
#![feature(unicode_internals)]
#![feature(step_trait)]
#![feature(slice_concat_ext)]
#![feature(if_while_or_patterns)]
#![cfg_attr(stage0, feature(if_while_or_patterns))]
#![feature(try_from)]
#![feature(reverse_bits)]
#![cfg_attr(stage0, feature(underscore_imports))]
Expand Down
11 changes: 2 additions & 9 deletions src/libsyntax/feature_gate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -384,9 +384,6 @@ declare_features! (
// Infer static outlives requirements (RFC 2093).
(active, infer_static_outlives_requirements, "1.26.0", Some(54185), None),

// Multiple patterns with `|` in `if let` and `while let`.
(active, if_while_or_patterns, "1.26.0", Some(48215), None),

// Allows macro invocations in `extern {}` blocks.
(active, macros_in_extern, "1.27.0", Some(49476), None),

Expand Down Expand Up @@ -688,6 +685,8 @@ declare_features! (
(accepted, min_const_unsafe_fn, "1.33.0", Some(55607), None),
// `#[cfg_attr(predicate, multiple, attributes, here)]`
(accepted, cfg_attr_multi, "1.33.0", Some(54881), None),
// Top level or-patterns (`p | q`) in `if let` and `while let`.
(accepted, if_while_or_patterns, "1.33.0", Some(48215), None),
);

// If you change this, please modify `src/doc/unstable-book` as well. You must
Expand Down Expand Up @@ -1701,12 +1700,6 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
ast::ExprKind::TryBlock(_) => {
gate_feature_post!(&self, try_blocks, e.span, "`try` expression is experimental");
}
ast::ExprKind::IfLet(ref pats, ..) | ast::ExprKind::WhileLet(ref pats, ..) => {
if pats.len() > 1 {
gate_feature_post!(&self, if_while_or_patterns, e.span,
"multiple patterns in `if let` and `while let` are unstable");
}
}
ast::ExprKind::Block(_, opt_label) => {
if let Some(label) = opt_label {
gate_feature_post!(&self, label_break_value, label.ident.span,
Expand Down
5 changes: 3 additions & 2 deletions src/libsyntax/parse/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3660,8 +3660,6 @@ impl<'a> Parser<'a> {
maybe_whole!(self, NtArm, |x| x);

let attrs = self.parse_outer_attributes()?;
// Allow a '|' before the pats (RFC 1925)
self.eat(&token::BinOp(token::Or));
let pats = self.parse_pats()?;
let guard = if self.eat_keyword(keywords::If) {
Some(Guard::If(self.parse_expr()?))
Expand Down Expand Up @@ -3768,6 +3766,9 @@ impl<'a> Parser<'a> {

/// Parse patterns, separated by '|' s
fn parse_pats(&mut self) -> PResult<'a, Vec<P<Pat>>> {
// Allow a '|' before the pats (RFC 1925 + RFC 2530)
self.eat(&token::BinOp(token::Or));

let mut pats = Vec::new();
loop {
pats.push(self.parse_top_level_pat()?);
Expand Down
13 changes: 12 additions & 1 deletion src/test/run-pass/rfcs/rfc-2175-or-if-while-let/basic.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
// run-pass
#![allow(dead_code)]
#![feature(if_while_or_patterns)]

enum E {
V(u8),
Expand All @@ -19,4 +18,16 @@ fn main() {
assert_eq!(x, 10);
e = W;
}

// Accept leading `|`:

let mut e = V(10);

if let | V(x) | U(x) = e {
assert_eq!(x, 10);
}
while let | V(x) | U(x) = e {
assert_eq!(x, 10);
e = W;
}
}

This file was deleted.

23 changes: 0 additions & 23 deletions src/test/ui/feature-gates/feature-gate-if_while_or_patterns.stderr

This file was deleted.

0 comments on commit 561483e

Please sign in to comment.