anchor.diff:          {env with map = Map.add id e env.map; reusable = l}, e
   
   // FIXME: handle 2-letter names
  -let optimizeContext env id =
  +let optimizeContext contextTable env id =
       let cid = char (1000 + int id)
  -    let newName = chooseIdent cid env.reusable
  +    let newName = chooseIdent contextTable cid env.reusable
       let l = env.reusable |> List.filter (fun x -> x.[0] <> newName.[0])
       {env with map = Map.add id newName env.map; reusable = l}, newName
   
  
positive.code:         string(chars.[first]) + string(chars.[second])
  
  let computeContextTable text =
      Seq.pairwise text |> Seq.iter (fun (prev, next) ->
          match contextTable.TryFind (prev, next) with
          | Some n -> contextTable.[(prev, next)] <- n + 1
          | None -> contextTable.[(prev, next)] <- 1
      )
      //let chars, n = Seq.maxBy snd [for pair in contextTable -> pair.Key, pair.Value]
      //printfn "max occ: %A -> %d" chars n
  
  // /!\ This function is a performance bottleneck.
  let chooseIdent ident candidates =
      let allChars = [char 32 .. char 127] // printable chars
      let prevs = allChars |> Seq.choose (fun c ->
          match contextTable.TryFind (c, ident) with
  
negative.code:         let env = {env with map = Map.add name name env.map; reusable = re}
          doNotOverload env li
  
  let renameTopLevel li env =
      // Rename top-level values first
      let env = doNotOverload env options.noRenamingList
      let env, li = renList env renTopLevelName li
  