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 =