public static ILProcessor Sub(this ILProcessor processor, int value) { if (value == 0) { return(processor); } if (value < 0 && value >= -7) { return(processor.Add(InstructionUtility.LoadConstant(-value)).Add()); } return(processor.Add(InstructionUtility.LoadConstant(value)).Sub()); }
public static ILProcessor LdLoc(this ILProcessor processor, int index) { switch (index) { case 0: return(processor.Add(Instruction.Create(OpCodes.Ldloc_0))); case 1: return(processor.Add(Instruction.Create(OpCodes.Ldloc_1))); case 2: return(processor.Add(Instruction.Create(OpCodes.Ldloc_2))); case 3: return(processor.Add(Instruction.Create(OpCodes.Ldloc_3))); } return(processor.Add(Instruction.Create(index <= 255 ? OpCodes.Ldloc_S : OpCodes.Ldloc, processor.Body.Variables[index]))); }
public static ILProcessor LdC <T>(this ILProcessor processor, T value) where T : unmanaged { if (typeof(T) == typeof(byte)) { return(processor.Add(InstructionUtility.LoadConstant((sbyte)*(byte *)&value))); } if (typeof(T) == typeof(sbyte)) { return(processor.Add(InstructionUtility.LoadConstant(*(sbyte *)&value))); } if (typeof(T) == typeof(short)) { return(processor.Add(InstructionUtility.LoadConstant(*(short *)&value))); } if (typeof(T) == typeof(ushort)) { return(processor.Add(InstructionUtility.LoadConstant(*(ushort *)&value))); } if (typeof(T) == typeof(int)) { return(processor.Add(InstructionUtility.LoadConstant(*(int *)&value))); } if (typeof(T) == typeof(uint)) { return(processor.Add(InstructionUtility.LoadConstant(*(int *)&value))); } if (typeof(T) == typeof(long)) { return(processor.AddRange(InstructionUtility.LoadConstant(*(long *)&value))); } if (typeof(T) == typeof(ulong)) { return(processor.AddRange(InstructionUtility.LoadConstant(*(long *)&value))); } if (typeof(T) == typeof(float)) { return(processor.Add(InstructionUtility.LoadConstant(*(float *)&value))); } if (typeof(T) == typeof(double)) { return(processor.Add(InstructionUtility.LoadConstant(*(double *)&value))); } if (typeof(T) == typeof(bool)) { return(processor.Add(InstructionUtility.LoadConstant(*(bool *)&value))); } throw new ArgumentException("Type mismatch!" + typeof(T).Name); }
public static ILProcessor LdArg(this ILProcessor processor, int index) { switch (index) { case 0: return(processor.Add(Instruction.Create(OpCodes.Ldarg_0))); case 1: return(processor.Add(Instruction.Create(OpCodes.Ldarg_1))); case 2: return(processor.Add(Instruction.Create(OpCodes.Ldarg_2))); case 3: return(processor.Add(Instruction.Create(OpCodes.Ldarg_3))); default: var methodDefinition = processor.Body.Method; return(processor.Add(Instruction.Create(index <= sbyte.MaxValue ? OpCodes.Ldarg_S : OpCodes.Ldarg, methodDefinition.Parameters[index]))); } }
public static ILProcessor StLoc(this ILProcessor processor, int index) { switch (index) { case 0: return(processor.Add(Instruction.Create(OpCodes.Stloc_0))); case 1: return(processor.Add(Instruction.Create(OpCodes.Stloc_1))); case 2: return(processor.Add(Instruction.Create(OpCodes.Stloc_2))); case 3: return(processor.Add(Instruction.Create(OpCodes.Stloc_3))); } if (index <= byte.MaxValue) { return(processor.Add(Instruction.Create(OpCodes.Stloc_S, (byte)index))); } return(processor.Add(Instruction.Create(OpCodes.Stloc, index))); }
public static ILProcessor LdFldA(this ILProcessor processor, FieldReference fieldReference) => processor.Add(Instruction.Create(OpCodes.Ldflda, fieldReference));
public static ILProcessor Sub(this ILProcessor processor) => processor.Add(Instruction.Create(OpCodes.Sub));
public static ILProcessor LdStr(this ILProcessor processor, string value) => processor.Add(Instruction.Create(OpCodes.Ldstr, value));
public static ILProcessor LdC0Ceq(this ILProcessor processor) => processor.Add(Instruction.Create(OpCodes.Ldc_I4_0)).Add(Instruction.Create(OpCodes.Ceq));
public static ILProcessor CallVirtual(this ILProcessor processor, MethodReference methodReference) => processor.Add(Instruction.Create(OpCodes.Callvirt, methodReference));
public static ILProcessor Bne(this ILProcessor processor, Instruction instruction) => processor.Add(Instruction.Create(OpCodes.Bne_Un, instruction));
public static ILProcessor LdToken(this ILProcessor processor, FieldReference fieldReference) => processor.Add(Instruction.Create(OpCodes.Ldtoken, fieldReference));
public static ILProcessor Pop(this ILProcessor processor) => processor.Add(Instruction.Create(OpCodes.Pop));
public static ILProcessor And(this ILProcessor processor) => processor.Add(Instruction.Create(OpCodes.And));
public static ILProcessor Or(this ILProcessor processor) => processor.Add(Instruction.Create(OpCodes.Or));
public static ILProcessor Clt <T>(this ILProcessor processor) => processor.Add(InstructionUtility.Clt <T>());
public static ILProcessor LdObj(this ILProcessor processor, TypeReference typeReference) => processor.Add(Instruction.Create(OpCodes.Ldobj, typeReference));
public static ILProcessor BeqS(this ILProcessor processor, Instruction instruction) => processor.Add(Instruction.Create(OpCodes.Beq_S, instruction));
public static ILProcessor Ret(this ILProcessor processor) => processor.Add(Instruction.Create(OpCodes.Ret));
public static ILProcessor BleS <T>(this ILProcessor processor, Instruction instruction) => processor.Add(InstructionUtility.BleS <T>(instruction));
public static ILProcessor ConvIntPtr(this ILProcessor processor) => processor.Add(Instruction.Create(OpCodes.Conv_I));
public static ILProcessor NewArr(this ILProcessor processor, TypeReference elementTypeReference) => processor.Add(Instruction.Create(OpCodes.Newarr, elementTypeReference));
public static ILProcessor Ceq(this ILProcessor processor) => processor.Add(Instruction.Create(OpCodes.Ceq));
public static ILProcessor LdNull(this ILProcessor processor) => processor.Add(Instruction.Create(OpCodes.Ldnull));
public static ILProcessor ConvUnsigned(this ILProcessor processor) => processor.Add(Instruction.Create(OpCodes.Conv_U));