//--- Class Methods --- public static void Generate(DekiScriptGenerator expr, DekiScriptEval callback, DekiScriptExpressionEvaluationState state) { // set counter variable int counter = 0; var previousCounter = state.Env.Vars[DekiScriptRuntime.COUNT_ID]; try { state.Env.Vars.Add(DekiScriptRuntime.COUNT_ID, DekiScriptExpression.Constant(counter)); expr.VisitWith(Instance, new DekiScriptGeneratorEvaluationState(innerEnv => { callback(innerEnv); state.Env.Vars.Add(DekiScriptRuntime.COUNT_ID, DekiScriptExpression.Constant(++counter)); }, state)); } finally { state.Env.Vars.Add(DekiScriptRuntime.COUNT_ID, previousCounter); } }
//--- Methods --- public void Generate(DekiScriptGenerator expr, DekiScriptEval callback, DekiScriptEnv env) { expr.VisitWith(this, new DekiScriptGeneratorEvaluationState(callback, env)); }
//--- Constructors --- public DekiScriptGeneratorEvaluationState(DekiScriptEval callback, DekiScriptEnv env) { this.Callback = callback; this.Env = env; }
//--- Constructors --- public DekiScriptGeneratorEvaluationState(DekiScriptEval callback, DekiScriptExpressionEvaluationState state) { this.Callback = callback; this.State = state; }