Parse multiple patterns in if-let and while-let
diff --git a/src/expr.rs b/src/expr.rs
index 11cee91..e770fde 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -242,7 +242,7 @@
             pub attrs: Vec<Attribute>,
             pub if_token: Token![if],
             pub let_token: Token![let],
-            pub pat: Box<Pat>,
+            pub pats: Punctuated<Pat, Token![|]>,
             pub eq_token: Token![=],
             pub expr: Box<Expr>,
             pub then_branch: Block,
@@ -268,7 +268,7 @@
             pub label: Option<Label>,
             pub while_token: Token![while],
             pub let_token: Token![let],
-            pub pat: Box<Pat>,
+            pub pats: Punctuated<Pat, Token![|]>,
             pub eq_token: Token![=],
             pub expr: Box<Expr>,
             pub body: Block,
@@ -764,7 +764,7 @@
     pub struct Local {
         pub attrs: Vec<Attribute>,
         pub let_token: Token![let],
-        pub pat: Box<Pat>,
+        pub pats: Punctuated<Pat, Token![|]>,
         pub ty: Option<(Token![:], Box<Type>)>,
         pub init: Option<(Token![=], Box<Expr>)>,
         pub semi_token: Token![;],
@@ -1758,14 +1758,14 @@
         named!(parse -> Self, do_parse!(
             if_: keyword!(if) >>
             let_: keyword!(let) >>
-            pat: syn!(Pat) >>
+            pats: call!(Punctuated::parse_separated_nonempty) >>
             eq: punct!(=) >>
             cond: expr_no_struct >>
             then_block: braces!(Block::parse_within) >>
             else_block: option!(else_block) >>
             (ExprIfLet {
                 attrs: Vec::new(),
-                pat: Box::new(pat),
+                pats: pats,
                 let_token: let_,
                 eq_token: eq,
                 expr: Box::new(cond),
@@ -2043,7 +2043,7 @@
             label: option!(syn!(Label)) >>
             while_: keyword!(while) >>
             let_: keyword!(let) >>
-            pat: syn!(Pat) >>
+            pats: call!(Punctuated::parse_separated_nonempty) >>
             eq: punct!(=) >>
             value: expr_no_struct >>
             while_block: syn!(Block) >>
@@ -2052,7 +2052,7 @@
                 eq_token: eq,
                 let_token: let_,
                 while_token: while_,
-                pat: Box::new(pat),
+                pats: pats,
                 expr: Box::new(value),
                 body: while_block,
                 label: label,
@@ -2384,14 +2384,14 @@
     named!(stmt_local -> Stmt, do_parse!(
         attrs: many0!(Attribute::parse_outer) >>
         let_: keyword!(let) >>
-        pat: syn!(Pat) >>
+        pats: call!(Punctuated::parse_separated_nonempty) >>
         ty: option!(tuple!(punct!(:), syn!(Type))) >>
         init: option!(tuple!(punct!(=), syn!(Expr))) >>
         semi: punct!(;) >>
         (Stmt::Local(Local {
             attrs: attrs,
             let_token: let_,
-            pat: Box::new(pat),
+            pats: pats,
             ty: ty.map(|(colon, ty)| (colon, Box::new(ty))),
             init: init.map(|(eq, expr)| (eq, Box::new(expr))),
             semi_token: semi,
@@ -3010,7 +3010,7 @@
             tokens.append_all(self.attrs.outer());
             self.if_token.to_tokens(tokens);
             self.let_token.to_tokens(tokens);
-            self.pat.to_tokens(tokens);
+            self.pats.to_tokens(tokens);
             self.eq_token.to_tokens(tokens);
             wrap_bare_struct(tokens, &self.expr);
             self.then_branch.to_tokens(tokens);
@@ -3036,7 +3036,7 @@
             self.label.to_tokens(tokens);
             self.while_token.to_tokens(tokens);
             self.let_token.to_tokens(tokens);
-            self.pat.to_tokens(tokens);
+            self.pats.to_tokens(tokens);
             self.eq_token.to_tokens(tokens);
             wrap_bare_struct(tokens, &self.expr);
             self.body.to_tokens(tokens);
@@ -3565,7 +3565,7 @@
         fn to_tokens(&self, tokens: &mut Tokens) {
             tokens.append_all(self.attrs.outer());
             self.let_token.to_tokens(tokens);
-            self.pat.to_tokens(tokens);
+            self.pats.to_tokens(tokens);
             if let Some((ref colon_token, ref ty)) = self.ty {
                 colon_token.to_tokens(tokens);
                 ty.to_tokens(tokens);