From f212e70c7acc0aa94d5bc2b41f662f795d299e29 Mon Sep 17 00:00:00 2001 From: Botahamec Date: Sat, 29 Jul 2023 22:35:51 -0400 Subject: Methods for reading the source directly --- src/scanner.rs | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/scanner.rs b/src/scanner.rs index 4e5ca21..b5b1850 100644 --- a/src/scanner.rs +++ b/src/scanner.rs @@ -13,6 +13,22 @@ impl Scanner { } } + pub fn source(&self) -> &[char] { + &self.source + } + + pub fn len(&self) -> usize { + self.source.len() + } + + pub fn is_empty(&self) -> bool { + self.len() == 0 + } + + pub fn get_char_at(&self, index: usize) -> Option { + self.source.get(index).cloned() + } + pub fn position(&self) -> usize { self.position } @@ -33,8 +49,9 @@ impl Scanner { Some(production) } - pub fn advance(&mut self, amount: usize) -> Option { - self.goto(self.position + amount) + pub fn advance(&mut self, amount: isize) -> Option { + let position = self.position.checked_add_signed(amount)?; + self.goto(position) } pub fn find_substring(&self, substring: impl AsRef) -> Option { -- cgit v1.2.3