1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#![forbid(unsafe_code)]
pub mod interpreter;
pub mod model;
pub mod parser;
pub mod utils;
mod default_environment;
pub use default_environment::default_env;
#[macro_use]
mod macros;
use model::Env;
use std::io::{self, prelude::*};
use std::{cell::RefCell, rc::Rc};
pub fn start_repl(env: Option<Env>) {
let env_rc = Rc::new(RefCell::new(env.unwrap_or_else(default_env)));
print!("> ");
io::stdout().flush().unwrap();
for line in io::stdin().lock().lines() {
match interpreter::eval_block(
env_rc.clone(),
parser::parse(&line.unwrap()).filter_map(|a| a.ok()),
) {
Ok(val) => println!("{}", val),
Err(e) => println!("{}", e),
};
print!("> ");
io::stdout().flush().unwrap();
}
println!();
}