Tightened up REPL loop
This commit is contained in:
parent
1f50fcc620
commit
0ace370fc2
34
src/main.rs
34
src/main.rs
@ -133,30 +133,28 @@ impl<'a> Repl<'a> {
|
|||||||
|
|
||||||
fn input_handler(&mut self, input: &str) -> String {
|
fn input_handler(&mut self, input: &str) -> String {
|
||||||
let mut result = String::new();
|
let mut result = String::new();
|
||||||
|
let intermediate: Result<String, String> =
|
||||||
let tokens = match tokenize(input) {
|
tokenize(input)
|
||||||
Err(e) => return format!("Tokenization error: {}", e.msg),
|
.map_err(|e| format!("Tokenization error: {}", e.msg))
|
||||||
Ok(t) => t,
|
.and_then(
|
||||||
};
|
|tokens| {
|
||||||
|
|
||||||
if self.show_tokens {
|
if self.show_tokens {
|
||||||
result.push_str(&format!("Tokens: {:?}\n", tokens));
|
result.push_str(&format!("Tokens: {:?}\n", tokens));
|
||||||
}
|
}
|
||||||
|
parse(&tokens, &[]).map_err(|e| format!("Parse error: {}", e.msg))
|
||||||
let ast = match parse(&tokens, &[]) {
|
})
|
||||||
Ok(ast) => ast,
|
.and_then(
|
||||||
Err(err) => return format!("Parse error: {}", err.msg),
|
|ast| {
|
||||||
};
|
|
||||||
|
|
||||||
if self.show_parse {
|
if self.show_parse {
|
||||||
result.push_str(&format!("AST: {:?}\n", ast));
|
result.push_str(&format!("AST: {:?}\n", ast));
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut output: Vec<String> = self.evaluator.run(ast);
|
|
||||||
|
|
||||||
// for now only handle last output
|
// for now only handle last output
|
||||||
let interpreter_result = output.pop().unwrap_or("".to_string());
|
let mut full_output: Vec<String> = self.evaluator.run(ast);
|
||||||
result.push_str(&interpreter_result);
|
Ok(full_output.pop().unwrap_or("".to_string()))
|
||||||
|
});
|
||||||
|
match intermediate {
|
||||||
|
Ok(s) | Err(s) => result.push_str(&s),
|
||||||
|
};
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -205,7 +203,7 @@ impl<'a> Repl<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_ => (),
|
e => println!("Unknown command: {}", e)
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user