fixup auto_serialize's treatment of nullary variants
This commit is contained in:
parent
e702d20191
commit
a3d2882ffd
3 changed files with 28 additions and 6 deletions
|
|
@ -71,11 +71,11 @@ impl of serializer for writer {
|
|||
f();
|
||||
}
|
||||
|
||||
fn emit_enum_variant(v_name: str, _v_id: uint, _sz: uint, f: fn()) {
|
||||
fn emit_enum_variant(v_name: str, _v_id: uint, sz: uint, f: fn()) {
|
||||
self.write_str(v_name);
|
||||
self.write_str("(");
|
||||
if sz > 0u { self.write_str("("); }
|
||||
f();
|
||||
self.write_str(")");
|
||||
if sz > 0u { self.write_str(")"); }
|
||||
}
|
||||
|
||||
fn emit_enum_variant_arg(idx: uint, f: fn()) {
|
||||
|
|
|
|||
|
|
@ -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)),
|
||||
|
|
|
|||
|
|
@ -72,6 +72,9 @@ enum quark<T> {
|
|||
#[auto_serialize]
|
||||
type uint_quark = quark<uint>;
|
||||
|
||||
#[auto_serialize]
|
||||
enum c_like { a, b, c }
|
||||
|
||||
fn main() {
|
||||
|
||||
test_ser_and_deser(plus(@minus(@val(3u), @val(10u)),
|
||||
|
|
@ -117,4 +120,16 @@ fn main() {
|
|||
serialize_uint_quark(_, _),
|
||||
deserialize_uint_quark(_),
|
||||
serialize_uint_quark(_, _));
|
||||
|
||||
test_ser_and_deser(a,
|
||||
"a",
|
||||
serialize_c_like(_, _),
|
||||
deserialize_c_like(_),
|
||||
serialize_c_like(_, _));
|
||||
|
||||
test_ser_and_deser(b,
|
||||
"b",
|
||||
serialize_c_like(_, _),
|
||||
deserialize_c_like(_),
|
||||
serialize_c_like(_, _));
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue