public DekiScriptExpression Visit(DekiScriptAssign expr, DekiScriptExpressionEvaluationState state)
        {
            DekiScriptExpression result = expr.Value.VisitWith(this, state);
            DekiScriptLiteral    value  = (result is DekiScriptLiteral) ? (DekiScriptLiteral)result : DekiScriptUnknown.Value;

            if (expr.Define)
            {
                state.Env.Vars.Add(expr.Variable, value);
            }
            else
            {
                state.Env.Vars[expr.Variable] = value;
            }
            if (result is DekiScriptLiteral)
            {
                // NOTE: variable was assigned a value; it will be substituted into subsequent operations

                return(DekiScriptNil.Value);
            }
            if (expr.Define)
            {
                return(DekiScriptExpression.VarStatement(expr.Location, DekiScriptExpression.Id(expr.Location, expr.Variable), result));
            }
            return(DekiScriptExpression.LetStatement(expr.Location, DekiScriptExpression.Id(expr.Location, expr.Variable), result));
        }
 public DekiScriptOutputBuffer.Range Visit(DekiScriptAssign expr, DekiScriptExpressionEvaluationState state)
 {
     if (expr.Define)
     {
         state.Env.Vars.Add(expr.Variable, state.Pop(expr.Value.VisitWith(this, state)));
     }
     else
     {
         state.Env.Vars[expr.Variable] = state.Pop(expr.Value.VisitWith(this, state));
     }
     return(DekiScriptOutputBuffer.Range.Empty);
 }
 public DekiScriptLiteral Visit(DekiScriptAssign expr, DekiScriptEnv env)
 {
     if (expr.Define)
     {
         env.Locals.Add(expr.Variable, expr.Value.VisitWith(this, env));
     }
     else
     {
         env.Locals[expr.Variable] = expr.Value.VisitWith(this, env);
     }
     return(DekiScriptNil.Value);
 }
        public DekiScriptExpression Visit(DekiScriptAssign expr, DekiScriptOptimizerState state)
        {
            DekiScriptExpression result = expr.Value.VisitWith(this, state);
            DekiScriptLiteral    value  = (result is DekiScriptLiteral) ? (DekiScriptLiteral)result : DekiScriptUnknown.Value;

            if (expr.Define)
            {
                state.Env.Locals.Add(expr.Variable, value);
            }
            else
            {
                state.Env.Locals[expr.Variable] = value;
            }
            if (result is DekiScriptLiteral)
            {
                // NOTE: variable was assigned a value; it will be substituted into subsequent operations

                return(DekiScriptNil.Value);
            }
            return(new DekiScriptAssign(expr.Line, expr.Column, expr.Variable, result, expr.Define));
        }