about summary refs log tree commit diff
path: root/users/tazjin/rlox
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2021-02-26T20·29+0200
committertazjin <mail@tazj.in>2021-02-27T13·05+0000
commitebc987f4aaf653c227d21bec5998c62e87da7f7b (patch)
tree2e77522154cc293cfffb300017e538466bb8d464 /users/tazjin/rlox
parent2974d4b4b6330bde81382a0d23eed80fd315f762 (diff)
chore(tazjin/rlox): Implement From<ScannerError> for bytecode errors r/2234
Change-Id: I446c6e38cf239a132882d37df156884d319ca111
Reviewed-on: https://cl.tvl.fyi/c/depot/+/2553
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
Diffstat (limited to 'users/tazjin/rlox')
-rw-r--r--users/tazjin/rlox/src/bytecode/errors.rs23
-rw-r--r--users/tazjin/rlox/src/bytecode/mod.rs2
2 files changed, 22 insertions, 3 deletions
diff --git a/users/tazjin/rlox/src/bytecode/errors.rs b/users/tazjin/rlox/src/bytecode/errors.rs
index c7871bc384f2..513708df7e85 100644
--- a/users/tazjin/rlox/src/bytecode/errors.rs
+++ b/users/tazjin/rlox/src/bytecode/errors.rs
@@ -1,15 +1,18 @@
+use crate::scanner::ScannerError;
+
 use std::fmt;
 
 #[derive(Debug)]
 pub enum ErrorKind {
-    // CompileError,
-    // RuntimeError,
+    UnexpectedChar(char),
+    UnterminatedString,
     InternalError(&'static str),
 }
 
 #[derive(Debug)]
 pub struct Error {
     pub kind: ErrorKind,
+    pub line: usize,
 }
 
 impl fmt::Display for Error {
@@ -18,4 +21,20 @@ impl fmt::Display for Error {
     }
 }
 
+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,
+            },
+        }
+    }
+}
+
 pub type LoxResult<T> = Result<T, Error>;
diff --git a/users/tazjin/rlox/src/bytecode/mod.rs b/users/tazjin/rlox/src/bytecode/mod.rs
index 31278f8c4b8d..34ceaf28bfa4 100644
--- a/users/tazjin/rlox/src/bytecode/mod.rs
+++ b/users/tazjin/rlox/src/bytecode/mod.rs
@@ -19,7 +19,7 @@ impl crate::Lox for Interpreter {
         Interpreter {}
     }
 
-    fn interpret(&mut self, _: String) -> Result<Self::Value, Vec<Self::Error>> {
+    fn interpret(&mut self, code: String) -> Result<Self::Value, Vec<Self::Error>> {
         let chunk: Chunk = Default::default();
         vm::interpret(chunk).map_err(|e| vec![e])
     }