Interpreter - Variable assignment

This commit is contained in:
Emmanuel BENOîT 2022-12-31 16:36:29 +01:00
parent 8d6191c7ee
commit f4111577ca
2 changed files with 7 additions and 3 deletions

View file

@ -28,10 +28,10 @@ impl Environment {
}
/// Assign a value to an existing variable.
pub fn assign(&mut self, name: &Token, value: &Value) -> Result<(), InterpreterError> {
pub fn assign(&mut self, name: &Token, value: Value) -> InterpreterResult {
if self.values.contains_key(&name.lexeme as &str) {
self.values.insert(name.lexeme.clone(), value.clone());
Ok(())
self.values.insert(name.lexeme.clone(), value);
Ok(Value::Nil)
} else {
Err(InterpreterError::new(
name,

View file

@ -92,6 +92,10 @@ impl ast::StmtNode {
impl Interpretable for ast::ExprNode {
fn interprete(&self, environment: &mut Environment) -> InterpreterResult {
match self {
ast::ExprNode::Assignment{ name, value} => {
let value = value.interprete(environment)?;
environment.assign(name, value)
}
ast::ExprNode::Binary {
left,
operator,