From 497619cc2c3a5371decb023e824fc1621bb0d172 Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Wed, 8 Jun 2022 10:10:04 +0200 Subject: [PATCH 1/3] [Foundation/ObjCRuntime] Implement a faster IsUserType. --- runtime/xamarin/main.h | 2 ++ src/Foundation/NSObject2.cs | 28 ++++++++++++++++++++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/runtime/xamarin/main.h b/runtime/xamarin/main.h index 9b7826c3c89..dcb3727c0e2 100644 --- a/runtime/xamarin/main.h +++ b/runtime/xamarin/main.h @@ -58,6 +58,8 @@ enum NSObjectFlags { NSObjectFlagsHasManagedRef = 32, // 64, // Used by SoM NSObjectFlagsIsCustomType = 128, + NSObjectFlagsKnowsIfIsUserType = 256, + NSObjectFlagsIsUserType = 512, }; enum XamarinGCHandleType : int { diff --git a/src/Foundation/NSObject2.cs b/src/Foundation/NSObject2.cs index ae2f04e0496..04d533a8687 100644 --- a/src/Foundation/NSObject2.cs +++ b/src/Foundation/NSObject2.cs @@ -266,6 +266,8 @@ internal enum Flags : uint { HasManagedRef = 32, // 64, // Used by SoM IsCustomType = 128, + KnowsIfIsUserType = 256, + IsUserType = 512, } // Must be kept in sync with the same enum in trampolines.h @@ -312,6 +314,24 @@ internal bool InFinalizerQueue { get { return ((flags & Flags.InFinalizerQueue) == Flags.InFinalizerQueue); } } + bool TryGetIsUserType (NativeHandle handle, out bool isUserType, [NotNullWhen (false)] out string? errorMessage) + { + var currentFlags = flags; + if ((currentFlags & Flags.KnowsIfIsUserType) == Flags.KnowsIfIsUserType) { + isUserType = (currentFlags & Flags.IsUserType) == Flags.IsUserType; + errorMessage = null; + return true; + } + + if (!Runtime.TryGetIsUserType (handle, out isUserType, out errorMessage)) + return false; + + flags = isUserType + ? flags | Flags.KnowsIfIsUserType | Flags.IsUserType + : (flags | Flags.KnowsIfIsUserType) & ~Flags.IsUserType; + return true; + } + bool IsCustomType { get { var value = (flags & Flags.IsCustomType) == Flags.IsCustomType; @@ -517,7 +537,7 @@ private void InitializeObject (bool alloced) bool native_ref = (flags & Flags.NativeRef) == Flags.NativeRef; - if (!Runtime.TryGetIsUserType (handle, out var isUserType, out var error_message)) + if (!TryGetIsUserType (handle, out var isUserType, out var error_message)) throw new InvalidOperationException ($"Unable to create a managed reference for the pointer {handle} whose managed type is {GetType ().FullName} because it wasn't possible to get the class of the pointer: {error_message}"); // Issue #25861: when we've just alloc'd a user type, defer adding it to the @@ -543,7 +563,6 @@ private void InitializeObject (bool alloced) void CreateManagedRef (bool isUserType, bool retain) { HasManagedRef = true; - if (isUserType) { var gchandle_flags = XamarinGCHandleFlags.HasManagedRef | XamarinGCHandleFlags.InitialSet; var gchandle = GCHandle.Alloc (this, GCHandleType.WeakTrackResurrection); @@ -570,7 +589,7 @@ void CreateManagedRef (bool isUserType, bool retain) // if the ivar is already set. void EnsureManagedReference (NativeHandle newHandle) { - if (!Runtime.TryGetIsUserType (newHandle, out var isUserType, out var _) || !isUserType) + if (!TryGetIsUserType (newHandle, out var isUserType, out var _) || !isUserType) return; if (Runtime.GetGCHandleForObject (newHandle) != IntPtr.Zero) return; @@ -597,7 +616,7 @@ void EnsureManagedReference (NativeHandle newHandle) void ReleaseManagedRef () { var handle = this.Handle; // Get a copy of the handle, because it will be cleared out when calling Runtime.NativeObjectHasDied, and we still need the handle later. - if (!Runtime.TryGetIsUserType (handle, out var user_type, out var error_message)) + if (!TryGetIsUserType (handle, out var user_type, out var error_message)) throw new InvalidOperationException ($"Unable to release the managed reference for the pointer {handle} whose managed type is {GetType ().FullName} because it wasn't possible to get the class of the pointer: {error_message}"); HasManagedRef = false; if (!user_type) { @@ -861,6 +880,7 @@ public NativeHandle Handle { Runtime.UnregisterNSObject (handle, this); } + flags &= ~(Flags.KnowsIfIsUserType | Flags.IsUserType); handle = value; if (handle != IntPtr.Zero) From 6a1ef3c825fded9e951dd23f24dc718c9706218e Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Wed, 2 Sep 2026 18:54:31 +0200 Subject: [PATCH 2/3] [Foundation] Finish per-object user type cache Adapt the prototype to the current NSObject lifecycle and use clearer flag names. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- runtime/xamarin/main.h | 2 +- src/Foundation/NSObject2.cs | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/runtime/xamarin/main.h b/runtime/xamarin/main.h index dcb3727c0e2..347505b29cb 100644 --- a/runtime/xamarin/main.h +++ b/runtime/xamarin/main.h @@ -58,7 +58,7 @@ enum NSObjectFlags { NSObjectFlagsHasManagedRef = 32, // 64, // Used by SoM NSObjectFlagsIsCustomType = 128, - NSObjectFlagsKnowsIfIsUserType = 256, + NSObjectFlagsIsUserTypeKnown = 256, NSObjectFlagsIsUserType = 512, }; diff --git a/src/Foundation/NSObject2.cs b/src/Foundation/NSObject2.cs index 04d533a8687..74b1e96b183 100644 --- a/src/Foundation/NSObject2.cs +++ b/src/Foundation/NSObject2.cs @@ -266,7 +266,7 @@ internal enum Flags : uint { HasManagedRef = 32, // 64, // Used by SoM IsCustomType = 128, - KnowsIfIsUserType = 256, + IsUserTypeKnown = 256, IsUserType = 512, } @@ -314,21 +314,21 @@ internal bool InFinalizerQueue { get { return ((flags & Flags.InFinalizerQueue) == Flags.InFinalizerQueue); } } - bool TryGetIsUserType (NativeHandle handle, out bool isUserType, [NotNullWhen (false)] out string? errorMessage) + bool TryGetIsUserType (NativeHandle handle, out bool isUserType, [NotNullWhen (false)] out string? error_message) { var currentFlags = flags; - if ((currentFlags & Flags.KnowsIfIsUserType) == Flags.KnowsIfIsUserType) { + if ((currentFlags & Flags.IsUserTypeKnown) == Flags.IsUserTypeKnown) { isUserType = (currentFlags & Flags.IsUserType) == Flags.IsUserType; - errorMessage = null; + error_message = null; return true; } - if (!Runtime.TryGetIsUserType (handle, out isUserType, out errorMessage)) + if (!Runtime.TryGetIsUserType (handle, out isUserType, out error_message)) return false; flags = isUserType - ? flags | Flags.KnowsIfIsUserType | Flags.IsUserType - : (flags | Flags.KnowsIfIsUserType) & ~Flags.IsUserType; + ? flags | Flags.IsUserTypeKnown | Flags.IsUserType + : (flags | Flags.IsUserTypeKnown) & ~Flags.IsUserType; return true; } @@ -563,6 +563,7 @@ private void InitializeObject (bool alloced) void CreateManagedRef (bool isUserType, bool retain) { HasManagedRef = true; + if (isUserType) { var gchandle_flags = XamarinGCHandleFlags.HasManagedRef | XamarinGCHandleFlags.InitialSet; var gchandle = GCHandle.Alloc (this, GCHandleType.WeakTrackResurrection); @@ -880,7 +881,7 @@ public NativeHandle Handle { Runtime.UnregisterNSObject (handle, this); } - flags &= ~(Flags.KnowsIfIsUserType | Flags.IsUserType); + flags &= ~(Flags.IsUserTypeKnown | Flags.IsUserType); handle = value; if (handle != IntPtr.Zero) From 4196fb022c36842c9c61f8dfe832f9d9e1973c1a Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Wed, 2 Sep 2026 19:16:57 +0200 Subject: [PATCH 3/3] [tests] Update preserved APIs for user type cache Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: c1ed53e7-2f3b-449d-b812-00b6cce420a7 --- .../expected/MacCatalyst-CoreCLR-Interpreter-preservedapis.txt | 3 +++ .../expected/MacCatalyst-CoreCLR-R2R-preservedapis.txt | 3 +++ .../expected/MacCatalyst-MonoVM-interpreter-preservedapis.txt | 3 +++ .../UnitTests/expected/MacCatalyst-MonoVM-preservedapis.txt | 3 +++ .../expected/TVOS-CoreCLR-Interpreter-preservedapis.txt | 3 +++ .../UnitTests/expected/TVOS-CoreCLR-R2R-preservedapis.txt | 3 +++ .../expected/TVOS-MonoVM-interpreter-preservedapis.txt | 3 +++ tests/dotnet/UnitTests/expected/TVOS-MonoVM-preservedapis.txt | 3 +++ .../expected/iOS-CoreCLR-Interpreter-preservedapis.txt | 3 +++ .../UnitTests/expected/iOS-CoreCLR-R2R-preservedapis.txt | 3 +++ .../expected/iOS-MonoVM-interpreter-preservedapis.txt | 3 +++ tests/dotnet/UnitTests/expected/iOS-MonoVM-preservedapis.txt | 3 +++ 12 files changed, 36 insertions(+) diff --git a/tests/dotnet/UnitTests/expected/MacCatalyst-CoreCLR-Interpreter-preservedapis.txt b/tests/dotnet/UnitTests/expected/MacCatalyst-CoreCLR-Interpreter-preservedapis.txt index cd891dd2dcb..70086bb9229 100644 --- a/tests/dotnet/UnitTests/expected/MacCatalyst-CoreCLR-Interpreter-preservedapis.txt +++ b/tests/dotnet/UnitTests/expected/MacCatalyst-CoreCLR-Interpreter-preservedapis.txt @@ -581,6 +581,7 @@ Microsoft.MacCatalyst.dll:Foundation.NSObject.set_HasManagedRef(System.Boolean) Microsoft.MacCatalyst.dll:Foundation.NSObject.set_IsDirectBinding(System.Boolean) Microsoft.MacCatalyst.dll:Foundation.NSObject.set_RemoveFromObjectMap(System.Boolean) Microsoft.MacCatalyst.dll:Foundation.NSObject.ToString() +Microsoft.MacCatalyst.dll:Foundation.NSObject.TryGetIsUserType(ObjCRuntime.NativeHandle, out System.Boolean&, out System.String&) Microsoft.MacCatalyst.dll:Foundation.NSObject.xamarin_release_managed_ref(System.IntPtr, System.Byte) Microsoft.MacCatalyst.dll:Foundation.NSObject.xamarin_set_gchandle_with_flags_safe(System.IntPtr, System.IntPtr, Foundation.NSObject/XamarinGCHandleFlags, System.IntPtr) Microsoft.MacCatalyst.dll:Foundation.NSObject[] Foundation.NSDictionary::Keys() @@ -593,6 +594,8 @@ Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::H Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::InFinalizerQueue Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsCustomType Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsDirectBinding +Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserType +Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserTypeKnown Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::NativeRef Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::RegisteredToggleRef Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObjectData::flags diff --git a/tests/dotnet/UnitTests/expected/MacCatalyst-CoreCLR-R2R-preservedapis.txt b/tests/dotnet/UnitTests/expected/MacCatalyst-CoreCLR-R2R-preservedapis.txt index cd891dd2dcb..70086bb9229 100644 --- a/tests/dotnet/UnitTests/expected/MacCatalyst-CoreCLR-R2R-preservedapis.txt +++ b/tests/dotnet/UnitTests/expected/MacCatalyst-CoreCLR-R2R-preservedapis.txt @@ -581,6 +581,7 @@ Microsoft.MacCatalyst.dll:Foundation.NSObject.set_HasManagedRef(System.Boolean) Microsoft.MacCatalyst.dll:Foundation.NSObject.set_IsDirectBinding(System.Boolean) Microsoft.MacCatalyst.dll:Foundation.NSObject.set_RemoveFromObjectMap(System.Boolean) Microsoft.MacCatalyst.dll:Foundation.NSObject.ToString() +Microsoft.MacCatalyst.dll:Foundation.NSObject.TryGetIsUserType(ObjCRuntime.NativeHandle, out System.Boolean&, out System.String&) Microsoft.MacCatalyst.dll:Foundation.NSObject.xamarin_release_managed_ref(System.IntPtr, System.Byte) Microsoft.MacCatalyst.dll:Foundation.NSObject.xamarin_set_gchandle_with_flags_safe(System.IntPtr, System.IntPtr, Foundation.NSObject/XamarinGCHandleFlags, System.IntPtr) Microsoft.MacCatalyst.dll:Foundation.NSObject[] Foundation.NSDictionary::Keys() @@ -593,6 +594,8 @@ Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::H Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::InFinalizerQueue Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsCustomType Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsDirectBinding +Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserType +Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserTypeKnown Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::NativeRef Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::RegisteredToggleRef Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObjectData::flags diff --git a/tests/dotnet/UnitTests/expected/MacCatalyst-MonoVM-interpreter-preservedapis.txt b/tests/dotnet/UnitTests/expected/MacCatalyst-MonoVM-interpreter-preservedapis.txt index 56eecd08aaf..62c5f43eb2e 100644 --- a/tests/dotnet/UnitTests/expected/MacCatalyst-MonoVM-interpreter-preservedapis.txt +++ b/tests/dotnet/UnitTests/expected/MacCatalyst-MonoVM-interpreter-preservedapis.txt @@ -167,6 +167,7 @@ Microsoft.MacCatalyst.dll:Foundation.NSObject.set_HasManagedRef(System.Boolean) Microsoft.MacCatalyst.dll:Foundation.NSObject.set_IsDirectBinding(System.Boolean) Microsoft.MacCatalyst.dll:Foundation.NSObject.set_RemoveFromObjectMap(System.Boolean) Microsoft.MacCatalyst.dll:Foundation.NSObject.ToString() +Microsoft.MacCatalyst.dll:Foundation.NSObject.TryGetIsUserType(ObjCRuntime.NativeHandle, out System.Boolean&, out System.String&) Microsoft.MacCatalyst.dll:Foundation.NSObject.xamarin_release_managed_ref(System.IntPtr, System.Byte) Microsoft.MacCatalyst.dll:Foundation.NSObject.xamarin_set_gchandle_with_flags_safe(System.IntPtr, System.IntPtr, Foundation.NSObject/XamarinGCHandleFlags, System.IntPtr) Microsoft.MacCatalyst.dll:Foundation.NSObject[] Foundation.NSDictionary::Keys() @@ -178,6 +179,8 @@ Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::H Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::InFinalizerQueue Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsCustomType Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsDirectBinding +Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserType +Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserTypeKnown Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::NativeRef Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::RegisteredToggleRef Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObjectData::flags diff --git a/tests/dotnet/UnitTests/expected/MacCatalyst-MonoVM-preservedapis.txt b/tests/dotnet/UnitTests/expected/MacCatalyst-MonoVM-preservedapis.txt index 101124bf4b5..30ebdcd96b2 100644 --- a/tests/dotnet/UnitTests/expected/MacCatalyst-MonoVM-preservedapis.txt +++ b/tests/dotnet/UnitTests/expected/MacCatalyst-MonoVM-preservedapis.txt @@ -150,6 +150,7 @@ Microsoft.MacCatalyst.dll:Foundation.NSObject.set_Handle(ObjCRuntime.NativeHandl Microsoft.MacCatalyst.dll:Foundation.NSObject.set_HasManagedRef(System.Boolean) Microsoft.MacCatalyst.dll:Foundation.NSObject.set_IsDirectBinding(System.Boolean) Microsoft.MacCatalyst.dll:Foundation.NSObject.ToString() +Microsoft.MacCatalyst.dll:Foundation.NSObject.TryGetIsUserType(ObjCRuntime.NativeHandle, out System.Boolean&, out System.String&) Microsoft.MacCatalyst.dll:Foundation.NSObject.xamarin_release_managed_ref(System.IntPtr, System.Byte) Microsoft.MacCatalyst.dll:Foundation.NSObject.xamarin_set_gchandle_with_flags_safe(System.IntPtr, System.IntPtr, Foundation.NSObject/XamarinGCHandleFlags, System.IntPtr) Microsoft.MacCatalyst.dll:Foundation.NSObject[] Foundation.NSDictionary::Keys() @@ -161,6 +162,8 @@ Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::H Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::InFinalizerQueue Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsCustomType Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsDirectBinding +Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserType +Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserTypeKnown Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::NativeRef Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::RegisteredToggleRef Microsoft.MacCatalyst.dll:Foundation.NSObject/Flags Foundation.NSObjectData::flags diff --git a/tests/dotnet/UnitTests/expected/TVOS-CoreCLR-Interpreter-preservedapis.txt b/tests/dotnet/UnitTests/expected/TVOS-CoreCLR-Interpreter-preservedapis.txt index e3f66732e22..79db02c6a08 100644 --- a/tests/dotnet/UnitTests/expected/TVOS-CoreCLR-Interpreter-preservedapis.txt +++ b/tests/dotnet/UnitTests/expected/TVOS-CoreCLR-Interpreter-preservedapis.txt @@ -524,6 +524,7 @@ Microsoft.tvOS.dll:Foundation.NSObject.set_HasManagedRef(System.Boolean) Microsoft.tvOS.dll:Foundation.NSObject.set_IsDirectBinding(System.Boolean) Microsoft.tvOS.dll:Foundation.NSObject.set_RemoveFromObjectMap(System.Boolean) Microsoft.tvOS.dll:Foundation.NSObject.ToString() +Microsoft.tvOS.dll:Foundation.NSObject.TryGetIsUserType(ObjCRuntime.NativeHandle, out System.Boolean&, out System.String&) Microsoft.tvOS.dll:Foundation.NSObject.xamarin_release_managed_ref(System.IntPtr, System.Byte) Microsoft.tvOS.dll:Foundation.NSObject.xamarin_set_gchandle_with_flags_safe(System.IntPtr, System.IntPtr, Foundation.NSObject/XamarinGCHandleFlags, System.IntPtr) Microsoft.tvOS.dll:Foundation.NSObject[] Foundation.NSDictionary::Keys() @@ -536,6 +537,8 @@ Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::HasManag Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::InFinalizerQueue Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsCustomType Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsDirectBinding +Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserType +Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserTypeKnown Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::NativeRef Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::RegisteredToggleRef Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObjectData::flags diff --git a/tests/dotnet/UnitTests/expected/TVOS-CoreCLR-R2R-preservedapis.txt b/tests/dotnet/UnitTests/expected/TVOS-CoreCLR-R2R-preservedapis.txt index e3f66732e22..79db02c6a08 100644 --- a/tests/dotnet/UnitTests/expected/TVOS-CoreCLR-R2R-preservedapis.txt +++ b/tests/dotnet/UnitTests/expected/TVOS-CoreCLR-R2R-preservedapis.txt @@ -524,6 +524,7 @@ Microsoft.tvOS.dll:Foundation.NSObject.set_HasManagedRef(System.Boolean) Microsoft.tvOS.dll:Foundation.NSObject.set_IsDirectBinding(System.Boolean) Microsoft.tvOS.dll:Foundation.NSObject.set_RemoveFromObjectMap(System.Boolean) Microsoft.tvOS.dll:Foundation.NSObject.ToString() +Microsoft.tvOS.dll:Foundation.NSObject.TryGetIsUserType(ObjCRuntime.NativeHandle, out System.Boolean&, out System.String&) Microsoft.tvOS.dll:Foundation.NSObject.xamarin_release_managed_ref(System.IntPtr, System.Byte) Microsoft.tvOS.dll:Foundation.NSObject.xamarin_set_gchandle_with_flags_safe(System.IntPtr, System.IntPtr, Foundation.NSObject/XamarinGCHandleFlags, System.IntPtr) Microsoft.tvOS.dll:Foundation.NSObject[] Foundation.NSDictionary::Keys() @@ -536,6 +537,8 @@ Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::HasManag Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::InFinalizerQueue Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsCustomType Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsDirectBinding +Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserType +Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserTypeKnown Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::NativeRef Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::RegisteredToggleRef Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObjectData::flags diff --git a/tests/dotnet/UnitTests/expected/TVOS-MonoVM-interpreter-preservedapis.txt b/tests/dotnet/UnitTests/expected/TVOS-MonoVM-interpreter-preservedapis.txt index cfe222484fa..029599ac7c6 100644 --- a/tests/dotnet/UnitTests/expected/TVOS-MonoVM-interpreter-preservedapis.txt +++ b/tests/dotnet/UnitTests/expected/TVOS-MonoVM-interpreter-preservedapis.txt @@ -159,6 +159,7 @@ Microsoft.tvOS.dll:Foundation.NSObject.set_HasManagedRef(System.Boolean) Microsoft.tvOS.dll:Foundation.NSObject.set_IsDirectBinding(System.Boolean) Microsoft.tvOS.dll:Foundation.NSObject.set_RemoveFromObjectMap(System.Boolean) Microsoft.tvOS.dll:Foundation.NSObject.ToString() +Microsoft.tvOS.dll:Foundation.NSObject.TryGetIsUserType(ObjCRuntime.NativeHandle, out System.Boolean&, out System.String&) Microsoft.tvOS.dll:Foundation.NSObject.xamarin_release_managed_ref(System.IntPtr, System.Byte) Microsoft.tvOS.dll:Foundation.NSObject.xamarin_set_gchandle_with_flags_safe(System.IntPtr, System.IntPtr, Foundation.NSObject/XamarinGCHandleFlags, System.IntPtr) Microsoft.tvOS.dll:Foundation.NSObject[] Foundation.NSDictionary::Keys() @@ -170,6 +171,8 @@ Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::HasManag Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::InFinalizerQueue Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsCustomType Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsDirectBinding +Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserType +Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserTypeKnown Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::NativeRef Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::RegisteredToggleRef Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObjectData::flags diff --git a/tests/dotnet/UnitTests/expected/TVOS-MonoVM-preservedapis.txt b/tests/dotnet/UnitTests/expected/TVOS-MonoVM-preservedapis.txt index 8e0e8bceaa8..63a98b18f3d 100644 --- a/tests/dotnet/UnitTests/expected/TVOS-MonoVM-preservedapis.txt +++ b/tests/dotnet/UnitTests/expected/TVOS-MonoVM-preservedapis.txt @@ -142,6 +142,7 @@ Microsoft.tvOS.dll:Foundation.NSObject.set_Handle(ObjCRuntime.NativeHandle) Microsoft.tvOS.dll:Foundation.NSObject.set_HasManagedRef(System.Boolean) Microsoft.tvOS.dll:Foundation.NSObject.set_IsDirectBinding(System.Boolean) Microsoft.tvOS.dll:Foundation.NSObject.ToString() +Microsoft.tvOS.dll:Foundation.NSObject.TryGetIsUserType(ObjCRuntime.NativeHandle, out System.Boolean&, out System.String&) Microsoft.tvOS.dll:Foundation.NSObject.xamarin_release_managed_ref(System.IntPtr, System.Byte) Microsoft.tvOS.dll:Foundation.NSObject.xamarin_set_gchandle_with_flags_safe(System.IntPtr, System.IntPtr, Foundation.NSObject/XamarinGCHandleFlags, System.IntPtr) Microsoft.tvOS.dll:Foundation.NSObject[] Foundation.NSDictionary::Keys() @@ -153,6 +154,8 @@ Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::HasManag Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::InFinalizerQueue Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsCustomType Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsDirectBinding +Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserType +Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserTypeKnown Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::NativeRef Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::RegisteredToggleRef Microsoft.tvOS.dll:Foundation.NSObject/Flags Foundation.NSObjectData::flags diff --git a/tests/dotnet/UnitTests/expected/iOS-CoreCLR-Interpreter-preservedapis.txt b/tests/dotnet/UnitTests/expected/iOS-CoreCLR-Interpreter-preservedapis.txt index 08a7d52de49..84e0d9b219f 100644 --- a/tests/dotnet/UnitTests/expected/iOS-CoreCLR-Interpreter-preservedapis.txt +++ b/tests/dotnet/UnitTests/expected/iOS-CoreCLR-Interpreter-preservedapis.txt @@ -554,6 +554,7 @@ Microsoft.iOS.dll:Foundation.NSObject.set_HasManagedRef(System.Boolean) Microsoft.iOS.dll:Foundation.NSObject.set_IsDirectBinding(System.Boolean) Microsoft.iOS.dll:Foundation.NSObject.set_RemoveFromObjectMap(System.Boolean) Microsoft.iOS.dll:Foundation.NSObject.ToString() +Microsoft.iOS.dll:Foundation.NSObject.TryGetIsUserType(ObjCRuntime.NativeHandle, out System.Boolean&, out System.String&) Microsoft.iOS.dll:Foundation.NSObject.xamarin_release_managed_ref(System.IntPtr, System.Byte) Microsoft.iOS.dll:Foundation.NSObject.xamarin_set_gchandle_with_flags_safe(System.IntPtr, System.IntPtr, Foundation.NSObject/XamarinGCHandleFlags, System.IntPtr) Microsoft.iOS.dll:Foundation.NSObject[] Foundation.NSDictionary::Keys() @@ -566,6 +567,8 @@ Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::HasManage Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::InFinalizerQueue Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsCustomType Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsDirectBinding +Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserType +Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserTypeKnown Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::NativeRef Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::RegisteredToggleRef Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObjectData::flags diff --git a/tests/dotnet/UnitTests/expected/iOS-CoreCLR-R2R-preservedapis.txt b/tests/dotnet/UnitTests/expected/iOS-CoreCLR-R2R-preservedapis.txt index 08a7d52de49..84e0d9b219f 100644 --- a/tests/dotnet/UnitTests/expected/iOS-CoreCLR-R2R-preservedapis.txt +++ b/tests/dotnet/UnitTests/expected/iOS-CoreCLR-R2R-preservedapis.txt @@ -554,6 +554,7 @@ Microsoft.iOS.dll:Foundation.NSObject.set_HasManagedRef(System.Boolean) Microsoft.iOS.dll:Foundation.NSObject.set_IsDirectBinding(System.Boolean) Microsoft.iOS.dll:Foundation.NSObject.set_RemoveFromObjectMap(System.Boolean) Microsoft.iOS.dll:Foundation.NSObject.ToString() +Microsoft.iOS.dll:Foundation.NSObject.TryGetIsUserType(ObjCRuntime.NativeHandle, out System.Boolean&, out System.String&) Microsoft.iOS.dll:Foundation.NSObject.xamarin_release_managed_ref(System.IntPtr, System.Byte) Microsoft.iOS.dll:Foundation.NSObject.xamarin_set_gchandle_with_flags_safe(System.IntPtr, System.IntPtr, Foundation.NSObject/XamarinGCHandleFlags, System.IntPtr) Microsoft.iOS.dll:Foundation.NSObject[] Foundation.NSDictionary::Keys() @@ -566,6 +567,8 @@ Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::HasManage Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::InFinalizerQueue Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsCustomType Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsDirectBinding +Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserType +Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserTypeKnown Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::NativeRef Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::RegisteredToggleRef Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObjectData::flags diff --git a/tests/dotnet/UnitTests/expected/iOS-MonoVM-interpreter-preservedapis.txt b/tests/dotnet/UnitTests/expected/iOS-MonoVM-interpreter-preservedapis.txt index 07f5b2ebb5c..2266d9b629a 100644 --- a/tests/dotnet/UnitTests/expected/iOS-MonoVM-interpreter-preservedapis.txt +++ b/tests/dotnet/UnitTests/expected/iOS-MonoVM-interpreter-preservedapis.txt @@ -159,6 +159,7 @@ Microsoft.iOS.dll:Foundation.NSObject.set_HasManagedRef(System.Boolean) Microsoft.iOS.dll:Foundation.NSObject.set_IsDirectBinding(System.Boolean) Microsoft.iOS.dll:Foundation.NSObject.set_RemoveFromObjectMap(System.Boolean) Microsoft.iOS.dll:Foundation.NSObject.ToString() +Microsoft.iOS.dll:Foundation.NSObject.TryGetIsUserType(ObjCRuntime.NativeHandle, out System.Boolean&, out System.String&) Microsoft.iOS.dll:Foundation.NSObject.xamarin_release_managed_ref(System.IntPtr, System.Byte) Microsoft.iOS.dll:Foundation.NSObject.xamarin_set_gchandle_with_flags_safe(System.IntPtr, System.IntPtr, Foundation.NSObject/XamarinGCHandleFlags, System.IntPtr) Microsoft.iOS.dll:Foundation.NSObject[] Foundation.NSDictionary::Keys() @@ -170,6 +171,8 @@ Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::HasManage Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::InFinalizerQueue Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsCustomType Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsDirectBinding +Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserType +Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserTypeKnown Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::NativeRef Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::RegisteredToggleRef Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObjectData::flags diff --git a/tests/dotnet/UnitTests/expected/iOS-MonoVM-preservedapis.txt b/tests/dotnet/UnitTests/expected/iOS-MonoVM-preservedapis.txt index 72d202de1f4..c497133e105 100644 --- a/tests/dotnet/UnitTests/expected/iOS-MonoVM-preservedapis.txt +++ b/tests/dotnet/UnitTests/expected/iOS-MonoVM-preservedapis.txt @@ -142,6 +142,7 @@ Microsoft.iOS.dll:Foundation.NSObject.set_Handle(ObjCRuntime.NativeHandle) Microsoft.iOS.dll:Foundation.NSObject.set_HasManagedRef(System.Boolean) Microsoft.iOS.dll:Foundation.NSObject.set_IsDirectBinding(System.Boolean) Microsoft.iOS.dll:Foundation.NSObject.ToString() +Microsoft.iOS.dll:Foundation.NSObject.TryGetIsUserType(ObjCRuntime.NativeHandle, out System.Boolean&, out System.String&) Microsoft.iOS.dll:Foundation.NSObject.xamarin_release_managed_ref(System.IntPtr, System.Byte) Microsoft.iOS.dll:Foundation.NSObject.xamarin_set_gchandle_with_flags_safe(System.IntPtr, System.IntPtr, Foundation.NSObject/XamarinGCHandleFlags, System.IntPtr) Microsoft.iOS.dll:Foundation.NSObject[] Foundation.NSDictionary::Keys() @@ -153,6 +154,8 @@ Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::HasManage Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::InFinalizerQueue Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsCustomType Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsDirectBinding +Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserType +Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::IsUserTypeKnown Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::NativeRef Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObject/Flags::RegisteredToggleRef Microsoft.iOS.dll:Foundation.NSObject/Flags Foundation.NSObjectData::flags