1
Fork 0

change if/else to match

This commit is contained in:
John Clements 2014-07-06 14:29:29 -07:00
parent f3fa836939
commit 9f94f823b0

View file

@ -1877,7 +1877,8 @@ impl<'a> Parser<'a> {
let ex: Expr_;
if self.token == token::LPAREN {
match self.token {
token::LPAREN => {
self.bump();
// (e) is parenthesized e
// (e,) is a tuple with only one field, e
@ -1909,14 +1910,17 @@ impl<'a> Parser<'a> {
else {
self.mk_expr(lo, hi, ExprTup(es))
}
} else if self.token == token::LBRACE {
},
token::LBRACE => {
self.bump();
let blk = self.parse_block_tail(lo, DefaultBlock);
return self.mk_expr(blk.span.lo, blk.span.hi,
ExprBlock(blk));
} else if token::is_bar(&self.token) {
},
_ if token::is_bar(&self.token) => {
return self.parse_lambda_expr();
} else if self.eat_keyword(keywords::Proc) {
},
_ if self.eat_keyword(keywords::Proc) => {
let decl = self.parse_proc_decl();
let body = self.parse_expr();
let fakeblock = P(ast::Block {
@ -1927,19 +1931,23 @@ impl<'a> Parser<'a> {
rules: DefaultBlock,
span: body.span,
});
return self.mk_expr(lo, body.span.hi, ExprProc(decl, fakeblock));
} else if self.eat_keyword(keywords::Self) {
},
_ if self.eat_keyword(keywords::Self) => {
let path = ast_util::ident_to_path(mk_sp(lo, hi), special_idents::self_);
ex = ExprPath(path);
hi = self.last_span.hi;
} else if self.eat_keyword(keywords::If) {
}
_ if self.eat_keyword(keywords::If) => {
return self.parse_if_expr();
} else if self.eat_keyword(keywords::For) {
},
_ if self.eat_keyword(keywords::For) => {
return self.parse_for_expr(None);
} else if self.eat_keyword(keywords::While) {
},
_ if self.eat_keyword(keywords::While) => {
return self.parse_while_expr();
} else if Parser::token_is_lifetime(&self.token) {
},
_ if Parser::token_is_lifetime(&self.token) => {
let lifetime = self.get_lifetime();
self.bump();
self.expect(&token::COLON);
@ -1950,9 +1958,11 @@ impl<'a> Parser<'a> {
} else {
self.fatal("expected `for` or `loop` after a label")
}
} else if self.eat_keyword(keywords::Loop) {
},
_ if self.eat_keyword(keywords::Loop) => {
return self.parse_loop_expr(None);
} else if self.eat_keyword(keywords::Continue) {
},
_ if self.eat_keyword(keywords::Continue) => {
let lo = self.span.lo;
let ex = if Parser::token_is_lifetime(&self.token) {
let lifetime = self.get_lifetime();
@ -1963,11 +1973,14 @@ impl<'a> Parser<'a> {
};
let hi = self.span.hi;
return self.mk_expr(lo, hi, ex);
} else if self.eat_keyword(keywords::Match) {
},
_ if self.eat_keyword(keywords::Match) => {
return self.parse_match_expr();
} else if self.eat_keyword(keywords::Unsafe) {
},
_ if self.eat_keyword(keywords::Unsafe) => {
return self.parse_block_expr(lo, UnsafeBlock(ast::UserProvided));
} else if self.token == token::LBRACKET {
},
token::LBRACKET => {
self.bump();
if self.token == token::RBRACKET {
@ -2003,14 +2016,16 @@ impl<'a> Parser<'a> {
}
}
hi = self.last_span.hi;
} else if self.eat_keyword(keywords::Return) {
},
_ if self.eat_keyword(keywords::Return) => {
// RETURN expression
if can_begin_expr(&self.token) {
let e = self.parse_expr();
hi = e.span.hi;
ex = ExprRet(Some(e));
} else { ex = ExprRet(None); }
} else if self.eat_keyword(keywords::Break) {
},
_ if self.eat_keyword(keywords::Break) => {
// BREAK expression
if Parser::token_is_lifetime(&self.token) {
let lifetime = self.get_lifetime();
@ -2020,9 +2035,10 @@ impl<'a> Parser<'a> {
ex = ExprBreak(None);
}
hi = self.span.hi;
} else if self.token == token::MOD_SEP ||
},
_ if self.token == token::MOD_SEP ||
is_ident(&self.token) && !self.is_keyword(keywords::True) &&
!self.is_keyword(keywords::False) {
!self.is_keyword(keywords::False) => {
let pth = self.parse_path(LifetimeAndTypesWithColons).path;
// `!`, as an operator, is prefix, so we know this isn't that
@ -2077,12 +2093,14 @@ impl<'a> Parser<'a> {
hi = pth.span.hi;
ex = ExprPath(pth);
} else {
},
_ => {
// other literal expression
let lit = self.parse_lit();
hi = lit.span.hi;
ex = ExprLit(box(GC) lit);
}
}
return self.mk_expr(lo, hi, ex);
}