Exemplo n.º 1
0
 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));
     }
 }
Exemplo n.º 2
0
        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));
        }