private void PatchCompare(int index, OpCode ble, OpCode blt, OpCode bge, OpCode bgt)
{
if (code[index + 11].opcode == OpCodes.Brtrue)
{
code[index] = new OpCodeWrapper(OpCodes.Bne_Un, code[index + 11].Label);
code.RemoveRange(index + 1, 11);
}
else if (code[index + 11].opcode == OpCodes.Brfalse)
{
code[index] = new OpCodeWrapper(OpCodes.Beq, code[index + 11].Label);
code.RemoveRange(index + 1, 11);
}
else if (code[index + 11].opcode == OpCodes.Ldc_I4_0)
{
if (code[index + 12].opcode == OpCodes.Ble)
{
code[index] = new OpCodeWrapper(ble, code[index + 12].Label);
code.RemoveRange(index + 1, 12);
}
else if (code[index + 12].opcode == OpCodes.Blt)
{
code[index] = new OpCodeWrapper(blt, code[index + 12].Label);
code.RemoveRange(index + 1, 12);
}
else if (code[index + 12].opcode == OpCodes.Bge)
{
code[index] = new OpCodeWrapper(bge, code[index + 12].Label);
code.RemoveRange(index + 1, 12);
}
else if (code[index + 12].opcode == OpCodes.Bgt)
{
code[index] = new OpCodeWrapper(bgt, code[index + 12].Label);
code.RemoveRange(index + 1, 12);
}
}
}