diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2016-02-22 21:24:32 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2016-02-22 21:24:32 +0300 |
| commit | 4e8e607d8469a8882944233e4bb3ee45d2a6435a (patch) | |
| tree | 1383d1f4a4e8982ea73c7165a169ba0fa53912a2 /src/libsyntax_ext/deriving/debug.rs | |
| parent | 98a59cf57e02b6e6a5a3bd74eb47b1422eaacc53 (diff) | |
| download | rust-4e8e607d8469a8882944233e4bb3ee45d2a6435a.tar.gz rust-4e8e607d8469a8882944233e4bb3ee45d2a6435a.zip | |
Fix #[derive] for empty structs with braces
Diffstat (limited to 'src/libsyntax_ext/deriving/debug.rs')
| -rw-r--r-- | src/libsyntax_ext/deriving/debug.rs | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/libsyntax_ext/deriving/debug.rs b/src/libsyntax_ext/deriving/debug.rs index 6439e9aa498..109f2ad4025 100644 --- a/src/libsyntax_ext/deriving/debug.rs +++ b/src/libsyntax_ext/deriving/debug.rs @@ -62,7 +62,7 @@ fn show_substructure(cx: &mut ExtCtxt, span: Span, // or fmt.debug_tuple(<name>).field(&<fieldval>)....build() // based on the "shape". let ident = match *substr.fields { - Struct(_) => substr.type_ident, + Struct(..) => substr.type_ident, EnumMatching(_, v, _) => v.node.name, EnumNonMatchingCollapsed(..) | StaticStruct(..) | StaticEnum(..) => { cx.span_bug(span, "nonsensical .fields in `#[derive(Debug)]`") @@ -76,11 +76,16 @@ fn show_substructure(cx: &mut ExtCtxt, span: Span, let builder_expr = cx.expr_ident(span, builder.clone()); let fmt = substr.nonself_args[0].clone(); + let is_struct = match *substr.fields { + Struct(vdata, _) => vdata, + EnumMatching(_, v, _) => &v.node.data, + _ => unreachable!() + }.is_struct(); let stmts = match *substr.fields { - Struct(ref fields) | EnumMatching(_, _, ref fields) => { + Struct(_, ref fields) | EnumMatching(_, _, ref fields) => { let mut stmts = vec![]; - if fields.is_empty() || fields[0].name.is_none() { + if !is_struct { // tuple struct/"normal" variant let expr = cx.expr_method_call(span, fmt, |
