Skip to content

Commit 399ba6b

Browse files
committed
Auto merge of #92314 - Kobzol:encoding-u16-leb128, r=michaelwoerister
Do not use LEB128 for encoding u16 and i16 An experiment to try out the suggestion from #68779. Closes: #68779
2 parents ddabe07 + 6c9ffe4 commit 399ba6b

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

Diff for: compiler/rustc_serialize/src/opaque.rs

+15-8
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,8 @@ impl serialize::Encoder for Encoder {
9292

9393
#[inline]
9494
fn emit_u16(&mut self, v: u16) -> EncodeResult {
95-
write_leb128!(self, v, u16, write_u16_leb128)
95+
self.data.extend_from_slice(&v.to_le_bytes());
96+
Ok(())
9697
}
9798

9899
#[inline]
@@ -123,7 +124,8 @@ impl serialize::Encoder for Encoder {
123124

124125
#[inline]
125126
fn emit_i16(&mut self, v: i16) -> EncodeResult {
126-
write_leb128!(self, v, i16, write_i16_leb128)
127+
self.data.extend_from_slice(&v.to_le_bytes());
128+
Ok(())
127129
}
128130

129131
#[inline]
@@ -446,7 +448,7 @@ impl serialize::Encoder for FileEncoder {
446448

447449
#[inline]
448450
fn emit_u16(&mut self, v: u16) -> FileEncodeResult {
449-
file_encoder_write_leb128!(self, v, u16, write_u16_leb128)
451+
self.write_all(&v.to_le_bytes())
450452
}
451453

452454
#[inline]
@@ -476,13 +478,12 @@ impl serialize::Encoder for FileEncoder {
476478

477479
#[inline]
478480
fn emit_i16(&mut self, v: i16) -> FileEncodeResult {
479-
file_encoder_write_leb128!(self, v, i16, write_i16_leb128)
481+
self.write_all(&v.to_le_bytes())
480482
}
481483

482484
#[inline]
483485
fn emit_i8(&mut self, v: i8) -> FileEncodeResult {
484-
let as_u8: u8 = unsafe { std::mem::transmute(v) };
485-
self.emit_u8(as_u8)
486+
self.emit_u8(v as u8)
486487
}
487488

488489
#[inline]
@@ -591,7 +592,10 @@ impl<'a> serialize::Decoder for Decoder<'a> {
591592

592593
#[inline]
593594
fn read_u16(&mut self) -> Result<u16, Self::Error> {
594-
read_leb128!(self, read_u16_leb128)
595+
let bytes = [self.data[self.position], self.data[self.position + 1]];
596+
let value = u16::from_le_bytes(bytes);
597+
self.position += 2;
598+
Ok(value)
595599
}
596600

597601
#[inline]
@@ -623,7 +627,10 @@ impl<'a> serialize::Decoder for Decoder<'a> {
623627

624628
#[inline]
625629
fn read_i16(&mut self) -> Result<i16, Self::Error> {
626-
read_leb128!(self, read_i16_leb128)
630+
let bytes = [self.data[self.position], self.data[self.position + 1]];
631+
let value = i16::from_le_bytes(bytes);
632+
self.position += 2;
633+
Ok(value)
627634
}
628635

629636
#[inline]

0 commit comments

Comments
 (0)