/// <summary>
            /// Updates the status based on the current <see cref="PExpr"/>.
            /// </summary>
            /// <param name="r">The current <see cref="PExpr"/>.</param>
            internal protected virtual void UpdateStatus(PExpr r)
            {
                _error  = (_result = r.Result) as RuntimeError;
                _status = ScriptEngineStatus.None;
                if (r.AsErrorResult != null)
                {
                    _status |= ScriptEngineStatus.IsError;
                }
                if (r.IsPending)
                {
                    Debug.Assert(r.DeferredStatus != PExpr.DeferredKind.None);
                    switch (r.DeferredStatus)
                    {
                    case PExpr.DeferredKind.Timeout: _status |= ScriptEngineStatus.Timeout; break;

                    case PExpr.DeferredKind.Breakpoint: _status |= ScriptEngineStatus.Breakpoint; break;

                    case PExpr.DeferredKind.AsyncCall: _status |= ScriptEngineStatus.AsyncCall; break;

                    case PExpr.DeferredKind.FirstChanceError: _status |= ScriptEngineStatus.FirstChanceError; break;

                    default: Debug.Fail("UpdateStatus"); break;
                    }
                }
                else
                {
                    _status |= ScriptEngineStatus.IsFinished;
                }
            }
 /// <summary>
 /// Resets the current execution. This frees the <see cref="ScriptEngine"/>: new calls to its <see cref="G:ScriptEngine.Execute"/> can be made.
 /// </summary>
 public void Dispose()
 {
     if (_visitor != null)
     {
         _engine.StopExecution();
         _error   = null;
         _result  = null;
         _status  = ScriptEngineStatus.None;
         _visitor = null;
     }
 }
 /// <summary>
 /// Updates the status based on the current <see cref="PExpr"/>.
 /// </summary>
 /// <param name="r">The current <see cref="PExpr"/>.</param>
 protected internal virtual void UpdateStatus( PExpr r )
 {
     _error = (_result = r.Result) as RuntimeError;
     _status = ScriptEngineStatus.None;
     if( r.AsErrorResult != null ) _status |= ScriptEngineStatus.IsError;
     if( r.IsPending )
     {
         Debug.Assert( r.DeferredStatus != PExpr.DeferredKind.None );
         switch( r.DeferredStatus )
         {
             case PExpr.DeferredKind.Timeout: _status |= ScriptEngineStatus.Timeout; break;
             case PExpr.DeferredKind.Breakpoint: _status |= ScriptEngineStatus.Breakpoint; break;
             case PExpr.DeferredKind.AsyncCall: _status |= ScriptEngineStatus.AsyncCall; break;
             case PExpr.DeferredKind.FirstChanceError: _status |= ScriptEngineStatus.FirstChanceError; break;
             default: Debug.Fail( "UpdateStatus" ); break;
         }
     }
     else _status |= ScriptEngineStatus.IsFinished;
 }
 /// <summary>
 /// Resets the current execution. This frees the <see cref="ScriptEngine"/>: new calls to its <see cref="G:ScriptEngine.Execute"/> can be made. 
 /// </summary>
 public void Dispose()
 {
     if( _visitor != null )
     {
         _engine.StopExecution();
         _error = null;
         _result = null;
         _status = ScriptEngineStatus.None;
         _visitor = null;
     }
 }