Skip to content

Commit

Permalink
Merge pull request #9 from KevinRansom/dsyme-tuple-spike
Browse files Browse the repository at this point in the history
Fix isTuple for arrays and pointers.
  • Loading branch information
dsyme committed Jul 26, 2016
2 parents 875bdff + b010d97 commit fae4db4
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions src/fsharp/FSharp.Core/reflect.fs
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,13 @@ module internal Impl =
//-----------------------------------------------------------------
// GENERAL UTILITIES
#if FX_ATLEAST_PORTABLE
let instanceFieldFlags = BindingFlags.Instance
let instancePropertyFlags = BindingFlags.Instance
let staticPropertyFlags = BindingFlags.Static
let staticFieldFlags = BindingFlags.Static
let staticMethodFlags = BindingFlags.Static
#else
let instanceFieldFlags = BindingFlags.GetField ||| BindingFlags.Instance
let instancePropertyFlags = BindingFlags.GetProperty ||| BindingFlags.Instance
let staticPropertyFlags = BindingFlags.GetProperty ||| BindingFlags.Static
let staticFieldFlags = BindingFlags.GetField ||| BindingFlags.Static
Expand Down Expand Up @@ -385,7 +387,8 @@ module internal Impl =

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

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

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

0 comments on commit fae4db4

Please sign in to comment.