Skip to content

Commit d777074

Browse files
authored
Print intermediate results of dbg for blocks (#14218)
1 parent fb7a22e commit d777074

File tree

2 files changed

+31
-39
lines changed

2 files changed

+31
-39
lines changed

lib/elixir/lib/macro.ex

Lines changed: 8 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2645,17 +2645,18 @@ defmodule Macro do
26452645
dbg_boolean_tree(ast, result_var, [])
26462646
end
26472647

2648-
defp dbg_ast_to_debuggable({:__block__, _meta, exprs} = ast, _env) when exprs != [] do
2649-
acc_var = unique_var(:acc, __MODULE__)
2648+
defp dbg_ast_to_debuggable({:__block__, _meta, exprs}, _env) when exprs != [] do
26502649
result_var = unique_var(:result, __MODULE__)
2650+
count = length(exprs)
2651+
2652+
Enum.with_index(exprs, fn expr, i ->
2653+
tag = if i + 1 == count, do: :value, else: :multi_value
26512654

2652-
[
26532655
quote do
2654-
unquote(acc_var) = []
2655-
unquote(dbg_block(ast, acc_var, result_var))
2656-
{:block, Enum.reverse(unquote(acc_var)), unquote(result_var)}
2656+
unquote(result_var) = unquote(expr)
2657+
{unquote(tag), unquote(Macro.escape(expr)), unquote(result_var)}
26572658
end
2658-
]
2659+
end)
26592660
end
26602661

26612662
defp dbg_ast_to_debuggable({:case, _meta, [expr, [do: clauses]]} = ast, _env) do
@@ -2833,18 +2834,6 @@ defmodule Macro do
28332834
[node | nodes]
28342835
end
28352836

2836-
defp dbg_block({:__block__, meta, exprs}, acc_var, result_var) do
2837-
modified_exprs =
2838-
Enum.map(exprs, fn expr ->
2839-
quote do
2840-
unquote(result_var) = unquote(expr)
2841-
unquote(acc_var) = [{unquote(escape(expr)), unquote(result_var)} | unquote(acc_var)]
2842-
end
2843-
end)
2844-
2845-
{:__block__, meta, modified_exprs}
2846-
end
2847-
28482837
# Made public to be called from Macro.dbg/3, so that we generate as little code
28492838
# as possible and call out into a function as soon as we can.
28502839
@doc false
@@ -2884,20 +2873,6 @@ defmodule Macro do
28842873
{[first_formatted | rest_formatted], result}
28852874
end
28862875

2887-
defp dbg_format_ast_to_debug({:block, components, value}, options) do
2888-
formatted =
2889-
[
2890-
dbg_maybe_underline("Code block", options),
2891-
":\n(\n",
2892-
Enum.map(components, fn {ast, value} ->
2893-
[" ", dbg_format_ast_with_value(ast, value, options)]
2894-
end),
2895-
")\n"
2896-
]
2897-
2898-
{formatted, value}
2899-
end
2900-
29012876
defp dbg_format_ast_to_debug({:case_argument, expr_ast, expr_value}, options) do
29022877
formatted = [
29032878
dbg_maybe_underline("Case argument", options),

lib/elixir/test/elixir/macro_test.exs

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -506,12 +506,29 @@ defmodule MacroTest do
506506
assert formatted =~ "macro_test.exs"
507507

508508
assert formatted =~ """
509-
Code block:
510-
(
511-
a = 1 #=> 1
512-
b = a + 2 #=> 3
513-
a + b #=> 4
514-
)
509+
a = 1 #=> 1
510+
b = a + 2 #=> 3
511+
a + b #=> 4
512+
"""
513+
end
514+
515+
test "block that raises" do
516+
{result, formatted} =
517+
dbg_format_no_newline(
518+
(
519+
a = 1
520+
b = a - 1
521+
a / b
522+
)
523+
)
524+
525+
assert result == %ArithmeticError{}
526+
527+
assert formatted =~ "macro_test.exs"
528+
529+
assert formatted =~ """
530+
a = 1 #=> 1
531+
b = a - 1 #=> 0
515532
"""
516533
end
517534

0 commit comments

Comments
 (0)