@@ -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+
25752590and 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