about summary refs log tree commit diff
path: root/src/libsyntax_ext/deriving/debug.rs
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2016-02-22 21:24:32 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2016-02-22 21:24:32 +0300
commit4e8e607d8469a8882944233e4bb3ee45d2a6435a (patch)
tree1383d1f4a4e8982ea73c7165a169ba0fa53912a2 /src/libsyntax_ext/deriving/debug.rs
parent98a59cf57e02b6e6a5a3bd74eb47b1422eaacc53 (diff)
downloadrust-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.rs11
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,