private void ExpandMacro(MsilInstruction instruction)
{
switch (instruction.OpCode.Code)
{
case MsilCode.Br_S:
instruction.OpCode = MsilOpCodes.Br;
break;
case MsilCode.Leave_S:
instruction.OpCode = MsilOpCodes.Leave;
break;
case MsilCode.Brfalse_S:
instruction.OpCode = MsilOpCodes.Brfalse;
break;
case MsilCode.Brtrue_S:
instruction.OpCode = MsilOpCodes.Brtrue;
break;
case MsilCode.Beq_S:
instruction.OpCode = MsilOpCodes.Beq;
break;
case MsilCode.Bge_S:
instruction.OpCode = MsilOpCodes.Bge;
break;
case MsilCode.Bge_Un_S:
instruction.OpCode = MsilOpCodes.Bge_Un;
break;
case MsilCode.Bgt_S:
instruction.OpCode = MsilOpCodes.Bgt;
break;
case MsilCode.Bgt_Un_S:
instruction.OpCode = MsilOpCodes.Bgt_Un;
break;
case MsilCode.Ble_S:
instruction.OpCode = MsilOpCodes.Ble;
break;
case MsilCode.Ble_Un_S:
instruction.OpCode = MsilOpCodes.Ble_Un;
break;
case MsilCode.Blt_S:
instruction.OpCode = MsilOpCodes.Blt;
break;
case MsilCode.Blt_Un_S:
instruction.OpCode = MsilOpCodes.Blt_Un;
break;
case MsilCode.Bne_Un_S:
instruction.OpCode = MsilOpCodes.Bne_Un;
break;
case MsilCode.Ldloc_S:
instruction.OpCode = MsilOpCodes.Ldloc;
break;
case MsilCode.Ldloca_S:
instruction.OpCode = MsilOpCodes.Ldloca;
break;
case MsilCode.Ldloc_0:
case MsilCode.Ldloc_1:
case MsilCode.Ldloc_2:
case MsilCode.Ldloc_3:
instruction.Operand = ((IOperandResolver) this).ResolveVariable(instruction.OpCode.Name[instruction.OpCode.Name.Length - 1] - 48);
instruction.OpCode = MsilOpCodes.Ldloc;
break;
case MsilCode.Stloc_S:
instruction.OpCode = MsilOpCodes.Stloc;
break;
case MsilCode.Stloc_0:
case MsilCode.Stloc_1:
case MsilCode.Stloc_2:
case MsilCode.Stloc_3:
instruction.Operand = ((IOperandResolver) this).ResolveVariable(instruction.OpCode.Name[instruction.OpCode.Name.Length - 1] - 48);
instruction.OpCode = MsilOpCodes.Stloc;
break;
case MsilCode.Ldarg_S:
instruction.OpCode = MsilOpCodes.Ldarg;
break;
case MsilCode.Ldarga_S:
instruction.OpCode = MsilOpCodes.Ldarga;
break;
case MsilCode.Ldarg_0:
case MsilCode.Ldarg_1:
case MsilCode.Ldarg_2:
case MsilCode.Ldarg_3:
instruction.Operand = ((IOperandResolver) this).ResolveParameter(instruction.OpCode.Name[instruction.OpCode.Name.Length - 1] - 48);
instruction.OpCode = MsilOpCodes.Ldarg;
break;
case MsilCode.Starg_S:
instruction.OpCode = MsilOpCodes.Starg;
break;
case MsilCode.Ldc_I4_0:
case MsilCode.Ldc_I4_1:
case MsilCode.Ldc_I4_2:
case MsilCode.Ldc_I4_3:
case MsilCode.Ldc_I4_4:
case MsilCode.Ldc_I4_5:
case MsilCode.Ldc_I4_6:
case MsilCode.Ldc_I4_7:
case MsilCode.Ldc_I4_8:
instruction.Operand = instruction.OpCode.Name[instruction.OpCode.Name.Length - 1] - 48;
instruction.OpCode = MsilOpCodes.Ldc_I4;
break;
case MsilCode.Ldc_I4_S:
instruction.OpCode = MsilOpCodes.Ldc_I4;
break;
case MsilCode.Ldc_I4_M1:
instruction.OpCode = MsilOpCodes.Ldc_I4;
instruction.Operand = -1;
break;
}
}