From cbac4653e9928f0287e56aa77fc126f4261c1caf Mon Sep 17 00:00:00 2001 From: Sergio Pedri Date: Thu, 1 Feb 2024 00:15:54 +0100 Subject: [PATCH] Remove LINQ from GuidGenerator --- src/WinRT.Runtime/GuidGenerator.cs | 31 ++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/WinRT.Runtime/GuidGenerator.cs b/src/WinRT.Runtime/GuidGenerator.cs index 6628c0d0b..1db5806d7 100644 --- a/src/WinRT.Runtime/GuidGenerator.cs +++ b/src/WinRT.Runtime/GuidGenerator.cs @@ -3,7 +3,6 @@ using System; using System.Diagnostics.CodeAnalysis; -using System.Linq; using System.Reflection; using System.Security.Cryptography; using System.Text; @@ -101,7 +100,19 @@ public static string GetSignature( } else { - var args = type.GetFields(BindingFlags.Instance | BindingFlags.Public).Select(fi => GetSignature(fi.FieldType)); + static string[] SelectSignaturesForFields(FieldInfo[] fields) + { + string[] signatures = new string[fields.Length]; + + for (int i = 0; i < fields.Length; i++) + { + signatures[i] = GetSignature(fields[i].FieldType); + } + + return signatures; + } + + var args = SelectSignaturesForFields(type.GetFields(BindingFlags.Instance | BindingFlags.Public)); return "struct(" + type.FullName + ";" + String.Join(";", args) + ")"; } } @@ -117,7 +128,19 @@ public static string GetSignature( if (type.IsGenericType) { - var args = type.GetGenericArguments().Select(t => GetSignature(t)); + static string[] SelectSignaturesForTypes(Type[] types) + { + string[] signatures = new string[types.Length]; + + for (int i = 0; i < types.Length; i++) + { + signatures[i] = GetSignature(types[i]); + } + + return signatures; + } + + var args = SelectSignaturesForTypes(type.GetGenericArguments()); return "pinterface({" + GetGUID(type) + "};" + String.Join(";", args) + ")"; } @@ -181,7 +204,7 @@ public static Guid CreateIID(Type type) internal static Guid CreateIIDForGenericType(string signature) { #if !NET - var data = wrt_pinterface_namespace.ToByteArray().Concat(UTF8Encoding.UTF8.GetBytes(signature)).ToArray(); + var data = System.Linq.Enumerable.ToArray(System.Linq.Enumerable.Concat(wrt_pinterface_namespace.ToByteArray(), Encoding.UTF8.GetBytes(signature))); using (SHA1 sha = new SHA1CryptoServiceProvider()) {