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 ) ); }