From 3497138634bf58a7c29ef35f1f677dbde0633af8 Mon Sep 17 00:00:00 2001 From: Michael Woerister Date: Tue, 29 May 2018 17:49:35 +0200 Subject: [PATCH] Use u32 instead of usize of encoding byte count of multi-byte chars. --- src/libsyntax/codemap.rs | 6 +++--- src/libsyntax_pos/lib.rs | 20 +++++++++++++++++--- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/libsyntax/codemap.rs b/src/libsyntax/codemap.rs index 2aa2564b097..68882c4f063 100644 --- a/src/libsyntax/codemap.rs +++ b/src/libsyntax/codemap.rs @@ -822,14 +822,14 @@ impl CodeMap { total_extra_bytes += mbc.bytes - 1; // We should never see a byte position in the middle of a // character - assert!(bpos.to_usize() >= mbc.pos.to_usize() + mbc.bytes); + assert!(bpos.to_u32() >= mbc.pos.to_u32() + mbc.bytes); } else { break; } } - assert!(map.start_pos.to_usize() + total_extra_bytes <= bpos.to_usize()); - CharPos(bpos.to_usize() - map.start_pos.to_usize() - total_extra_bytes) + assert!(map.start_pos.to_u32() + total_extra_bytes <= bpos.to_u32()); + CharPos(bpos.to_usize() - map.start_pos.to_usize() - total_extra_bytes as usize) } // Return the index of the filemap (in self.files) which contains pos. diff --git a/src/libsyntax_pos/lib.rs b/src/libsyntax_pos/lib.rs index 266737dd7b6..93b65dac288 100644 --- a/src/libsyntax_pos/lib.rs +++ b/src/libsyntax_pos/lib.rs @@ -657,7 +657,7 @@ pub struct MultiByteChar { /// The absolute offset of the character in the CodeMap pub pos: BytePos, /// The number of bytes, >=2 - pub bytes: usize, + pub bytes: u32, } /// Identifies an offset of a non-narrow character in a FileMap @@ -1174,6 +1174,8 @@ fn remove_bom(src: &mut String) { pub trait Pos { fn from_usize(n: usize) -> Self; fn to_usize(&self) -> usize; + fn from_u32(n: u32) -> Self; + fn to_u32(&self) -> u32; } /// A byte offset. Keep this small (currently 32-bits), as AST contains @@ -1195,7 +1197,13 @@ impl Pos for BytePos { fn from_usize(n: usize) -> BytePos { BytePos(n as u32) } #[inline(always)] - fn to_usize(&self) -> usize { let BytePos(n) = *self; n as usize } + fn to_usize(&self) -> usize { self.0 as usize } + + #[inline(always)] + fn from_u32(n: u32) -> BytePos { BytePos(n) } + + #[inline(always)] + fn to_u32(&self) -> u32 { self.0 } } impl Add for BytePos { @@ -1233,7 +1241,13 @@ impl Pos for CharPos { fn from_usize(n: usize) -> CharPos { CharPos(n) } #[inline(always)] - fn to_usize(&self) -> usize { let CharPos(n) = *self; n } + fn to_usize(&self) -> usize { self.0 } + + #[inline(always)] + fn from_u32(n: u32) -> CharPos { CharPos(n as usize) } + + #[inline(always)] + fn to_u32(&self) -> u32 { self.0 as u32} } impl Add for CharPos {