Skip to content

Commit e6baf7f

Browse files
committed
Added GenDecisionTreeTargetQueue
1 parent 74196ae commit e6baf7f

File tree

1 file changed

+16
-17
lines changed

1 file changed

+16
-17
lines changed

src/fsharp/IlxGen.fs

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2572,6 +2572,21 @@ and GenAfterMatch cenv cgbuf eenv afterJoin stackAfterJoin sequelAfterJoin =
25722572

25732573
GenSequel cenv eenv.cloc cgbuf sequelAfterJoin
25742574

2575+
and GenDecisionTreeTargetQueue cenv cgbuf (targetQueue: Queue<_>) eenv afterJoin stackAfterJoin sequelAfterJoin contf =
2576+
if targetQueue.Count > 0 then
2577+
let f = targetQueue.Dequeue ()
2578+
let genTargetInfoOpt = f ()
2579+
match genTargetInfoOpt with
2580+
| Some (eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget) ->
2581+
GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget true (fun Fake ->
2582+
GenDecisionTreeTargetQueue cenv cgbuf targetQueue eenv afterJoin stackAfterJoin sequelAfterJoin contf
2583+
)
2584+
| _ ->
2585+
GenDecisionTreeTargetQueue cenv cgbuf targetQueue eenv afterJoin stackAfterJoin sequelAfterJoin contf
2586+
else
2587+
GenAfterMatch cenv cgbuf eenv afterJoin stackAfterJoin sequelAfterJoin
2588+
contf Fake
2589+
25752590
and GenLinearExpr cenv cgbuf eenv sp expr sequel canProcessSequencePoint (contf: FakeUnit -> FakeUnit) =
25762591
let expr = stripExpr expr
25772592
match expr with
@@ -2661,23 +2676,7 @@ and GenLinearExpr cenv cgbuf eenv sp expr sequel canProcessSequencePoint (contf:
26612676
// Each branch-RHS (targets) may contribute to the stack, leaving it in the "stackAfterJoin" state, for the join point.
26622677
// Since code is branching and joining, the cgbuf stack is maintained manually.
26632678
let targetQueue = GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequelOnBranches
2664-
2665-
let rec popTargetQueue () =
2666-
if targetQueue.Count > 0 then
2667-
let f = targetQueue.Dequeue ()
2668-
let genTargetInfoOpt = f ()
2669-
match genTargetInfoOpt with
2670-
| Some (eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget) ->
2671-
GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget true (fun Fake ->
2672-
popTargetQueue ()
2673-
)
2674-
| _ ->
2675-
popTargetQueue ()
2676-
else
2677-
GenAfterMatch cenv cgbuf eenv afterJoin stackAfterJoin sequelAfterJoin
2678-
contf Fake
2679-
2680-
popTargetQueue ()
2679+
GenDecisionTreeTargetQueue cenv cgbuf targetQueue eenv afterJoin stackAfterJoin sequelAfterJoin contf
26812680

26822681
| LinearOpExpr (TOp.UnionCase c, tyargs, argsFront, argLast, m) ->
26832682
if canProcessSequencePoint then

0 commit comments

Comments
 (0)