Collapse parallel Option fields in exprs
diff --git a/src/expr.rs b/src/expr.rs
index 4cef442..225fc65 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -586,11 +586,9 @@
pub attrs: Vec<Attribute>,
pub let_token: Token![let],
pub pat: Box<Pat>,
- pub colon_token: Option<Token![:]>,
- pub ty: Option<Box<Type>>,
- pub eq_token: Option<Token![=]>,
+ pub ty: Option<(Token![:], Box<Type>)>,
/// Initializer expression to set the value, if any
- pub init: Option<Box<Expr>>,
+ pub init: Option<(Token![=], Box<Expr>)>,
pub semi_token: Token![;],
}
}
@@ -614,8 +612,7 @@
pub by_ref: Option<Token![ref]>,
pub mutability: Option<Token![mut]>,
pub ident: Ident,
- pub at_token: Option<Token![@]>,
- pub subpat: Option<Box<Pat>>,
+ pub subpat: Option<(Token![@], Box<Pat>)>,
}),
/// A struct or struct variant pattern, e.g. `Variant {x, y, ..}`.
@@ -735,8 +732,7 @@
pub struct Arm {
pub attrs: Vec<Attribute>,
pub pats: Delimited<Pat, Token![|]>,
- pub if_token: Option<Token![if]>,
- pub guard: Option<Box<Expr>>,
+ pub guard: Option<(Token![if], Box<Expr>)>,
pub rocket_token: Token![=>],
pub body: Box<Expr>,
pub comma: Option<Token![,]>,
@@ -1679,10 +1675,9 @@
) >>
(Arm {
rocket_token: rocket,
- if_token: guard.as_ref().map(|p| Token.0)),
attrs: attrs,
pats: pats,
- guard: guard.map(|p| Box::new(p.1)),
+ guard: guard.map(|(if_, guard)| (if_, Box::new(guard))),
body: Box::new(body.0),
comma: body.1,
})
@@ -2062,14 +2057,12 @@
init: option!(tuple!(punct!(=), syn!(Expr))) >>
semi: punct!(;) >>
(Stmt::Local(Box::new(Local {
- let_token: let_,
- semi_token: semi,
- colon_token: ty.as_ref().map(|p| Token.0)),
- eq_token: init.as_ref().map(|p| Token.0)),
- pat: Box::new(pat),
- ty: ty.map(|p| Box::new(p.1)),
- init: init.map(|p| Box::new(p.1)),
attrs: attrs,
+ let_token: let_,
+ pat: Box::new(pat),
+ ty: ty.map(|(colon, ty)| (colon, Box::new(ty))),
+ init: init.map(|(eq, expr)| (eq, Box::new(expr))),
+ semi_token: semi,
})))
));
@@ -2172,8 +2165,7 @@
by_ref: by_ref,
mutability: mutability,
ident: name,
- at_token: subpat.as_ref().map(|p| Token.0)),
- subpat: subpat.map(|p| Box::new(p.1)),
+ subpat: subpat.map(|(at, pat)| (at, Box::new(pat))),
})
));
}
@@ -2237,7 +2229,6 @@
mutability: mutability,
ident: ident,
subpat: None,
- at_token: None,
}.into();
if let Some(boxed) = boxed {
pat = PatBox {
@@ -2985,9 +2976,9 @@
fn to_tokens(&self, tokens: &mut Tokens) {
tokens.append_all(&self.attrs);
self.pats.to_tokens(tokens);
- if self.guard.is_some() {
- TokensOrDefault(&self.if_token).to_tokens(tokens);
- self.guard.to_tokens(tokens);
+ if let Some((ref if_token, ref guard)) = self.guard {
+ if_token.to_tokens(tokens);
+ guard.to_tokens(tokens);
}
self.rocket_token.to_tokens(tokens);
self.body.to_tokens(tokens);
@@ -3008,9 +2999,9 @@
self.by_ref.to_tokens(tokens);
self.mutability.to_tokens(tokens);
self.ident.to_tokens(tokens);
- if self.subpat.is_some() {
- TokensOrDefault(&self.at_token).to_tokens(tokens);
- self.subpat.to_tokens(tokens);
+ if let Some((ref at_token, ref subpat)) = self.subpat {
+ at_token.to_tokens(tokens);
+ subpat.to_tokens(tokens);
}
}
}
@@ -3193,13 +3184,13 @@
tokens.append_all(self.attrs.outer());
self.let_token.to_tokens(tokens);
self.pat.to_tokens(tokens);
- if self.ty.is_some() {
- TokensOrDefault(&self.colon_token).to_tokens(tokens);
- self.ty.to_tokens(tokens);
+ if let Some((ref colon_token, ref ty)) = self.ty {
+ colon_token.to_tokens(tokens);
+ ty.to_tokens(tokens);
}
- if self.init.is_some() {
- TokensOrDefault(&self.eq_token).to_tokens(tokens);
- self.init.to_tokens(tokens);
+ if let Some((ref eq_token, ref init)) = self.init {
+ eq_token.to_tokens(tokens);
+ init.to_tokens(tokens);
}
self.semi_token.to_tokens(tokens);
}