// Execution public void Start(DataParams paramsValue) { _stack.PushWindow(0, null, Locator); try { _serverProcess.PushExecutingProgram(this); try { _localParams = new DataParams(); DataParams localParamsValue = new DataParams(); if (_shouldPushLocals) { foreach (DataParam param in _serverProcess.ProcessLocals) { if (!ProcessLocals.Contains(param.Name)) { _localParams.Add(param); localParamsValue.Add(param); } } } if (paramsValue != null) { foreach (DataParam param in paramsValue) { localParamsValue.Add(param); } } foreach (DataParam param in localParamsValue) { _stack.Push(param.Modifier == Modifier.In ? DataValue.CopyValue(ValueManager, param.Value) : param.Value); } // Set the BreakNext flag for the process if the debugger is set to Break On Start ReportStart(); } catch { _serverProcess.PopExecutingProgram(this); throw; } } catch { _stack.PopWindow(); throw; } }
public object Execute(DataParams paramsValue) { object result; Start(paramsValue); try { long startTicks = TimingUtility.CurrentTicks; result = _code.Execute(this); _statistics.ExecuteTime = TimingUtility.TimeSpanFromTicks(startTicks); } finally { Stop(paramsValue); } return(result); }
public void Stop(DataParams paramsValue) { try { try { DataParams localParamsValue = new DataParams(); foreach (DataParam param in _localParams) { localParamsValue.Add(param); } if (paramsValue != null) { foreach (DataParam param in paramsValue) { localParamsValue.Add(param); } } for (int index = ProcessLocals.Count - 1; index >= 0; index--) { ProcessLocals[index].Value = _stack.Pop(); _serverProcess.AddProcessLocal(ProcessLocals[index]); } for (int index = localParamsValue.Count - 1; index >= 0; index--) { object tempValue = _stack.Pop(); if (localParamsValue[index].Modifier != Modifier.In) { localParamsValue[index].Value = tempValue; } } } finally { _serverProcess.PopExecutingProgram(this); } } finally { _stack.PopWindow(); } }