From 67470aea034fd46f4bbcfe815c51ad3451043188 Mon Sep 17 00:00:00 2001 From: Ben Bridle Date: Thu, 27 Feb 2025 14:53:21 +1300 Subject: Finish first working version of Torque This is a huge and messy commit, worked on piecemeal while traveling and while the language was still being designed. --- src/tokens/tracked.rs | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/tokens/tracked.rs (limited to 'src/tokens/tracked.rs') diff --git a/src/tokens/tracked.rs b/src/tokens/tracked.rs new file mode 100644 index 0000000..049c8f8 --- /dev/null +++ b/src/tokens/tracked.rs @@ -0,0 +1,47 @@ +use crate::*; + + +#[derive(Clone)] +pub struct Tracked { + pub source: SourceSpan, + pub value: T, +} + +impl Tracked { + pub fn from(value: T, source: &SourceSpan) -> Self { + Self { source: source.clone(), value } + } +} + +impl std::ops::Deref for Tracked { + type Target = T; + fn deref(&self) -> &T { + &self.value + } +} + +impl std::ops::DerefMut for Tracked { + fn deref_mut(&mut self) -> &mut T { + &mut self.value + } +} + +impl std::fmt::Display for Tracked { + fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> { + write!(f, "{}", self.value) + } +} + +impl std::fmt::Debug for Tracked { + fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> { + write!(f, "{:?}", self.value) + } +} + +impl PartialEq for Tracked { + fn eq(&self, other: &Tracked) -> bool { + self.value.eq(&other.value) + } +} + +impl Eq for Tracked {} -- cgit v1.2.3-70-g09d2