/// <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); } } }
/// <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); } } }