From 6d68658b9a9705d2e4c517d12705a2f64f20e378 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Wed, 8 Aug 2012 10:43:44 -0700 Subject: [PATCH] Make autoserialize not generate alt checks --- src/libsyntax/ext/auto_serialize.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/libsyntax/ext/auto_serialize.rs b/src/libsyntax/ext/auto_serialize.rs index c93dccda034..1fc77bae8bf 100644 --- a/src/libsyntax/ext/auto_serialize.rs +++ b/src/libsyntax/ext/auto_serialize.rs @@ -885,7 +885,7 @@ fn deser_enum(cx: ext_ctxt, tps: deser_tps_map, e_name: ast::ident, e_span: span, variants: ~[ast::variant], -d: @ast::expr) -> @ast::expr { let ext_cx = cx; - let arms: ~[ast::arm] = do vec::from_fn(vec::len(variants)) |vidx| { + let mut arms: ~[ast::arm] = do vec::from_fn(vec::len(variants)) |vidx| { let variant = variants[vidx]; let v_span = variant.span; let v_name = variant.node.name; @@ -925,10 +925,19 @@ fn deser_enum(cx: ext_ctxt, tps: deser_tps_map, e_name: ast::ident, body: cx.expr_blk(body)} }; + let impossible_case = {pats: ~[@{id: cx.next_id(), + node: ast::pat_wild, + span: e_span}], + guard: none, + // FIXME #3198: proper error message + body: cx.expr_blk(cx.expr(e_span, + ast::expr_fail(none)))}; + arms += ~[impossible_case]; + // Generate code like: let e_name = cx.lit_str(e_span, e_name); let alt_expr = cx.expr(e_span, - ast::expr_match(#ast{__i}, arms, ast::alt_check)); + ast::expr_match(#ast{__i}, arms, ast::alt_exhaustive)); 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));