anchor.diff:      apply(Fun, [EArg|Args])
     catch
       Kind:Reason ->
  -      Info = [{Receiver, Name, length(Args), location(Line, E)}, mfa(Line, E)],
  -      erlang:raise(Kind, Reason, prune_stacktrace(Info, erlang:get_stacktrace(), EArg))
  +      Arity = length(Args),
  +      MFA  = {Receiver, ?elixir_macro(Name), Arity+1},
  +      Info = [{Receiver, Name, Arity, [{file, "expanding macro"}]}, caller(Line, E)],
  +      erlang:raise(Kind, Reason, prune_stacktrace(erlang:get_stacktrace(), MFA, Info, EArg))
     end.
   
   expand_macro_named(Meta, Receiver, Name, Arity, Args, E) ->
  
positive.code:       E)
    catch
      Kind:Reason ->
        Info = [{Receiver, Name, Arity, location(Line, E)}, mfa(Line, E)],
        erlang:raise(Kind, Reason, prune_stacktrace(Info, erlang:get_stacktrace(), nil))
    end.
  
  mfa(Line, #elixir_env{module=nil} = E) ->
    {elixir_compiler, '__FILE__', 2, location(Line, E)};
  mfa(Line, #elixir_env{module=Module, function=nil} = E) ->
    {Module, '__MODULE__', 0, location(Line, E)};
  mfa(Line, #elixir_env{module=Module, function={Name, Arity}} = E) ->
    {Module, Name, Arity, location(Line, E)}.
  
  location(Line, E) ->
    [{file, elixir_utils:characters_to_list(E#elixir_env.file)}, {line, Line}].
  
  %% Helpers
  
  
negative.code:       false
    end.
  
  % %% We've reached the macro wrapper fun, skip it with the rest
  prune_stacktrace([{_, _, [E|_], _}|_], _MFA, Info, E) ->
    Info;
  %% We've reached the invoked macro, skip it
  prune_stacktrace([{M, F, A, _}|_], {M, F, A}, Info, _E) ->
    Info;
  %% We've reached the elixir_dispatch internals, skip it with the rest
  prune_stacktrace([{Mod, _, _, _}|_], _MFA, Info, _E) when Mod == elixir_dispatch; Mod == elixir_exp ->
    Info;
  prune_stacktrace([H|T], MFA, Info, E) ->
    [H|prune_stacktrace(T, MFA, Info, E)];
  prune_stacktrace([], _MFA, Info, _E) ->
    Info.
  
  %% ERROR HANDLING
  