in ILRepack/ReferenceFixator.cs [294:325]
private void FixReferences(Instruction instr)
{
if (instr.OpCode.Code == Code.Calli)
{
var call_site = (Mono.Cecil.CallSite)instr.Operand;
call_site.ReturnType = Fix(call_site.ReturnType);
}
else switch (instr.OpCode.OperandType)
{
case OperandType.InlineField:
instr.Operand = Fix((FieldReference)instr.Operand);
break;
case OperandType.InlineMethod:
instr.Operand = Fix((MethodReference)instr.Operand);
break;
case OperandType.InlineType:
instr.Operand = Fix((TypeReference)instr.Operand);
break;
case OperandType.InlineTok:
if (instr.Operand is TypeReference)
instr.Operand = Fix((TypeReference)instr.Operand);
else if (instr.Operand is FieldReference)
instr.Operand = Fix((FieldReference)instr.Operand);
else if (instr.Operand is MethodReference)
instr.Operand = Fix((MethodReference)instr.Operand);
else
throw new InvalidOperationException();
break;
default:
break;
}
}