public DekiScriptLiteral Visit(DekiScriptVar expr, DekiScriptEnv env) { if (expr.Name.EqualsInvariant(DekiScriptRuntime.ENV_ID)) { DekiScriptMap vars = new DekiScriptMap(); vars.AddRange(env.Globals); vars.AddRange(env.Locals); return(vars); } // check if variable exists DekiScriptLiteral result = env[expr.Name]; if (result == null) { throw new DekiScriptUndefinedNameException(expr.Line, expr.Column, expr.Name); } result = DekiScriptRuntime.EvaluateProperty(result, env); return(result); }
public DekiScriptExpression Visit(DekiScriptVar expr, DekiScriptExpressionEvaluationState state) { if (expr.Name.EqualsInvariant(DekiScriptRuntime.ENV_ID)) { return(expr); } // check if variable exists DekiScriptLiteral result; if (!state.Env.Vars.TryGetValue(expr.Name, out result) && !state.Env.Vars.TryGetValue(expr.Name, out result)) { return(expr); } // check if variable is defined, but the value is unknown if (result is DekiScriptUnknown) { return(expr); } return(result); }
public DekiScriptOutputBuffer.Range Visit(DekiScriptVar expr, DekiScriptExpressionEvaluationState state) { if (expr.Name.EqualsInvariant(DekiScriptRuntime.ENV_ID)) { DekiScriptMap vars = new DekiScriptMap(); vars.AddRange(state.Env.Vars); return(state.Push(vars)); } // check if variable exists DekiScriptLiteral result; if (!state.Env.Vars.TryGetValue(expr.Name, out result)) { result = state.Runtime.ResolveMissingName(expr.Name); } if (result == null) { throw new DekiScriptUndefinedNameException(expr.Location, expr.Name); } result = state.Runtime.EvaluateProperty(expr.Location, result, state.Env); return(state.Push(result)); }