Skip to content

Commit 901ec18

Browse files
committed
Handle error in Macro.to_string/1, closes #13102
1 parent 56b62b6 commit 901ec18

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

Diff for: lib/elixir/lib/code/normalizer.ex

+4-2
Original file line numberDiff line numberDiff line change
@@ -349,13 +349,15 @@ defmodule Code.Normalizer do
349349
meta
350350
end
351351

352+
last = List.last(args)
353+
352354
cond do
353-
Keyword.has_key?(meta, :do) or match?([{{:__block__, _, [:do]}, _} | _], List.last(args)) ->
355+
Keyword.has_key?(meta, :do) or match?([{{:__block__, _, [:do]}, _} | _], last) ->
354356
# def foo do :ok end
355357
# def foo, do: :ok
356358
normalize_kw_blocks(form, meta, args, state)
357359

358-
match?([{:do, _} | _], List.last(args)) ->
360+
match?([{:do, _} | _], last) and Keyword.keyword?(last) ->
359361
# Non normalized kw blocks
360362
line = state.parent_meta[:line]
361363
meta = meta ++ [do: [line: line], end: [line: line]]

Diff for: lib/elixir/test/elixir/code_normalizer/quoted_ast_test.exs

+6
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,12 @@ defmodule Code.Normalizer.QuotedASTTest do
229229
test "invalid block" do
230230
assert quoted_to_string({:__block__, [], {:bar, [], []}}) ==
231231
"{:__block__, [], {:bar, [], []}}"
232+
233+
assert quoted_to_string({:foo, [], [{:do, :ok}, :not_keyword]}) ==
234+
"foo({:do, :ok}, :not_keyword)"
235+
236+
assert quoted_to_string({:foo, [], [[{:do, :ok}, :not_keyword]]}) ==
237+
"foo([{:do, :ok}, :not_keyword])"
232238
end
233239

234240
test "not in" do

0 commit comments

Comments
 (0)