anchor.diff:          | thisArg::args -> Some(boundThis, thisArg), args
           | _ -> failwith "Expecting thisArg to be first element of argument list"
   
  -    let decisionTargetsReferencedMultipleTimes expr targetsLength =
  -        let targetRefs = Dictionary()
  -        for i = 1 to targetsLength do
  -            targetRefs.Add(i - 1, 0)
  -        expr |> FableTransforms.deepExistsWithShortcircuit (function
  -            | Fable.DecisionTreeSuccess(idx,_,_) ->
  -                let count = targetRefs.[idx]
  -                targetRefs.[idx] <- count + 1
  -                if count > 0 then Some true else None
  -            // We shouldn't actually see this, but shortcircuit just in case
  -            | Fable.DecisionTree _ -> Some false
  -            | _ -> None)
  -
  -    let getDecisionTarget (ctx: Context) targetIndex boundValues =
  +    let getDecisionTarget (ctx: Context) targetIndex =
           match List.tryItem targetIndex ctx.DecisionTargets with
           | None -> failwithf "Cannot find DecisionTree target %i" targetIndex
  -        | Some(idents, _) when not(List.sameLength idents boundValues) ->
  -            failwithf "Found DecisionTree target %i but length of bindings differ" targetIndex
           | Some(idents, target) -> idents, target
   
       let rec isJsStatement ctx preferStatement (expr: Fable.Expr) =
  
positive.code:             | None -> cases
          SwitchStatement(com.TransformAsExpr(ctx, evalExpr), List.toArray cases) :> Statement
  
      let getDecisionTargetAndBindValues (ctx: Context) targetIndex boundValues =
          let idents, target = getDecisionTarget ctx targetIndex boundValues
          let bindings, replacements =
              (([], Map.empty), idents, boundValues)
              |||> List.fold2 (fun (bindings, replacements) ident expr ->
                  if hasDoubleEvalRisk expr // && isReferencedMoreThan 1 ident.Name body
                  then (ident, expr)::bindings, replacements
                  else bindings, Map.add ident.Name expr replacements)
  
negative.code:     let transformDecisionTreeSuccessAsStatements (com: IBabelCompiler) (ctx: Context) returnStrategy targetIndex boundValues: Statement[] =
          match returnStrategy with
          | Some(Target targetId) ->
              let idents, _ = getDecisionTarget ctx targetIndex
              let assignments =
                  matchTargetIdentAndValues idents boundValues
                  |> List.mapToArray (fun (id, TransformExpr com ctx value) ->
                      assign None (ident id) value |> ExpressionStatement :> Statement)
              let targetAssignment = assign None targetId (ofInt targetIndex) |> ExpressionStatement :> Statement
              Array.append [|targetAssignment|] assignments
  