Skip to content

Commit 3a94bab

Browse files
author
José Valim
committed
Get rid of useless fourth argument in defexception
1 parent 2564635 commit 3a94bab

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

lib/elixir/lib/kernel.ex

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1515,9 +1515,14 @@ defmodule Kernel do
15151515
string;
15161516
15171517
"""
1518-
defmacro defexception(name, fields, opts // [], do_block // []) do
1519-
opts = Keyword.merge(opts, do_block)
1520-
opts = Keyword.put(opts, :do, quote do
1518+
defmacro defexception(name, fields, do_block // []) do
1519+
{ fields, do_block } =
1520+
case is_list(fields) and Keyword.get(fields, :do, false) do
1521+
false -> { fields, do_block }
1522+
other -> { Keyword.delete(fields, :do), [do: other] }
1523+
end
1524+
1525+
do_block = Keyword.put(do_block, :do, quote do
15211526
@moduledoc nil
15221527
record_type message: binary
15231528

@@ -1527,11 +1532,11 @@ defmodule Kernel do
15271532
@doc false
15281533
def exception(args, self), do: update(args, self)
15291534

1530-
unquote(Keyword.get opts, :do)
1535+
unquote(Keyword.get do_block, :do)
15311536
end)
15321537

15331538
fields = quote do: [__exception__: :__exception__] ++ unquote(fields)
1534-
record = Record.defrecord(name, fields, opts)
1539+
record = Record.defrecord(name, fields, do_block)
15351540

15361541
quote do
15371542
{ :module, name, _, _ } = unquote(record)

lib/elixir/test/elixir/exception_test.exs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,13 @@ defmodule Kernel.ExceptionTest do
102102
[file: ^file, line: 95]} = stacktrace # line is sensitive
103103
end
104104

105+
test :defexception do
106+
defexception SampleError, field: :ok do
107+
# Check do block is properly inline
108+
def message(_), do: "hello"
109+
end
110+
end
111+
105112
defp empty_tuple, do: {}
106113
defp a_tuple, do: { :foo, :bar, :baz }
107114
defp a_list, do: [ :foo, :bar, :baz ]

0 commit comments

Comments
 (0)