示例#1
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="e">Arguments</param>
        public ExecutionEngine(ExecutionEngineArgs e) : base(e)
        {
            _interopCache      = new List <InteropCacheEntry>();
            _interopCacheIndex = new List <object>();

            _internalInvokeInterop = new NeoVM.InvokeInteropCallback(InternalInvokeInterop);
            _internalLoadScript    = new NeoVM.LoadScriptCallback(InternalLoadScript);
            _internalGetMessage    = new NeoVM.GetMessageCallback(InternalGetMessage);

            _handle = NeoVM.ExecutionEngine_Create
                      (
                _internalInvokeInterop, _internalLoadScript, _internalGetMessage,
                out IntPtr invHandle, out IntPtr resHandle
                      );

            if (_handle == IntPtr.Zero)
            {
                throw new ExternalException();
            }

            _invocationStack = new ExecutionContextStack(this, invHandle);
            _resultStack     = new StackItemStack(this, resHandle);

            if (Logger != null)
            {
                if (Logger.Verbosity.HasFlag(ELogVerbosity.StepInto))
                {
                    _internalOnStepInto = new NeoVM.OnStepIntoCallback(InternalOnStepInto);
                    NeoVM.ExecutionEngine_AddLog(_handle, _internalOnStepInto);
                }
            }
        }
示例#2
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="e">Arguments</param>
        public ExecutionEngine(ExecutionEngineArgs e) : base(e)
        {
            _InternalInvokeInterop = new NeoVM.InvokeInteropCallback(InternalInvokeInterop);
            _InternalLoadScript    = new NeoVM.LoadScriptCallback(InternalLoadScript);
            _InternalGetMessage    = new NeoVM.GetMessageCallback(InternalGetMessage);
            InteropCache           = new List <object>();

            Handle = NeoVM.ExecutionEngine_Create
                     (
                _InternalInvokeInterop, _InternalLoadScript, _InternalGetMessage,
                out IntPtr invHandle, out IntPtr resHandle
                     );

            if (Handle == IntPtr.Zero)
            {
                throw (new ExternalException());
            }

            _InvocationStack = new ExecutionContextStack(this, invHandle);
            _ResultStack     = new StackItemStack(this, resHandle);

            if (Logger != null)
            {
                if (Logger.Verbosity.HasFlag(ELogVerbosity.StepInto))
                {
                    _InternalOnStepInto = new NeoVM.OnStepIntoCallback(InternalOnStepInto);
                    NeoVM.ExecutionEngine_AddLog(Handle, _InternalOnStepInto);
                }

                if (Logger.Verbosity.HasFlag(ELogVerbosity.ExecutionContextStackChanges))
                {
                    _InternalOnExecutionContextChange = new NeoVM.OnStackChangeCallback(InternalOnExecutionContextChange);
                    NeoVM.ExecutionContextStack_AddLog(invHandle, _InternalOnExecutionContextChange);
                }

                if (Logger.Verbosity.HasFlag(ELogVerbosity.ResultStackChanges))
                {
                    _InternalOnResultStackChange = new NeoVM.OnStackChangeCallback(InternalOnResultStackChange);
                    NeoVM.StackItems_AddLog(resHandle, _InternalOnResultStackChange);
                }
            }
        }