anchor.diff:    end.
   
   invalid_capture(Meta, Arg, E) ->
  -  Message = "invalid args for &, expected an expression in the format of &Mod.fun/arity, "
  -            "&local/arity or a capture containing at least one argument as &1, got: ~ts",
  -  compile_error(Meta, ?key(E, file), Message, ['Elixir.Macro':to_string(Arg)]).
  +  form_error(Meta, ?key(E, file), ?MODULE, {invalid_args_for_capture, Arg}).
   
   validate(Meta, [{Pos, Var} | T], Pos, E) ->
     [Var | validate(Meta, T, Pos + 1, E)];
   validate(Meta, [{Pos, _} | _], Expected, E) ->
  -  compile_error(Meta, ?key(E, file), "capture &~B cannot be defined without &~B", [Pos, Expected]);
  +  form_error(Meta, ?key(E, file), ?MODULE, {capture_arg_without_predecessor, Pos, Expected});
   validate(_Meta, [], _Pos, _E) ->
     [].
   
  
positive.code: is_sequential([{'&', _, [Int]} | T], Int) -> is_sequential(T, Int + 1);
  is_sequential([], _Int) -> true;
  is_sequential(_, _Int) -> false.
  
negative.code:   Var = {list_to_atom([$x | integer_to_list(Pos)]), [{counter, Counter}], 'Elixir'},
    {Var, orddict:store(Pos, Var, Dict)};
  escape({'&', Meta, [Pos]}, _Counter, E, _Dict) when is_integer(Pos) ->
    form_error(Meta, ?key(E, file), ?MODULE, {unallowed_capture_arg, Pos});
  escape({'&', Meta, _} = Arg, _Counter, E, _Dict) ->
    form_error(Meta, ?key(E, file), ?MODULE, {nested_capture, Arg});
  escape({Left, Meta, Right}, Counter, E, Dict0) ->
    {TLeft, Dict1}  = escape(Left, Counter, E, Dict0),
    {TRight, Dict2} = escape(Right, Counter, E, Dict1),
  