diff --git a/lib/elixir/lib/module/types.ex b/lib/elixir/lib/module/types.ex index f6f00a4d90..e6fb72ce85 100644 --- a/lib/elixir/lib/module/types.ex +++ b/lib/elixir/lib/module/types.ex @@ -178,7 +178,7 @@ defmodule Module.Types do default = Keyword.get(meta, :defaults, 0) cond do - Keyword.get(meta, :context) != nil -> + Keyword.get(meta, :context) != nil or Keyword.get(meta, :from_super) == true -> :ok default == 0 -> diff --git a/lib/elixir/test/elixir/kernel/overridable_test.exs b/lib/elixir/test/elixir/kernel/overridable_test.exs index 51992f0b4b..1180364174 100644 --- a/lib/elixir/test/elixir/kernel/overridable_test.exs +++ b/lib/elixir/test/elixir/kernel/overridable_test.exs @@ -159,6 +159,18 @@ defmodule Kernel.Overridable do def private_macro_call(val \\ 11) do private_macro(val) end + + ## Defaults + + def with_default(a, b \\ 1) do + a + b + end + + defoverridable with_default: 2 + + def with_default(a, b) do + super(a + b, a + b) + end end defmodule Kernel.OverridableExampleBehaviour do @@ -171,7 +183,7 @@ end defmodule Kernel.OverridableTest do require Kernel.Overridable, as: Overridable - use ExUnit.Case + use ExUnit.Case, async: true defp purge(module) do :code.purge(module) @@ -286,6 +298,11 @@ defmodule Kernel.OverridableTest do assert Overridable.multiple_overrides() == [3, 2, 1] end + test "with defaults" do + assert Overridable.with_default(5) == 12 + assert Overridable.with_default(5, 2) == 14 + end + test "overridable macros" do a = 11 assert Overridable.overridable_macro(a) == 1111