From 58faf1d716bea34442807dbca49cfd537ee9c0ea Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Thu, 28 Jan 2021 16:32:44 -0800 Subject: [PATCH 1/5] Change C# names of P/Invokes of objc_msgSend to be call-site specific. --- .../Common/src/Interop/OSX/Interop.libobjc.cs | 6 ++--- .../src/System/Drawing/macFunctions.cs | 22 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs b/src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs index 799bfd19e0d5e..ecf0fed969fc8 100644 --- a/src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs +++ b/src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs @@ -28,8 +28,8 @@ private struct NSOperatingSystemVersion private static extern IntPtr objc_getClass(string className); [DllImport(Libraries.libobjc)] private static extern IntPtr sel_getUid(string selector); - [DllImport(Libraries.libobjc)] - private static extern IntPtr objc_msgSend(IntPtr basePtr, IntPtr selector); + [DllImport(Libraries.libobjc, EntryPoint = "objc_msgSend")] + private static extern IntPtr get_ProcessInfo(IntPtr basePtr, IntPtr selector); internal static Version GetOperatingSystemVersion() { @@ -37,7 +37,7 @@ internal static Version GetOperatingSystemVersion() int minor = 0; int patch = 0; - IntPtr processInfo = objc_msgSend(objc_getClass("NSProcessInfo"), sel_getUid("processInfo")); + IntPtr processInfo = get_ProcessInfo(objc_getClass("NSProcessInfo"), sel_getUid("processInfo")); if (processInfo != IntPtr.Zero) { diff --git a/src/libraries/System.Drawing.Common/src/System/Drawing/macFunctions.cs b/src/libraries/System.Drawing.Common/src/System/Drawing/macFunctions.cs index 16523523fb295..af8f21bec1610 100644 --- a/src/libraries/System.Drawing.Common/src/System/Drawing/macFunctions.cs +++ b/src/libraries/System.Drawing.Common/src/System/Drawing/macFunctions.cs @@ -69,15 +69,15 @@ internal static class MacSupport internal static CocoaContext GetCGContextForNSView(IntPtr handle) { - IntPtr graphicsContext = objc_msgSend(objc_getClass("NSGraphicsContext"), sel_registerName("currentContext")); - IntPtr ctx = objc_msgSend(graphicsContext, sel_registerName("graphicsPort")); + IntPtr graphicsContext = get_currentContext(objc_getClass("NSGraphicsContext"), sel_registerName("currentContext")); + IntPtr ctx = get_graphicsPort(graphicsContext, sel_registerName("graphicsPort")); Rect bounds = default; CGContextSaveGState(ctx); - objc_msgSend_stret(ref bounds, handle, sel_registerName("bounds")); + get_bounds(ref bounds, handle, sel_registerName("bounds")); - var isFlipped = bool_objc_msgSend(handle, sel_registerName("isFlipped")); + var isFlipped = get_isFlipped(handle, sel_registerName("isFlipped")); if (isFlipped) { CGContextTranslateCTM(ctx, bounds.origin.x, bounds.size.height); @@ -211,14 +211,14 @@ internal static void ReleaseContext(IntPtr port, IntPtr context) #region Cocoa Methods [DllImport("libobjc.dylib")] public static extern IntPtr objc_getClass(string className); - [DllImport("libobjc.dylib")] - public static extern IntPtr objc_msgSend(IntPtr basePtr, IntPtr selector, string argument); - [DllImport("libobjc.dylib")] - public static extern IntPtr objc_msgSend(IntPtr basePtr, IntPtr selector); - [DllImport("libobjc.dylib")] - public static extern void objc_msgSend_stret(ref Rect arect, IntPtr basePtr, IntPtr selector); [DllImport("libobjc.dylib", EntryPoint = "objc_msgSend")] - public static extern bool bool_objc_msgSend(IntPtr handle, IntPtr selector); + public static extern IntPtr get_currentContext(IntPtr basePtr, IntPtr selector); + [DllImport("libobjc.dylib", EntryPoint = "objc_msgSend")] + public static extern IntPtr get_graphicsPort(IntPtr basePtr, IntPtr selector); + [DllImport("libobjc.dylib", EntryPoint = "objc_msgSend_stret")] + public static extern void get_bounds(ref Rect arect, IntPtr basePtr, IntPtr selector); + [DllImport("libobjc.dylib", EntryPoint = "objc_msgSend")] + public static extern bool get_isFlipped(IntPtr handle, IntPtr selector); [DllImport("libobjc.dylib")] public static extern IntPtr sel_registerName(string selectorName); #endregion From ed99c8f9902b4f302a3879d79e939033099eec22 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Fri, 29 Jan 2021 10:57:24 -0800 Subject: [PATCH 2/5] Rename to match suggested pattern --- .../Common/src/Interop/OSX/Interop.libobjc.cs | 4 ++-- .../src/System/Drawing/macFunctions.cs | 17 ++++++++--------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs b/src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs index ecf0fed969fc8..d5fbbe56cf59f 100644 --- a/src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs +++ b/src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs @@ -29,7 +29,7 @@ private struct NSOperatingSystemVersion [DllImport(Libraries.libobjc)] private static extern IntPtr sel_getUid(string selector); [DllImport(Libraries.libobjc, EntryPoint = "objc_msgSend")] - private static extern IntPtr get_ProcessInfo(IntPtr basePtr, IntPtr selector); + private static extern IntPtr intptr_objc_msgSend(IntPtr basePtr, IntPtr selector); internal static Version GetOperatingSystemVersion() { @@ -37,7 +37,7 @@ internal static Version GetOperatingSystemVersion() int minor = 0; int patch = 0; - IntPtr processInfo = get_ProcessInfo(objc_getClass("NSProcessInfo"), sel_getUid("processInfo")); + IntPtr processInfo = intptr_objc_msgSend(objc_getClass("NSProcessInfo"), sel_getUid("processInfo")); if (processInfo != IntPtr.Zero) { diff --git a/src/libraries/System.Drawing.Common/src/System/Drawing/macFunctions.cs b/src/libraries/System.Drawing.Common/src/System/Drawing/macFunctions.cs index af8f21bec1610..6e8c75851f738 100644 --- a/src/libraries/System.Drawing.Common/src/System/Drawing/macFunctions.cs +++ b/src/libraries/System.Drawing.Common/src/System/Drawing/macFunctions.cs @@ -69,15 +69,15 @@ internal static class MacSupport internal static CocoaContext GetCGContextForNSView(IntPtr handle) { - IntPtr graphicsContext = get_currentContext(objc_getClass("NSGraphicsContext"), sel_registerName("currentContext")); - IntPtr ctx = get_graphicsPort(graphicsContext, sel_registerName("graphicsPort")); + IntPtr graphicsContext = intptr_objc_msgSend(objc_getClass("NSGraphicsContext"), sel_registerName("currentContext")); + IntPtr ctx = intptr_objc_msgSend(graphicsContext, sel_registerName("graphicsPort")); Rect bounds = default; CGContextSaveGState(ctx); - get_bounds(ref bounds, handle, sel_registerName("bounds")); + void_objc_msgSend_stret_rrect(ref bounds, handle, sel_registerName("bounds")); - var isFlipped = get_isFlipped(handle, sel_registerName("isFlipped")); + var isFlipped = bool_objc_msgSend(handle, sel_registerName("isFlipped")); if (isFlipped) { CGContextTranslateCTM(ctx, bounds.origin.x, bounds.size.height); @@ -212,13 +212,12 @@ internal static void ReleaseContext(IntPtr port, IntPtr context) [DllImport("libobjc.dylib")] public static extern IntPtr objc_getClass(string className); [DllImport("libobjc.dylib", EntryPoint = "objc_msgSend")] - public static extern IntPtr get_currentContext(IntPtr basePtr, IntPtr selector); - [DllImport("libobjc.dylib", EntryPoint = "objc_msgSend")] - public static extern IntPtr get_graphicsPort(IntPtr basePtr, IntPtr selector); + public static extern IntPtr intptr_objc_msgSend(IntPtr basePtr, IntPtr selector); [DllImport("libobjc.dylib", EntryPoint = "objc_msgSend_stret")] - public static extern void get_bounds(ref Rect arect, IntPtr basePtr, IntPtr selector); + public static extern void void_objc_msgSend_stret_rrect(ref Rect arect, IntPtr basePtr, IntPtr selector); [DllImport("libobjc.dylib", EntryPoint = "objc_msgSend")] - public static extern bool get_isFlipped(IntPtr handle, IntPtr selector); + [return:MarshalAs(UnmanagedType.U1)] + public static extern bool bool_objc_msgSend(IntPtr handle, IntPtr selector); [DllImport("libobjc.dylib")] public static extern IntPtr sel_registerName(string selectorName); #endregion From 23d20939a5ffee80f7955b54e48e67c166e6e4f1 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Mon, 1 Feb 2021 14:39:31 -0800 Subject: [PATCH 3/5] Follow Xamarin convention in all objc_msgSend cases. --- .../Common/src/Interop/OSX/Interop.libobjc.cs | 20 +++++++++---------- .../src/System/Drawing/macFunctions.cs | 5 ++--- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs b/src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs index d5fbbe56cf59f..432e5a2b846e6 100644 --- a/src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs +++ b/src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs @@ -10,12 +10,6 @@ internal static partial class Interop { internal static partial class libobjc { -#if TARGET_ARM64 - private const string MessageSendStructReturnEntryPoint = "objc_msgSend"; -#else - private const string MessageSendStructReturnEntryPoint = "objc_msgSend_stret"; -#endif - [StructLayout(LayoutKind.Sequential)] private struct NSOperatingSystemVersion { @@ -41,8 +35,11 @@ internal static Version GetOperatingSystemVersion() if (processInfo != IntPtr.Zero) { - NSOperatingSystemVersion osVersion = get_operatingSystemVersion(processInfo, sel_getUid("operatingSystemVersion")); - +#if TARGET_ARM64 + NSOperatingSystemVersion osVersion = osversion_objc_msgSend(processInfo, sel_getUid("operatingSystemVersion")); +#else + objc_msgSend_stret_rosversion(out NSOperatingSystemVersion osVersion, processInfo, sel_getUid("operatingSystemVersion")); +#endif checked { major = (int)osVersion.majorVersion; @@ -63,7 +60,10 @@ internal static Version GetOperatingSystemVersion() return new Version(major, minor, patch); } - [DllImport(Libraries.libobjc, EntryPoint = MessageSendStructReturnEntryPoint)] - private static extern NSOperatingSystemVersion get_operatingSystemVersion(IntPtr basePtr, IntPtr selector); + [DllImport(Libraries.libobjc, EntryPoint = "obj_msgSend")] + private static extern NSOperatingSystemVersion osversion_objc_msgSend(IntPtr basePtr, IntPtr selector); + + [DllImport(Libraries.libobjc, EntryPoint = "obj_msgSend_stret")] + private static extern void objc_msgSend_stret_rosversion(out NSOperatingSystemVersion osVersion, IntPtr basePtr, IntPtr selector); } } diff --git a/src/libraries/System.Drawing.Common/src/System/Drawing/macFunctions.cs b/src/libraries/System.Drawing.Common/src/System/Drawing/macFunctions.cs index 6e8c75851f738..a653ee33bfc0f 100644 --- a/src/libraries/System.Drawing.Common/src/System/Drawing/macFunctions.cs +++ b/src/libraries/System.Drawing.Common/src/System/Drawing/macFunctions.cs @@ -71,11 +71,10 @@ internal static CocoaContext GetCGContextForNSView(IntPtr handle) { IntPtr graphicsContext = intptr_objc_msgSend(objc_getClass("NSGraphicsContext"), sel_registerName("currentContext")); IntPtr ctx = intptr_objc_msgSend(graphicsContext, sel_registerName("graphicsPort")); - Rect bounds = default; CGContextSaveGState(ctx); - void_objc_msgSend_stret_rrect(ref bounds, handle, sel_registerName("bounds")); + void_objc_msgSend_stret_rrect(out Rect bounds, handle, sel_registerName("bounds")); var isFlipped = bool_objc_msgSend(handle, sel_registerName("isFlipped")); if (isFlipped) @@ -214,7 +213,7 @@ internal static void ReleaseContext(IntPtr port, IntPtr context) [DllImport("libobjc.dylib", EntryPoint = "objc_msgSend")] public static extern IntPtr intptr_objc_msgSend(IntPtr basePtr, IntPtr selector); [DllImport("libobjc.dylib", EntryPoint = "objc_msgSend_stret")] - public static extern void void_objc_msgSend_stret_rrect(ref Rect arect, IntPtr basePtr, IntPtr selector); + public static extern void void_objc_msgSend_stret_rrect(out Rect arect, IntPtr basePtr, IntPtr selector); [DllImport("libobjc.dylib", EntryPoint = "objc_msgSend")] [return:MarshalAs(UnmanagedType.U1)] public static extern bool bool_objc_msgSend(IntPtr handle, IntPtr selector); From b3360821b6098854c3dc216bf8c74cb993700be8 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Mon, 1 Feb 2021 17:17:39 -0800 Subject: [PATCH 4/5] Fix typo --- src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs b/src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs index 432e5a2b846e6..10d087d34dce5 100644 --- a/src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs +++ b/src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs @@ -60,10 +60,10 @@ internal static Version GetOperatingSystemVersion() return new Version(major, minor, patch); } - [DllImport(Libraries.libobjc, EntryPoint = "obj_msgSend")] + [DllImport(Libraries.libobjc, EntryPoint = "objc_msgSend")] private static extern NSOperatingSystemVersion osversion_objc_msgSend(IntPtr basePtr, IntPtr selector); - [DllImport(Libraries.libobjc, EntryPoint = "obj_msgSend_stret")] + [DllImport(Libraries.libobjc, EntryPoint = "objc_msgSend_stret")] private static extern void objc_msgSend_stret_rosversion(out NSOperatingSystemVersion osVersion, IntPtr basePtr, IntPtr selector); } } From 97c9fc60c5ec69e8d668793149e81cd1a6e5954b Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Tue, 2 Feb 2021 10:10:00 -0800 Subject: [PATCH 5/5] Rename to match convention. --- src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs | 8 ++++---- .../src/System/Drawing/macFunctions.cs | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs b/src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs index 432e5a2b846e6..0186c2e4bbf7f 100644 --- a/src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs +++ b/src/libraries/Common/src/Interop/OSX/Interop.libobjc.cs @@ -36,9 +36,9 @@ internal static Version GetOperatingSystemVersion() if (processInfo != IntPtr.Zero) { #if TARGET_ARM64 - NSOperatingSystemVersion osVersion = osversion_objc_msgSend(processInfo, sel_getUid("operatingSystemVersion")); + NSOperatingSystemVersion osVersion = NSOperatingSystemVersion_objc_msgSend(processInfo, sel_getUid("operatingSystemVersion")); #else - objc_msgSend_stret_rosversion(out NSOperatingSystemVersion osVersion, processInfo, sel_getUid("operatingSystemVersion")); + NSOperatingSystemVersion_objc_msgSend_stret(out NSOperatingSystemVersion osVersion, processInfo, sel_getUid("operatingSystemVersion")); #endif checked { @@ -61,9 +61,9 @@ internal static Version GetOperatingSystemVersion() } [DllImport(Libraries.libobjc, EntryPoint = "obj_msgSend")] - private static extern NSOperatingSystemVersion osversion_objc_msgSend(IntPtr basePtr, IntPtr selector); + private static extern NSOperatingSystemVersion NSOperatingSystemVersion_objc_msgSend(IntPtr basePtr, IntPtr selector); [DllImport(Libraries.libobjc, EntryPoint = "obj_msgSend_stret")] - private static extern void objc_msgSend_stret_rosversion(out NSOperatingSystemVersion osVersion, IntPtr basePtr, IntPtr selector); + private static extern void NSOperatingSystemVersion_objc_msgSend_stret(out NSOperatingSystemVersion osVersion, IntPtr basePtr, IntPtr selector); } } diff --git a/src/libraries/System.Drawing.Common/src/System/Drawing/macFunctions.cs b/src/libraries/System.Drawing.Common/src/System/Drawing/macFunctions.cs index a653ee33bfc0f..a5d9bfd74b76b 100644 --- a/src/libraries/System.Drawing.Common/src/System/Drawing/macFunctions.cs +++ b/src/libraries/System.Drawing.Common/src/System/Drawing/macFunctions.cs @@ -74,7 +74,7 @@ internal static CocoaContext GetCGContextForNSView(IntPtr handle) CGContextSaveGState(ctx); - void_objc_msgSend_stret_rrect(out Rect bounds, handle, sel_registerName("bounds")); + Rect_objc_msgSend_stret(out Rect bounds, handle, sel_registerName("bounds")); var isFlipped = bool_objc_msgSend(handle, sel_registerName("isFlipped")); if (isFlipped) @@ -213,7 +213,7 @@ internal static void ReleaseContext(IntPtr port, IntPtr context) [DllImport("libobjc.dylib", EntryPoint = "objc_msgSend")] public static extern IntPtr intptr_objc_msgSend(IntPtr basePtr, IntPtr selector); [DllImport("libobjc.dylib", EntryPoint = "objc_msgSend_stret")] - public static extern void void_objc_msgSend_stret_rrect(out Rect arect, IntPtr basePtr, IntPtr selector); + public static extern void Rect_objc_msgSend_stret(out Rect arect, IntPtr basePtr, IntPtr selector); [DllImport("libobjc.dylib", EntryPoint = "objc_msgSend")] [return:MarshalAs(UnmanagedType.U1)] public static extern bool bool_objc_msgSend(IntPtr handle, IntPtr selector);