Use u32 instead of usize of encoding byte count of multi-byte chars.

This commit is contained in:
Michael Woerister 2018-05-29 17:49:35 +02:00
parent 04d4da1bf9
commit 3497138634
2 changed files with 20 additions and 6 deletions

View file

@ -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.

View file

@ -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 {