#[derive(Clone,Copy)] pub struct CharAddress { /// The number of lines that precede this line in the file. pub line:usize, /// The number of characters that precede this character in the line. pub column:usize, } impl CharAddress { pub fn new(line:usize, column:usize) -> Self { Self { line, column } } pub fn zero() -> Self { Self::new(0,0) } } pub struct SourceLocation { /// The slice of the source file from which this token was parsed. pub source: String, /// The address of the first character of this token. pub start: CharAddress, /// The address of the final character of this token. pub end: CharAddress } impl SourceLocation { pub fn new(source:String, start:CharAddress, end:CharAddress) -> Self { Self { source, start, end } } pub fn zero() -> Self { Self { source:String::new(), start:CharAddress::zero(), end:CharAddress::zero() } } } pub struct BytecodeLocation { /// The number of bytes that precede this byte sequence in the bytecode. pub start: u16, /// The length of this byte sequence, in bytes. pub length: u16, } impl BytecodeLocation { pub fn zero() -> Self { Self { start:0, length:0 } } }