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