anchor.diff:    {EExpr, EE} = expand(Expr, E),
     if
       is_atom(EExpr) ->
  -      compile_error(Meta, ?m(E, file), "invalid function call :~ts.()", [EExpr]);
  +      form_error(Meta, ?m(E, file), ?MODULE, {invalid_function_call, EExpr});
       true ->
         {EArgs, EA} = expand_args(Args, elixir_env:mergea(E, EE)),
         {{{'.', DotMeta, [EExpr]}, Meta, EArgs}, elixir_env:mergev(EE, EA)}
  
positive.code:     {context, Ctx} when is_atom(Ctx) and (Ctx /= nil) ->
        Ctx;
      {context, Ctx} ->
        compile_error(Meta, ?m(E, file), "invalid :context for quote, "
          "expected non-nil compile time atom or alias, got: ~ts", ['Elixir.Macro':to_string(Ctx)]);
      false ->
        case ?m(E, module) of
          nil -> 'Elixir';
  
negative.code: %% Invalid calls
  
  expand({_, Meta, Args} = Invalid, E) when is_list(Meta) and is_list(Args) ->
    form_error(Meta, ?m(E, file), ?MODULE, {invalid_call, Invalid});
  
  expand({_, _, _} = Tuple, E) ->
    form_error([{line, 0}], ?m(E, file), ?MODULE, {invalid_quoted_expr, Tuple});
  
  %% Literals
  
  