@@ -4858,42 +4858,44 @@ and GenJoinPoint cenv cgbuf pos eenv ty m sequel =
48584858 // go to the join point
48594859 Br afterJoin, afterJoin, stackAfterJoin, sequel
48604860
4861- // Accumulate the decision graph as we go
4862- and GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequel : ( Queue < unit -> ( IlxGenEnv * EmitSequencePointState * Expr * sequel ) option >) =
4863- let rec genDecisions targetInfos decisions ( queue : Queue < _ >) =
4864- match decisions with
4865- | [] ->
4866- let remaining =
4867- targetInfos
4868- |> Seq.sortBy ( fun ( KeyValue ( targetIdx , _ )) -> targetIdx )
4869- |> Seq.filter ( fun ( KeyValue ( _ , ( _ , isTargetPostponed ))) -> isTargetPostponed )
4870- |> List.ofSeq
4871-
4872- let rec genRemaining remaining ( queue : Queue < _ >) =
4873- match remaining with
4874- | [] -> None
4875- | ( KeyValue (_, ( targetInfo , _))) :: rest ->
4876- queue.Enqueue ( fun () -> genRemaining rest queue )
4877- Some ( GenDecisionTreeTarget cenv cgbuf stackAtTargets targetInfo sequel )
4878-
4879- genRemaining remaining queue
4861+ and GenPostponedAndQueueTargets cenv cgbuf ( queue : Queue < _ >) targetInfos stackAtTargets sequel =
4862+ match targetInfos with
4863+ | [] -> None
4864+ | ( KeyValue (_, ( targetInfo , isTargetPostponed ))) :: rest ->
4865+ if isTargetPostponed then
4866+ queue.Enqueue ( fun () -> GenPostponedAndQueueTargets cenv cgbuf queue rest stackAtTargets sequel )
4867+ Some ( GenDecisionTreeTarget cenv cgbuf stackAtTargets targetInfo sequel )
4868+ else
4869+ GenPostponedAndQueueTargets cenv cgbuf queue rest stackAtTargets sequel
4870+
4871+ and GenDecisionTreesAndQueueTargets cenv cgbuf ( queue : Queue < _ >) targetInfos decisions stackAtTargets targets repeatSP sequel =
4872+ match decisions with
4873+ | [] ->
4874+ let sortedTargetInfos =
4875+ targetInfos
4876+ |> Seq.sortBy ( fun ( KeyValue ( targetIdx , _ )) -> targetIdx )
4877+ |> List.ofSeq
4878+
4879+ GenPostponedAndQueueTargets cenv cgbuf queue sortedTargetInfos stackAtTargets sequel
48804880
4881- | ( inplabOpt, eenv, tree) :: rest ->
4882- match tree with
4883- | TDSuccess( es, targetIdx) ->
4884- let targetInfos , genTargetInfoOpt = GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets repeatSP targetInfos sequel
4885- match genTargetInfoOpt with
4886- | Some _ ->
4887- queue.Enqueue( fun () -> genDecisions targetInfos rest queue)
4888- genTargetInfoOpt
4889- | _ ->
4890- genDecisions targetInfos rest queue
4881+ | ( inplabOpt, eenv, tree) :: rest ->
4882+ match tree with
4883+ | TDSuccess( es, targetIdx) ->
4884+ let targetInfos , genTargetInfoOpt = GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets repeatSP targetInfos sequel
4885+ match genTargetInfoOpt with
4886+ | Some _ ->
4887+ queue.Enqueue( fun () -> GenDecisionTreesAndQueueTargets cenv cgbuf queue targetInfos rest stackAtTargets targets repeatSP sequel)
4888+ genTargetInfoOpt
48914889 | _ ->
4892- let newDecisions = GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree targets repeatSP targetInfos sequel
4893- genDecisions targetInfos ( newDecisions @ rest) queue
4890+ GenDecisionTreesAndQueueTargets cenv cgbuf queue targetInfos rest stackAtTargets targets repeatSP sequel
4891+ | _ ->
4892+ let newDecisions = GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree targets repeatSP targetInfos sequel
4893+ GenDecisionTreesAndQueueTargets cenv cgbuf queue targetInfos ( newDecisions @ rest) stackAtTargets targets repeatSP sequel
48944894
4895+ // Accumulate the decision graph as we go
4896+ and GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequel : ( Queue < unit -> ( IlxGenEnv * EmitSequencePointState * Expr * sequel ) option >) =
48954897 let queue = Queue()
4896- queue.Enqueue ( fun () -> genDecisions ( IntMap.empty()) [( None, eenv, tree)] queue )
4898+ queue.Enqueue ( fun () -> GenDecisionTreesAndQueueTargets cenv cgbuf queue ( IntMap.empty()) [( None, eenv, tree)] stackAtTargets targets repeatSP sequel )
48974899 queue
48984900
48994901and TryFindTargetInfo targetInfos n =
0 commit comments