]> git.lizzy.rs Git - rust.git/commitdiff
Use write_char for writing padding characters
authorNick Fitzgerald <fitzgen@gmail.com>
Fri, 8 Feb 2019 09:02:24 +0000 (10:02 +0100)
committerNick Fitzgerald <fitzgen@gmail.com>
Fri, 8 Feb 2019 09:07:08 +0000 (10:07 +0100)
Removes some unsafe *and* saves almost half a kilobyte of code size.

src/libcore/fmt/mod.rs
src/test/run-make/wasm-stringify-ints-small/Makefile

index 605779046ef51407aeafded96af58d0346586eaf..4c0eb1eeb553024f22bca4d78d745475d5516908 100644 (file)
@@ -1039,24 +1039,19 @@ pub fn write(output: &mut dyn Write, args: Arguments) -> Result {
 /// Padding after the end of something. Returned by `Formatter::padding`.
 #[must_use = "don't forget to write the post padding"]
 struct PostPadding {
-    fill: [u8; 4],
-    fill_len: u32,
+    fill: char,
     padding: usize,
 }
 
 impl PostPadding {
-    /// Safety relies on `fill[..fill_len]` being a valid UTF-8 char.
-    unsafe fn new(fill: [u8; 4], fill_len: u32, padding: usize) -> PostPadding {
-        PostPadding { fill, fill_len, padding }
+    fn new(fill: char, padding: usize) -> PostPadding {
+        PostPadding { fill, padding }
     }
 
     /// Write this post padding.
     fn write(self, buf: &mut dyn Write) -> Result {
-        let fill = unsafe {
-            str::from_utf8_unchecked(&self.fill.get_unchecked(..self.fill_len as usize))
-        };
         for _ in 0..self.padding {
-            buf.write_str(fill)?;
+            buf.write_char(self.fill)?;
         }
         Ok(())
     }
@@ -1326,20 +1321,11 @@ fn padding(
             rt::v1::Alignment::Center => (padding / 2, (padding + 1) / 2),
         };
 
-        let mut fill = [0; 4];
-        let fill_len = {
-            let fill = self.fill.encode_utf8(&mut fill);
-
-            for _ in 0..pre_pad {
-                self.buf.write_str(fill)?;
-            }
-
-            fill.len()
-        };
+        for _ in 0..pre_pad {
+            self.buf.write_char(self.fill)?;
+        }
 
-        Ok(unsafe {
-            PostPadding::new(fill, fill_len as u32, post_pad)
-        })
+        Ok(PostPadding::new(self.fill, post_pad))
     }
 
     /// Takes the formatted parts and applies the padding.
index 18e47242f806b5f5e8f903e11a43616f9e82ad75..26de6a0c6899054c98f7890befd0639573a70e13 100644 (file)
@@ -4,7 +4,7 @@ ifeq ($(TARGET),wasm32-unknown-unknown)
 all:
        $(RUSTC) foo.rs -C lto -O --target wasm32-unknown-unknown
        wc -c < $(TMPDIR)/foo.wasm
-       [ "`wc -c < $(TMPDIR)/foo.wasm`" -lt "21000" ]
+       [ "`wc -c < $(TMPDIR)/foo.wasm`" -lt "20500" ]
 else
 all:
 endif