anchor.diff:      GenAllocUnionCaseCore cenv cgbuf eenv (c,tyargs,args.Length,m)
       GenSequel cenv eenv.cloc cgbuf sequel
   
  -and GenAfterMatch cenv cgbuf eenv afterJoin stackAfterJoin sequelAfterJoin =
  -    CG.SetMarkToHere cgbuf afterJoin
  -
  -    //assert(cgbuf.GetCurrentStack() = stackAfterJoin)  // REVIEW: Since gen_dtree* now sets stack, stack should be stackAfterJoin at this point...
  -    CG.SetStack cgbuf stackAfterJoin
  -    // If any values are left on the stack after the join then we're certainly going to do something with them
  -    // For example, we may be about to execute a 'stloc' for
  -    //
  -    //   let y2 = if System.DateTime.Now.Year < 2000 then 1 else 2
  -    //
  -    // or a 'stelem' for
  -    //
  -    //   arr.[0] <- if System.DateTime.Now.Year > 2000 then 1 else 2
  -    //
  -    // In both cases, any instructions that come after this point will be falsely associated with the last branch of the control
  -    // prior to the join point. This is base, e.g. see FSharp 1.0 bug 5155
  -    if not (isNil stackAfterJoin) then
  -        cgbuf.EmitStartOfHiddenCode()
  -
  -    GenSequel cenv eenv.cloc cgbuf sequelAfterJoin
  -
  -and GenDecisionTreeTargetQueue cenv cgbuf (targetQueue: Queue<_>) eenv afterJoin stackAfterJoin sequelAfterJoin contf =
  -    if targetQueue.Count > 0 then
  -        let f = targetQueue.Dequeue ()
  -        let genTargetInfoOpt = f ()
  -        match genTargetInfoOpt with
  -        | Some (eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget) -> 
  -            GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget true (fun Fake ->
  -                GenDecisionTreeTargetQueue cenv cgbuf targetQueue eenv afterJoin stackAfterJoin sequelAfterJoin contf
  -            )
  -        | _ -> 
  -            GenDecisionTreeTargetQueue cenv cgbuf targetQueue eenv afterJoin stackAfterJoin sequelAfterJoin contf
  -    else
  -        GenAfterMatch cenv cgbuf eenv afterJoin stackAfterJoin sequelAfterJoin
  -        contf Fake
  -
   and GenLinearExpr cenv cgbuf eenv sp expr sequel canProcessSequencePoint (contf: FakeUnit -> FakeUnit) =
       let expr = stripExpr expr
       match expr with 
  
positive.code:         // go to the join point
          Br afterJoin, afterJoin, stackAfterJoin, sequel
  
  and GenPostponedAndQueueTargets cenv cgbuf (queue: Queue<_>) targetInfos stackAtTargets sequel =
      match targetInfos with
      | [] -> None
      | (KeyValue(_, (targetInfo, isTargetPostponed))) :: rest ->
          if isTargetPostponed then 
              queue.Enqueue(fun () -> GenPostponedAndQueueTargets cenv cgbuf queue rest stackAtTargets sequel)
              Some(GenDecisionTreeTarget cenv cgbuf stackAtTargets targetInfo sequel)
          else
              GenPostponedAndQueueTargets cenv cgbuf queue rest stackAtTargets sequel
  
  and GenDecisionTreesAndQueueTargets cenv cgbuf (queue: Queue<_>) targetInfos decisions stackAtTargets targets repeatSP sequel =
      match decisions with
      | [] -> 
          let sortedTargetInfos = 
  
negative.code:             |> Seq.sortBy (fun (KeyValue(targetIdx, _)) -> targetIdx)
              |> List.ofSeq
  
          GenPostponedDecisionTreeTargets cenv cgbuf sortedTargetInfos stackAtTargets sequel contf
              
      | (inplabOpt, eenv, tree) :: rest ->
          match tree with
          | TDSuccess(es, targetIdx) ->
              let targetInfos, genTargetInfoOpt = GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets repeatSP targetInfos sequel
              match genTargetInfoOpt with
              | Some (eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget) ->
                  GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget true (fun Fake ->
                      GenDecisionTreesAndTargets cenv cgbuf targetInfos rest stackAtTargets targets repeatSP sequel contf
                  )
              | _ ->
                  GenDecisionTreesAndTargets cenv cgbuf targetInfos rest stackAtTargets targets repeatSP sequel contf
          | _ ->
              let newDecisions = GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree targets repeatSP targetInfos sequel
              GenDecisionTreesAndTargets cenv cgbuf targetInfos (newDecisions @ rest) stackAtTargets targets repeatSP sequel contf
  
  // Accumulate the decision graph as we go
  and GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequel contf =
      GenDecisionTreesAndTargets cenv cgbuf (IntMap.empty()) [(None, eenv, tree)] stackAtTargets targets repeatSP sequel contf
  
  and TryFindTargetInfo targetInfos n =
      match IntMap.tryFind n targetInfos with
  