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)); }