mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 01:04:03 +00:00
Make BytePos 32-bit
This commit is contained in:
parent
c4e28ae068
commit
5e1e487624
@ -29,7 +29,7 @@ use syntax::parse::token;
|
|||||||
use syntax::parse::token::{ident_interner, interner_get};
|
use syntax::parse::token::{ident_interner, interner_get};
|
||||||
use syntax::parse::token::special_idents;
|
use syntax::parse::token::special_idents;
|
||||||
use syntax::print::pprust::path_to_str;
|
use syntax::print::pprust::path_to_str;
|
||||||
use syntax::codemap::{Span, dummy_sp, BytePos};
|
use syntax::codemap::{Span, dummy_sp, Pos};
|
||||||
use syntax::opt_vec::OptVec;
|
use syntax::opt_vec::OptVec;
|
||||||
use syntax::visit;
|
use syntax::visit;
|
||||||
use syntax::visit::Visitor;
|
use syntax::visit::Visitor;
|
||||||
@ -2624,7 +2624,7 @@ impl Resolver {
|
|||||||
if "???" == module_name {
|
if "???" == module_name {
|
||||||
let span = Span {
|
let span = Span {
|
||||||
lo: span.lo,
|
lo: span.lo,
|
||||||
hi: span.lo + BytePos(segment_name.len()),
|
hi: span.lo + Pos::from_uint(segment_name.len()),
|
||||||
expn_info: span.expn_info,
|
expn_info: span.expn_info,
|
||||||
};
|
};
|
||||||
self.resolve_error(span,
|
self.resolve_error(span,
|
||||||
|
@ -29,9 +29,11 @@ pub trait Pos {
|
|||||||
fn to_uint(&self) -> uint;
|
fn to_uint(&self) -> uint;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A byte offset
|
/// A byte offset. Keep this small (currently 32-bits), as AST contains
|
||||||
|
/// a lot of them.
|
||||||
#[deriving(Clone, Eq, IterBytes, Ord)]
|
#[deriving(Clone, Eq, IterBytes, Ord)]
|
||||||
pub struct BytePos(uint);
|
pub struct BytePos(u32);
|
||||||
|
|
||||||
/// A character offset. Because of multibyte utf8 characters, a byte offset
|
/// A character offset. Because of multibyte utf8 characters, a byte offset
|
||||||
/// is not equivalent to a character offset. The CodeMap will convert BytePos
|
/// is not equivalent to a character offset. The CodeMap will convert BytePos
|
||||||
/// values to CharPos values as necessary.
|
/// values to CharPos values as necessary.
|
||||||
@ -42,8 +44,8 @@ pub struct CharPos(uint);
|
|||||||
// have been unsuccessful
|
// have been unsuccessful
|
||||||
|
|
||||||
impl Pos for BytePos {
|
impl Pos for BytePos {
|
||||||
fn from_uint(n: uint) -> BytePos { BytePos(n) }
|
fn from_uint(n: uint) -> BytePos { BytePos(n as u32) }
|
||||||
fn to_uint(&self) -> uint { **self }
|
fn to_uint(&self) -> uint { **self as uint }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Add<BytePos, BytePos> for BytePos {
|
impl Add<BytePos, BytePos> for BytePos {
|
||||||
@ -278,7 +280,7 @@ impl CodeMap {
|
|||||||
|
|
||||||
let filemap = @FileMap {
|
let filemap = @FileMap {
|
||||||
name: filename, substr: substr, src: src,
|
name: filename, substr: substr, src: src,
|
||||||
start_pos: BytePos(start_pos),
|
start_pos: Pos::from_uint(start_pos),
|
||||||
lines: @mut ~[],
|
lines: @mut ~[],
|
||||||
multibyte_chars: @mut ~[],
|
multibyte_chars: @mut ~[],
|
||||||
};
|
};
|
||||||
|
@ -241,7 +241,7 @@ pub fn bump(rdr: &mut StringReader) {
|
|||||||
let last_char = rdr.curr;
|
let last_char = rdr.curr;
|
||||||
let next = rdr.src.char_range_at(current_byte_offset);
|
let next = rdr.src.char_range_at(current_byte_offset);
|
||||||
let byte_offset_diff = next.next - current_byte_offset;
|
let byte_offset_diff = next.next - current_byte_offset;
|
||||||
rdr.pos = rdr.pos + BytePos(byte_offset_diff);
|
rdr.pos = rdr.pos + Pos::from_uint(byte_offset_diff);
|
||||||
rdr.curr = next.ch;
|
rdr.curr = next.ch;
|
||||||
rdr.col = rdr.col + CharPos(1u);
|
rdr.col = rdr.col + CharPos(1u);
|
||||||
if last_char == '\n' {
|
if last_char == '\n' {
|
||||||
@ -251,7 +251,7 @@ pub fn bump(rdr: &mut StringReader) {
|
|||||||
|
|
||||||
if byte_offset_diff > 1 {
|
if byte_offset_diff > 1 {
|
||||||
rdr.filemap.record_multibyte_char(
|
rdr.filemap.record_multibyte_char(
|
||||||
BytePos(current_byte_offset), byte_offset_diff);
|
Pos::from_uint(current_byte_offset), byte_offset_diff);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
rdr.curr = unsafe { transmute(-1u32) }; // FIXME: #8971: unsound
|
rdr.curr = unsafe { transmute(-1u32) }; // FIXME: #8971: unsound
|
||||||
@ -327,7 +327,7 @@ fn consume_any_line_comment(rdr: @mut StringReader)
|
|||||||
bump(rdr);
|
bump(rdr);
|
||||||
// line comments starting with "///" or "//!" are doc-comments
|
// line comments starting with "///" or "//!" are doc-comments
|
||||||
if rdr.curr == '/' || rdr.curr == '!' {
|
if rdr.curr == '/' || rdr.curr == '!' {
|
||||||
let start_bpos = rdr.pos - BytePos(3u);
|
let start_bpos = rdr.pos - BytePos(3);
|
||||||
while rdr.curr != '\n' && !is_eof(rdr) {
|
while rdr.curr != '\n' && !is_eof(rdr) {
|
||||||
bump(rdr);
|
bump(rdr);
|
||||||
}
|
}
|
||||||
@ -381,7 +381,7 @@ fn consume_block_comment(rdr: @mut StringReader)
|
|||||||
-> Option<TokenAndSpan> {
|
-> Option<TokenAndSpan> {
|
||||||
// block comments starting with "/**" or "/*!" are doc-comments
|
// block comments starting with "/**" or "/*!" are doc-comments
|
||||||
let is_doc_comment = rdr.curr == '*' || rdr.curr == '!';
|
let is_doc_comment = rdr.curr == '*' || rdr.curr == '!';
|
||||||
let start_bpos = rdr.pos - BytePos(if is_doc_comment {3u} else {2u});
|
let start_bpos = rdr.pos - BytePos(if is_doc_comment {3} else {2});
|
||||||
|
|
||||||
let mut level: int = 1;
|
let mut level: int = 1;
|
||||||
while level > 0 {
|
while level > 0 {
|
||||||
@ -809,7 +809,7 @@ fn next_token_inner(rdr: @mut StringReader) -> token::Token {
|
|||||||
// Byte offsetting here is okay because the
|
// Byte offsetting here is okay because the
|
||||||
// character before position `start` is an
|
// character before position `start` is an
|
||||||
// ascii single quote.
|
// ascii single quote.
|
||||||
start - BytePos(1u),
|
start - BytePos(1),
|
||||||
rdr.last_pos,
|
rdr.last_pos,
|
||||||
~"unterminated character constant");
|
~"unterminated character constant");
|
||||||
}
|
}
|
||||||
|
@ -608,7 +608,7 @@ impl Parser {
|
|||||||
token::GT => self.bump(),
|
token::GT => self.bump(),
|
||||||
token::BINOP(token::SHR) => self.replace_token(
|
token::BINOP(token::SHR) => self.replace_token(
|
||||||
token::GT,
|
token::GT,
|
||||||
self.span.lo + BytePos(1u),
|
self.span.lo + BytePos(1),
|
||||||
self.span.hi
|
self.span.hi
|
||||||
),
|
),
|
||||||
_ => self.fatal(format!("expected `{}`, found `{}`",
|
_ => self.fatal(format!("expected `{}`, found `{}`",
|
||||||
|
@ -2115,7 +2115,7 @@ pub fn maybe_print_trailing_comment(s: @ps, span: codemap::Span,
|
|||||||
if (*cmnt).style != comments::trailing { return; }
|
if (*cmnt).style != comments::trailing { return; }
|
||||||
let span_line = cm.lookup_char_pos(span.hi);
|
let span_line = cm.lookup_char_pos(span.hi);
|
||||||
let comment_line = cm.lookup_char_pos((*cmnt).pos);
|
let comment_line = cm.lookup_char_pos((*cmnt).pos);
|
||||||
let mut next = (*cmnt).pos + BytePos(1u);
|
let mut next = (*cmnt).pos + BytePos(1);
|
||||||
match next_pos { None => (), Some(p) => next = p }
|
match next_pos { None => (), Some(p) => next = p }
|
||||||
if span.hi < (*cmnt).pos && (*cmnt).pos < next &&
|
if span.hi < (*cmnt).pos && (*cmnt).pos < next &&
|
||||||
span_line.line == comment_line.line {
|
span_line.line == comment_line.line {
|
||||||
|
Loading…
Reference in New Issue
Block a user