public Nullable <DateTime> Step() { IsStarted = true; if (Stacks.Count == 0) { IsCompleted = true; return(null); } ExecStackItem current = Stacks.Peek(); if (!current.HasMoreExecution) { return(EndCall(current)); } object execution; ExecutionCallback callback; current.HasMoreExecution = (current.Execution.PopStack(out execution, out callback, current.Environment)); //Console.WriteLine("current is " + execution); if (execution is Execution2) { Execution2 exec = execution as Execution2; ExecutionEnvironment e = exec.StartCall(current.Environment); Stacks.Push(new ExecStackItem(exec, callback, e, current.Environment)); } else { return(EndCall(current)); } return(null); }
public RunThread(Instance instance, EventHandler fun, Event e, ExecutionEnvironment environment) { Instance = instance; fun.Event = e; IsStarted = false; IsCompleted = false; Stacks = new Stack <ExecStackItem>(); Execution2 exe = fun as Execution2; Environment = new ExecutionEnvironment(environment, instance); ExecutionEnvironment env = exe.StartCall(Environment); Stacks.Push(new ExecStackItem(exe, FinishCallback, env, Environment)); }