public override void Execute(CPU cpu) { argument2 = cpu.PopValue(); argument1 = cpu.PopValue(); // convert floats to doubles if (argument1 is float) argument1 = Convert.ToDouble(argument1); if (argument2 is float) argument2 = Convert.ToDouble(argument2); Calculator calc = Calculator.GetCalculator(argument1, argument2); object result = ExecuteCalculation(calc); cpu.PushStack(result); }
public override void Execute(CPU cpu) { object value = cpu.PopValue(); string identifier = (string)cpu.PopStack(); cpu.SetValue(identifier, value); }
public override void Execute(CPU cpu) { object value = cpu.PopValue(); string suffixName = cpu.PopStack().ToString().ToUpper(); object specialValue = cpu.PopValue(); if (specialValue is SpecialValue) { if (!((SpecialValue)specialValue).SetSuffix(suffixName, value)) { throw new Exception(string.Format("Suffix {0} not found on object", suffixName)); } } else { throw new Exception(string.Format("Values of type {0} cannot have suffixes", specialValue.GetType().ToString())); } }
public override void Execute(CPU cpu) { object value = cpu.PopValue(); object index = cpu.PopValue(); object list = cpu.PopValue(); if (index is double || index is float) { index = Convert.ToInt32(index); // allow expressions like (1.0) to be indexes } if (!(list is IIndexable)) throw new Exception(string.Format("Can't iterate on an object of type {0}", list.GetType())); if (!(index is int)) throw new Exception("The index must be an integer number"); if (value != null) { ((IIndexable)list).SetIndex((int)index, value); } }
public override void Execute(CPU cpu) { cpu.MoveStackPointer(1); int destinationPointer = (int)cpu.PopValue(); int currentPointer = cpu.InstructionPointer; DeltaInstructionPointer = destinationPointer - currentPointer; }
public override void Execute(CPU cpu) { int functionPointer = (int)cpu.PopValue(); cpu.RemoveTrigger(functionPointer); }
public override void Execute(CPU cpu) { object value = cpu.PopValue(); object result; if (value is int) result = -((int)value); else if (value is float) result = -(Convert.ToDouble(value)); else if (value is double) result = -((double)value); else throw new ArgumentException(string.Format("Can't negate object {0} of type {1}", value, value.GetType())); cpu.PushStack(result); }
public override void Execute(CPU cpu) { object value = cpu.PopValue(); bool result = Convert.ToBoolean(value); cpu.PushStack(result); }
public override void Execute(CPU cpu) { bool argument2 = Convert.ToBoolean(cpu.PopValue()); bool argument1 = Convert.ToBoolean(cpu.PopValue()); object result = argument1 | argument2; cpu.PushStack(result); }
public override void Execute(CPU cpu) { object value = cpu.PopValue(); object result; if (value is bool) result = !((bool)value); else if (value is int) result = (int)(Convert.ToBoolean(value) ? 0 : 1); else if ((value is double) || (value is float)) result = (double)(Convert.ToBoolean(value) ? 0.0 : 1.0); else throw new ArgumentException(string.Format("Can't negate object {0} of type {1}", value, value.GetType())); cpu.PushStack(result); }
public override void Execute(CPU cpu) { bool condition = Convert.ToBoolean(cpu.PopValue()); if (!condition) DeltaInstructionPointer = distance; else DeltaInstructionPointer = 1; }
public override void Execute(CPU cpu) { int functionPointer = (int)cpu.PopValue(); cpu.AddTrigger(functionPointer); if (shouldWait) cpu.StartWait(0); }
public override void Execute(CPU cpu) { object waitTime = cpu.PopValue(); if (waitTime is double) cpu.StartWait((double)waitTime); else if (waitTime is int) cpu.StartWait((int)waitTime); }