diff options
| author | bors <bors@rust-lang.org> | 2019-06-24 05:00:10 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2019-06-24 05:00:10 +0000 |
| commit | 3cc34867339356a34428e9ec3efa618d86228fed (patch) | |
| tree | bbfaf3093c4a894726e09107b8d385225c40795e /src/libsyntax | |
| parent | 85ed21e83c9f42203cfe06d41eab3f160bd13518 (diff) | |
| parent | 4d537141835f825892e2be868620e98585b3d4a9 (diff) | |
| download | rust-3cc34867339356a34428e9ec3efa618d86228fed.tar.gz rust-3cc34867339356a34428e9ec3efa618d86228fed.zip | |
Auto merge of #62075 - Centril:guardless-match-arms, r=petrochenkov
Remove `ast::Guard` With the introduction of `ast::ExprKind::Let` in https://github.com/rust-lang/rust/pull/60861, the `ast::Guard` structure is now redundant in terms of representing [`if let` guards](https://github.com/rust-lang/rust/issues/51114) in AST since it can be represented by `ExprKind::Let` syntactically. Therefore, we remove `ast::Guard` here. However, we keep `hir::Guard` because the semantic representation is a different matter and this story is more unclear right now (might involve `goto 'arm` in HIR or something...). r? @petrochenkov
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ast.rs | 7 | ||||
| -rw-r--r-- | src/libsyntax/mut_visit.rs | 12 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/print/pprust.rs | 12 | ||||
| -rw-r--r-- | src/libsyntax/visit.rs | 6 |
5 files changed, 10 insertions, 31 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 21704206cbf..f2fac16db01 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -893,17 +893,12 @@ pub struct Local { pub struct Arm { pub attrs: Vec<Attribute>, pub pats: Vec<P<Pat>>, - pub guard: Option<Guard>, + pub guard: Option<P<Expr>>, pub body: P<Expr>, pub span: Span, } #[derive(Clone, RustcEncodable, RustcDecodable, Debug)] -pub enum Guard { - If(P<Expr>), -} - -#[derive(Clone, RustcEncodable, RustcDecodable, Debug)] pub struct Field { pub ident: Ident, pub expr: P<Expr>, diff --git a/src/libsyntax/mut_visit.rs b/src/libsyntax/mut_visit.rs index 35aa2eead0b..e23bc025f6e 100644 --- a/src/libsyntax/mut_visit.rs +++ b/src/libsyntax/mut_visit.rs @@ -131,10 +131,6 @@ pub trait MutVisitor: Sized { noop_visit_arm(a, self); } - fn visit_guard(&mut self, g: &mut Guard) { - noop_visit_guard(g, self); - } - fn visit_pat(&mut self, p: &mut P<Pat>) { noop_visit_pat(p, self); } @@ -389,17 +385,11 @@ pub fn noop_visit_arm<T: MutVisitor>( ) { visit_attrs(attrs, vis); visit_vec(pats, |pat| vis.visit_pat(pat)); - visit_opt(guard, |guard| vis.visit_guard(guard)); + visit_opt(guard, |guard| vis.visit_expr(guard)); vis.visit_expr(body); vis.visit_span(span); } -pub fn noop_visit_guard<T: MutVisitor>(g: &mut Guard, vis: &mut T) { - match g { - Guard::If(e) => vis.visit_expr(e), - } -} - pub fn noop_visit_ty_constraint<T: MutVisitor>( AssocTyConstraint { id, ident, kind, span }: &mut AssocTyConstraint, vis: &mut T diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index b2003e2d6bd..f3ace84162e 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -3,7 +3,7 @@ use crate::ast::{AngleBracketedArgs, ParenthesizedArgs, AttrStyle, BareFnTy}; use crate::ast::{GenericBound, TraitBoundModifier}; use crate::ast::Unsafety; -use crate::ast::{Mod, AnonConst, Arg, Arm, Guard, Attribute, BindingMode, TraitItemKind}; +use crate::ast::{Mod, AnonConst, Arg, Arm, Attribute, BindingMode, TraitItemKind}; use crate::ast::Block; use crate::ast::{BlockCheckMode, CaptureBy, Movability}; use crate::ast::{Constness, Crate}; @@ -3396,7 +3396,7 @@ impl<'a> Parser<'a> { let lo = self.token.span; let pats = self.parse_pats()?; let guard = if self.eat_keyword(kw::If) { - Some(Guard::If(self.parse_expr()?)) + Some(self.parse_expr()?) } else { None }; diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 164fe2f36e1..3f059927e57 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -2653,14 +2653,10 @@ impl<'a> State<'a> { self.print_outer_attributes(&arm.attrs)?; self.print_pats(&arm.pats)?; self.s.space()?; - if let Some(ref g) = arm.guard { - match g { - ast::Guard::If(ref e) => { - self.word_space("if")?; - self.print_expr(e)?; - self.s.space()?; - } - } + if let Some(ref e) = arm.guard { + self.word_space("if")?; + self.print_expr(e)?; + self.s.space()?; } self.word_space("=>")?; diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index 4d961142ff1..9ec9550f93a 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -826,10 +826,8 @@ pub fn walk_expr<'a, V: Visitor<'a>>(visitor: &mut V, expression: &'a Expr) { pub fn walk_arm<'a, V: Visitor<'a>>(visitor: &mut V, arm: &'a Arm) { walk_list!(visitor, visit_pat, &arm.pats); - if let Some(ref g) = &arm.guard { - match g { - Guard::If(ref e) => visitor.visit_expr(e), - } + if let Some(ref e) = &arm.guard { + visitor.visit_expr(e); } visitor.visit_expr(&arm.body); walk_list!(visitor, visit_attribute, &arm.attrs); |
