Skip to content

Commit 1b6c31a

Browse files
committed
Avoid the number of duplicate traces on imports
1 parent 1508494 commit 1b6c31a

File tree

6 files changed

+33
-22
lines changed

6 files changed

+33
-22
lines changed

lib/elixir/src/elixir_dispatch.erl

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,15 @@ dispatch_import(Meta, Name, Args, S, E, Callback) ->
133133
check_deprecated(macro, Meta, Receiver, Name, Arity, E),
134134
expand_quoted(Meta, Receiver, Name, Arity, Expander(Args, S), S, E);
135135
{function, Receiver, NewName} ->
136-
elixir_expand:expand({{'.', Meta, [Receiver, NewName]}, Meta, Args}, S, E);
136+
case elixir_rewrite:inline(Receiver, NewName, Arity) of
137+
{AR, AN} ->
138+
Callback({AR, AN});
139+
false ->
140+
check_deprecated(function, Meta, Receiver, Name, Arity, E),
141+
Callback({Receiver, NewName})
142+
end;
137143
not_found ->
138-
Callback();
144+
Callback(local);
139145
Error ->
140146
elixir_errors:file_error(Meta, E, ?MODULE, {import, Error, Name, Arity})
141147
end.
@@ -146,7 +152,7 @@ dispatch_require(Meta, Receiver, Name, Args, S, E, Callback) when is_atom(Receiv
146152
case elixir_rewrite:inline(Receiver, Name, Arity) of
147153
{AR, AN} ->
148154
elixir_env:trace({remote_function, Meta, Receiver, Name, Arity}, E),
149-
Callback(AR, AN, Args);
155+
Callback(AR, AN);
150156
false ->
151157
case expand_require(Meta, Receiver, Name, Arity, E, true) of
152158
{macro, Receiver, Expander} ->
@@ -155,12 +161,12 @@ dispatch_require(Meta, Receiver, Name, Args, S, E, Callback) when is_atom(Receiv
155161
error ->
156162
check_deprecated(function, Meta, Receiver, Name, Arity, E),
157163
elixir_env:trace({remote_function, Meta, Receiver, Name, Arity}, E),
158-
Callback(Receiver, Name, Args)
164+
Callback(Receiver, Name)
159165
end
160166
end;
161167

162-
dispatch_require(_Meta, Receiver, Name, Args, _S, _E, Callback) ->
163-
Callback(Receiver, Name, Args).
168+
dispatch_require(_Meta, Receiver, Name, _Args, _S, _E, Callback) ->
169+
Callback(Receiver, Name).
164170

165171
%% Macros expansion
166172

lib/elixir/src/elixir_expand.erl

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -429,8 +429,12 @@ expand({Name, Meta, Kind}, S, E) when is_atom(Name), is_atom(Kind) ->
429429
expand({Atom, Meta, Args}, S, E) when is_atom(Atom), is_list(Meta), is_list(Args) ->
430430
assert_no_ambiguous_op(Atom, Meta, Args, S, E),
431431

432-
elixir_dispatch:dispatch_import(Meta, Atom, Args, S, E, fun() ->
433-
expand_local(Meta, Atom, Args, S, E)
432+
elixir_dispatch:dispatch_import(Meta, Atom, Args, S, E, fun
433+
({AR, AF}) ->
434+
expand_remote(AR, Meta, AF, Meta, Args, S, elixir_env:prepare_write(S), E);
435+
436+
(local) ->
437+
expand_local(Meta, Atom, Args, S, E)
434438
end);
435439

436440
%% Remote calls
@@ -439,8 +443,8 @@ expand({{'.', DotMeta, [Left, Right]}, Meta, Args}, S, E)
439443
when (is_tuple(Left) orelse is_atom(Left)), is_atom(Right), is_list(Meta), is_list(Args) ->
440444
{ELeft, SL, EL} = expand(Left, elixir_env:prepare_write(S), E),
441445

442-
elixir_dispatch:dispatch_require(Meta, ELeft, Right, Args, S, EL, fun(AR, AF, AA) ->
443-
expand_remote(AR, DotMeta, AF, Meta, AA, S, SL, EL)
446+
elixir_dispatch:dispatch_require(Meta, ELeft, Right, Args, S, EL, fun(AR, AF) ->
447+
expand_remote(AR, DotMeta, AF, Meta, Args, S, SL, EL)
444448
end);
445449

446450
%% Anonymous calls

lib/elixir/src/elixir_module.erl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -457,8 +457,8 @@ expand_callback(Line, M, F, Args, Acc, Fun) ->
457457
Meta = [{line, Line}, {required, true}],
458458

459459
{EE, _S, ET} =
460-
elixir_dispatch:dispatch_require(Meta, M, F, Args, S, E, fun(AM, AF, AA) ->
461-
Fun(AM, AF, AA),
460+
elixir_dispatch:dispatch_require(Meta, M, F, Args, S, E, fun(AM, AF) ->
461+
Fun(AM, AF, Args),
462462
{ok, S, E}
463463
end),
464464

lib/elixir/test/elixir/kernel/tracers_test.exs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,7 @@ defmodule Kernel.TracersTest do
8484
assert meta[:line] == 3
8585
assert meta[:column] == 11
8686

87-
assert_received {{:remote_function, meta, Integer, :parse, 1}, _}
88-
assert meta[:line] == 3
89-
assert meta[:column] == 11
87+
refute_received {{:remote_function, _, Integer, :parse, 1}, _}
9088
end
9189

9290
test "traces imports via capture" do
@@ -107,6 +105,8 @@ defmodule Kernel.TracersTest do
107105
assert_received {{:imported_function, meta, Integer, :parse, 1}, _}
108106
assert meta[:line] == 3
109107
assert meta[:column] == 2
108+
109+
refute_received {{:remote_function, _meta, Integer, :parse, 1}, _}
110110
end
111111

112112
test "traces structs" do

lib/mix/lib/mix/tasks/xref.ex

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,9 @@ defmodule Mix.Tasks.Xref do
6161
6262
lib/b.ex:2: require A (export)
6363
lib/b.ex:3: call A.macro/0 (compile)
64-
lib/b.ex:4: import A.macro/0 (compile)
64+
lib/b.ex:4: import call A.macro/0 (compile)
6565
lib/b.ex:5: call A.fun/0 (compile)
66-
lib/b.ex:6: call A.fun/0 (compile)
67-
lib/b.ex:6: import A.fun/0 (compile)
66+
lib/b.ex:6: import call A.fun/0 (compile)
6867
lib/b.ex:7: call A.macro/0 (compile)
6968
lib/b.ex:8: call A.fun/0 (runtime)
7069
lib/b.ex:9: struct A (export)
@@ -637,7 +636,7 @@ defmodule Mix.Tasks.Xref do
637636
shell.info([
638637
Exception.format_file_line(Path.relative_to_cwd(file), line),
639638
?\s,
640-
Atom.to_string(type),
639+
trace_type(type),
641640
?\s,
642641
format_module_or_mfa(module_or_mfa),
643642
" (#{mode})"
@@ -647,6 +646,9 @@ defmodule Mix.Tasks.Xref do
647646
end
648647
end
649648

649+
defp trace_type(:import), do: "import call"
650+
defp trace_type(other), do: Atom.to_string(other)
651+
650652
defp trace_label(nil), do: nil
651653
defp trace_label("compile"), do: :compile
652654
defp trace_label("export"), do: :export

lib/mix/test/mix/tasks/xref_test.exs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -239,10 +239,9 @@ defmodule Mix.Tasks.XrefTest do
239239
Generated sample app
240240
lib/b.ex:2: require A (export)
241241
lib/b.ex:3: call A.macro/0 (compile)
242-
lib/b.ex:4: import A.macro/0 (compile)
242+
lib/b.ex:4: import call A.macro/0 (compile)
243243
lib/b.ex:5: call A.fun/0 (compile)
244-
lib/b.ex:6: call A.fun/0 (compile)
245-
lib/b.ex:6: import A.fun/0 (compile)
244+
lib/b.ex:6: import call A.fun/0 (compile)
246245
lib/b.ex:7: call A.macro/0 (compile)
247246
lib/b.ex:8: call A.fun/0 (runtime)
248247
lib/b.ex:9: struct A (export)

0 commit comments

Comments
 (0)