summary refs log tree commit diff
path: root/src/libsyntax_ext
diff options
context:
space:
mode:
authorvarkor <github@varkor.com>2018-03-22 16:35:54 +0000
committervarkor <github@varkor.com>2018-03-22 16:35:54 +0000
commitad50f3389a13d74aa0088bcb39c406193b721769 (patch)
tree30af0f94caa13ff66e1256749903b9e11ac51ec7 /src/libsyntax_ext
parent0d278ca6a887b0adc2b1b852c09f24892b8397b4 (diff)
downloadrust-ad50f3389a13d74aa0088bcb39c406193b721769.tar.gz
rust-ad50f3389a13d74aa0088bcb39c406193b721769.zip
Optimise decode return expression for unit structs
Diffstat (limited to 'src/libsyntax_ext')
-rw-r--r--src/libsyntax_ext/deriving/encodable.rs10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/libsyntax_ext/deriving/encodable.rs b/src/libsyntax_ext/deriving/encodable.rs
index 743f22b6b31..88baa22e7fa 100644
--- a/src/libsyntax_ext/deriving/encodable.rs
+++ b/src/libsyntax_ext/deriving/encodable.rs
@@ -228,13 +228,13 @@ fn encodable_substructure(cx: &mut ExtCtxt,
             }
 
             // unit structs have no fields and need to return Ok()
-            if stmts.is_empty() {
+            let blk = if stmts.is_empty() {
                 let ok = cx.expr_ok(trait_span, cx.expr_tuple(trait_span, vec![]));
-                let ret_ok = cx.expr(trait_span, ExprKind::Ret(Some(ok)));
-                stmts.push(cx.stmt_expr(ret_ok));
-            }
+                cx.lambda1(trait_span, ok, blkarg)
+            } else {
+                cx.lambda_stmts_1(trait_span, stmts, blkarg)
+            };
 
-            let blk = cx.lambda_stmts_1(trait_span, stmts, blkarg);
             cx.expr_method_call(trait_span,
                                 encoder,
                                 cx.ident_of("emit_struct"),