diff options
author | Vincent Ambo <mail@tazj.in> | 2021-01-14T15·36+0300 |
---|---|---|
committer | tazjin <mail@tazj.in> | 2021-01-14T16·53+0000 |
commit | 20a6cfeee233bde9ba1f482fa4545f5e395d6235 (patch) | |
tree | 95c0f22e1fc187135fa66010e22e3ae13d2e5b3c /users/tazjin/rlox/src/scanner.rs | |
parent | 1d8e3f4f8b4479a47e744b3d153fe0e624958817 (diff) |
refactor(tazjin/rlox): Let scanner tokens own their lexeme r/2107
This removes the runtime dependency on a borrow into the program source code. It's not yet ideal because there are a lot of tokens where we really don't care about the lexeme, but this is what the book does and I am not going to change that. Change-Id: I888e18f98597766d6f725cbf9241e8eb2bd839e2 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2394 Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI
Diffstat (limited to 'users/tazjin/rlox/src/scanner.rs')
-rw-r--r-- | users/tazjin/rlox/src/scanner.rs | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/users/tazjin/rlox/src/scanner.rs b/users/tazjin/rlox/src/scanner.rs index fde43975316f..36c2d6a966ae 100644 --- a/users/tazjin/rlox/src/scanner.rs +++ b/users/tazjin/rlox/src/scanner.rs @@ -53,15 +53,15 @@ pub enum TokenKind { } #[derive(Clone, Debug)] -pub struct Token<'a> { +pub struct Token { pub kind: TokenKind, - pub lexeme: &'a [char], + pub lexeme: String, pub line: usize, } struct Scanner<'a> { source: &'a [char], - tokens: Vec<Token<'a>>, + tokens: Vec<Token>, errors: Vec<Error>, start: usize, // offset of first character in current lexeme current: usize, // current offset into source @@ -82,7 +82,7 @@ impl<'a> Scanner<'a> { let lexeme = &self.source[self.start..self.current]; self.tokens.push(Token { kind, - lexeme, + lexeme: lexeme.into_iter().collect(), line: self.line, }) } @@ -263,7 +263,7 @@ impl<'a> Scanner<'a> { } } -pub fn scan<'a>(input: &'a [char]) -> Result<Vec<Token<'a>>, Vec<Error>> { +pub fn scan<'a>(input: &'a [char]) -> Result<Vec<Token>, Vec<Error>> { let mut scanner = Scanner { source: &input, tokens: vec![], |