Commit | Line | Data |
---|---|---|
bbeb1b87 | 1 | extern crate mal; |
abdd56eb | 2 | |
bbeb1b87 AC |
3 | use mal::types::{MalVal, MalRet, MalError}; |
4 | use mal::types::MalError::{ErrString, ErrMalVal}; | |
5 | use mal::{readline, reader}; | |
abdd56eb JM |
6 | |
7 | // read | |
0ab374bc | 8 | fn read(str: String) -> MalRet { |
abdd56eb JM |
9 | reader::read_str(str) |
10 | } | |
11 | ||
12 | // eval | |
0ab374bc | 13 | fn eval(ast: MalVal) -> MalRet { |
abdd56eb JM |
14 | Ok(ast) |
15 | } | |
16 | ||
17 | ||
18 | fn print(exp: MalVal) -> String { | |
19 | exp.pr_str(true) | |
20 | } | |
21 | ||
fb439f3c JM |
22 | fn rep(str: &str) -> Result<String,MalError> { |
23 | let ast = try!(read(str.to_string())); | |
24 | //println!("read: {}", ast); | |
25 | let exp = try!(eval(ast)); | |
26 | Ok(print(exp)) | |
abdd56eb JM |
27 | } |
28 | ||
29 | fn main() { | |
30 | loop { | |
31 | let line = readline::mal_readline("user> "); | |
32 | match line { None => break, _ => () } | |
fb439f3c | 33 | match rep(&line.unwrap()) { |
abdd56eb | 34 | Ok(str) => println!("{}", str), |
3744d566 JM |
35 | Err(ErrMalVal(_)) => (), // Blank line |
36 | Err(ErrString(s)) => println!("Error: {}", s), | |
abdd56eb JM |
37 | } |
38 | } | |
39 | } |