Skip to content

Commit 12917b0

Browse files
committed
Unpack extra guards from with matches, closes #9801
1 parent ab9ecf2 commit 12917b0

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

lib/elixir/src/elixir_erl_pass.erl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -409,8 +409,8 @@ translate_with_do([{'<-', Meta, [Left, Expr]} | Rest], Do, Else, S) ->
409409
{Args, Guards} = elixir_utils:extract_guards(Left),
410410
{TExpr, SR} = elixir_erl_pass:translate(Expr, S),
411411
{TArgs, SA} = elixir_erl_clauses:match(fun elixir_erl_pass:translate/2, Args, SR),
412-
TGuards = elixir_erl_clauses:guards(Guards, [], SA),
413-
{TBody, SB} = translate_with_do(Rest, Do, Else, SA),
412+
TGuards = elixir_erl_clauses:guards(Guards, SA#elixir_erl.extra_guards, SA),
413+
{TBody, SB} = translate_with_do(Rest, Do, Else, SA#elixir_erl{extra_guards=[]}),
414414

415415
Clause = {clause, ?ann(Meta), [TArgs], TGuards, unblock(TBody)},
416416
{{'case', ?ann(?generated(Meta)), TExpr, [Clause, Else]}, SB};

lib/elixir/test/elixir/kernel/with_test.exs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,16 @@ defmodule Kernel.WithTest do
7373
assert state == 1
7474
end
7575

76+
test "with extra guards" do
77+
var =
78+
with %_{} = a <- struct(URI),
79+
%_{} <- a do
80+
:ok
81+
end
82+
83+
assert var == :ok
84+
end
85+
7686
test "errors in with" do
7787
assert_raise RuntimeError, fn ->
7888
with({:ok, res} <- oops(), do: res)

0 commit comments

Comments
 (0)