diff options
| author | Michael Woerister <michaelwoerister@posteo> | 2018-05-29 17:49:35 +0200 |
|---|---|---|
| committer | Michael Woerister <michaelwoerister@posteo> | 2018-06-27 14:00:34 +0200 |
| commit | 3497138634bf58a7c29ef35f1f677dbde0633af8 (patch) | |
| tree | 55d8150541740a2ed964a4b298995625c8c88e91 | |
| parent | 04d4da1bf9df23f1bc2ad22115642735bda8b39e (diff) | |
| download | rust-3497138634bf58a7c29ef35f1f677dbde0633af8.tar.gz rust-3497138634bf58a7c29ef35f1f677dbde0633af8.zip | |
Use u32 instead of usize of encoding byte count of multi-byte chars.
| -rw-r--r-- | src/libsyntax/codemap.rs | 6 | ||||
| -rw-r--r-- | 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 { |
