Rename RuntimeValue -> MemoryValue
This commit is contained in:
parent
e4af5beb1c
commit
ec8ae05018
@ -14,7 +14,7 @@ type EvalResult<T> = Result<T, RuntimeError>;
|
|||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct State<'a> {
|
pub struct State<'a> {
|
||||||
environments: ScopeStack<'a, Memory, RuntimeValue>,
|
environments: ScopeStack<'a, Memory, MemoryValue>,
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO - eh, I dunno, maybe it doesn't matter exactly how memory works in the tree-walking
|
//TODO - eh, I dunno, maybe it doesn't matter exactly how memory works in the tree-walking
|
||||||
@ -79,12 +79,12 @@ fn paren_wrapped(terms: impl Iterator<Item=String>) -> String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
enum RuntimeValue {
|
enum MemoryValue {
|
||||||
Function(FunctionDefinition),
|
Function(FunctionDefinition),
|
||||||
Primitive(Primitive),
|
Primitive(Primitive),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<Primitive> for RuntimeValue {
|
impl From<Primitive> for MemoryValue {
|
||||||
fn from(prim: Primitive) -> Self {
|
fn from(prim: Primitive) -> Self {
|
||||||
Self::Primitive(prim)
|
Self::Primitive(prim)
|
||||||
}
|
}
|
||||||
@ -118,11 +118,11 @@ impl Primitive {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RuntimeValue {
|
impl MemoryValue {
|
||||||
fn to_repl(&self) -> String {
|
fn to_repl(&self) -> String {
|
||||||
match self {
|
match self {
|
||||||
RuntimeValue::Primitive(ref prim) => prim.to_repl(),
|
MemoryValue::Primitive(ref prim) => prim.to_repl(),
|
||||||
RuntimeValue::Function(..) => "<function>".to_string(),
|
MemoryValue::Function(..) => "<function>".to_string(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -182,7 +182,7 @@ impl<'a> State<'a> {
|
|||||||
|
|
||||||
for (def_id, function) in reduced.functions.into_iter() {
|
for (def_id, function) in reduced.functions.into_iter() {
|
||||||
let mem = (&def_id).into();
|
let mem = (&def_id).into();
|
||||||
self.environments.insert(mem, RuntimeValue::Function(function));
|
self.environments.insert(mem, MemoryValue::Function(function));
|
||||||
}
|
}
|
||||||
|
|
||||||
for statement in reduced.entrypoint.into_iter() {
|
for statement in reduced.entrypoint.into_iter() {
|
||||||
@ -204,7 +204,7 @@ impl<'a> State<'a> {
|
|||||||
//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(RuntimeValue::Primitive(prim)) = self.statement(stmt)? {
|
if let Some(MemoryValue::Primitive(prim)) = self.statement(stmt)? {
|
||||||
ret = Some(prim);
|
ret = Some(prim);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -215,7 +215,7 @@ impl<'a> State<'a> {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn statement(&mut self, stmt: Statement) -> EvalResult<Option<RuntimeValue>> {
|
fn statement(&mut self, stmt: Statement) -> EvalResult<Option<MemoryValue>> {
|
||||||
match stmt {
|
match stmt {
|
||||||
Statement::Binding { ref id, expr, constant: _ } => {
|
Statement::Binding { ref id, expr, constant: _ } => {
|
||||||
println!("eval() binding id: {}", id);
|
println!("eval() binding id: {}", id);
|
||||||
@ -240,21 +240,21 @@ impl<'a> State<'a> {
|
|||||||
match self.environments.lookup(&mem) {
|
match self.environments.lookup(&mem) {
|
||||||
// This just checks that the function exists in "memory" by ID, we don't
|
// This just checks that the function exists in "memory" by ID, we don't
|
||||||
// actually retrieve it until `apply_function()`
|
// actually retrieve it until `apply_function()`
|
||||||
Some(RuntimeValue::Function(_)) => Primitive::Callable(Callable::UserDefined(id.clone())),
|
Some(MemoryValue::Function(_)) => Primitive::Callable(Callable::UserDefined(id.clone())),
|
||||||
x => return Err(format!("Function not found for id: {} : {:?}", id, x).into()),
|
x => return Err(format!("Function not found for id: {} : {:?}", id, x).into()),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Lookup::Param(n) => {
|
Lookup::Param(n) => {
|
||||||
let mem = n.into();
|
let mem = n.into();
|
||||||
match self.environments.lookup(&mem) {
|
match self.environments.lookup(&mem) {
|
||||||
Some(RuntimeValue::Primitive(prim)) => prim.clone(),
|
Some(MemoryValue::Primitive(prim)) => prim.clone(),
|
||||||
e => return Err(format!("Param lookup error, got {:?}", e).into()),
|
e => return Err(format!("Param lookup error, got {:?}", e).into()),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Lookup::LocalVar(ref id) | Lookup::GlobalVar(ref id) => {
|
Lookup::LocalVar(ref id) | Lookup::GlobalVar(ref id) => {
|
||||||
let mem = id.into();
|
let mem = id.into();
|
||||||
match self.environments.lookup(&mem) {
|
match self.environments.lookup(&mem) {
|
||||||
Some(RuntimeValue::Primitive(expr)) => expr.clone(),
|
Some(MemoryValue::Primitive(expr)) => expr.clone(),
|
||||||
_ => return Err(format!("Nothing found for local/gloval variable lookup {}", id).into()),
|
_ => return Err(format!("Nothing found for local/gloval variable lookup {}", id).into()),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -262,7 +262,7 @@ impl<'a> State<'a> {
|
|||||||
Expression::Assign { ref lval, box rval } => {
|
Expression::Assign { ref lval, box rval } => {
|
||||||
let mem = lval.into();
|
let mem = lval.into();
|
||||||
let evaluated = self.expression(rval)?;
|
let evaluated = self.expression(rval)?;
|
||||||
self.environments.insert(mem, RuntimeValue::Primitive(evaluated));
|
self.environments.insert(mem, MemoryValue::Primitive(evaluated));
|
||||||
Primitive::unit()
|
Primitive::unit()
|
||||||
},
|
},
|
||||||
Expression::Call { box f, args } => self.call_expression(f, args)?,
|
Expression::Call { box f, args } => self.call_expression(f, args)?,
|
||||||
@ -281,7 +281,7 @@ impl<'a> State<'a> {
|
|||||||
Callable::UserDefined(def_id) => {
|
Callable::UserDefined(def_id) => {
|
||||||
let mem = (&def_id).into();
|
let mem = (&def_id).into();
|
||||||
match self.environments.lookup(&mem) {
|
match self.environments.lookup(&mem) {
|
||||||
Some(RuntimeValue::Function(FunctionDefinition { body })) => {
|
Some(MemoryValue::Function(FunctionDefinition { body })) => {
|
||||||
let body = body.clone(); //TODO ideally this clone would not happen
|
let body = body.clone(); //TODO ideally this clone would not happen
|
||||||
self.apply_function(body, args)
|
self.apply_function(body, args)
|
||||||
},
|
},
|
||||||
@ -408,7 +408,7 @@ impl<'a> State<'a> {
|
|||||||
for (n, evaled) in evaluated_args.into_iter().enumerate() {
|
for (n, evaled) in evaluated_args.into_iter().enumerate() {
|
||||||
let n = n as u8;
|
let n = n as u8;
|
||||||
let mem = n.into();
|
let mem = n.into();
|
||||||
frame_state.environments.insert(mem, RuntimeValue::Primitive(evaled));
|
frame_state.environments.insert(mem, MemoryValue::Primitive(evaled));
|
||||||
}
|
}
|
||||||
|
|
||||||
frame_state.block(body)
|
frame_state.block(body)
|
||||||
|
Loading…
Reference in New Issue
Block a user