From fbd08e3c9d6986ebd92ed500d689be0a2957d021 Mon Sep 17 00:00:00 2001 From: Tuomas Hietanen Date: Thu, 27 Jun 2024 11:13:47 +0100 Subject: [PATCH 1/2] Faster CodeGenerator if FSHARP6 defined --- src/ProvidedTypes.fs | 56 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/src/ProvidedTypes.fs b/src/ProvidedTypes.fs index 531e139..2942745 100644 --- a/src/ProvidedTypes.fs +++ b/src/ProvidedTypes.fs @@ -14044,25 +14044,59 @@ namespace ProviderImplementation.ProvidedTypes let stringTypeTgt = convTypeToTgt typeof let mathTypeTgt = convTypeToTgt typeof +#if FSHARP6 let makeTypePattern tp = let tt = convTypeToTgt tp - fun (t : Type) -> if t = tt then Some() else None + fun (t : Type) -> if t = tt then ValueSome() else ValueNone + [] let (|Bool|_|) = makeTypePattern(typeof) + [] let (|SByte|_|) = makeTypePattern(typeof) + [] let (|Int16|_|) = makeTypePattern(typeof) + [] let (|Int32|_|) = makeTypePattern(typeof) + [] let (|Int64|_|) = makeTypePattern(typeof) + [] let (|Byte|_|) = makeTypePattern(typeof) + [] let (|UInt16|_|) = makeTypePattern(typeof) + [] let (|UInt32|_|) = makeTypePattern(typeof) + [] let (|UInt64|_|) = makeTypePattern(typeof) + [] let (|Single|_|) = makeTypePattern(typeof) + [] let (|Double|_|) = makeTypePattern(typeof) + [] let (|Char|_|) = makeTypePattern(typeof) + [] let (|Decimal|_|) = makeTypePattern(typeof) + [] let (|String|_|) = makeTypePattern(typeof) +#else + let makeTypePattern tp = + let tt = convTypeToTgt tp + fun (t : Type) -> if t = tt then Some() else None + let (|Bool|_|) = makeTypePattern(typeof) + let (|SByte|_|) = makeTypePattern(typeof) + let (|Int16|_|) = makeTypePattern(typeof) + let (|Int32|_|) = makeTypePattern(typeof) + let (|Int64|_|) = makeTypePattern(typeof) + let (|Byte|_|) = makeTypePattern(typeof) + let (|UInt16|_|) = makeTypePattern(typeof) + let (|UInt32|_|) = makeTypePattern(typeof) + let (|UInt64|_|) = makeTypePattern(typeof) + let (|Single|_|) = makeTypePattern(typeof) + let (|Double|_|) = makeTypePattern(typeof) + let (|Char|_|) = makeTypePattern(typeof) + let (|Decimal|_|) = makeTypePattern(typeof) + let (|String|_|) = makeTypePattern(typeof) +#endif let (|StaticMethod|_|) name tps (t : Type) = match t.GetMethod(name, BindingFlags.Static ||| BindingFlags.Public, null, tps, null) with | null -> None @@ -14115,7 +14149,10 @@ namespace ProviderImplementation.ProvidedTypes minfo1 = minfo2) -> Some(args) | _ -> None) - + +#if FSHARP6 + [] +#endif let (|NaN|_|) = let operatorsType = convTypeToTgt (typedefof>.Assembly.GetType("Microsoft.FSharp.Core.Operators")) let minfo1 = operatorsType.GetProperty("NaN").GetGetMethod() @@ -14124,9 +14161,17 @@ namespace ProviderImplementation.ProvidedTypes | Call(None, minfo2, []) when (minfo1.MetadataToken = minfo2.MetadataToken && minfo1 = minfo2) -> +#if FSHARP6 + ValueSome() + | _ -> ValueNone) +#else Some() | _ -> None) - +#endif + +#if FSHARP6 + [] +#endif let (|NaNSingle|_|) = let operatorsType = convTypeToTgt (typedefof>.Assembly.GetType("Microsoft.FSharp.Core.Operators")) let minfo1 = operatorsType.GetProperty("NaNSingle").GetGetMethod() @@ -14135,8 +14180,13 @@ namespace ProviderImplementation.ProvidedTypes | Call(None, minfo2, []) when (minfo1.MetadataToken = minfo2.MetadataToken && minfo1 = minfo2) -> +#if FSHARP6 + ValueSome() + | _ -> ValueNone) +#else Some() | _ -> None) +#endif let (|TypeOf|_|) = (|SpecificCall|_|) <@ typeof @> From 5d244696a0009e0e80f0db99a4a2f05901bf9adf Mon Sep 17 00:00:00 2001 From: Tuomas Hietanen Date: Sun, 7 Jul 2024 21:55:33 +0100 Subject: [PATCH 2/2] ...or greater --- src/ProvidedTypes.fs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ProvidedTypes.fs b/src/ProvidedTypes.fs index 2942745..3e34f29 100644 --- a/src/ProvidedTypes.fs +++ b/src/ProvidedTypes.fs @@ -14044,7 +14044,7 @@ namespace ProviderImplementation.ProvidedTypes let stringTypeTgt = convTypeToTgt typeof let mathTypeTgt = convTypeToTgt typeof -#if FSHARP6 +#if FSHARP6_OR_GREATER let makeTypePattern tp = let tt = convTypeToTgt tp fun (t : Type) -> if t = tt then ValueSome() else ValueNone @@ -14150,7 +14150,7 @@ namespace ProviderImplementation.ProvidedTypes Some(args) | _ -> None) -#if FSHARP6 +#if FSHARP6_OR_GREATER [] #endif let (|NaN|_|) = @@ -14161,7 +14161,7 @@ namespace ProviderImplementation.ProvidedTypes | Call(None, minfo2, []) when (minfo1.MetadataToken = minfo2.MetadataToken && minfo1 = minfo2) -> -#if FSHARP6 +#if FSHARP6_OR_GREATER ValueSome() | _ -> ValueNone) #else @@ -14169,7 +14169,7 @@ namespace ProviderImplementation.ProvidedTypes | _ -> None) #endif -#if FSHARP6 +#if FSHARP6_OR_GREATER [] #endif let (|NaNSingle|_|) = @@ -14180,7 +14180,7 @@ namespace ProviderImplementation.ProvidedTypes | Call(None, minfo2, []) when (minfo1.MetadataToken = minfo2.MetadataToken && minfo1 = minfo2) -> -#if FSHARP6 +#if FSHARP6_OR_GREATER ValueSome() | _ -> ValueNone) #else