From 6c6e7194c20f057f5d30dbafda329e2d0ad99ac1 Mon Sep 17 00:00:00 2001 From: Tim Kuehn Date: Thu, 1 Oct 2015 01:58:44 -0700 Subject: [PATCH] Fix 1-tuple regression. Add test to prevent future regressions. --- src/lib.rs | 1 + src/types.rs | 26 ++++++++++---------------- tests/target/fn_once.rs | 8 ++++++++ 3 files changed, 19 insertions(+), 16 deletions(-) create mode 100644 tests/target/fn_once.rs diff --git a/src/lib.rs b/src/lib.rs index fdf08c001a3f..c075589e99c4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,6 +11,7 @@ #![feature(rustc_private)] #![feature(custom_attribute)] #![feature(slice_splits)] +#![feature(slice_patterns)] #![feature(catch_panic)] #![allow(unused_attributes)] diff --git a/src/types.rs b/src/types.rs index 333c0164d832..b67ded94299e 100644 --- a/src/types.rs +++ b/src/types.rs @@ -483,22 +483,16 @@ impl Rewrite for ast::Ty { ty.rewrite(context, budget, offset + 1).map(|ty_str| format!("({})", ty_str)) } ast::TyTup(ref tup_ret) => { - let inner = try_opt!(tup_ret.iter() - .map(|item| item.rewrite(context, width, offset)) - .fold(Some("".to_owned()), - |sum, x| { - match (sum, x) { - (Some(sum), Some(x)) => { - if sum == "" { - // First item. - Some(x) - } else { - Some(sum + ", " + &x) - } - } - _ => None, - } - })); + let inner = if let [ref item] = &**tup_ret { + try_opt!(item.rewrite(context, width, offset)) + "," + } else { + let rewrites: Option>; + rewrites = tup_ret.iter() + .map(|item| item.rewrite(context, width, offset)) + .collect(); + + try_opt!(rewrites).join(", ") + }; let ret = format!("({})", inner); wrap_str(ret, context.config.max_width, width, offset) diff --git a/tests/target/fn_once.rs b/tests/target/fn_once.rs new file mode 100644 index 000000000000..42b8f98e78ab --- /dev/null +++ b/tests/target/fn_once.rs @@ -0,0 +1,8 @@ +struct Add(usize); + +impl FnOnce<(usize,)> for Add { + type Output = Add; + extern "rust-call" fn call_once(self, to: (usize,)) -> Add { + Add(self.0 + to.0) + } +}