diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2012-03-14 20:54:17 -0400 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2012-03-14 21:05:06 -0400 |
| commit | a3d2882ffd694caeb274e53c8b8bb4ca03c493b3 (patch) | |
| tree | cc39f8b79e297eaeb81a150460a80cfea5388fa0 /src/rustc/syntax | |
| parent | e702d2019131a51630ee5f46ccff4a3bd31e178a (diff) | |
fixup auto_serialize's treatment of nullary variants
Diffstat (limited to 'src/rustc/syntax')
| -rw-r--r-- | src/rustc/syntax/ext/auto_serialize.rs | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/rustc/syntax/ext/auto_serialize.rs b/src/rustc/syntax/ext/auto_serialize.rs index 44db1b1e101..23a5b18fe7f 100644 --- a/src/rustc/syntax/ext/auto_serialize.rs +++ b/src/rustc/syntax/ext/auto_serialize.rs @@ -816,9 +816,16 @@ fn deser_enum(cx: ext_ctxt, tps: deser_tps_map, e_name: str, #ast{ $(d).read_enum_variant_arg($(idx), $(body)) } }; - let body = - cx.expr(v_span, ast::expr_call( - cx.var_ref(v_span, v_name), arg_exprs, false)); + let body = { + if vec::is_empty(tys) { + // for a nullary variant v, do "v" + cx.var_ref(v_span, v_name) + } else { + // for an n-ary variant v, do "v(a_1, ..., a_n)" + cx.expr(v_span, ast::expr_call( + cx.var_ref(v_span, v_name), arg_exprs, false)) + } + }; {pats: [@{id: cx.next_id(), node: ast::pat_lit(cx.lit_uint(v_span, vidx)), |
