Пример #1
0
 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());
 }
Пример #2
0
        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])));
        }
Пример #3
0
 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);
 }
Пример #4
0
        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])));
            }
        }
Пример #5
0
        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)));
        }
Пример #6
0
 public static ILProcessor LdFldA(this ILProcessor processor, FieldReference fieldReference) => processor.Add(Instruction.Create(OpCodes.Ldflda, fieldReference));
Пример #7
0
 public static ILProcessor Sub(this ILProcessor processor) => processor.Add(Instruction.Create(OpCodes.Sub));
Пример #8
0
 public static ILProcessor LdStr(this ILProcessor processor, string value) => processor.Add(Instruction.Create(OpCodes.Ldstr, value));
Пример #9
0
 public static ILProcessor LdC0Ceq(this ILProcessor processor) => processor.Add(Instruction.Create(OpCodes.Ldc_I4_0)).Add(Instruction.Create(OpCodes.Ceq));
Пример #10
0
 public static ILProcessor CallVirtual(this ILProcessor processor, MethodReference methodReference) => processor.Add(Instruction.Create(OpCodes.Callvirt, methodReference));
Пример #11
0
 public static ILProcessor Bne(this ILProcessor processor, Instruction instruction) => processor.Add(Instruction.Create(OpCodes.Bne_Un, instruction));
Пример #12
0
 public static ILProcessor LdToken(this ILProcessor processor, FieldReference fieldReference) => processor.Add(Instruction.Create(OpCodes.Ldtoken, fieldReference));
Пример #13
0
 public static ILProcessor Pop(this ILProcessor processor) => processor.Add(Instruction.Create(OpCodes.Pop));
Пример #14
0
 public static ILProcessor And(this ILProcessor processor) => processor.Add(Instruction.Create(OpCodes.And));
Пример #15
0
 public static ILProcessor Or(this ILProcessor processor) => processor.Add(Instruction.Create(OpCodes.Or));
Пример #16
0
 public static ILProcessor Clt <T>(this ILProcessor processor) => processor.Add(InstructionUtility.Clt <T>());
Пример #17
0
 public static ILProcessor LdObj(this ILProcessor processor, TypeReference typeReference) => processor.Add(Instruction.Create(OpCodes.Ldobj, typeReference));
Пример #18
0
 public static ILProcessor BeqS(this ILProcessor processor, Instruction instruction) => processor.Add(Instruction.Create(OpCodes.Beq_S, instruction));
Пример #19
0
 public static ILProcessor Ret(this ILProcessor processor) => processor.Add(Instruction.Create(OpCodes.Ret));
Пример #20
0
 public static ILProcessor BleS <T>(this ILProcessor processor, Instruction instruction) => processor.Add(InstructionUtility.BleS <T>(instruction));
Пример #21
0
 public static ILProcessor ConvIntPtr(this ILProcessor processor) => processor.Add(Instruction.Create(OpCodes.Conv_I));
Пример #22
0
 public static ILProcessor NewArr(this ILProcessor processor, TypeReference elementTypeReference) => processor.Add(Instruction.Create(OpCodes.Newarr, elementTypeReference));
Пример #23
0
 public static ILProcessor Ceq(this ILProcessor processor) => processor.Add(Instruction.Create(OpCodes.Ceq));
Пример #24
0
 public static ILProcessor LdNull(this ILProcessor processor) => processor.Add(Instruction.Create(OpCodes.Ldnull));
Пример #25
0
 public static ILProcessor ConvUnsigned(this ILProcessor processor) => processor.Add(Instruction.Create(OpCodes.Conv_U));