Skip to content

Commit da10a7d

Browse files
author
José Valim
committed
Do not log exits on IEx.Helpers.c failures
Signed-off-by: José Valim <[email protected]>
1 parent d4756f2 commit da10a7d

File tree

2 files changed

+27
-29
lines changed

2 files changed

+27
-29
lines changed

lib/iex/lib/iex/helpers.ex

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ defmodule IEx.Helpers do
158158

159159
{erls, exs} = Enum.split_with(found, &String.ends_with?(&1, ".erl"))
160160

161-
modules = Enum.map(erls, fn(source) ->
161+
erl_modules = Enum.map(erls, fn(source) ->
162162
{module, binary} = compile_erlang(source)
163163
unless path == :in_memory do
164164
base = source |> Path.basename |> Path.rootname
@@ -167,7 +167,13 @@ defmodule IEx.Helpers do
167167
module
168168
end)
169169

170-
modules ++ compile_elixir(exs, path)
170+
ex_modules = try do
171+
compile_elixir(exs, path)
172+
catch
173+
_, _ -> raise CompileError
174+
end
175+
176+
erl_modules ++ ex_modules
171177
end
172178

173179
@doc """

lib/iex/test/iex/helpers_test.exs

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -296,19 +296,12 @@ defmodule IEx.HelpersTest do
296296
cleanup_modules([Sample])
297297
end
298298

299-
test "c/2 helper" do
300-
assert_raise UndefinedFunctionError, ~r"function Sample\.run/0 is undefined", fn ->
301-
Sample.run
302-
end
303-
304-
filename = "sample.ex"
305-
with_file filename, test_module_code(), fn ->
306-
assert c(filename, ".") == [Sample]
307-
assert File.exists?("Elixir.Sample.beam")
308-
assert Sample.run == :run
299+
test "c helper with error" do
300+
ExUnit.CaptureIO.capture_io fn ->
301+
with_file "sample.ex", "raise \"oops\"", fn ->
302+
assert_raise CompileError, fn -> c("sample.ex") end
303+
end
309304
end
310-
after
311-
cleanup_modules([Sample])
312305
end
313306

314307
test "c helper with full path" do
@@ -366,21 +359,6 @@ defmodule IEx.HelpersTest do
366359
cleanup_modules([:sample])
367360
end
368361

369-
test "c/2 helper erlang" do
370-
assert_raise UndefinedFunctionError, ~r"function :sample.hello/0 is undefined", fn ->
371-
:sample.hello
372-
end
373-
374-
filename = "sample.erl"
375-
with_file filename, erlang_module_code(), fn ->
376-
assert c(filename, ".") == [:sample]
377-
assert :sample.hello == :world
378-
assert File.exists?("sample.beam")
379-
end
380-
after
381-
cleanup_modules([:sample])
382-
end
383-
384362
test "c helper skips unknown files" do
385363
assert_raise UndefinedFunctionError, ~r"function :sample.hello/0 is undefined", fn ->
386364
:sample.hello
@@ -396,6 +374,20 @@ defmodule IEx.HelpersTest do
396374
cleanup_modules([:sample, Sample2])
397375
end
398376

377+
test "c helper with path" do
378+
assert_raise UndefinedFunctionError, ~r"function Sample\.run/0 is undefined", fn ->
379+
Sample.run
380+
end
381+
382+
filename = "sample.ex"
383+
with_file filename, test_module_code(), fn ->
384+
assert c(filename, ".") == [Sample]
385+
assert File.exists?("Elixir.Sample.beam")
386+
assert Sample.run == :run
387+
end
388+
after
389+
cleanup_modules([Sample])
390+
end
399391

400392
test "l helper" do
401393
assert_raise UndefinedFunctionError, ~r"function Sample.run/0 is undefined", fn ->

0 commit comments

Comments
 (0)