Fully implemented state
If I make the LanguageInterface trait over a pair of language and evaluator, then it works :)
This commit is contained in:
parent
4ea600d55c
commit
902c85ccd7
@ -46,7 +46,7 @@ pub trait LanguageInterface {
|
|||||||
fn evaluate_in_repl(&mut self, input: &str, options: LanguageInterfaceOptions) -> String;
|
fn evaluate_in_repl(&mut self, input: &str, options: LanguageInterfaceOptions) -> String;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<PL, T, A, E> LanguageInterface for PL where PL: ProgrammingLanguage<Token=T, AST=A, Evaluator=E>, T: Debug, A: Debug, E: EvaluationMachine {
|
impl<PL, T, A, E> LanguageInterface for (PL, PL::Evaluator) where PL: ProgrammingLanguage<Token=T, AST=A, Evaluator=E>, T: Debug, A: Debug, E: EvaluationMachine {
|
||||||
fn evaluate_in_repl(&mut self, input: &str, options: LanguageInterfaceOptions) -> String {
|
fn evaluate_in_repl(&mut self, input: &str, options: LanguageInterfaceOptions) -> String {
|
||||||
let mut output = String::new();
|
let mut output = String::new();
|
||||||
|
|
||||||
@ -79,8 +79,8 @@ impl<PL, T, A, E> LanguageInterface for PL where PL: ProgrammingLanguage<Token=T
|
|||||||
output.push_str(&s);
|
output.push_str(&s);
|
||||||
} else {
|
} else {
|
||||||
// for now only handle last output
|
// for now only handle last output
|
||||||
let mut evaluator = PL::Evaluator::new();
|
let ref mut evaluator = self.1;
|
||||||
let mut full_output: Vec<String> = PL::evaluate(ast, &mut evaluator);
|
let mut full_output: Vec<String> = PL::evaluate(ast, evaluator);
|
||||||
output.push_str(&full_output.pop().unwrap_or("".to_string()));
|
output.push_str(&full_output.pop().unwrap_or("".to_string()));
|
||||||
}
|
}
|
||||||
output
|
output
|
||||||
|
@ -116,7 +116,7 @@ impl<'a> Repl<'a> {
|
|||||||
show_tokens: false,
|
show_tokens: false,
|
||||||
show_parse: false,
|
show_parse: false,
|
||||||
show_llvm_ir: show_llvm,
|
show_llvm_ir: show_llvm,
|
||||||
languages: vec![Box::new(Schala::new())],
|
languages: vec![Box::new((Schala::new(), SchalaEvaluator::new(None)))],
|
||||||
evaluator: evaluator,
|
evaluator: evaluator,
|
||||||
interpreter_directive_sigil: '.',
|
interpreter_directive_sigil: '.',
|
||||||
reader: reader,
|
reader: reader,
|
||||||
|
Loading…
Reference in New Issue
Block a user