Example #1
0
File: Opcode.cs Project: WazWaz/KOS
        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);
        }
Example #2
0
File: Opcode.cs Project: WazWaz/KOS
 public override void Execute(CPU cpu)
 {
     object value1 = cpu.PopStack();
     object value2 = cpu.PopStack();
     cpu.PushStack(value1);
     cpu.PushStack(value2);
 }
Example #3
0
File: Opcode.cs Project: WazWaz/KOS
 public override void Execute(CPU cpu)
 {
     cpu.PushStack(argument);
 }
Example #4
0
File: Opcode.cs Project: WazWaz/KOS
        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);
        }
Example #5
0
File: Opcode.cs Project: WazWaz/KOS
 public override void Execute(CPU cpu)
 {
     object value = cpu.PopValue();
     bool result = Convert.ToBoolean(value);
     cpu.PushStack(result);
 }
Example #6
0
File: Opcode.cs Project: WazWaz/KOS
 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);
 }
Example #7
0
File: Opcode.cs Project: WazWaz/KOS
        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);
        }
Example #8
0
File: Opcode.cs Project: WazWaz/KOS
        public override void Execute(CPU cpu)
        {
            string suffixName = cpu.PopStack().ToString().ToUpper();
            object specialValue = cpu.PopValue();

            if (specialValue is SpecialValue)
            {
                object value = ((SpecialValue)specialValue).GetSuffix(suffixName);
                if (value != null)
                {
                    cpu.PushStack(value);
                }
                else
                {
                    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()));
            }
        }
Example #9
0
File: Opcode.cs Project: WazWaz/KOS
        public override void Execute(CPU cpu)
        {
            object index = cpu.PopValue();
            if (index is double || index is float)
            {
                index = Convert.ToInt32(index);  // allow expressions like (1.0) to be indexes
            }
            object list = cpu.PopValue();

            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");

            object value = ((IIndexable)list).GetIndex((int)index);
            cpu.PushStack(value);
        }
Example #10
0
File: Opcode.cs Project: WazWaz/KOS
 public override void Execute(CPU cpu)
 {
     object functionPointer = cpu.GetValue(destination);
     if (functionPointer is int)
     {
         int currentPointer = cpu.InstructionPointer;
         DeltaInstructionPointer = (int)functionPointer - currentPointer;
         cpu.PushStack(currentPointer + 1);
         cpu.MoveStackPointer(-1);
     }
     else
     {
         if (functionPointer is string)
         {
             string functionName = (string)functionPointer;
             functionName = functionName.Substring(0, functionName.Length - 2);
             cpu.CallBuiltinFunction(functionName);
         }
     }
 }