diff --git a/src/libcore/fmt/builders.rs b/src/libcore/fmt/builders.rs index e7b4cd1122c..d96da4cafb0 100644 --- a/src/libcore/fmt/builders.rs +++ b/src/libcore/fmt/builders.rs @@ -63,8 +63,13 @@ pub fn debug_struct_new<'a, 'b>(fmt: &'a mut fmt::Formatter<'b>, name: &str) impl<'a, 'b: 'a> DebugStruct<'a, 'b> { /// Adds a new field to the generated struct output. #[unstable(feature = "core", reason = "method was just created")] - pub fn field(mut self, name: &str, value: &S) -> DebugStruct<'a, 'b> - where S: fmt::Debug { + #[inline] + pub fn field(mut self, name: &str, value: &fmt::Debug) -> DebugStruct<'a, 'b> { + self.field_inner(name, value); + self + } + + fn field_inner(&mut self, name: &str, value: &fmt::Debug) { self.result = self.result.and_then(|_| { let prefix = if self.has_fields { "," @@ -81,13 +86,18 @@ impl<'a, 'b: 'a> DebugStruct<'a, 'b> { }); self.has_fields = true; - self } /// Consumes the `DebugStruct`, finishing output and returning any error /// encountered. #[unstable(feature = "core", reason = "method was just created")] + #[inline] pub fn finish(mut self) -> fmt::Result { + self.finish_inner(); + self.result + } + + fn finish_inner(&mut self) { if self.has_fields { self.result = self.result.and_then(|_| { if self.is_pretty() { @@ -97,7 +107,6 @@ impl<'a, 'b: 'a> DebugStruct<'a, 'b> { } }); } - self.result } fn is_pretty(&self) -> bool { @@ -127,7 +136,13 @@ pub fn debug_tuple_new<'a, 'b>(fmt: &'a mut fmt::Formatter<'b>, name: &str) -> D impl<'a, 'b: 'a> DebugTuple<'a, 'b> { /// Adds a new field to the generated tuple struct output. #[unstable(feature = "core", reason = "method was just created")] - pub fn field(mut self, value: &S) -> DebugTuple<'a, 'b> where S: fmt::Debug { + #[inline] + pub fn field(mut self, value: &fmt::Debug) -> DebugTuple<'a, 'b> { + self.field_inner(value); + self + } + + fn field_inner(&mut self, value: &fmt::Debug) { self.result = self.result.and_then(|_| { let (prefix, space) = if self.has_fields { (",", " ") @@ -144,13 +159,18 @@ impl<'a, 'b: 'a> DebugTuple<'a, 'b> { }); self.has_fields = true; - self } /// Consumes the `DebugTuple`, finishing output and returning any error /// encountered. #[unstable(feature = "core", reason = "method was just created")] + #[inline] pub fn finish(mut self) -> fmt::Result { + self.finish_inner(); + self.result + } + + fn finish_inner(&mut self) { if self.has_fields { self.result = self.result.and_then(|_| { if self.is_pretty() { @@ -160,7 +180,6 @@ impl<'a, 'b: 'a> DebugTuple<'a, 'b> { } }); } - self.result } fn is_pretty(&self) -> bool { @@ -190,7 +209,13 @@ pub fn debug_set_new<'a, 'b>(fmt: &'a mut fmt::Formatter<'b>, name: &str) -> Deb impl<'a, 'b: 'a> DebugSet<'a, 'b> { /// Adds a new entry to the set output. #[unstable(feature = "core", reason = "method was just created")] - pub fn entry(mut self, entry: &S) -> DebugSet<'a, 'b> where S: fmt::Debug { + #[inline] + pub fn entry(mut self, entry: &fmt::Debug) -> DebugSet<'a, 'b> { + self.entry_inner(entry); + self + } + + fn entry_inner(&mut self, entry: &fmt::Debug) { self.result = self.result.and_then(|_| { let prefix = if self.has_fields { "," @@ -207,21 +232,26 @@ impl<'a, 'b: 'a> DebugSet<'a, 'b> { }); self.has_fields = true; - self } /// Consumes the `DebugSet`, finishing output and returning any error /// encountered. #[unstable(feature = "core", reason = "method was just created")] - pub fn finish(self) -> fmt::Result { - self.result.and_then(|_| { + #[inline] + pub fn finish(mut self) -> fmt::Result { + self.finish_inner(); + self.result + } + + fn finish_inner(&mut self) { + self.result = self.result.and_then(|_| { let end = match (self.has_fields, self.is_pretty()) { (false, _) => "}", (true, false) => " }", (true, true) => "\n}", }; self.fmt.write_str(end) - }) + }); } fn is_pretty(&self) -> bool { @@ -251,8 +281,13 @@ pub fn debug_map_new<'a, 'b>(fmt: &'a mut fmt::Formatter<'b>, name: &str) -> Deb impl<'a, 'b: 'a> DebugMap<'a, 'b> { /// Adds a new entry to the map output. #[unstable(feature = "core", reason = "method was just created")] - pub fn entry(mut self, key: &K, value: &V) -> DebugMap<'a, 'b> - where K: fmt::Debug, V: fmt::Debug { + #[inline] + pub fn entry(mut self, key: &fmt::Debug, value: &fmt::Debug) -> DebugMap<'a, 'b> { + self.entry_inner(key, value); + self + } + + fn entry_inner(&mut self, key: &fmt::Debug, value: &fmt::Debug) { self.result = self.result.and_then(|_| { let prefix = if self.has_fields { "," @@ -269,21 +304,26 @@ impl<'a, 'b: 'a> DebugMap<'a, 'b> { }); self.has_fields = true; - self } /// Consumes the `DebugMap`, finishing output and returning any error /// encountered. #[unstable(feature = "core", reason = "method was just created")] - pub fn finish(self) -> fmt::Result { - self.result.and_then(|_| { + #[inline] + pub fn finish(mut self) -> fmt::Result { + self.finish_inner(); + self.result + } + + fn finish_inner(&mut self) { + self.result = self.result.and_then(|_| { let end = match (self.has_fields, self.is_pretty()) { (false, _) => "}", (true, false) => " }", (true, true) => "\n}", }; self.fmt.write_str(end) - }) + }); } fn is_pretty(&self) -> bool {