summary refs log tree commit diff
path: root/src/rustc/syntax
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2012-03-14 20:54:17 -0400
committerNiko Matsakis <niko@alum.mit.edu>2012-03-14 21:05:06 -0400
commita3d2882ffd694caeb274e53c8b8bb4ca03c493b3 (patch)
treecc39f8b79e297eaeb81a150460a80cfea5388fa0 /src/rustc/syntax
parente702d2019131a51630ee5f46ccff4a3bd31e178a (diff)
fixup auto_serialize's treatment of nullary variants
Diffstat (limited to 'src/rustc/syntax')
-rw-r--r--src/rustc/syntax/ext/auto_serialize.rs13
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)),