Skip to content

Commit 37eec54

Browse files
committed
---
yaml --- r: 11848 b: refs/heads/master c: a3d2882 h: refs/heads/master v: v3
1 parent ae65af1 commit 37eec54

File tree

4 files changed

+29
-7
lines changed

4 files changed

+29
-7
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: e702d2019131a51630ee5f46ccff4a3bd31e178a
2+
refs/heads/master: a3d2882ffd694caeb274e53c8b8bb4ca03c493b3
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 4a81779abd786ff22d71434c6d9a5917ea4cdfff
55
refs/heads/try: 2898dcc5d97da9427ac367542382b6239d9c0bbf

trunk/src/libstd/prettyprint.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,11 @@ impl of serializer for writer {
7171
f();
7272
}
7373

74-
fn emit_enum_variant(v_name: str, _v_id: uint, _sz: uint, f: fn()) {
74+
fn emit_enum_variant(v_name: str, _v_id: uint, sz: uint, f: fn()) {
7575
self.write_str(v_name);
76-
self.write_str("(");
76+
if sz > 0u { self.write_str("("); }
7777
f();
78-
self.write_str(")");
78+
if sz > 0u { self.write_str(")"); }
7979
}
8080

8181
fn emit_enum_variant_arg(idx: uint, f: fn()) {

trunk/src/rustc/syntax/ext/auto_serialize.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -816,9 +816,16 @@ fn deser_enum(cx: ext_ctxt, tps: deser_tps_map, e_name: str,
816816
#ast{ $(d).read_enum_variant_arg($(idx), $(body)) }
817817
};
818818

819-
let body =
820-
cx.expr(v_span, ast::expr_call(
821-
cx.var_ref(v_span, v_name), arg_exprs, false));
819+
let body = {
820+
if vec::is_empty(tys) {
821+
// for a nullary variant v, do "v"
822+
cx.var_ref(v_span, v_name)
823+
} else {
824+
// for an n-ary variant v, do "v(a_1, ..., a_n)"
825+
cx.expr(v_span, ast::expr_call(
826+
cx.var_ref(v_span, v_name), arg_exprs, false))
827+
}
828+
};
822829

823830
{pats: [@{id: cx.next_id(),
824831
node: ast::pat_lit(cx.lit_uint(v_span, vidx)),

trunk/src/test/run-pass/auto_serialize.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ enum quark<T> {
7272
#[auto_serialize]
7373
type uint_quark = quark<uint>;
7474

75+
#[auto_serialize]
76+
enum c_like { a, b, c }
77+
7578
fn main() {
7679

7780
test_ser_and_deser(plus(@minus(@val(3u), @val(10u)),
@@ -117,4 +120,16 @@ fn main() {
117120
serialize_uint_quark(_, _),
118121
deserialize_uint_quark(_),
119122
serialize_uint_quark(_, _));
123+
124+
test_ser_and_deser(a,
125+
"a",
126+
serialize_c_like(_, _),
127+
deserialize_c_like(_),
128+
serialize_c_like(_, _));
129+
130+
test_ser_and_deser(b,
131+
"b",
132+
serialize_c_like(_, _),
133+
deserialize_c_like(_),
134+
serialize_c_like(_, _));
120135
}

0 commit comments

Comments
 (0)