refactor(tazjin/rlox): Prepare scanner for shared use

In the book, the clox interpreter has its own scanner which uses a
pull-based model for a single pass compiler.

I can't be bothered to write another scanner, or amend this one into
pull-mode to work with the treewalk interpreter, so instead I will
just reuse it and pull from a vector of tokens.

The tokens are shared between both interpreters and the scanner is not
what I'm interested in here.

Change-Id: Ib07e89127fce2b047f9b3e1ff7e9908d798b3b2b
Reviewed-on: https://cl.tvl.fyi/c/depot/+/2420
Reviewed-by: tazjin <mail@tazj.in>
Tested-by: BuildkiteCI
This commit is contained in:
Vincent Ambo 2021-01-18 20:27:14 +03:00 committed by tazjin
parent 2d136e0327
commit 5868d4bd49
5 changed files with 35 additions and 12 deletions

View file

@ -1,4 +1,6 @@
use crate::scanner::ScannerError;
use crate::treewalk::interpreter::Value;
use std::fmt;
#[derive(Debug)]
@ -39,3 +41,19 @@ impl fmt::Display for Error {
write!(f, "[line {}] Error: {:?}", self.line, self.kind)
}
}
impl From<ScannerError> for Error {
fn from(err: ScannerError) -> Self {
match err {
ScannerError::UnexpectedChar { line, unexpected } => Error {
line,
kind: ErrorKind::UnexpectedChar(unexpected),
},
ScannerError::UnterminatedString { line } => Error {
line,
kind: ErrorKind::UnterminatedString,
},
}
}
}