public object Call(object[] args, out bool shouldOptimize) { shouldOptimize = TrackUsage(args); try { if (_caller != null) { return(_caller.Invoke(GetArguments(args))); } return(_mi.Invoke(null, GetArguments(args))); } catch (TargetInvocationException tie) { ExceptionHelpers.UpdateForRethrow(tie.InnerException); throw tie.InnerException; } }