public object AssignVariable(Expr expr, object value) { if (locals.ContainsKey(expr)) { return(environment.SetAt(locals[expr], ((Variable)expr).name, value)); } else { return(globals.Set(((Variable)expr).name, value)); } }
public object Set(Token name, object value) { if (!values.ContainsKey(name.lexeme)) { if (enclosing == null) { throw new ErrorHandler.RuntimeError(name, "Undefined variable '" + name.lexeme + "'"); } else { return(enclosing.Set(name, value)); } } if (values[name.lexeme].Item1) { throw new ErrorHandler.RuntimeError(name, "Can't assign to a constant"); } return(values[name.lexeme] = new Tuple <bool, object>(false, value)); }