   end
 
   @doc false
-  def get_attribute(module, key, warn) when is_atom(key) and (is_list(warn) or is_nil(warn)) do
+  def get_attribute(module, key, stack) when is_atom(key) and (is_list(stack) or is_nil(stack)) do
     assert_not_compiled!(:get_attribute, module)
     table = data_table_for(module)
 

  end

  @doc false
  def put_attribute(module, key, value, warn) when is_atom(key) do
    assert_not_compiled!(:put_attribute, module)
    table = data_table_for(module)
    value = preprocess_attribute(key, value)
    acc   = :ets.lookup_element(table, {:elixir, :acc_attributes}, 2)
    warn_if_redefining_attribute(warn, table, key)

    new =
      if :lists.member(key, acc) do

        "could not call #{fun} on module #{inspect module} because it was already compiled"
  end

  defp warn_if_redefining_attribute(nil, _table, _key), do: false
  defp warn_if_redefining_attribute(stack, table, key) do
    case :ets.lookup(table, key) do
      [{_, val}] when val != nil ->
        :elixir_errors.warn warn_info(stack), "redefining @#{Atom.to_string(key)} attribute"
      _other ->
        false
    end
  end
end
