private static void EmitNewDelegate(TracingILGenerator il, Type targetType, MethodInfo method, Action <TracingILGenerator> loadTargetEmitting, Type delegateType) { loadTargetEmitting(il); if (targetType.IsValueType) { il.EmitBox(targetType); } if (method.IsStatic || method.IsFinal || !method.IsVirtual) { il.EmitLdftn(method); } else { il.EmitDup(); il.EmitLdvirtftn(method); } il.EmitNewobj(delegateType.GetConstructor(_delegateConstructorParameterTypes)); }