Exemplo n.º 1
0
        public EvaluationStack ExecuteTestCaseStandard(int offset, params StackItem[] args)
        {
            var context = InvocationStack.Pop();

            LoadContext(context.Clone(offset));
            for (var i = args.Length - 1; i >= 0; i--)
            {
                this.Push(args[i]);
            }
            var initializeOffset = GetMethodEntryOffset("_initialize");

            if (initializeOffset != -1)
            {
                LoadContext(CurrentContext.Clone(initializeOffset));
            }
            while (true)
            {
                var bfault = (this.State & VMState.FAULT) > 0;
                var bhalt  = (this.State & VMState.HALT) > 0;
                if (bfault || bhalt)
                {
                    break;
                }
                Console.WriteLine("op:[" +
                                  this.CurrentContext.InstructionPointer.ToString("X04") +
                                  "]" +
                                  this.CurrentContext.CurrentInstruction.OpCode);
                this.ExecuteNext();
            }
            return(this.ResultStack);
        }
Exemplo n.º 2
0
        public EvaluationStack ExecuteTestCaseStandard(int offset, ushort rvcount, NefFile contract, params StackItem[] args)
        {
            var context = InvocationStack.Pop();

            context = CreateContext(context.Script, rvcount, offset);
            LoadContext(context);
            // Mock contract
            var contextState = CurrentContext.GetState <ExecutionContextState>();

            contextState.Contract ??= new ContractState()
            {
                Nef = contract
            };
            for (var i = args.Length - 1; i >= 0; i--)
            {
                this.Push(args[i]);
            }
            var initializeOffset = GetMethodEntryOffset("_initialize");

            if (initializeOffset != -1)
            {
                LoadContext(CurrentContext.Clone(initializeOffset));
            }
            while (true)
            {
                var bfault = (this.State & VMState.FAULT) > 0;
                var bhalt  = (this.State & VMState.HALT) > 0;
                if (bfault || bhalt)
                {
                    break;
                }
                Console.WriteLine("op:[" +
                                  this.CurrentContext.InstructionPointer.ToString("X04") +
                                  "]" +
                                  this.CurrentContext.CurrentInstruction.OpCode);
                this.ExecuteNext();
            }
            return(this.ResultStack);
        }