diff options
| author | varkor <github@varkor.com> | 2018-03-22 16:35:54 +0000 |
|---|---|---|
| committer | varkor <github@varkor.com> | 2018-03-22 16:35:54 +0000 |
| commit | ad50f3389a13d74aa0088bcb39c406193b721769 (patch) | |
| tree | 30af0f94caa13ff66e1256749903b9e11ac51ec7 /src/libsyntax_ext | |
| parent | 0d278ca6a887b0adc2b1b852c09f24892b8397b4 (diff) | |
| download | rust-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.rs | 10 |
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"), |
