From 8ccb5b96f51bcf8e1a1c3e81d1305ff08825f9b1 Mon Sep 17 00:00:00 2001 From: Ben Bridle Date: Tue, 4 Feb 2025 08:38:56 +1300 Subject: Rename locator sub-modules --- src/locators/bytecode.rs | 39 ++++++++++++++++++++ src/locators/bytecode_location.rs | 39 -------------------- src/locators/source.rs | 75 +++++++++++++++++++++++++++++++++++++++ src/locators/source_location.rs | 75 --------------------------------------- 4 files changed, 114 insertions(+), 114 deletions(-) create mode 100644 src/locators/bytecode.rs delete mode 100644 src/locators/bytecode_location.rs create mode 100644 src/locators/source.rs delete mode 100644 src/locators/source_location.rs (limited to 'src/locators') diff --git a/src/locators/bytecode.rs b/src/locators/bytecode.rs new file mode 100644 index 0000000..500e9f0 --- /dev/null +++ b/src/locators/bytecode.rs @@ -0,0 +1,39 @@ +pub struct BytecodeSpan { + /// The location of this span in the assembled bytecode. + pub location: BytecodeLocation, + /// The bytes which this span represents. + pub bytes: Vec, +} + + +impl Default for BytecodeSpan { + fn default() -> Self { + Self { + location: BytecodeLocation { + address: 0, + length: 0, + }, + bytes: Vec::new(), + } + } +} + + +#[derive(Clone, Copy)] +pub struct BytecodeLocation { + // Address of the first byte. + pub address: usize, + // Length as a number of bytes. + pub length: usize, +} + + +impl std::fmt::Display for BytecodeLocation { + fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> { + write!(f, "0x{:>04x}", self.address)?; + if self.length > 0 { + write!(f, "-0x{:>04x}", self.address + self.length)?; + } + Ok(()) + } +} diff --git a/src/locators/bytecode_location.rs b/src/locators/bytecode_location.rs deleted file mode 100644 index 500e9f0..0000000 --- a/src/locators/bytecode_location.rs +++ /dev/null @@ -1,39 +0,0 @@ -pub struct BytecodeSpan { - /// The location of this span in the assembled bytecode. - pub location: BytecodeLocation, - /// The bytes which this span represents. - pub bytes: Vec, -} - - -impl Default for BytecodeSpan { - fn default() -> Self { - Self { - location: BytecodeLocation { - address: 0, - length: 0, - }, - bytes: Vec::new(), - } - } -} - - -#[derive(Clone, Copy)] -pub struct BytecodeLocation { - // Address of the first byte. - pub address: usize, - // Length as a number of bytes. - pub length: usize, -} - - -impl std::fmt::Display for BytecodeLocation { - fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> { - write!(f, "0x{:>04x}", self.address)?; - if self.length > 0 { - write!(f, "-0x{:>04x}", self.address + self.length)?; - } - Ok(()) - } -} diff --git a/src/locators/source.rs b/src/locators/source.rs new file mode 100644 index 0000000..9fd1b2b --- /dev/null +++ b/src/locators/source.rs @@ -0,0 +1,75 @@ +use std::path::PathBuf; + + +#[derive(Clone)] +pub struct SourceSpan { + /// The source characters which this span represents. + pub string: String, + /// The location of this span in the merged source file. + pub in_merged: SourceLocation, + /// The location of this span in the original source file. + pub in_source: Option, +} + +impl SourceSpan { + pub fn location(&self) -> &SourceLocation { + self.in_source.as_ref().unwrap_or(&self.in_merged) + } +} + + +#[derive(Clone)] +pub struct SourceLocation { + /// File path the source was loaded from. + pub path: Option, + /// Position of the first character of the string. + pub start: Position, + /// Position of the final character of the string. + pub end: Position, +} + +impl std::fmt::Display for SourceLocation { + fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> { + let y = self.start.line + 1; + let x = self.start.column + 1; + match &self.path { + Some(path) => write!(f, "{}:{y}:{x}", path.as_os_str().to_string_lossy()), + None => write!(f, ":{y}:{x}"), + } + } +} + + +#[derive(Clone, Copy)] +pub struct Position { + /// The number of lines that precede this line in the source file. + pub line: usize, + /// The number of characters that precede this character in the line. + pub column: usize, +} + +impl Position { + pub fn to_next_char(&mut self) { + self.column += 1; + } + + pub fn to_next_line(&mut self) { + self.line += 1; + self.column = 0; + } + + pub fn advance(&mut self, c: char) { + match c { + '\n' => self.to_next_line(), + _ => self.to_next_char(), + } + } +} + +impl std::fmt::Display for Position { + fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> { + let y = self.line + 1; + let x = self.column + 1; + write!(f, "{y}:{x}") + } +} diff --git a/src/locators/source_location.rs b/src/locators/source_location.rs deleted file mode 100644 index 9fd1b2b..0000000 --- a/src/locators/source_location.rs +++ /dev/null @@ -1,75 +0,0 @@ -use std::path::PathBuf; - - -#[derive(Clone)] -pub struct SourceSpan { - /// The source characters which this span represents. - pub string: String, - /// The location of this span in the merged source file. - pub in_merged: SourceLocation, - /// The location of this span in the original source file. - pub in_source: Option, -} - -impl SourceSpan { - pub fn location(&self) -> &SourceLocation { - self.in_source.as_ref().unwrap_or(&self.in_merged) - } -} - - -#[derive(Clone)] -pub struct SourceLocation { - /// File path the source was loaded from. - pub path: Option, - /// Position of the first character of the string. - pub start: Position, - /// Position of the final character of the string. - pub end: Position, -} - -impl std::fmt::Display for SourceLocation { - fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> { - let y = self.start.line + 1; - let x = self.start.column + 1; - match &self.path { - Some(path) => write!(f, "{}:{y}:{x}", path.as_os_str().to_string_lossy()), - None => write!(f, ":{y}:{x}"), - } - } -} - - -#[derive(Clone, Copy)] -pub struct Position { - /// The number of lines that precede this line in the source file. - pub line: usize, - /// The number of characters that precede this character in the line. - pub column: usize, -} - -impl Position { - pub fn to_next_char(&mut self) { - self.column += 1; - } - - pub fn to_next_line(&mut self) { - self.line += 1; - self.column = 0; - } - - pub fn advance(&mut self, c: char) { - match c { - '\n' => self.to_next_line(), - _ => self.to_next_char(), - } - } -} - -impl std::fmt::Display for Position { - fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> { - let y = self.line + 1; - let x = self.column + 1; - write!(f, "{y}:{x}") - } -} -- cgit v1.2.3-70-g09d2