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:
parent
78355d3c0b
commit
8ab66f1689
2 changed files with 30 additions and 30 deletions
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue