Skip to content

Commit ac9a9ab

Browse files
committed
Raise CompileError in case of duplicated do clauses for case
1 parent b1fec93 commit ac9a9ab

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

lib/elixir/src/elixir_exp_clauses.erl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ guard(Other, E) ->
4747
'case'(Meta, KV, E) when not is_list(KV) ->
4848
compile_error(Meta, ?m(E, file), "invalid arguments for case");
4949
'case'(Meta, KV, E) ->
50+
ok = assert_at_most_once('do', KV, 0, fun(Kind) ->
51+
compile_error(Meta, ?m(E, file), "duplicated ~ts clauses given for case", [Kind])
52+
end),
5053
EE = E#{export_vars := []},
5154
{EClauses, EVars} = lists:mapfoldl(fun(X, Acc) -> do_case(Meta, X, Acc, EE) end, [], KV),
5255
{EClauses, elixir_env:mergev(EVars, E)}.

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,12 @@ defmodule Kernel.ExpansionTest do
359359
quote do: (case w() do x -> x = x; y -> y = y end; :erlang.+(x, y))
360360
end
361361

362+
test "case: expects at most one do" do
363+
assert_raise CompileError, ~r"duplicated do clauses given for case", fn ->
364+
expand(quote(do: (case e, do: (x -> x), do: (y -> y))))
365+
end
366+
end
367+
362368
## Receive
363369

364370
test "receive: expands each clause" do

0 commit comments

Comments
 (0)