refactor(tazjin/rlox): Retain interpreter state in REPL

Change-Id: Id60760e241ad0e45871b48e499f58e9831d57316
Reviewed-on: https://cl.tvl.fyi/c/depot/+/2298
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
This commit is contained in:
Vincent Ambo 2020-12-31 13:27:10 +03:00 committed by tazjin
parent 78355d3c0b
commit 8ab66f1689
2 changed files with 30 additions and 30 deletions

View file

@ -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,
}