Axiom.Runtime.Instructions.PutVariableInstruction.Execute C# (CSharp) Method

Execute() public method

public Execute ( AbstractMachineState state ) : void
state AbstractMachineState
return void
        public override void Execute(AbstractMachineState state)
        {
            AMHeap heap = (AMHeap)state.DataArea;
            AMProgram program = (AMProgram)state.Program;

            if (_vn[0] == 'Y')
            {
                if (state.E[_vn] == null)
                {
                    throw new Exception("INTERNAL ERROR: Yn variable is null in E");
                }
                AbstractTerm Ai = (AbstractTerm)state[_ai];
                AbstractTerm Vn = (AbstractTerm)state.E[_vn];
                Ai.Assign(Vn);

                program.Next();
            }
            else
            {
                heap.Push(new AbstractTerm());

                AbstractTerm x = (AbstractTerm)state[_vn];
                AbstractTerm a = (AbstractTerm)state[_ai];

                x.Assign((AbstractTerm)heap.Top());
                a.Assign((AbstractTerm)heap.Top());

                program.Next();
            }
        }

Usage Example

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

            state.E = new EnvironmentFrame(null, null, 10);

            PutVariableInstruction i = new PutVariableInstruction();

            object[] args = { "Y0", "X0" };

            i.Process(args);

            i.Execute(state);

            Assert.AreEqual("put_variable", i.Name());
            Assert.AreEqual(2, i.NumberOfArguments());
            Assert.IsTrue(state.E["Y0"].IsReference);
            Assert.AreSame(state.E["Y0"].Dereference(), ((AbstractTerm)state["X0"]).Dereference());
        }
All Usage Examples Of Axiom.Runtime.Instructions.PutVariableInstruction::Execute