Esempio n. 1
0
        /// <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);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="e">Arguments</param>
        public ExecutionEngine(ExecutionEngineArgs e) : base(e)
        {
            _interopCache = 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);
                }
            }
        }
Esempio n. 3
0
 /// <summary>
 /// Check Array (using peek)
 /// </summary>
 /// <param name="stack">Stack</param>
 /// <param name="isStruct">Is struct</param>
 /// <param name="values">Values</param>
 protected void CheckArrayPop(IStackItemsStack stack, bool isStruct, params object[] values)
 {
     using (var arr = stack.Pop <IArrayStackItem>())
     {
         Assert.IsTrue(arr != null);
         CheckArray(arr, isStruct, values);
     }
 }
Esempio n. 4
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="engine">Engine</param>
        /// <param name="handle">Handle</param>
        internal ExecutionContext(ExecutionEngine engine, IntPtr handle)
        {
            _handle = handle;
            NeoVM.ExecutionContext_Claim(_handle, out IntPtr evHandle, out IntPtr altHandle);

            _altStack        = new StackItemStack(engine, altHandle);
            _evaluationStack = new StackItemStack(engine, evHandle);
        }
Esempio n. 5
0
 /// <summary>
 /// Check Array (using peek)
 /// </summary>
 /// <param name="stack">Stack</param>
 /// <param name="index">Index</param>
 /// <param name="isStruct">Is struct</param>
 /// <param name="count">Count</param>
 /// <param name="values">Values</param>
 protected void CheckArrayPeek(IStackItemsStack stack, int index, bool isStruct, params object[] values)
 {
     using (var arr = stack.Peek <IArrayStackItem>(index))
     {
         Assert.IsTrue(arr != null);
         Assert.AreEqual(isStruct, arr.IsStruct);
         CheckArray(arr, isStruct, values);
     }
 }
Esempio n. 6
0
 /// <summary>
 /// Raise OnAltStackChange
 /// </summary>
 /// <param name="stack">Stack</param>
 /// <param name="item">Item</param>
 /// <param name="index">Index</param>
 /// <param name="operation">Operation</param>
 public virtual void RaiseOnAltStackChange(IStackItemsStack stack, IStackItem item, int index, ELogStackOperation operation)
 {
     OnAltStackChange?.Invoke(stack, item, index, operation);
 }