]> git.lizzy.rs Git - rust.git/commitdiff
Do not use LEB128 for encoding u16 and i16
authorJakub Beránek <berykubik@gmail.com>
Tue, 28 Dec 2021 08:29:08 +0000 (09:29 +0100)
committerJakub Beránek <berykubik@gmail.com>
Tue, 28 Dec 2021 08:29:08 +0000 (09:29 +0100)
compiler/rustc_serialize/src/opaque.rs

index cc1216418ae79306d54a5b46bb6b69a261afcdef..f2ef14816813ffcc8f97f94bace4b99c149ae28b 100644 (file)
@@ -92,7 +92,8 @@ fn emit_u32(&mut self, v: u32) -> EncodeResult {
 
     #[inline]
     fn emit_u16(&mut self, v: u16) -> EncodeResult {
-        write_leb128!(self, v, u16, write_u16_leb128)
+        self.data.extend_from_slice(&v.to_le_bytes());
+        Ok(())
     }
 
     #[inline]
@@ -123,7 +124,8 @@ fn emit_i32(&mut self, v: i32) -> EncodeResult {
 
     #[inline]
     fn emit_i16(&mut self, v: i16) -> EncodeResult {
-        write_leb128!(self, v, i16, write_i16_leb128)
+        self.data.extend_from_slice(&v.to_le_bytes());
+        Ok(())
     }
 
     #[inline]
@@ -446,7 +448,7 @@ fn emit_u32(&mut self, v: u32) -> FileEncodeResult {
 
     #[inline]
     fn emit_u16(&mut self, v: u16) -> FileEncodeResult {
-        file_encoder_write_leb128!(self, v, u16, write_u16_leb128)
+        self.write_all(&v.to_le_bytes())
     }
 
     #[inline]
@@ -476,13 +478,12 @@ fn emit_i32(&mut self, v: i32) -> FileEncodeResult {
 
     #[inline]
     fn emit_i16(&mut self, v: i16) -> FileEncodeResult {
-        file_encoder_write_leb128!(self, v, i16, write_i16_leb128)
+        self.write_all(&v.to_le_bytes())
     }
 
     #[inline]
     fn emit_i8(&mut self, v: i8) -> FileEncodeResult {
-        let as_u8: u8 = unsafe { std::mem::transmute(v) };
-        self.emit_u8(as_u8)
+        self.emit_u8(v as u8)
     }
 
     #[inline]
@@ -591,7 +592,10 @@ fn read_u32(&mut self) -> Result<u32, Self::Error> {
 
     #[inline]
     fn read_u16(&mut self) -> Result<u16, Self::Error> {
-        read_leb128!(self, read_u16_leb128)
+        let bytes = [self.data[self.position], self.data[self.position + 1]];
+        let value = u16::from_le_bytes(bytes);
+        self.position += 2;
+        Ok(value)
     }
 
     #[inline]
@@ -623,7 +627,10 @@ fn read_i32(&mut self) -> Result<i32, Self::Error> {
 
     #[inline]
     fn read_i16(&mut self) -> Result<i16, Self::Error> {
-        read_leb128!(self, read_i16_leb128)
+        let bytes = [self.data[self.position], self.data[self.position + 1]];
+        let value = i16::from_le_bytes(bytes);
+        self.position += 2;
+        Ok(value)
     }
 
     #[inline]