Пример #1
0
        public object visitAssignExpr(Expr.Assign expr)
        {
            var value = evaluate(expr.value);

            if (locals.ContainsKey(expr))
            {
                environment.assignAt(locals[expr], expr.name, value);
            }
            else
            {
                globals.assign(expr.name, value);
            }

            return(value);
        }
        public void assign(Token name, object value)
        {
            if (values.ContainsKey(name.lexeme))
            {
                values[name.lexeme] = value;
                return;
            }

            if (enclosing != null)
            {
                enclosing.assign(name, value);
                return;
            }

            throw new RuntimeError(name, $"Undefined variable '{name.lexeme}'.");
        }