anchor.diff:              | Some(Fable.ExprKey(TransformExpr com ctx (e, stmts''))) ->
                   let expr, stmts''' = getExpr None expr e
                   expr, stmts @ stmts' @ stmts'' @ stmts'''
  -        printfn "Used names: %A" ctx.UsedNames
  -        printfn "transformset, assign: %A" (range, ret, value, stmts)
  +        //printfn "transformset, assign: %A" (range, ret, value, stmts)
           assign range ret value, stmts
   
       let transformBindingExprBody (com: IPythonCompiler) (ctx: Context) (var: Fable.Ident) (value: Fable.Expr) =
  
positive.code:         let ctx =
              { ctx with TailCallOpportunity = tailcallChance
                         HoistVars = fun ids -> declaredVars.AddRange(ids); true
                         OptimizeTailCall = fun () -> isTailCallOptimized <- true }
          let body =
              if body.Type = Fable.Unit then
                  transformBlock com ctx (Some ReturnUnit) body
  
negative.code:     DeclarationScopes: HashSet<string>
      CurrentDeclarationScope: HashSet<string> }
  
  /// Python specific, used for keeping track of existing variable bindings to
  /// know if we need to declare an identifier as nonlocal or global.
  type BoundVars =
      { GlobalScope: HashSet<string>
        EnclosingScope: HashSet<string>
        LocalScope: HashSet<string> }
  
      member this.EnterScope () =
          printfn "EnterScope"
          let enclosingScope = HashSet<string>()
          enclosingScope.UnionWith(this.EnclosingScope)
          enclosingScope.UnionWith(this.LocalScope)
          { this with LocalScope = HashSet (); EnclosingScope = enclosingScope }
  
      member this.Bind(name: string) =
          printfn "Bind: %A" name
          this.LocalScope.Add name |> ignore
  
      member this.Bind(ids: Identifier list) =
          printfn "Bind: %A" ids
          for (Identifier name) in ids do
              this.LocalScope.Add name |> ignore
  
      member this.NonLocals(idents: Identifier list) =
          printfn "NonLocals: %A" (idents, this)
          [
              for ident in idents do
                  let (Identifier name) = ident
                  if not (this.LocalScope.Contains name) && this.EnclosingScope.Contains name then
                      yield ident
                  else
                      this.Bind(name)
                      ()
          ]
  type Context =
    { File: Fable.File
      UsedNames: UsedNames
  