using System; using System.Collections.Generic; using System.Reflection.Emit; using System.Text; using Sunweaver.Commands.Attributes; using Sunweaver.VM; namespace Sunweaver.Commands { [BasePair("Addition")] public class add : Abstracts.BinaryOperation { public override void Operation(long a, long b) { VM.Stack.Push(a + b); } public override void CompileOperation(ILGenerator il, Locals locals) { il.Emit(OpCodes.Ldloc, locals[typeof(VirtualMachine)]); il.Emit(OpCodes.Ldfld, typeof(VirtualMachine).GetField("Stack")); il.Emit(OpCodes.Ldloc, locals[typeof(long), 0]); il.Emit(OpCodes.Ldloc, locals[typeof(long), 1]); il.Emit(OpCodes.Add); il.Emit(OpCodes.Call, typeof(IntStack).GetMethod("Push")); } } }