public Execute ( AbstractMachineState state ) : void | ||
state | AbstractMachineState | |
리턴 | 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();
}
}
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()); }