Skip to content

Commit fae4db4

Browse files
authored
Merge pull request #9 from KevinRansom/dsyme-tuple-spike
Fix isTuple for arrays and pointers.
2 parents 875bdff + b010d97 commit fae4db4

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

src/fsharp/FSharp.Core/reflect.fs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,13 @@ module internal Impl =
7878
//-----------------------------------------------------------------
7979
// GENERAL UTILITIES
8080
#if FX_ATLEAST_PORTABLE
81+
let instanceFieldFlags = BindingFlags.Instance
8182
let instancePropertyFlags = BindingFlags.Instance
8283
let staticPropertyFlags = BindingFlags.Static
8384
let staticFieldFlags = BindingFlags.Static
8485
let staticMethodFlags = BindingFlags.Static
8586
#else
87+
let instanceFieldFlags = BindingFlags.GetField ||| BindingFlags.Instance
8688
let instancePropertyFlags = BindingFlags.GetProperty ||| BindingFlags.Instance
8789
let staticPropertyFlags = BindingFlags.GetProperty ||| BindingFlags.Static
8890
let staticFieldFlags = BindingFlags.GetField ||| BindingFlags.Static
@@ -385,7 +387,8 @@ module internal Impl =
385387

386388
let isTupleType (typ:Type) =
387389
// Simple Name Match on typ
388-
tupleNames |> Seq.exists(fun n -> typ.FullName.StartsWith(n))
390+
if typ.IsEnum || typ.IsArray || typ.IsPointer then false
391+
else tupleNames |> Seq.exists(fun n -> typ.FullName.StartsWith(n))
389392

390393
let maxTuple = 8
391394
// Which field holds the nested tuple?
@@ -470,7 +473,7 @@ module internal Impl =
470473
elif j=maxTuple then "Rest"
471474
else (assert false; "")) // dead code under prior assert, props.Length <= maxTuple
472475
haveNames = expectNames)
473-
#endif
476+
#endif
474477
props
475478

476479
let orderTupleFields (fields:FieldInfo[]) =
@@ -534,7 +537,7 @@ module internal Impl =
534537
// Get the reader for the outer tuple record
535538
let reader =
536539
if typ.IsValueType then
537-
let fields = (typ.GetFields(instancePropertyFlags ||| BindingFlags.Public) |> orderTupleFields)
540+
let fields = (typ.GetFields(instanceFieldFlags ||| BindingFlags.Public) |> orderTupleFields)
538541
((fun (obj:obj) -> fields |> Array.map (fun field -> field.GetValue(obj))))
539542
else
540543
let props = (typ.GetProperties(instancePropertyFlags ||| BindingFlags.Public) |> orderTupleProperties)

0 commit comments

Comments
 (0)