Axiom.Runtime.Instructions.SetLocalValueInstruction.Execute C# (CSharp) Метод

Execute() публичный Метод

public Execute ( AbstractMachineState state ) : void
state AbstractMachineState
Результат void
        public override void Execute(AbstractMachineState state)
        {
            AMProgram program = (AMProgram)state.Program;
            AMHeap heap = (AMHeap)state.DataArea;

            AbstractTerm Vn = ((AbstractTerm)state[_vn]).Dereference();

            if (IsEnvironmentVariable(Vn,state))
            {
                // Push a new variable on the heap
                AbstractTerm newVariable = new AbstractTerm();
                heap.Push(newVariable);
                Vn.Bind((AbstractTerm)heap.Top());
            }
            else
            {
                AbstractTerm newHeapItem = new AbstractTerm();
                newHeapItem.Assign(Vn);
                heap.Push(newHeapItem);
            }

            program.Next();
        }

Usage Example

        public void SetLocalValue()
        {
            AbstractMachineState state = SetupMachine();

            EnvironmentFrame env = new EnvironmentFrame(null, null, 3);
            state.E = env;

            SetLocalValueInstruction i = new SetLocalValueInstruction();

            object[] args = { "X0" };

            i.Process(args);

            AbstractTerm X0 = (AbstractTerm)state["X0"];

            i.Execute(state);

            Assert.AreEqual("set_local_value", i.Name());
            Assert.AreEqual(1, i.NumberOfArguments());
            Assert.AreSame(X0.Dereference(), ((AbstractTerm)state["H"]).Dereference());
        }