Exemple #1
0
        // 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;
            }
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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();
            }
        }