anchor.diff:  	receive_expr ->
   	    instrument_receive(instrument_subtrees(Tree));
   	%% Replace every underscore with a new (underscore-prefixed) variable.
  -	underscore ->
  -	    [{used, Used}] = ets:lookup(?NT_USED, used),
  -	    Fresh = erl_syntax_lib:new_variable_name(Used),
  -	    String = "_" ++ atom_to_list(Fresh),
  -	    erl_syntax:variable(String);
  +	underscore -> new_underscore_variable();
   	_Other -> instrument_subtrees(Tree)
       end.
   
  
positive.code:             %% Create new receive expression adding the `after 0` part.
              Timeout = erl_syntax:integer(0),
              %% Create new variable to use as 'Aux'.
              [{used, Used}] = ets:lookup(?NT_USED, used),
              Fresh = erl_syntax_lib:new_variable_name(Used),
              FunVar = erl_syntax:variable(Fresh),
              Action = erl_syntax:application(FunVar, []),
              NewRecv = erl_syntax:receive_expr(NewClauses, Timeout, [Action]),
              %% Create a new fun to be the argument of rep_receive.
  
negative.code: instrument_yield() ->
      erl_syntax:atom(true).
  
  %%%----------------------------------------------------------------------
  %%% Utilities
  %%%----------------------------------------------------------------------
  
  new_variable() ->
      [{used, Used}] = ets:lookup(?NT_USED, used),
      Fresh = erl_syntax_lib:new_variable_name(Used),
      ets:insert(?NT_USED, {used, sets:add_element(Fresh, Used)}),
      erl_syntax:variable(Fresh).
  
  new_underscore_variable() ->
      [{used, Used}] = ets:lookup(?NT_USED, used),
      new_underscore_variable(Used).
  
  new_underscore_variable(Used) ->
      Fresh1 = erl_syntax_lib:new_variable_name(Used),
      String = "_" ++ atom_to_list(Fresh1),
      Fresh2 = list_to_atom(String),
      case is_fresh(Fresh2, Used) of
          true ->
              ets:insert(?NT_USED, {used, sets:add_element(Fresh2, Used)}),
              erl_syntax:variable(Fresh2);
          false ->
              new_underscore_variable(Used)
      end.
  
  is_fresh(Atom, Set) ->
      not sets:is_element(Atom, Set).
  
  %%%----------------------------------------------------------------------
  %%% Logging
  %%%----------------------------------------------------------------------
  
  %% Log a list of errors, as returned by compile:file/2.
  log_error_list(List) ->
      log_list(List, "").
  