From 202e12e6313f2059fd307b290204113a269ddbe9 Mon Sep 17 00:00:00 2001 From: Paul Westcott Date: Wed, 22 Jul 2015 04:27:45 +1000 Subject: [PATCH] "Fixing" Reflection issues with Profile builds There must be some other way to check if a type is a Value Type? I doubt if it has been removed? --- src/fsharp/FSharp.Core/seq.fs | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/fsharp/FSharp.Core/seq.fs b/src/fsharp/FSharp.Core/seq.fs index b217805bd62..d218694e5f1 100644 --- a/src/fsharp/FSharp.Core/seq.fs +++ b/src/fsharp/FSharp.Core/seq.fs @@ -1479,9 +1479,15 @@ namespace Microsoft.FSharp.Collections [] let groupBy (keyf:'T->'Key) (seq:seq<'T>) = - if typeof<'T>.IsValueType + checkNonNull "source" seq + +#if FX_ATLEAST_40 + if typeof<'Key>.IsValueType then mkDelayedSeq (fun () -> groupByValueType keyf seq) else mkDelayedSeq (fun () -> groupByRefType keyf seq) +#else + mkDelayedSeq (fun () -> groupByRefType keyf seq) +#endif [] let distinct source = @@ -1557,10 +1563,16 @@ namespace Microsoft.FSharp.Collections let countByRefType (keyf:'T->'Key) (seq:seq<'T>) = seq |> countByImpl StructBox<'Key>.Comparer (fun t -> StructBox (keyf t)) (fun sb -> sb.Value) [] - let countBy (keyf:'T->'Key) (seq:seq<'T>) = - if typeof<'T>.IsValueType - then mkDelayedSeq (fun () -> countByValueType keyf seq) - else mkDelayedSeq (fun () -> countByRefType keyf seq) + let countBy (keyf:'T->'Key) (source:seq<'T>) = + checkNonNull "source" source + +#if FX_ATLEAST_40 + if typeof<'Key>.IsValueType + then mkDelayedSeq (fun () -> countByValueType keyf source) + else mkDelayedSeq (fun () -> countByRefType keyf source) +#else + mkDelayedSeq (fun () -> countByRefType keyf source) +#endif [] let inline sum (source: seq< (^a) >) : ^a =