Skip to content

Commit a7c8be7

Browse files
committed
Ensure one arity catch is always expanded to :throw
1 parent 52d6020 commit a7c8be7

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

lib/elixir/src/elixir_clauses.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@ expand_catch(Meta, [{'when', _, [_, _, _, _ | _]}], _, E) ->
406406
expand_catch(Meta, [{'when', WhenMeta, [Arg1, Arg2, Guard]}], S, E) ->
407407
guarded_head(Meta, WhenMeta, [Arg1, Arg2], Guard, S, E);
408408
expand_catch(Meta, [{'when', WhenMeta, [Arg1, Guard]}], S, E) ->
409-
guarded_head(Meta, WhenMeta, [Arg1], Guard, S, E);
409+
guarded_head(Meta, WhenMeta, [throw, Arg1], Guard, S, E);
410410
expand_catch(Meta, [Arg], S, E) ->
411411
head(Meta, [throw, Arg], S, E);
412412
expand_catch(Meta, [_, _] = Args, S, E) ->

lib/elixir/test/elixir/kernel/expansion_test.exs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1980,6 +1980,32 @@ defmodule Kernel.ExpansionTest do
19801980
assert expand(before_expansion) == after_expansion
19811981
end
19821982

1983+
test "expands catch with when" do
1984+
before_expansion =
1985+
quote do
1986+
try do
1987+
x
1988+
catch
1989+
x when x -> z = :erlang.-(x)
1990+
end
1991+
1992+
z
1993+
end
1994+
1995+
after_expansion =
1996+
quote do
1997+
try do
1998+
x()
1999+
catch
2000+
x when x -> z = :erlang.-(x)
2001+
end
2002+
2003+
z()
2004+
end
2005+
2006+
assert expand(before_expansion) == after_expansion
2007+
end
2008+
19832009
test "expands after" do
19842010
before_expansion =
19852011
quote do

0 commit comments

Comments
 (0)