Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 16 additions & 10 deletions src/Compiler/TypedTree/TypedTreeOps.Remapping.fs
Original file line number Diff line number Diff line change
Expand Up @@ -873,26 +873,33 @@ module internal ExprFreeVars =
let accFreevarsInTycon opts tcref acc =
accFreeTyvars opts accFreeTycon tcref acc

let accFreevarsInVal opts v acc = accFreeTyvars opts accFreeInVal v acc

let accFreeVarsInTraitSln opts tys acc =
accFreeTyvars opts accFreeInTraitSln tys acc

let accFreeVarsInTraitInfo opts tys acc =
accFreeTyvars opts accFreeInTrait tys acc

let inline accFreeTyvarsInVal opts v ftyvs =
if opts.collectInTypes then
accFreeInVal opts v ftyvs
else
ftyvs

let boundLocalVal opts v fvs =
if not opts.includeLocals then
fvs
else
let fvs = accFreevarsInVal opts v fvs
let ftyvs = accFreeTyvarsInVal opts v fvs.FreeTyvars

if not (Zset.contains v fvs.FreeLocals) then
fvs
else
if Zset.contains v fvs.FreeLocals then
{ fvs with
FreeTyvars = ftyvs
FreeLocals = Zset.remove v fvs.FreeLocals
}
elif ftyvs === fvs.FreeTyvars then
fvs
else
{ fvs with FreeTyvars = ftyvs }

let boundProtect fvs =
if fvs.UsesMethodLocalConstructs || fvs.ContainsILFieldAccess then
Expand Down Expand Up @@ -943,14 +950,13 @@ module internal ExprFreeVars =
if opts.canCache then tryGetCacheValue cache else ValueNone

let accFreeLocalVal opts v fvs =
if not opts.includeLocals then
fvs
else if Zset.contains v fvs.FreeLocals then
if not opts.includeLocals || Zset.contains v fvs.FreeLocals then
fvs
else
let fvs = accFreevarsInVal opts v fvs
let ftyvs = accFreeTyvarsInVal opts v fvs.FreeTyvars

{ fvs with
FreeTyvars = ftyvs
FreeLocals = Zset.add v fvs.FreeLocals
}

Expand Down
Loading