/// <summary> /// Constructor /// </summary> /// <param name="engine">Engine</param> /// <param name="handle">Handle</param> internal ExecutionContext(ExecutionEngine engine, IntPtr handle) : base(engine) { Handle = handle; Engine = engine; NeoVM.ExecutionContext_Claim(Handle, out IntPtr evHandle, out IntPtr altHandle); _AltStack = new StackItemStack(Engine, altHandle); _EvaluationStack = new StackItemStack(Engine, evHandle); if (engine.Logger == null) { return; } if (engine.Logger.Verbosity.HasFlag(ELogVerbosity.AltStackChanges)) { _InternalOnAltStackChange = new NeoVM.OnStackChangeCallback(InternalOnAltStackChange); NeoVM.StackItems_AddLog(altHandle, _InternalOnAltStackChange); } if (engine.Logger.Verbosity.HasFlag(ELogVerbosity.EvaluationStackChanges)) { _InternalOnEvaluationStackChange = new NeoVM.OnStackChangeCallback(InternalOnEvaluationStackChange); NeoVM.StackItems_AddLog(evHandle, _InternalOnEvaluationStackChange); } }
/// <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); } } }