anchor.diff:    record_definition/3, record_defaults/4,
     ensure_no_import_conflict/4, warn_unused_local/3, format_error/1
   ]).
  --export([macro_for/3, local_for/3, local_for/4]).
  +-export([macro_for/3, local_for/4]).
   
   -include("elixir.hrl").
   -define(attr, {elixir, locals_tracker}).
  
positive.code:     error:badarg -> false
    end.
  
  local_for(Module, Name, Arity) ->
    local_for(Module, Name, Arity, nil).
  local_for(Module, Name, Arity, Given) ->
    Tuple = {Name, Arity},
    case elixir_def:lookup_clauses(Module, Tuple) of
  
negative.code:   end.
  
  get_function(Ann, Module, Clauses) ->
    Fun = {'fun', Ann, {clauses, Clauses}},
    {value, Result, _Binding} =
      erl_eval:expr(Fun, [], {value, fun(Name, Args) -> invoke_local(Module, Name, Args) end}),
    Result.
  
  invoke_local(Module, RawName, Args) ->
    %% If we have a macro, its arity in the table is
    %% actually one less than in the function call
    {Name, Arity} = case atom_to_list(RawName) of
      "MACRO-" ++ Rest -> {list_to_atom(Rest), length(Args) - 1};
      _ -> {RawName, length(Args)}
    end,
    apply(local_for(Module, Name, Arity, nil), Args).
  
  
  %% TRACKING
  
  