Skip to content

Commit 6d68658

Browse files
committed
Make autoserialize not generate alt checks
1 parent 9f01aca commit 6d68658

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

src/libsyntax/ext/auto_serialize.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -885,7 +885,7 @@ fn deser_enum(cx: ext_ctxt, tps: deser_tps_map, e_name: ast::ident,
885885
e_span: span, variants: ~[ast::variant],
886886
-d: @ast::expr) -> @ast::expr {
887887
let ext_cx = cx;
888-
let arms: ~[ast::arm] = do vec::from_fn(vec::len(variants)) |vidx| {
888+
let mut arms: ~[ast::arm] = do vec::from_fn(vec::len(variants)) |vidx| {
889889
let variant = variants[vidx];
890890
let v_span = variant.span;
891891
let v_name = variant.node.name;
@@ -925,10 +925,19 @@ fn deser_enum(cx: ext_ctxt, tps: deser_tps_map, e_name: ast::ident,
925925
body: cx.expr_blk(body)}
926926
};
927927

928+
let impossible_case = {pats: ~[@{id: cx.next_id(),
929+
node: ast::pat_wild,
930+
span: e_span}],
931+
guard: none,
932+
// FIXME #3198: proper error message
933+
body: cx.expr_blk(cx.expr(e_span,
934+
ast::expr_fail(none)))};
935+
arms += ~[impossible_case];
936+
928937
// Generate code like:
929938
let e_name = cx.lit_str(e_span, e_name);
930939
let alt_expr = cx.expr(e_span,
931-
ast::expr_match(#ast{__i}, arms, ast::alt_check));
940+
ast::expr_match(#ast{__i}, arms, ast::alt_exhaustive));
932941
let var_lambda = #ast{ |__i| $(alt_expr) };
933942
let read_var = #ast{ $(cx.clone(d)).read_enum_variant($(var_lambda)) };
934943
let read_lambda = cx.lambda(cx.expr_blk(read_var));

0 commit comments

Comments
 (0)