Skip to content

Commit

Permalink
Remove match check
Browse files Browse the repository at this point in the history
  • Loading branch information
catamorphism committed Aug 25, 2012
1 parent c7a3d0e commit 5e22fb9
Show file tree
Hide file tree
Showing 13 changed files with 23 additions and 39 deletions.
2 changes: 1 addition & 1 deletion src/libsyntax/ast.rs
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,7 @@ enum expr_ {
Same semantics as while(true) { body }, but typestate knows that the
(implicit) condition is always true. */
expr_loop(blk, option<ident>),
expr_match(@expr, ~[arm], alt_mode),
expr_match(@expr, ~[arm]),
expr_fn(proto, fn_decl, blk, capture_clause),
expr_fn_block(fn_decl, blk, capture_clause),
// Inner expr is always an expr_fn_block. We need the wrapping node to
Expand Down
4 changes: 2 additions & 2 deletions src/libsyntax/ext/auto_serialize.rs
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ impl ext_ctxt: ext_ctxt_helpers {
self.stmt(
self.expr(
span,
ast::expr_match(v, arms, ast::alt_exhaustive)))
ast::expr_match(v, arms)))
}

fn lit_str(span: span, s: @~str) -> @ast::expr {
Expand Down Expand Up @@ -944,7 +944,7 @@ fn deser_enum(cx: ext_ctxt, tps: deser_tps_map, e_name: ast::ident,
// Generate code like:
let e_name = cx.lit_str(e_span, @cx.str_of(e_name));
let alt_expr = cx.expr(e_span,
ast::expr_match(#ast{__i}, arms, ast::alt_exhaustive));
ast::expr_match(#ast{__i}, arms));
let var_lambda = #ast{ |__i| $(alt_expr) };
let read_var = #ast{ $(cx.clone(d)).read_enum_variant($(var_lambda)) };
let read_lambda = cx.lambda(cx.expr_blk(read_var));
Expand Down
4 changes: 2 additions & 2 deletions src/libsyntax/fold.rs
Original file line number Diff line number Diff line change
Expand Up @@ -456,9 +456,9 @@ fn noop_fold_expr(e: expr_, fld: ast_fold) -> expr_ {
expr_loop(fld.fold_block(body),
option::map(opt_ident, |x| fld.fold_ident(x)))
}
expr_match(expr, arms, mode) => {
expr_match(expr, arms) => {
expr_match(fld.fold_expr(expr),
vec::map(arms, |x| fld.fold_arm(x)), mode)
vec::map(arms, |x| fld.fold_arm(x)))
}
expr_fn(proto, decl, body, captures) => {
expr_fn(proto, fold_fn_decl(decl, fld),
Expand Down
4 changes: 1 addition & 3 deletions src/libsyntax/parse/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1668,8 +1668,6 @@ struct parser {

fn parse_alt_expr() -> @expr {
let lo = self.last_span.lo;
let mode = if self.eat_keyword(~"check") { alt_check }
else { alt_exhaustive };
let discriminant = self.parse_expr();
self.expect(token::LBRACE);
let mut arms: ~[arm] = ~[];
Expand Down Expand Up @@ -1701,7 +1699,7 @@ struct parser {
}
let mut hi = self.span.hi;
self.bump();
return self.mk_expr(lo, hi, expr_match(discriminant, arms, mode));
return self.mk_expr(lo, hi, expr_match(discriminant, arms));
}

fn parse_expr() -> @expr {
Expand Down
3 changes: 1 addition & 2 deletions src/libsyntax/print/pprust.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1128,11 +1128,10 @@ fn print_expr(s: ps, &&expr: @ast::expr) {
option::iter(opt_ident, |ident| {print_ident(s, ident); space(s.s)});
print_block(s, blk);
}
ast::expr_match(expr, arms, mode) => {
ast::expr_match(expr, arms) => {
cbox(s, alt_indent_unit);
ibox(s, 4u);
word_nbsp(s, ~"match");
if mode == ast::alt_check { word_nbsp(s, ~"check"); }
print_maybe_parens_discrim(s, expr);
space(s.s);
bopen(s);
Expand Down
2 changes: 1 addition & 1 deletion src/libsyntax/visit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,7 @@ fn visit_expr<E>(ex: @expr, e: E, v: vt<E>) {
}
expr_while(x, b) => { v.visit_expr(x, e, v); v.visit_block(b, e, v); }
expr_loop(b, _) => v.visit_block(b, e, v),
expr_match(x, arms, _) => {
expr_match(x, arms) => {
v.visit_expr(x, e, v);
for arms.each |a| { v.visit_arm(a, e, v); }
}
Expand Down
2 changes: 1 addition & 1 deletion src/rustc/middle/borrowck/gather_loans.rs
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ fn req_loans_in_expr(ex: @ast::expr,
visit::visit_expr(ex, self, vt);
}

ast::expr_match(ex_v, arms, _) => {
ast::expr_match(ex_v, arms) => {
let cmt = self.bccx.cat_expr(ex_v);
for arms.each |arm| {
for arm.pats.each |pat| {
Expand Down
13 changes: 5 additions & 8 deletions src/rustc/middle/check_alt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ fn check_crate(tcx: ty::ctxt, crate: @crate) {
fn check_expr(tcx: ty::ctxt, ex: @expr, &&s: (), v: visit::vt<()>) {
visit::visit_expr(ex, s, v);
match ex.node {
expr_match(scrut, arms, mode) => {
expr_match(scrut, arms) => {
check_arms(tcx, arms);
/* Check for exhaustiveness */
// Check for empty enum, because is_useful only works on inhabited
Expand All @@ -48,13 +48,10 @@ fn check_expr(tcx: ty::ctxt, ex: @expr, &&s: (), v: visit::vt<()>) {
}
_ => { /* We assume only enum types can be uninhabited */ }
}

if mode == alt_exhaustive {
let arms = vec::concat(vec::filter_map(arms, unguarded_pat));
check_exhaustive(tcx, ex.span, arms);
}
}
_ => ()
let arms = vec::concat(vec::filter_map(arms, unguarded_pat));
check_exhaustive(tcx, ex.span, arms);
}
_ => ()
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/rustc/middle/liveness.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1048,7 +1048,7 @@ impl Liveness {
self.propagate_through_loop(expr, none, blk, succ)
}

expr_match(e, arms, _) => {
expr_match(e, arms) => {
//
// (e)
// |
Expand Down
2 changes: 1 addition & 1 deletion src/rustc/middle/region.rs
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,7 @@ fn resolve_expr(expr: @ast::expr, cx: ctxt, visitor: visit::vt<ctxt>) {
cx.sess.intr()));
new_cx.parent = some(expr.id);
}
ast::expr_match(subexpr, _, _) => {
ast::expr_match(subexpr, _) => {
debug!("node %d: %s", expr.id, pprust::expr_to_str(expr,
cx.sess.intr()));
new_cx.parent = some(expr.id);
Expand Down
16 changes: 3 additions & 13 deletions src/rustc/middle/trans/alt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -822,16 +822,15 @@ fn trans_alt(bcx: block,
alt_expr: @ast::expr,
expr: @ast::expr,
arms: ~[ast::arm],
mode: ast::alt_mode,
dest: dest) -> block {
let _icx = bcx.insn_ctxt("alt::trans_alt");
do with_scope(bcx, alt_expr.info(), ~"alt") |bcx| {
trans_alt_inner(bcx, expr, arms, mode, dest)
trans_alt_inner(bcx, expr, arms, dest)
}
}

fn trans_alt_inner(scope_cx: block, expr: @ast::expr, arms: ~[ast::arm],
mode: ast::alt_mode, dest: dest) -> block {
dest: dest) -> block {
let _icx = scope_cx.insn_ctxt("alt::trans_alt_inner");
let bcx = scope_cx, tcx = bcx.tcx();
let mut bodies = ~[], matches = ~[];
Expand Down Expand Up @@ -860,15 +859,7 @@ fn trans_alt_inner(scope_cx: block, expr: @ast::expr, arms: ~[ast::arm],
return fail_cx.llbb;
}
let t = node_id_type(bcx, expr.id);
let mk_fail = match mode {
ast::alt_check => {
let fail_cx = @mut none;
// Cached fail-on-fallthrough block
some(|| mk_fail(scope_cx, expr.span, ~"non-exhaustive match failure",
fail_cx))
}
ast::alt_exhaustive => {
let fail_cx = @mut none;
let mk_fail = { let fail_cx = @mut none;
// special case for uninhabited type
if ty::type_is_empty(tcx, t) {
some(|| mk_fail(scope_cx, expr.span,
Expand All @@ -877,7 +868,6 @@ fn trans_alt_inner(scope_cx: block, expr: @ast::expr, arms: ~[ast::arm],
else {
none
}
}
};
let mut exit_map = ~[];
let spilled = spill_if_immediate(bcx, val, t);
Expand Down
6 changes: 3 additions & 3 deletions src/rustc/middle/trans/base.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3798,8 +3798,8 @@ fn trans_expr(bcx: block, e: @ast::expr, dest: dest) -> block {
ast::expr_if(cond, thn, els) => {
return trans_if(bcx, cond, thn, els, dest);
}
ast::expr_match(expr, arms, mode) => {
return alt::trans_alt(bcx, e, expr, arms, mode, dest);
ast::expr_match(expr, arms) => {
return alt::trans_alt(bcx, e, expr, arms, dest);
}
ast::expr_block(blk) => {
return do with_scope(bcx, blk.info(), ~"block-expr body") |bcx| {
Expand Down Expand Up @@ -4488,7 +4488,7 @@ fn trans_block_cleanups_(bcx: block,
}
}
}
}
}
return bcx;
}

Expand Down
2 changes: 1 addition & 1 deletion src/rustc/middle/typeck/check.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1599,7 +1599,7 @@ fn check_expr_with_unifier(fcx: @fn_ctxt,
fcx.write_ty(id, ty::mk_nil(tcx));
bot = !may_break(body);
}
ast::expr_match(discrim, arms, mode) => {
ast::expr_match(discrim, arms) => {
bot = alt::check_alt(fcx, expr, discrim, arms);
}
ast::expr_fn(proto, decl, body, cap_clause) => {
Expand Down

0 comments on commit 5e22fb9

Please sign in to comment.