diff --git a/lib/elixir/src/elixir_with.erl b/lib/elixir/src/elixir_with.erl index c8695bb26f5..0f165274cc9 100644 --- a/lib/elixir/src/elixir_with.erl +++ b/lib/elixir/src/elixir_with.erl @@ -45,7 +45,7 @@ expand(Meta, Args, E) -> {ECases, EC} = lists:mapfoldl(fun expand/2, E, Cases), {EDoExpr, _} = elixir_exp:expand(DoExpr, EC), - {EElseExpr, _} = expand_else(ElseExpr, E), + {EElseExpr, _} = expand_else(Meta, ElseExpr, E), {{with, Meta, ECases ++ [[{do, EDoExpr} | EElseExpr]]}, E}. expand({'<-', Meta, [Left, Right]}, E) -> @@ -55,11 +55,14 @@ expand({'<-', Meta, [Left, Right]}, E) -> expand(X, E) -> elixir_exp:expand(X, E). -expand_else(KV, E) when is_list(KV) -> +expand_else(_Meta, KV, E) when is_list(KV) -> {[{do, EClauses}], EC} = elixir_exp_clauses:'case'([], [{do, KV}], E), {[{else, EClauses}], EC}; -expand_else(nil, E) -> - {[], E}. +expand_else(_Meta, nil, E) -> + {[], E}; +expand_else(Meta, _KV, E) -> + Message = "expected -> clauses for else in with", + elixir_errors:compile_error(Meta, ?m(E, file), Message, []). %% Translation diff --git a/lib/elixir/test/elixir/kernel/with_test.exs b/lib/elixir/test/elixir/kernel/with_test.exs index 79bea0e646c..2501a7be795 100644 --- a/lib/elixir/test/elixir/kernel/with_test.exs +++ b/lib/elixir/test/elixir/kernel/with_test.exs @@ -75,6 +75,12 @@ defmodule Kernel.WithTest do end end + test "invalid else form" do + assert_raise CompileError, "nofile:1: expected -> clauses for else in with", fn -> + Code.eval_quoted(quote do: with(_ <- true, do: :ok, else: :error)) + end + end + defp four() do 4 end