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