Adjust types in TreeWalkEvaluator
This commit is contained in:
parent
cd1bb91555
commit
7289504ab7
@ -40,14 +40,14 @@ impl<'a, 'b> Evaluator<'a, 'b> {
|
|||||||
//TODO need to handle breaks, returns, etc.
|
//TODO need to handle breaks, returns, etc.
|
||||||
let mut ret = None;
|
let mut ret = None;
|
||||||
for stmt in statements.into_iter() {
|
for stmt in statements.into_iter() {
|
||||||
if let Some(MemoryValue::Primitive(prim)) = self.statement(stmt)? {
|
if let Some(prim) = self.statement(stmt)? {
|
||||||
ret = Some(prim);
|
ret = Some(prim);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(if let Some(ret) = ret { ret } else { self.expression(Expression::unit())? })
|
Ok(if let Some(ret) = ret { ret } else { self.expression(Expression::unit())? })
|
||||||
}
|
}
|
||||||
|
|
||||||
fn statement(&mut self, stmt: Statement) -> EvalResult<Option<MemoryValue>> {
|
fn statement(&mut self, stmt: Statement) -> EvalResult<Option<Primitive>> {
|
||||||
match stmt {
|
match stmt {
|
||||||
Statement::Binding { ref id, expr, constant: _ } => {
|
Statement::Binding { ref id, expr, constant: _ } => {
|
||||||
let evaluated = self.expression(expr)?;
|
let evaluated = self.expression(expr)?;
|
||||||
@ -56,7 +56,7 @@ impl<'a, 'b> Evaluator<'a, 'b> {
|
|||||||
}
|
}
|
||||||
Statement::Expression(expr) => {
|
Statement::Expression(expr) => {
|
||||||
let evaluated = self.expression(expr)?;
|
let evaluated = self.expression(expr)?;
|
||||||
Ok(Some(evaluated.into()))
|
Ok(Some(evaluated))
|
||||||
}
|
}
|
||||||
Statement::Return(expr) => unimplemented!(),
|
Statement::Return(expr) => unimplemented!(),
|
||||||
Statement::Break => unimplemented!(),
|
Statement::Break => unimplemented!(),
|
||||||
|
@ -88,15 +88,6 @@ impl From<Primitive> for MemoryValue {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MemoryValue {
|
|
||||||
fn to_repl(&self, type_context: &TypeContext) -> String {
|
|
||||||
match self {
|
|
||||||
MemoryValue::Primitive(ref prim) => prim.to_repl(type_context),
|
|
||||||
MemoryValue::Function(..) => "<function>".to_string(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
enum RuntimeValue {
|
enum RuntimeValue {
|
||||||
Expression(Expression),
|
Expression(Expression),
|
||||||
|
Loading…
Reference in New Issue
Block a user