diff options
Diffstat (limited to 'users/tazjin/rlox/src/interpreter.rs')
-rw-r--r-- | users/tazjin/rlox/src/interpreter.rs | 31 |
1 files changed, 3 insertions, 28 deletions
diff --git a/users/tazjin/rlox/src/interpreter.rs b/users/tazjin/rlox/src/interpreter.rs index 5b03883b6c02..0b936e89d2e1 100644 --- a/users/tazjin/rlox/src/interpreter.rs +++ b/users/tazjin/rlox/src/interpreter.rs @@ -1,33 +1,8 @@ -use crate::errors::{report, Error, ErrorKind}; +use crate::errors::{Error, ErrorKind}; use crate::parser::{self, Declaration, Expr, Literal, Program, Statement}; -use crate::scanner::{self, TokenKind}; +use crate::scanner::TokenKind; use std::collections::HashMap; -// Run some Lox code and print it to stdout -pub fn run(code: &str) { - let chars: Vec<char> = code.chars().collect(); - - match scanner::scan(&chars) { - Ok(tokens) => match parser::parse(tokens) { - Ok(program) => { - let mut interpreter = Interpreter::default(); - println!("Program:\n{:?}", program); - if let Err(err) = interpreter.interpret(&program) { - println!("Error in program: {:?}", err); - } - } - Err(errors) => report_errors(errors), - }, - Err(errors) => report_errors(errors), - } -} - -fn report_errors(errors: Vec<Error>) { - for error in errors { - report(&error); - } -} - // Tree-walk interpreter #[derive(Debug, Default)] @@ -60,7 +35,7 @@ impl Environment { } #[derive(Debug, Default)] -struct Interpreter { +pub struct Interpreter { globals: Environment, } |