about summary refs log tree commit diff
path: root/users/tazjin/rlox/src/scanner.rs
diff options
context:
space:
mode:
Diffstat (limited to 'users/tazjin/rlox/src/scanner.rs')
-rw-r--r--users/tazjin/rlox/src/scanner.rs15
1 files changed, 10 insertions, 5 deletions
diff --git a/users/tazjin/rlox/src/scanner.rs b/users/tazjin/rlox/src/scanner.rs
index e0b04981b4a4..2eed89bd6beb 100644
--- a/users/tazjin/rlox/src/scanner.rs
+++ b/users/tazjin/rlox/src/scanner.rs
@@ -254,19 +254,18 @@ impl<'a> Scanner<'a> {
         self.add_token(token_kind);
     }
 
-    fn scan_tokens(mut self) -> Vec<Token<'a>> {
+    fn scan_tokens(&mut self) {
         while !self.is_at_end() {
             self.start = self.current;
             self.scan_token();
         }
 
         self.add_token(TokenKind::Eof);
-        return self.tokens;
     }
 }
 
-pub fn scan<'a>(input: &'a [char]) -> Vec<Token<'a>> {
-    let scanner = Scanner {
+pub fn scan<'a>(input: &'a [char]) -> Result<Vec<Token<'a>>, Vec<Error>> {
+    let mut scanner = Scanner {
         source: &input,
         tokens: vec![],
         errors: vec![],
@@ -275,5 +274,11 @@ pub fn scan<'a>(input: &'a [char]) -> Vec<Token<'a>> {
         line: 0,
     };
 
-    return scanner.scan_tokens();
+    scanner.scan_tokens();
+
+    if !scanner.errors.is_empty() {
+        return Err(scanner.errors);
+    }
+
+    return Ok(scanner.tokens);
 }