Evaluate printing
This commit is contained in:
parent
923566c4e9
commit
907af38f44
28
src/eval.rs
28
src/eval.rs
@ -123,7 +123,15 @@ impl Evaluator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn perform_side_effect(&mut self, side_effect: SideEffect) {
|
fn perform_side_effect(&mut self, side_effect: SideEffect) {
|
||||||
println!("lol doin' a side effect {:?}", side_effect);
|
use self::SideEffect::*;
|
||||||
|
match side_effect {
|
||||||
|
Print(s) => println!("{}", s),
|
||||||
|
Bundle(l) => {
|
||||||
|
for side_effect in l {
|
||||||
|
self.perform_side_effect(side_effect);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn reduce_astnode(&mut self, node: ASTNode) -> (ASTNode, Option<SideEffect>) {
|
fn reduce_astnode(&mut self, node: ASTNode) -> (ASTNode, Option<SideEffect>) {
|
||||||
@ -181,7 +189,12 @@ impl Evaluator {
|
|||||||
(self.reduce_binop(op, left, right), None) //can assume both arguments are maximally reduced
|
(self.reduce_binop(op, left, right), None) //can assume both arguments are maximally reduced
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Call(name, args) => self.reduce_call(name, args),
|
Call(name, args) => {
|
||||||
|
let reduced_args: Vec<Expression> = args.into_iter().map(|arg| {
|
||||||
|
self.reduce_expr(arg).0
|
||||||
|
}).collect();
|
||||||
|
self.reduce_call(name, reduced_args)
|
||||||
|
},
|
||||||
Conditional(_,_,_) => unimplemented!(),
|
Conditional(_,_,_) => unimplemented!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -223,6 +236,17 @@ impl Evaluator {
|
|||||||
|
|
||||||
fn reduce_call(&mut self, name: String, arguments: Vec<Expression>) -> (Expression, Option<SideEffect>) {
|
fn reduce_call(&mut self, name: String, arguments: Vec<Expression>) -> (Expression, Option<SideEffect>) {
|
||||||
use parser::Expression::*;
|
use parser::Expression::*;
|
||||||
|
|
||||||
|
//ugly hack for now
|
||||||
|
if name == "print" {
|
||||||
|
let mut s = String::new();
|
||||||
|
for arg in arguments {
|
||||||
|
s.push_str(&format!("{}\n", arg));
|
||||||
|
}
|
||||||
|
return (Null, Some(SideEffect::Print(s)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
let function = match self.lookup_function(name) {
|
let function = match self.lookup_function(name) {
|
||||||
Some(func) => func,
|
Some(func) => func,
|
||||||
None => return (Null, None)
|
None => return (Null, None)
|
||||||
|
Loading…
Reference in New Issue
Block a user