Example #1
0
 public Instruction Create(OpCode opcode, byte value)
 {
     if (opcode.OperandType == OperandType.ShortInlineVar)
     {
         return(Instruction.Create(opcode, body.Variables[value]));
     }
     if (opcode.OperandType == OperandType.ShortInlineArg)
     {
         return(Instruction.Create(opcode, body.GetParameter(value)));
     }
     return(Instruction.Create(opcode, value));
 }
Example #2
0
        public static void ExpandMacro(ref OpCode opCode, ref object operand, MethodBody methodBody)
        {
            if (opCode.OpCodeType != OpCodeType.Macro)
                return;

            switch (opCode.Code) {
                case Code.Ldarg_0: 		opCode = OpCodes.Ldarg; operand = methodBody.GetParameter(0); break;
                case Code.Ldarg_1: 		opCode = OpCodes.Ldarg; operand = methodBody.GetParameter(1); break;
                case Code.Ldarg_2: 		opCode = OpCodes.Ldarg; operand = methodBody.GetParameter(2); break;
                case Code.Ldarg_3: 		opCode = OpCodes.Ldarg; operand = methodBody.GetParameter(3); break;
                case Code.Ldloc_0: 		opCode = OpCodes.Ldloc; operand = methodBody.Variables[0]; break;
                case Code.Ldloc_1: 		opCode = OpCodes.Ldloc; operand = methodBody.Variables[1]; break;
                case Code.Ldloc_2: 		opCode = OpCodes.Ldloc; operand = methodBody.Variables[2]; break;
                case Code.Ldloc_3: 		opCode = OpCodes.Ldloc; operand = methodBody.Variables[3]; break;
                case Code.Stloc_0: 		opCode = OpCodes.Stloc; operand = methodBody.Variables[0]; break;
                case Code.Stloc_1: 		opCode = OpCodes.Stloc; operand = methodBody.Variables[1]; break;
                case Code.Stloc_2: 		opCode = OpCodes.Stloc; operand = methodBody.Variables[2]; break;
                case Code.Stloc_3: 		opCode = OpCodes.Stloc; operand = methodBody.Variables[3]; break;
                case Code.Ldarg_S: 		opCode = OpCodes.Ldarg; break;
                case Code.Ldarga_S: 		opCode = OpCodes.Ldarga; break;
                case Code.Starg_S: 		opCode = OpCodes.Starg; break;
                case Code.Ldloc_S: 		opCode = OpCodes.Ldloc; break;
                case Code.Ldloca_S: 		opCode = OpCodes.Ldloca; break;
                case Code.Stloc_S: 		opCode = OpCodes.Stloc; break;
                case Code.Ldc_I4_M1: 	opCode = OpCodes.Ldc_I4; operand = -1; break;
                case Code.Ldc_I4_0: 		opCode = OpCodes.Ldc_I4; operand = 0; break;
                case Code.Ldc_I4_1: 		opCode = OpCodes.Ldc_I4; operand = 1; break;
                case Code.Ldc_I4_2: 		opCode = OpCodes.Ldc_I4; operand = 2; break;
                case Code.Ldc_I4_3: 		opCode = OpCodes.Ldc_I4; operand = 3; break;
                case Code.Ldc_I4_4: 		opCode = OpCodes.Ldc_I4; operand = 4; break;
                case Code.Ldc_I4_5: 		opCode = OpCodes.Ldc_I4; operand = 5; break;
                case Code.Ldc_I4_6: 		opCode = OpCodes.Ldc_I4; operand = 6; break;
                case Code.Ldc_I4_7: 		opCode = OpCodes.Ldc_I4; operand = 7; break;
                case Code.Ldc_I4_8: 		opCode = OpCodes.Ldc_I4; operand = 8; break;
                case Code.Ldc_I4_S: 		opCode = OpCodes.Ldc_I4; operand = (int) (sbyte) operand; break;
                case Code.Br_S: 			opCode = OpCodes.Br; break;
                case Code.Brfalse_S: 	opCode = OpCodes.Brfalse; break;
                case Code.Brtrue_S: 		opCode = OpCodes.Brtrue; break;
                case Code.Beq_S: 		opCode = OpCodes.Beq; break;
                case Code.Bge_S: 		opCode = OpCodes.Bge; break;
                case Code.Bgt_S: 		opCode = OpCodes.Bgt; break;
                case Code.Ble_S: 		opCode = OpCodes.Ble; break;
                case Code.Blt_S: 		opCode = OpCodes.Blt; break;
                case Code.Bne_Un_S: 		opCode = OpCodes.Bne_Un; break;
                case Code.Bge_Un_S: 		opCode = OpCodes.Bge_Un; break;
                case Code.Bgt_Un_S: 		opCode = OpCodes.Bgt_Un; break;
                case Code.Ble_Un_S: 		opCode = OpCodes.Ble_Un; break;
                case Code.Blt_Un_S:		opCode = OpCodes.Blt_Un; break;
                case Code.Leave_S:		opCode = OpCodes.Leave; break;
            }
        }
Example #3
0
 public ParameterDefinition GetParameter(int index)
 {
     return(body.GetParameter(index));
 }
Example #4
0
		public static void ExpandMacro(ref ILCode code, ref object operand, MethodBody methodBody)
		{
			switch (code) {
					case ILCode.__Ldarg_0:   code = ILCode.__Ldarg; operand = methodBody.GetParameter(0); break;
					case ILCode.__Ldarg_1:   code = ILCode.__Ldarg; operand = methodBody.GetParameter(1); break;
					case ILCode.__Ldarg_2:   code = ILCode.__Ldarg; operand = methodBody.GetParameter(2); break;
					case ILCode.__Ldarg_3:   code = ILCode.__Ldarg; operand = methodBody.GetParameter(3); break;
					case ILCode.__Ldloc_0:   code = ILCode.Ldloc; operand = methodBody.Variables[0]; break;
					case ILCode.__Ldloc_1:   code = ILCode.Ldloc; operand = methodBody.Variables[1]; break;
					case ILCode.__Ldloc_2:   code = ILCode.Ldloc; operand = methodBody.Variables[2]; break;
					case ILCode.__Ldloc_3:   code = ILCode.Ldloc; operand = methodBody.Variables[3]; break;
					case ILCode.__Stloc_0:   code = ILCode.Stloc; operand = methodBody.Variables[0]; break;
					case ILCode.__Stloc_1:   code = ILCode.Stloc; operand = methodBody.Variables[1]; break;
					case ILCode.__Stloc_2:   code = ILCode.Stloc; operand = methodBody.Variables[2]; break;
					case ILCode.__Stloc_3:   code = ILCode.Stloc; operand = methodBody.Variables[3]; break;
					case ILCode.__Ldarg_S:   code = ILCode.__Ldarg; break;
					case ILCode.__Ldarga_S:  code = ILCode.__Ldarga; break;
					case ILCode.__Starg_S:   code = ILCode.__Starg; break;
					case ILCode.__Ldloc_S:   code = ILCode.Ldloc; break;
					case ILCode.__Ldloca_S:  code = ILCode.Ldloca; break;
					case ILCode.__Stloc_S:   code = ILCode.Stloc; break;
					case ILCode.__Ldc_I4_M1: code = ILCode.Ldc_I4; operand = -1; break;
					case ILCode.__Ldc_I4_0:  code = ILCode.Ldc_I4; operand = 0; break;
					case ILCode.__Ldc_I4_1:  code = ILCode.Ldc_I4; operand = 1; break;
					case ILCode.__Ldc_I4_2:  code = ILCode.Ldc_I4; operand = 2; break;
					case ILCode.__Ldc_I4_3:  code = ILCode.Ldc_I4; operand = 3; break;
					case ILCode.__Ldc_I4_4:  code = ILCode.Ldc_I4; operand = 4; break;
					case ILCode.__Ldc_I4_5:  code = ILCode.Ldc_I4; operand = 5; break;
					case ILCode.__Ldc_I4_6:  code = ILCode.Ldc_I4; operand = 6; break;
					case ILCode.__Ldc_I4_7:  code = ILCode.Ldc_I4; operand = 7; break;
					case ILCode.__Ldc_I4_8:  code = ILCode.Ldc_I4; operand = 8; break;
					case ILCode.__Ldc_I4_S:  code = ILCode.Ldc_I4; operand = (int) (sbyte) operand; break;
					case ILCode.__Br_S:      code = ILCode.Br; break;
					case ILCode.__Brfalse_S: code = ILCode.__Brfalse; break;
					case ILCode.__Brtrue_S:  code = ILCode.Brtrue; break;
					case ILCode.__Beq_S:     code = ILCode.__Beq; break;
					case ILCode.__Bge_S:     code = ILCode.__Bge; break;
					case ILCode.__Bgt_S:     code = ILCode.__Bgt; break;
					case ILCode.__Ble_S:     code = ILCode.__Ble; break;
					case ILCode.__Blt_S:     code = ILCode.__Blt; break;
					case ILCode.__Bne_Un_S:  code = ILCode.__Bne_Un; break;
					case ILCode.__Bge_Un_S:  code = ILCode.__Bge_Un; break;
					case ILCode.__Bgt_Un_S:  code = ILCode.__Bgt_Un; break;
					case ILCode.__Ble_Un_S:  code = ILCode.__Ble_Un; break;
					case ILCode.__Blt_Un_S:  code = ILCode.__Blt_Un; break;
					case ILCode.__Leave_S:   code = ILCode.Leave; break;
					case ILCode.__Ldind_I:   code = ILCode.Ldobj; operand = methodBody.Method.Module.TypeSystem.IntPtr; break;
					case ILCode.__Ldind_I1:  code = ILCode.Ldobj; operand = methodBody.Method.Module.TypeSystem.SByte; break;
					case ILCode.__Ldind_I2:  code = ILCode.Ldobj; operand = methodBody.Method.Module.TypeSystem.Int16; break;
					case ILCode.__Ldind_I4:  code = ILCode.Ldobj; operand = methodBody.Method.Module.TypeSystem.Int32; break;
					case ILCode.__Ldind_I8:  code = ILCode.Ldobj; operand = methodBody.Method.Module.TypeSystem.Int64; break;
					case ILCode.__Ldind_U1:  code = ILCode.Ldobj; operand = methodBody.Method.Module.TypeSystem.Byte; break;
					case ILCode.__Ldind_U2:  code = ILCode.Ldobj; operand = methodBody.Method.Module.TypeSystem.UInt16; break;
					case ILCode.__Ldind_U4:  code = ILCode.Ldobj; operand = methodBody.Method.Module.TypeSystem.UInt32; break;
					case ILCode.__Ldind_R4:  code = ILCode.Ldobj; operand = methodBody.Method.Module.TypeSystem.Single; break;
					case ILCode.__Ldind_R8:  code = ILCode.Ldobj; operand = methodBody.Method.Module.TypeSystem.Double; break;
					case ILCode.__Stind_I:   code = ILCode.Stobj; operand = methodBody.Method.Module.TypeSystem.IntPtr; break;
					case ILCode.__Stind_I1:  code = ILCode.Stobj; operand = methodBody.Method.Module.TypeSystem.Byte; break;
					case ILCode.__Stind_I2:  code = ILCode.Stobj; operand = methodBody.Method.Module.TypeSystem.Int16; break;
					case ILCode.__Stind_I4:  code = ILCode.Stobj; operand = methodBody.Method.Module.TypeSystem.Int32; break;
					case ILCode.__Stind_I8:  code = ILCode.Stobj; operand = methodBody.Method.Module.TypeSystem.Int64; break;
					case ILCode.__Stind_R4:  code = ILCode.Stobj; operand = methodBody.Method.Module.TypeSystem.Single; break;
					case ILCode.__Stind_R8:  code = ILCode.Stobj; operand = methodBody.Method.Module.TypeSystem.Double; break;
			}
		}
Example #5
0
		public static void ExpandMacro(ref ILCode code, ref object operand, MethodBody methodBody)
		{
			switch (code) {
					case ILCode.__Ldarg_0: 		code = ILCode.Ldarg; operand = methodBody.GetParameter(0); break;
					case ILCode.__Ldarg_1: 		code = ILCode.Ldarg; operand = methodBody.GetParameter(1); break;
					case ILCode.__Ldarg_2: 		code = ILCode.Ldarg; operand = methodBody.GetParameter(2); break;
					case ILCode.__Ldarg_3: 		code = ILCode.Ldarg; operand = methodBody.GetParameter(3); break;
					case ILCode.__Ldloc_0: 		code = ILCode.Ldloc; operand = methodBody.Variables[0]; break;
					case ILCode.__Ldloc_1: 		code = ILCode.Ldloc; operand = methodBody.Variables[1]; break;
					case ILCode.__Ldloc_2: 		code = ILCode.Ldloc; operand = methodBody.Variables[2]; break;
					case ILCode.__Ldloc_3: 		code = ILCode.Ldloc; operand = methodBody.Variables[3]; break;
					case ILCode.__Stloc_0: 		code = ILCode.Stloc; operand = methodBody.Variables[0]; break;
					case ILCode.__Stloc_1: 		code = ILCode.Stloc; operand = methodBody.Variables[1]; break;
					case ILCode.__Stloc_2: 		code = ILCode.Stloc; operand = methodBody.Variables[2]; break;
					case ILCode.__Stloc_3: 		code = ILCode.Stloc; operand = methodBody.Variables[3]; break;
					case ILCode.__Ldarg_S: 		code = ILCode.Ldarg; break;
					case ILCode.__Ldarga_S: 		code = ILCode.Ldarga; break;
					case ILCode.__Starg_S: 		code = ILCode.Starg; break;
					case ILCode.__Ldloc_S: 		code = ILCode.Ldloc; break;
					case ILCode.__Ldloca_S: 		code = ILCode.Ldloca; break;
					case ILCode.__Stloc_S: 		code = ILCode.Stloc; break;
					case ILCode.__Ldc_I4_M1: 	code = ILCode.Ldc_I4; operand = -1; break;
					case ILCode.__Ldc_I4_0: 		code = ILCode.Ldc_I4; operand = 0; break;
					case ILCode.__Ldc_I4_1: 		code = ILCode.Ldc_I4; operand = 1; break;
					case ILCode.__Ldc_I4_2: 		code = ILCode.Ldc_I4; operand = 2; break;
					case ILCode.__Ldc_I4_3: 		code = ILCode.Ldc_I4; operand = 3; break;
					case ILCode.__Ldc_I4_4: 		code = ILCode.Ldc_I4; operand = 4; break;
					case ILCode.__Ldc_I4_5: 		code = ILCode.Ldc_I4; operand = 5; break;
					case ILCode.__Ldc_I4_6: 		code = ILCode.Ldc_I4; operand = 6; break;
					case ILCode.__Ldc_I4_7: 		code = ILCode.Ldc_I4; operand = 7; break;
					case ILCode.__Ldc_I4_8: 		code = ILCode.Ldc_I4; operand = 8; break;
					case ILCode.__Ldc_I4_S: 		code = ILCode.Ldc_I4; operand = (int) (sbyte) operand; break;
					case ILCode.__Br_S: 			code = ILCode.Br; break;
					case ILCode.__Brfalse_S: 	code = ILCode.__Brfalse; break;
					case ILCode.__Brtrue_S: 		code = ILCode.Brtrue; break;
					case ILCode.__Beq_S: 		code = ILCode.__Beq; break;
					case ILCode.__Bge_S: 		code = ILCode.__Bge; break;
					case ILCode.__Bgt_S: 		code = ILCode.__Bgt; break;
					case ILCode.__Ble_S: 		code = ILCode.__Ble; break;
					case ILCode.__Blt_S: 		code = ILCode.__Blt; break;
					case ILCode.__Bne_Un_S: 		code = ILCode.__Bne_Un; break;
					case ILCode.__Bge_Un_S: 		code = ILCode.__Bge_Un; break;
					case ILCode.__Bgt_Un_S: 		code = ILCode.__Bgt_Un; break;
					case ILCode.__Ble_Un_S: 		code = ILCode.__Ble_Un; break;
					case ILCode.__Blt_Un_S:		code = ILCode.__Blt_Un; break;
					case ILCode.__Leave_S:		code = ILCode.Leave; break;
			}
		}