diff options
-rw-r--r-- | lib/elixir/src/elixir_erl_pass.erl | 4 | ||||
-rw-r--r-- | lib/elixir/test/elixir/kernel/with_test.exs | 10 |
2 files changed, 12 insertions, 2 deletions
diff --git a/lib/elixir/src/elixir_erl_pass.erl b/lib/elixir/src/elixir_erl_pass.erl index 530de8e9f..2c1e91a9f 100644 --- a/lib/elixir/src/elixir_erl_pass.erl +++ b/lib/elixir/src/elixir_erl_pass.erl @@ -415,8 +415,8 @@ translate_with_do([{'<-', Meta, [Left, Expr]} | Rest], Do, Else, S) -> {Args, Guards} = elixir_utils:extract_guards(Left), {TExpr, SR} = elixir_erl_pass:translate(Expr, S), {TArgs, SA} = elixir_erl_clauses:match(fun elixir_erl_pass:translate/2, Args, SR), - TGuards = elixir_erl_clauses:guards(Guards, [], SA), - {TBody, SB} = translate_with_do(Rest, Do, Else, SA), + TGuards = elixir_erl_clauses:guards(Guards, SA#elixir_erl.extra_guards, SA), + {TBody, SB} = translate_with_do(Rest, Do, Else, SA#elixir_erl{extra_guards=[]}), Clause = {clause, ?ann(Meta), [TArgs], TGuards, unblock(TBody)}, {{'case', ?ann(?generated(Meta)), TExpr, [Clause, Else]}, SB}; diff --git a/lib/elixir/test/elixir/kernel/with_test.exs b/lib/elixir/test/elixir/kernel/with_test.exs index c756bbb19..e6c9ac2e6 100644 --- a/lib/elixir/test/elixir/kernel/with_test.exs +++ b/lib/elixir/test/elixir/kernel/with_test.exs @@ -73,6 +73,16 @@ defmodule Kernel.WithTest do assert state == 1 end + test "with extra guards" do + var = + with %_{} = a <- struct(URI), + %_{} <- a do + :ok + end + + assert var == :ok + end + test "errors in with" do assert_raise RuntimeError, fn -> with({:ok, res} <- oops(), do: res) |